Decompiled source of Cult of QoL Collection v2.3.8
plugins/CultOfQoL.dll
Decompiled 9 hours ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CultOfQoL.Core; using CultOfQoL.Core.Routines; using CultOfQoL.Patches.Gameplay; using CultOfQoL.Patches.Systems; using CultOfQoL.Patches.UI; using DG.Tweening; using DG.Tweening.Core; using FMOD.Studio; using HarmonyLib; using JetBrains.Annotations; using Lamb.UI; using Lamb.UI.FollowerInteractionWheel; using Lamb.UI.FollowerSelect; using Lamb.UI.KitchenMenu; using Lamb.UI.MainMenu; using Lamb.UI.Menus.PlayerMenu; using Lamb.UI.PauseMenu; using Lamb.UI.RefineryMenu; using LeTai.Asset.TranslucentImage; using MMTools; using Map; using Microsoft.CodeAnalysis; using MonoMod.Utils; using Shared; using Spine.Unity; using UnityEngine; using UnityEngine.Events; using UnityEngine.Rendering.PostProcessing; using UnityEngine.SceneManagement; using UnityEngine.UI; using src.UI; using src.UI.Menus; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.8.1", FrameworkDisplayName = ".NET Framework 4.8.1")] [assembly: AssemblyCompany("p1xel8ted")] [assembly: AssemblyConfiguration("Release-Thunderstore")] [assembly: AssemblyDescription("CultOfQoL")] [assembly: AssemblyFileVersion("2.3.8.0")] [assembly: AssemblyInformationalVersion("2.3.8+efac83c0cebda9587dc38f3aad7368797cb9a58f")] [assembly: AssemblyProduct("CultOfQoL")] [assembly: AssemblyTitle("CultOfQoL")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.3.8.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; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class ExtensionMarkerAttribute : Attribute { public ExtensionMarkerAttribute(string name) { } } } namespace CultOfQoL { public enum MassWolfTrapMode { Disabled, FillOnly, CollectOnly, Both } [BepInPlugin("p1xel8ted.cotl.CultOfQoLCollection", "The Cult of QoL Collection", "2.3.8")] [BepInDependency("com.bepis.bepinex.configurationmanager", "18.4.1")] public class Plugin : BaseUnityPlugin { private const string PluginGuid = "p1xel8ted.cotl.CultOfQoLCollection"; internal const string PluginName = "The Cult of QoL Collection"; private const string PluginVer = "2.3.8"; private const string RestartGameMessage = "You must restart the game for these changes to take effect, as in totally exit to desktop and restart the game.\n\n** indicates a restart is required if the setting is changed."; private const string BackupSaveMessage = "IMPORTANT: Please back up your save files before enabling this option.\n\nThis feature will attempt to repair missing lore tablets on your next visit to the base. While it should be safe, backing up your saves first is recommended."; private const string GeneralSection = "01. General"; private const string MenuCleanupSection = "02. Menu Cleanup"; private const string GoldenFleeceSection = "03. Golden Fleece"; private const string PlayerSection = "05. Player Damage"; private const string SavesSection = "06. Saves"; private const string WeatherSection = "07. Weather"; private const string NotificationsSection = "13. Notifications"; private const string FollowersSection = "14. Followers"; private const string GameSpeedSection = "10. Game Speed"; private const string CapacitySection = "12. Capacities"; private const string AutoInteractSection = "11. Auto-Interact (Chests)"; private const string MinesSection = "08. Mines"; private const string MassSection = "16. Mass Actions"; private const string StructureSection = "09. Structures"; private const string LootSection = "17. Loot"; internal const string PostProcessingSection = "18. Post Processing"; private const string RitualSection = "19. Rituals"; private const string GameMechanicsSection = "04. Game Mechanics"; private const string SoundSection = "20. Sound"; private const string FixesSection = "21. Fixes"; private const string ResetAllSettingsSection = "ZZ. Reset All Settings"; private bool _cachedDirectLoadValue; private bool _cachedEnableQuickSaveValue; private bool _cachedDisableAdsValue; private KeyboardShortcut _cachedDirectLoadSkipKey; private KeyboardShortcut _cachedSaveShortcut; private UIMainMenuController _cachedUIMainMenuController; private Component[] _cachedAdComponents; private bool _configCacheValid; private static bool _showConfirmationDialog; internal static ConfigFile ConfigInstance; private static ConfigEntry<bool> EnableLogging { get; set; } internal static ConfigEntry<bool> EnableQuickSaveShortcut { get; set; } internal static ConfigEntry<KeyboardShortcut> SaveKeyboardShortcut { get; set; } internal static ConfigEntry<bool> SaveOnQuitToDesktop { get; private set; } internal static ConfigEntry<bool> SaveOnQuitToMenu { get; private set; } internal static ConfigEntry<bool> DirectLoadSave { get; private set; } internal static ConfigEntry<int> SaveSlotToLoad { get; private set; } internal static ConfigEntry<KeyboardShortcut> DirectLoadSkipKey { get; set; } internal static ConfigEntry<bool> DisableAds { get; set; } internal static ConfigEntry<bool> HideNewGameButtons { get; private set; } internal static ConfigEntry<bool> EasyFishing { get; private set; } internal static ConfigEntry<bool> FastCollecting { get; private set; } internal static ConfigEntry<bool> RemoveMenuClutter { get; private set; } internal static ConfigEntry<bool> RemoveTwitchButton { get; private set; } internal static ConfigEntry<KeyboardShortcut> ResetTimeScaleKey { get; private set; } internal static ConfigEntry<KeyboardShortcut> IncreaseGameSpeedKey { get; private set; } internal static ConfigEntry<KeyboardShortcut> DecreaseGameSpeedKey { get; private set; } internal static ConfigEntry<bool> AllLootMagnets { get; private set; } internal static ConfigEntry<float> MagnetRangeMultiplier { get; private set; } private static ConfigEntry<bool> MainMenuGlitch { get; set; } internal static ConfigEntry<bool> ReverseGoldenFleeceDamageChange { get; private set; } internal static ConfigEntry<bool> AdjustRefineryRequirements { get; private set; } internal static ConfigEntry<bool> RefineryMassFill { get; private set; } internal static ConfigEntry<bool> CookingFireMassFill { get; private set; } internal static ConfigEntry<bool> KitchenMassFill { get; private set; } internal static ConfigEntry<bool> PubMassFill { get; private set; } internal static ConfigEntry<bool> CleanseIllnessAndExhaustionOnLevelUp { get; private set; } internal static ConfigEntry<bool> UnlockTwitchItems { get; private set; } internal static ConfigEntry<bool> LumberAndMiningStationsDontAge { get; private set; } internal static ConfigEntry<float> LumberAndMiningStationsAgeMultiplier { get; private set; } internal static ConfigEntry<bool> CollectTitheFromOldFollowers { get; private set; } internal static ConfigEntry<bool> IntimidateOldFollowers { get; private set; } internal static ConfigEntry<bool> EnableGameSpeedManipulation { get; private set; } internal static ConfigEntry<bool> ShortenGameSpeedIncrements { get; private set; } internal static ConfigEntry<float> SlowDownTimeMultiplier { get; private set; } internal static ConfigEntry<bool> DisableGameOver { get; private set; } internal static ConfigEntry<bool> FastRitualSermons { get; private set; } internal static ConfigEntry<bool> TurnOffSpeakersAtNight { get; private set; } internal static ConfigEntry<bool> ThriceMultiplyTarotCardLuck { get; private set; } internal static ConfigEntry<bool> RareTarotCardsOnly { get; private set; } internal static ConfigEntry<bool> EnableAutoCollect { get; private set; } internal static ConfigEntry<int> TriggerAmount { get; private set; } internal static ConfigEntry<float> AutoInteractRangeMulti { get; private set; } internal static ConfigEntry<bool> AutoCollectFromFarmStationChests { get; private set; } internal static ConfigEntry<bool> AddExhaustedToHealingBay { get; private set; } internal static ConfigEntry<bool> HideHealthyFromHealingBay { get; private set; } internal static ConfigEntry<bool> DisableAllNotifications { get; private set; } internal static ConfigEntry<bool> AllowCriticalNotifications { get; private set; } internal static ConfigEntry<bool> NotifyOfScarecrowTraps { get; private set; } internal static ConfigEntry<bool> NotifyOfNoFuel { get; private set; } internal static ConfigEntry<bool> NotifyOfBedCollapse { get; private set; } internal static ConfigEntry<bool> GiveFollowersNewNecklaces { get; private set; } internal static ConfigEntry<WeatherChangeTrigger> WeatherChangeTrigger { get; private set; } internal static ConfigEntry<bool> UnlockAllWeatherTypes { get; private set; } internal static ConfigEntry<Color> LightSnowColor { get; private set; } internal static ConfigEntry<Color> LightWindColor { get; private set; } internal static ConfigEntry<Color> LightRainColor { get; private set; } internal static ConfigEntry<Color> MediumRainColor { get; private set; } internal static ConfigEntry<Color> HeavyRainColor { get; private set; } private static ConfigEntry<Weather.WeatherCombo> WeatherDropDown { get; set; } internal static ConfigEntry<bool> ShowPhaseNotifications { get; private set; } internal static ConfigEntry<bool> ShowWeatherChangeNotifications { get; private set; } internal static ConfigEntry<float> SoulCapacityMulti { get; private set; } internal static ConfigEntry<float> SiloCapacityMulti { get; private set; } internal static ConfigEntry<bool> UseMultiplesOf32 { get; private set; } internal static ConfigEntry<float> BaseDamageMultiplier { get; private set; } internal static ConfigEntry<float> FleeceDamageMulti { get; private set; } internal static ConfigEntry<bool> DisableRunSpeedInDungeons { get; private set; } internal static ConfigEntry<bool> DisableRunSpeedInCombat { get; private set; } internal static ConfigEntry<bool> RemoveHelpButtonInPauseMenu { get; private set; } internal static ConfigEntry<bool> RemoveTwitchButtonInPauseMenu { get; private set; } internal static ConfigEntry<bool> RemovePhotoModeButtonInPauseMenu { get; private set; } internal static ConfigEntry<float> RunSpeedMulti { get; private set; } internal static ConfigEntry<float> DodgeSpeedMulti { get; private set; } internal static ConfigEntry<float> LungeSpeedMulti { get; private set; } internal static ConfigEntry<bool> OnlyShowDissenters { get; private set; } internal static ConfigEntry<bool> DisablePropagandaSpeakerAudio { get; private set; } internal static ConfigEntry<bool> UncapLevelBenefits { get; private set; } internal static ConfigEntry<bool> MassBribe { get; private set; } internal static ConfigEntry<bool> MassFertilize { get; private set; } internal static ConfigEntry<bool> MassBless { get; private set; } internal static ConfigEntry<bool> MassRomance { get; private set; } internal static ConfigEntry<bool> MassBully { get; private set; } internal static ConfigEntry<bool> MassReassure { get; private set; } internal static ConfigEntry<bool> MassReeducate { get; private set; } internal static ConfigEntry<bool> MassExtort { get; private set; } internal static ConfigEntry<bool> MassPetDog { get; private set; } internal static ConfigEntry<bool> MassPetAnimals { get; private set; } internal static ConfigEntry<bool> MassIntimidate { get; private set; } internal static ConfigEntry<bool> MassInspire { get; private set; } internal static ConfigEntry<bool> MassWater { get; private set; } internal static ConfigEntry<bool> MassLevelUp { get; private set; } internal static ConfigEntry<bool> MassLevelUpInstantSouls { get; private set; } internal static ConfigEntry<bool> MakeOldFollowersWork { get; private set; } internal static ConfigEntry<bool> MassCollectFromBeds { get; private set; } internal static ConfigEntry<bool> MassCollectFromOuthouses { get; private set; } internal static ConfigEntry<bool> MassCollectFromOfferingShrines { get; private set; } internal static ConfigEntry<bool> MassCollectFromPassiveShrines { get; private set; } internal static ConfigEntry<bool> MassCollectFromCompost { get; private set; } internal static ConfigEntry<bool> MassCollectFromHarvestTotems { get; private set; } internal static ConfigEntry<bool> MassOpenScarecrows { get; private set; } internal static ConfigEntry<MassWolfTrapMode> MassWolfTraps { get; private set; } internal static ConfigEntry<bool> CollectAllGodTearsAtOnce { get; private set; } internal static ConfigEntry<bool> MassSinExtract { get; private set; } internal static ConfigEntry<bool> MassCleanAnimals { get; private set; } internal static ConfigEntry<bool> MassFeedAnimals { get; private set; } internal static ConfigEntry<bool> MassMilkAnimals { get; private set; } internal static ConfigEntry<bool> MassShearAnimals { get; private set; } internal static ConfigEntry<bool> CollectShrineDevotionInstantly { get; private set; } internal static WriteOnce<float> RunSpeed { get; } = new WriteOnce<float>(); internal static WriteOnce<float> DodgeSpeed { get; } = new WriteOnce<float>(); internal static UIMainMenuController UIMainMenuController { get; set; } public static ConfigEntry<bool> VignetteEffect { get; private set; } public static ConfigEntry<bool> ReverseEnrichmentNerf { get; private set; } public static ConfigEntry<int> HarvestTotemRange { get; private set; } public static ConfigEntry<int> PropagandaSpeakerRange { get; private set; } public static ConfigEntry<int> FarmStationRange { get; private set; } public static ConfigEntry<int> FarmPlotSignRange { get; private set; } public static ConfigEntry<int> LightningRodRangeLvl1 { get; private set; } public static ConfigEntry<int> LightningRodRangeLvl2 { get; private set; } public static ConfigEntry<int> SinBossLimit { get; private set; } public static ConfigEntry<int> MinRangeLifeExpectancy { get; private set; } public static ConfigEntry<int> MaxRangeLifeExpectancy { get; private set; } public static ConfigEntry<float> RitualCooldownTime { get; private set; } public static ConfigEntry<bool> AddSpiderWebsToOfferings { get; set; } public static ConfigEntry<bool> AddCrystalShardsToOfferings { get; set; } public static ConfigEntry<bool> CookedMeatMealsContainBone { get; set; } internal static ConfigEntry<bool> AutoSelectBestMatingPair { get; private set; } internal static ConfigEntry<bool> PrioritizeRequestedFollowers { get; private set; } public static ConfigEntry<bool> ProduceSpiderWebsFromLumber { get; set; } public static ConfigEntry<int> SpiderWebsPerLogs { get; set; } public static ConfigEntry<bool> ProduceCrystalShardsFromStone { get; set; } public static ConfigEntry<int> CrystalShardsPerStone { get; set; } internal static ConfigEntry<bool> ResourceChestDepositSounds { get; private set; } internal static ConfigEntry<bool> ResourceChestCollectSounds { get; private set; } internal static ConfigEntry<bool> AutoRepairMissingLore { get; private set; } internal static ManualLogSource Log { get; private set; } internal static PopupManager PopupManager { get; private set; } private void Awake() { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Expected O, but got Unknown //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Expected O, but got Unknown //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Expected O, but got Unknown //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Expected O, but got Unknown //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Expected O, but got Unknown //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Expected O, but got Unknown //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Expected O, but got Unknown //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Expected O, but got Unknown //IL_02fa: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Expected O, but got Unknown //IL_034b: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Expected O, but got Unknown //IL_03be: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Expected O, but got Unknown //IL_0426: Unknown result type (might be due to invalid IL or missing references) //IL_0430: Expected O, but got Unknown //IL_0465: Unknown result type (might be due to invalid IL or missing references) //IL_046f: Expected O, but got Unknown //IL_04a4: Unknown result type (might be due to invalid IL or missing references) //IL_04ae: Expected O, but got Unknown //IL_04e9: Unknown result type (might be due to invalid IL or missing references) //IL_04f3: Expected O, but got Unknown //IL_053a: Unknown result type (might be due to invalid IL or missing references) //IL_0544: Expected O, but got Unknown //IL_05b4: Unknown result type (might be due to invalid IL or missing references) //IL_05be: Expected O, but got Unknown //IL_0627: Unknown result type (might be due to invalid IL or missing references) //IL_0631: Expected O, but got Unknown //IL_0671: Unknown result type (might be due to invalid IL or missing references) //IL_067b: Expected O, but got Unknown //IL_06c2: Unknown result type (might be due to invalid IL or missing references) //IL_06cc: Expected O, but got Unknown //IL_073c: Unknown result type (might be due to invalid IL or missing references) //IL_0746: Expected O, but got Unknown //IL_07a4: Unknown result type (might be due to invalid IL or missing references) //IL_07ae: Expected O, but got Unknown //IL_07e3: Unknown result type (might be due to invalid IL or missing references) //IL_07ed: Expected O, but got Unknown //IL_0822: Unknown result type (might be due to invalid IL or missing references) //IL_082c: Expected O, but got Unknown //IL_0861: Unknown result type (might be due to invalid IL or missing references) //IL_086b: Expected O, but got Unknown //IL_089f: Unknown result type (might be due to invalid IL or missing references) //IL_08cf: Unknown result type (might be due to invalid IL or missing references) //IL_08d9: Expected O, but got Unknown //IL_0924: Unknown result type (might be due to invalid IL or missing references) //IL_092e: Expected O, but got Unknown //IL_0962: Unknown result type (might be due to invalid IL or missing references) //IL_0992: Unknown result type (might be due to invalid IL or missing references) //IL_099c: Expected O, but got Unknown //IL_0a07: Unknown result type (might be due to invalid IL or missing references) //IL_0a11: Expected O, but got Unknown //IL_0a70: Unknown result type (might be due to invalid IL or missing references) //IL_0a7a: Expected O, but got Unknown //IL_0ab0: Unknown result type (might be due to invalid IL or missing references) //IL_0aba: Expected O, but got Unknown //IL_0ae2: Unknown result type (might be due to invalid IL or missing references) //IL_0b07: Unknown result type (might be due to invalid IL or missing references) //IL_0b11: Expected O, but got Unknown //IL_0b39: Unknown result type (might be due to invalid IL or missing references) //IL_0b5e: Unknown result type (might be due to invalid IL or missing references) //IL_0b68: Expected O, but got Unknown //IL_0b90: Unknown result type (might be due to invalid IL or missing references) //IL_0bb5: Unknown result type (might be due to invalid IL or missing references) //IL_0bbf: Expected O, but got Unknown //IL_0be7: Unknown result type (might be due to invalid IL or missing references) //IL_0c0c: Unknown result type (might be due to invalid IL or missing references) //IL_0c16: Expected O, but got Unknown //IL_0c3e: Unknown result type (might be due to invalid IL or missing references) //IL_0c63: Unknown result type (might be due to invalid IL or missing references) //IL_0c6d: Expected O, but got Unknown //IL_0ca2: Unknown result type (might be due to invalid IL or missing references) //IL_0cac: Expected O, but got Unknown //IL_0d0e: Unknown result type (might be due to invalid IL or missing references) //IL_0d18: Expected O, but got Unknown //IL_0d49: Unknown result type (might be due to invalid IL or missing references) //IL_0d53: Expected O, but got Unknown //IL_0dc3: Unknown result type (might be due to invalid IL or missing references) //IL_0dcd: Expected O, but got Unknown //IL_0e55: Unknown result type (might be due to invalid IL or missing references) //IL_0e5f: Expected O, but got Unknown //IL_0e95: Unknown result type (might be due to invalid IL or missing references) //IL_0e9f: Expected O, but got Unknown //IL_0ed5: Unknown result type (might be due to invalid IL or missing references) //IL_0edf: Expected O, but got Unknown //IL_0f15: Unknown result type (might be due to invalid IL or missing references) //IL_0f1f: Expected O, but got Unknown //IL_0f55: Unknown result type (might be due to invalid IL or missing references) //IL_0f5f: Expected O, but got Unknown //IL_0fbe: Unknown result type (might be due to invalid IL or missing references) //IL_0fc8: Expected O, but got Unknown //IL_0ffe: Unknown result type (might be due to invalid IL or missing references) //IL_1008: Expected O, but got Unknown //IL_103e: Unknown result type (might be due to invalid IL or missing references) //IL_1048: Expected O, but got Unknown //IL_107e: Unknown result type (might be due to invalid IL or missing references) //IL_1088: Expected O, but got Unknown //IL_10be: Unknown result type (might be due to invalid IL or missing references) //IL_10c8: Expected O, but got Unknown //IL_1127: Unknown result type (might be due to invalid IL or missing references) //IL_1131: Expected O, but got Unknown //IL_11ad: Unknown result type (might be due to invalid IL or missing references) //IL_11b7: Expected O, but got Unknown //IL_1233: Unknown result type (might be due to invalid IL or missing references) //IL_123d: Expected O, but got Unknown //IL_12a3: Unknown result type (might be due to invalid IL or missing references) //IL_12ad: Expected O, but got Unknown //IL_12ea: Unknown result type (might be due to invalid IL or missing references) //IL_12f4: Expected O, but got Unknown //IL_1352: Unknown result type (might be due to invalid IL or missing references) //IL_135c: Expected O, but got Unknown //IL_13cd: Unknown result type (might be due to invalid IL or missing references) //IL_13d7: Expected O, but got Unknown //IL_1435: Unknown result type (might be due to invalid IL or missing references) //IL_143f: Expected O, but got Unknown //IL_149d: Unknown result type (might be due to invalid IL or missing references) //IL_14a7: Expected O, but got Unknown //IL_1505: Unknown result type (might be due to invalid IL or missing references) //IL_150f: Expected O, but got Unknown //IL_156d: Unknown result type (might be due to invalid IL or missing references) //IL_1577: Expected O, but got Unknown //IL_15dc: Unknown result type (might be due to invalid IL or missing references) //IL_15e6: Expected O, but got Unknown //IL_1644: Unknown result type (might be due to invalid IL or missing references) //IL_164e: Expected O, but got Unknown //IL_16b3: Unknown result type (might be due to invalid IL or missing references) //IL_16bd: Expected O, but got Unknown //IL_171b: Unknown result type (might be due to invalid IL or missing references) //IL_1725: Expected O, but got Unknown //IL_175a: Unknown result type (might be due to invalid IL or missing references) //IL_1764: Expected O, but got Unknown //IL_1782: Unknown result type (might be due to invalid IL or missing references) //IL_17a7: Unknown result type (might be due to invalid IL or missing references) //IL_17b1: Expected O, but got Unknown //IL_17cf: Unknown result type (might be due to invalid IL or missing references) //IL_17f4: Unknown result type (might be due to invalid IL or missing references) //IL_17fe: Expected O, but got Unknown //IL_181c: Unknown result type (might be due to invalid IL or missing references) //IL_1841: Unknown result type (might be due to invalid IL or missing references) //IL_184b: Expected O, but got Unknown //IL_188b: Unknown result type (might be due to invalid IL or missing references) //IL_1895: Expected O, but got Unknown //IL_18f3: Unknown result type (might be due to invalid IL or missing references) //IL_18fd: Expected O, but got Unknown //IL_1944: Unknown result type (might be due to invalid IL or missing references) //IL_194e: Expected O, but got Unknown //IL_19ac: Unknown result type (might be due to invalid IL or missing references) //IL_19b6: Expected O, but got Unknown //IL_1a26: Unknown result type (might be due to invalid IL or missing references) //IL_1a30: Expected O, but got Unknown //IL_1a99: Unknown result type (might be due to invalid IL or missing references) //IL_1aa3: Expected O, but got Unknown //IL_1b0c: Unknown result type (might be due to invalid IL or missing references) //IL_1b16: Expected O, but got Unknown //IL_1b69: Unknown result type (might be due to invalid IL or missing references) //IL_1b73: Expected O, but got Unknown //IL_1bc5: Unknown result type (might be due to invalid IL or missing references) //IL_1bcf: Expected O, but got Unknown //IL_1c2d: Unknown result type (might be due to invalid IL or missing references) //IL_1c37: Expected O, but got Unknown //IL_1ca7: Unknown result type (might be due to invalid IL or missing references) //IL_1cb1: Expected O, but got Unknown //IL_1d21: Unknown result type (might be due to invalid IL or missing references) //IL_1d2b: Expected O, but got Unknown //IL_1d8a: Unknown result type (might be due to invalid IL or missing references) //IL_1d94: Expected O, but got Unknown //IL_1dd5: Unknown result type (might be due to invalid IL or missing references) //IL_1ddf: Expected O, but got Unknown //IL_1e14: Unknown result type (might be due to invalid IL or missing references) //IL_1e1e: Expected O, but got Unknown //IL_1e53: Unknown result type (might be due to invalid IL or missing references) //IL_1e5d: Expected O, but got Unknown //IL_1e92: Unknown result type (might be due to invalid IL or missing references) //IL_1e9c: Expected O, but got Unknown //IL_1ed1: Unknown result type (might be due to invalid IL or missing references) //IL_1edb: Expected O, but got Unknown //IL_1f39: Unknown result type (might be due to invalid IL or missing references) //IL_1f43: Expected O, but got Unknown //IL_1fa2: Unknown result type (might be due to invalid IL or missing references) //IL_1fac: Expected O, but got Unknown //IL_1fe1: Unknown result type (might be due to invalid IL or missing references) //IL_1feb: Expected O, but got Unknown //IL_2020: Unknown result type (might be due to invalid IL or missing references) //IL_202a: Expected O, but got Unknown //IL_205f: Unknown result type (might be due to invalid IL or missing references) //IL_2069: Expected O, but got Unknown //IL_209e: Unknown result type (might be due to invalid IL or missing references) //IL_20a8: Expected O, but got Unknown //IL_20dd: Unknown result type (might be due to invalid IL or missing references) //IL_20e7: Expected O, but got Unknown //IL_2127: Unknown result type (might be due to invalid IL or missing references) //IL_2131: Expected O, but got Unknown //IL_21a3: Unknown result type (might be due to invalid IL or missing references) //IL_21ad: Expected O, but got Unknown //IL_221f: Unknown result type (might be due to invalid IL or missing references) //IL_2229: Expected O, but got Unknown //IL_2292: Unknown result type (might be due to invalid IL or missing references) //IL_229c: Expected O, but got Unknown //IL_2306: Unknown result type (might be due to invalid IL or missing references) //IL_2310: Expected O, but got Unknown //IL_237a: Unknown result type (might be due to invalid IL or missing references) //IL_2384: Expected O, but got Unknown //IL_23ee: Unknown result type (might be due to invalid IL or missing references) //IL_23f8: Expected O, but got Unknown //IL_2462: Unknown result type (might be due to invalid IL or missing references) //IL_246c: Expected O, but got Unknown //IL_24d6: Unknown result type (might be due to invalid IL or missing references) //IL_24e0: Expected O, but got Unknown //IL_254a: Unknown result type (might be due to invalid IL or missing references) //IL_2554: Expected O, but got Unknown //IL_25be: Unknown result type (might be due to invalid IL or missing references) //IL_25c8: Expected O, but got Unknown //IL_2632: Unknown result type (might be due to invalid IL or missing references) //IL_263c: Expected O, but got Unknown //IL_26a6: Unknown result type (might be due to invalid IL or missing references) //IL_26b0: Expected O, but got Unknown //IL_271a: Unknown result type (might be due to invalid IL or missing references) //IL_2724: Expected O, but got Unknown //IL_2765: Unknown result type (might be due to invalid IL or missing references) //IL_276f: Expected O, but got Unknown //IL_27d9: Unknown result type (might be due to invalid IL or missing references) //IL_27e3: Expected O, but got Unknown //IL_2841: Unknown result type (might be due to invalid IL or missing references) //IL_284b: Expected O, but got Unknown //IL_2880: Unknown result type (might be due to invalid IL or missing references) //IL_288a: Expected O, but got Unknown //IL_28bf: Unknown result type (might be due to invalid IL or missing references) //IL_28c9: Expected O, but got Unknown //IL_28fe: Unknown result type (might be due to invalid IL or missing references) //IL_2908: Expected O, but got Unknown //IL_293e: Unknown result type (might be due to invalid IL or missing references) //IL_2948: Expected O, but got Unknown //IL_297e: Unknown result type (might be due to invalid IL or missing references) //IL_2988: Expected O, but got Unknown //IL_29c9: Unknown result type (might be due to invalid IL or missing references) //IL_29d3: Expected O, but got Unknown //IL_2a32: Unknown result type (might be due to invalid IL or missing references) //IL_2a3c: Expected O, but got Unknown //IL_2a72: Unknown result type (might be due to invalid IL or missing references) //IL_2a7c: Expected O, but got Unknown //IL_2ab2: Unknown result type (might be due to invalid IL or missing references) //IL_2abc: Expected O, but got Unknown //IL_2af2: Unknown result type (might be due to invalid IL or missing references) //IL_2afc: Expected O, but got Unknown //IL_2b32: Unknown result type (might be due to invalid IL or missing references) //IL_2b3c: Expected O, but got Unknown //IL_2b72: Unknown result type (might be due to invalid IL or missing references) //IL_2b7c: Expected O, but got Unknown //IL_2bb1: Unknown result type (might be due to invalid IL or missing references) //IL_2bbb: Expected O, but got Unknown //IL_2bf0: Unknown result type (might be due to invalid IL or missing references) //IL_2bfa: Expected O, but got Unknown //IL_2c2f: Unknown result type (might be due to invalid IL or missing references) //IL_2c39: Expected O, but got Unknown //IL_2c6e: Unknown result type (might be due to invalid IL or missing references) //IL_2c78: Expected O, but got Unknown //IL_2ce8: Unknown result type (might be due to invalid IL or missing references) //IL_2cf2: Expected O, but got Unknown //IL_2d51: Unknown result type (might be due to invalid IL or missing references) //IL_2d5b: Expected O, but got Unknown //IL_2db9: Unknown result type (might be due to invalid IL or missing references) //IL_2dc3: Expected O, but got Unknown //IL_2df8: Unknown result type (might be due to invalid IL or missing references) //IL_2e02: Expected O, but got Unknown //IL_2e60: Unknown result type (might be due to invalid IL or missing references) //IL_2e6a: Expected O, but got Unknown //IL_2ec8: Unknown result type (might be due to invalid IL or missing references) //IL_2ed2: Expected O, but got Unknown //IL_2f5d: Unknown result type (might be due to invalid IL or missing references) //IL_2f67: Expected O, but got Unknown HideBepInEx(); ConfigInstance = ((BaseUnityPlugin)this).Config; Log = ((BaseUnityPlugin)this).Logger; PopupManager = ((Component)this).gameObject.AddComponent<PopupManager>(); EnableLogging = ConfigInstance.Bind<bool>("01. General", "Enable Logging", false, new ConfigDescription("Enable/disable logging.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5 } })); EnableLogging.SettingChanged += delegate { ConfigCache.MarkDirty("EnableLogging"); }; UnlockTwitchItems = ConfigInstance.Bind<bool>("01. General", "Unlock Twitch Items", false, new ConfigDescription("Unlock pre-order DLC, Twitch plush, and Twitch drops. Paid DLC is excluded on purpose.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 1 } })); RemoveMenuClutter = ConfigInstance.Bind<bool>("02. Menu Cleanup", "Remove Extra Menu Buttons", false, new ConfigDescription("Removes credits/road-map/discord buttons from the menus.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 6 } })); RemoveTwitchButton = ConfigInstance.Bind<bool>("02. Menu Cleanup", "Remove Twitch Buttons", false, new ConfigDescription("Removes twitch buttons from the menus.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5 } })); DisableAds = ConfigInstance.Bind<bool>("02. Menu Cleanup", "Disable Ads", false, new ConfigDescription("Disables the new ad 'feature'.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 4 } })); DisableAds.SettingChanged += delegate { InvalidateConfigCache(); }; RemoveHelpButtonInPauseMenu = ConfigInstance.Bind<bool>("02. Menu Cleanup", "Remove Help Button In Pause Menu", false, new ConfigDescription("Removes the help button in the pause menu.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); RemoveTwitchButtonInPauseMenu = ConfigInstance.Bind<bool>("02. Menu Cleanup", "Remove Twitch Button In Pause Menu", false, new ConfigDescription("Removes the twitch button in the pause menu.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 2 } })); RemovePhotoModeButtonInPauseMenu = ConfigInstance.Bind<bool>("02. Menu Cleanup", "Remove Photo Mode Button In Pause Menu", false, new ConfigDescription("Removes the photo mode button in the pause menu.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 1 } })); MainMenuGlitch = ConfigInstance.Bind<bool>("02. Menu Cleanup", "Main Menu Glitch", true, new ConfigDescription("Controls the sudden dark-mode switch effect.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 0 } })); MainMenuGlitch.SettingChanged += delegate { UpdateMenuGlitch(); }; ReverseGoldenFleeceDamageChange = ConfigInstance.Bind<bool>("03. Golden Fleece", "Reverse Golden Fleece Change", false, new ConfigDescription("Reverts the default damage increase to 10% instead of 5%.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 4 } })); FleeceDamageMulti = ConfigInstance.Bind<float>("03. Golden Fleece", "Fleece Damage Multiplier", 1f, new ConfigDescription("The custom damage multiplier to use. Based off the games default 5%.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1] { new ConfigurationManagerAttributes { Order = 1 } })); FleeceDamageMulti.SettingChanged += delegate { FleeceDamageMulti.Value = Mathf.Round(FleeceDamageMulti.Value * 4f) / 4f; }; EasyFishing = ConfigInstance.Bind<bool>("04. Game Mechanics", "Disable Fishing Mini-Game", false, new ConfigDescription("Fishing mini-game cheese. Just cast and let the mod do the rest.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Disable Fishing Mini-Game**", Order = 5 } })); EasyFishing.SettingChanged += delegate { ShowRestartMessage(); }; DisableGameOver = ConfigInstance.Bind<bool>("04. Game Mechanics", "No More Game-Over", false, new ConfigDescription("Disables the game over function when you have 0 followers for consecutive days.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 4 } })); ThriceMultiplyTarotCardLuck = ConfigInstance.Bind<bool>("04. Game Mechanics", "3x Tarot Luck", false, new ConfigDescription("Luck changes with game difficulty, this will multiply your luck multiplier by 3 for drawing rarer tarot cards.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); RareTarotCardsOnly = ConfigInstance.Bind<bool>("04. Game Mechanics", "Rare Tarot Cards Only", false, new ConfigDescription("Only draw rare tarot cards.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 2 } })); SinBossLimit = ConfigInstance.Bind<int>("04. Game Mechanics", "Sin Boss Limit", 3, new ConfigDescription("Bishop kills required to unlock Sin. Default is 3.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 5), new object[1] { new ConfigurationManagerAttributes { Order = 1 } })); BaseDamageMultiplier = ConfigInstance.Bind<float>("05. Player Damage", "Base Damage Multiplier", 1f, new ConfigDescription("The base damage multiplier to use.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1] { new ConfigurationManagerAttributes { Order = 5 } })); BaseDamageMultiplier.SettingChanged += delegate { BaseDamageMultiplier.Value = Mathf.Round(BaseDamageMultiplier.Value * 4f) / 4f; }; RunSpeedMulti = ConfigInstance.Bind<float>("05. Player Damage", "Run Speed Multiplier", 1f, new ConfigDescription("How much faster the player runs.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1] { new ConfigurationManagerAttributes { Order = 7 } })); RunSpeedMulti.SettingChanged += delegate { RunSpeedMulti.Value = Mathf.Round(RunSpeedMulti.Value * 4f) / 4f; }; DisableRunSpeedInDungeons = ConfigInstance.Bind<bool>("05. Player Damage", "Disable Run Speed In Dungeons", true, new ConfigDescription("Disables the run speed multiplier in dungeons.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 6, DispName = " └ Disable Run Speed In Dungeons" } })); DisableRunSpeedInCombat = ConfigInstance.Bind<bool>("05. Player Damage", "Disable Run Speed In Combat", true, new ConfigDescription("Disables the run speed multiplier in combat.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5, DispName = " └ Disable Run Speed In Combat" } })); DodgeSpeedMulti = ConfigInstance.Bind<float>("05. Player Damage", "Dodge Speed Multiplier", 1f, new ConfigDescription("How much faster the player dodges.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); DodgeSpeedMulti.SettingChanged += delegate { DodgeSpeedMulti.Value = Mathf.Round(DodgeSpeedMulti.Value * 4f) / 4f; }; LungeSpeedMulti = ConfigInstance.Bind<float>("05. Player Damage", "Lunge Speed Multiplier", 1f, new ConfigDescription("How much faster the player lunges.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1] { new ConfigurationManagerAttributes { Order = 1 } })); LungeSpeedMulti.SettingChanged += delegate { LungeSpeedMulti.Value = Mathf.Round(LungeSpeedMulti.Value * 4f) / 4f; }; SaveOnQuitToDesktop = ConfigInstance.Bind<bool>("06. Saves", "Save On Quit To Desktop", false, new ConfigDescription("Modify the confirmation dialog to save the game when you quit to desktop.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 8 } })); SaveOnQuitToMenu = ConfigInstance.Bind<bool>("06. Saves", "Save On Quit To Menu", false, new ConfigDescription("Modify the confirmation dialog to save the game when you quit to menu.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 7 } })); HideNewGameButtons = ConfigInstance.Bind<bool>("06. Saves", "Hide New Game Button (s)", false, new ConfigDescription("Hides the new game button if you have at least one save game.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 6 } })); EnableQuickSaveShortcut = ConfigInstance.Bind<bool>("06. Saves", "Enable Quick Save Shortcut", false, new ConfigDescription("Enable/disable the quick save keyboard shortcut.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5 } })); EnableQuickSaveShortcut.SettingChanged += delegate { InvalidateConfigCache(); }; SaveKeyboardShortcut = ConfigInstance.Bind<KeyboardShortcut>("06. Saves", "Save Keyboard Shortcut", new KeyboardShortcut((KeyCode)286, Array.Empty<KeyCode>()), new ConfigDescription("The keyboard shortcut to save the game.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 4, DispName = " └ Save Keyboard Shortcut" } })); SaveKeyboardShortcut.SettingChanged += delegate { InvalidateConfigCache(); }; DirectLoadSave = ConfigInstance.Bind<bool>("06. Saves", "Direct Load Save", false, new ConfigDescription("Directly load the specified save game instead of showing the save menu.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); DirectLoadSave.SettingChanged += delegate { InvalidateConfigCache(); }; DirectLoadSkipKey = ConfigInstance.Bind<KeyboardShortcut>("06. Saves", "Direct Load Skip Key", new KeyboardShortcut((KeyCode)304, Array.Empty<KeyCode>()), new ConfigDescription("The keyboard shortcut to skip the auto-load when loading the game.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 2, DispName = " └ Direct Load Skip Key" } })); DirectLoadSkipKey.SettingChanged += delegate { InvalidateConfigCache(); }; SaveSlotToLoad = ConfigInstance.Bind<int>("06. Saves", "Save Slot To Load", 1, new ConfigDescription("The save slot to load.", (AcceptableValueBase)(object)new AcceptableValueList<int>(new int[3] { 1, 2, 3 }), new object[1] { new ConfigurationManagerAttributes { Order = 1, DispName = " └ Save Slot To Load" } })); SaveSlotToLoad.SettingChanged += delegate { if (!SaveAndLoad.SaveExist(SaveSlotToLoad.Value)) { L("The slot you have select doesn't contain a save game."); } else { L($"Save slot to load changed to {SaveSlotToLoad.Value}"); } }; WeatherChangeTrigger = ConfigInstance.Bind<WeatherChangeTrigger>("07. Weather", "Weather Change Trigger", CultOfQoL.Patches.Systems.WeatherChangeTrigger.Disabled, new ConfigDescription("When should weather randomly change? Disabled = vanilla (once per day). Location Change = dungeons/fast travel. Phase Change = every phase. Both = location AND phase change.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 10 } })); UnlockAllWeatherTypes = ConfigInstance.Bind<bool>("07. Weather", "Unlock All Weather Types", false, new ConfigDescription("Allow all weather types (including snow) to appear regardless of season or game progression.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 9 } })); LightSnowColor = ConfigInstance.Bind<Color>("07. Weather", "Light Snow Color", new Color(0.016f, 0f, 1f, 0.15f), new ConfigDescription("Control the colour of the screen when there is light snow.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 7 } })); LightWindColor = ConfigInstance.Bind<Color>("07. Weather", "Light Wind Color", new Color(0.016f, 0f, 1f, 0.15f), new ConfigDescription("Control the colour of the screen when there is light wind.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 6 } })); LightRainColor = ConfigInstance.Bind<Color>("07. Weather", "Light Rain Color", new Color(0.016f, 0f, 1f, 0.15f), new ConfigDescription("Control the colour of the screen when there is light rain.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5 } })); MediumRainColor = ConfigInstance.Bind<Color>("07. Weather", "Medium Rain Color", new Color(0.016f, 0f, 1f, 0.15f), new ConfigDescription("Control the colour of the screen when there is medium rain.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 4 } })); HeavyRainColor = ConfigInstance.Bind<Color>("07. Weather", "Heavy Rain Color", new Color(0.016f, 0f, 1f, 0.45f), new ConfigDescription("Control the colour of the screen when there is heavy rain.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); WeatherDropDown = ConfigInstance.Bind<Weather.WeatherCombo>("07. Weather", "Weather Dropdown", Weather.WeatherCombo.HeavyRain, new ConfigDescription("Select the type of weather you want to test to see the effect your chosen colour has.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 2 } })); ConfigInstance.Bind<bool>("07. Weather", "Test Weather", true, new ConfigDescription("Click to apply the weather type selected above and preview your custom color settings in-game.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 1, HideDefaultButton = true, CustomDrawer = TestWeather } })); LumberAndMiningStationsDontAge = ConfigInstance.Bind<bool>("08. Mines", "Infinite Lumber & Mining Stations", false, new ConfigDescription("Lumber and mining stations should never run out and collapse. Takes 1st priority.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); LumberAndMiningStationsDontAge.SettingChanged += delegate { ConfigCache.MarkDirty("LumberAndMiningStationsDontAge"); }; LumberAndMiningStationsAgeMultiplier = ConfigInstance.Bind<float>("08. Mines", "Lumber & Mining Stations Age Multiplier", 1f, new ConfigDescription("How much slower (or faster) the lumber and mining stations age. Default is 1.0f.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1] { new ConfigurationManagerAttributes { Order = 2 } })); LumberAndMiningStationsAgeMultiplier.SettingChanged += delegate { ConfigCache.MarkDirty("LumberAndMiningStationsAgeMultiplier"); }; LumberAndMiningStationsAgeMultiplier.SettingChanged += delegate { LumberAndMiningStationsAgeMultiplier.Value = Mathf.Round(LumberAndMiningStationsAgeMultiplier.Value * 4f) / 4f; }; AutoSelectBestMatingPair = ConfigInstance.Bind<bool>("09. Structures", "Auto-Select Best Mating Pair", false, new ConfigDescription("Automatically selects the two followers with the highest mating success chance when the Mating Tent is opened.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 20 } })); AddExhaustedToHealingBay = ConfigInstance.Bind<bool>("09. Structures", "Add Exhausted To Healing Bay", false, new ConfigDescription("Allows you to select exhausted followers for rest and relaxation in the healing bays.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 19 } })); HideHealthyFromHealingBay = ConfigInstance.Bind<bool>("09. Structures", "Hide Healthy From Healing Bay", false, new ConfigDescription("Hides followers that don't need healing from the healing bay selection menu.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 18 } })); OnlyShowDissenters = ConfigInstance.Bind<bool>("09. Structures", "Only Show Dissenters In Prison Menu", false, new ConfigDescription("Only show dissenting followers when interacting with the prison.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 17 } })); AdjustRefineryRequirements = ConfigInstance.Bind<bool>("09. Structures", "Adjust Refinery Requirements", false, new ConfigDescription("Where possible, halves the materials needed to convert items in the refinery. Rounds up.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 27 } })); AdjustRefineryRequirements.SettingChanged += delegate { ConfigCache.MarkDirty("AdjustRefineryRequirements"); }; RefineryMassFill = ConfigInstance.Bind<bool>("09. Structures", "Refinery Mass Fill", false, new ConfigDescription("When adding an item to the refinery queue, automatically fill all available slots with that item.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 26 } })); CookingFireMassFill = ConfigInstance.Bind<bool>("09. Structures", "Cooking Fire Mass Fill", false, new ConfigDescription("When adding a meal to the cooking fire queue, automatically fill all available slots with that meal.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 25 } })); KitchenMassFill = ConfigInstance.Bind<bool>("09. Structures", "Kitchen Mass Fill", false, new ConfigDescription("When adding a meal to the follower kitchen queue, automatically fill all available slots with that meal.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 24 } })); PubMassFill = ConfigInstance.Bind<bool>("09. Structures", "Pub Mass Fill", false, new ConfigDescription("When adding a drink to the pub queue, automatically fill all available slots with that drink.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 23 } })); TurnOffSpeakersAtNight = ConfigInstance.Bind<bool>("09. Structures", "Turn Off Speakers At Night", false, new ConfigDescription("Turns the speakers off, and stops fuel consumption at night time.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 14 } })); TurnOffSpeakersAtNight.SettingChanged += delegate { ConfigCache.MarkDirty("TurnOffSpeakersAtNight"); }; DisablePropagandaSpeakerAudio = ConfigInstance.Bind<bool>("09. Structures", "Disable Propaganda Speaker Audio", false, new ConfigDescription("Disables the audio from propaganda speakers.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 13 } })); DisablePropagandaSpeakerAudio.SettingChanged += delegate { ConfigCache.MarkDirty("DisablePropagandaSpeakerAudio"); }; int num = Mathf.RoundToInt(Structures_PropagandaSpeaker.EFFECTIVE_DISTANCE); PropagandaSpeakerRange = ConfigInstance.Bind<int>("09. Structures", "Propaganda Speaker Range", num, new ConfigDescription($"The range of the propaganda speaker. Default is {num}.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), new object[1] { new ConfigurationManagerAttributes { Order = 12 } })); PropagandaSpeakerRange.SettingChanged += delegate { Structures_PropagandaSpeaker.EFFECTIVE_DISTANCE = Mathf.RoundToInt((float)PropagandaSpeakerRange.Value); }; int num2 = Mathf.RoundToInt(HarvestTotem.EFFECTIVE_DISTANCE); HarvestTotemRange = ConfigInstance.Bind<int>("09. Structures", "Harvest Totem Range", num2, new ConfigDescription($"The range of the harvest totem. Default is {num2}.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(3, 14), new object[1] { new ConfigurationManagerAttributes { Order = 11 } })); HarvestTotemRange.SettingChanged += delegate { HarvestTotem.EFFECTIVE_DISTANCE = Mathf.RoundToInt((float)HarvestTotemRange.Value); }; FarmStationRange = ConfigInstance.Bind<int>("09. Structures", "Farm Station Range", 6, new ConfigDescription("The range of the farm station. Default is 6.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), new object[1] { new ConfigurationManagerAttributes { Order = 10 } })); FarmPlotSignRange = ConfigInstance.Bind<int>("09. Structures", "Farm Plot Sign Range", 5, new ConfigDescription("The range of the farm plot sign. Default is 5.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), new object[1] { new ConfigurationManagerAttributes { Order = 9 } })); int num3 = Mathf.RoundToInt(Interaction_LightningRod.EFFECTIVE_DISTANCE_LVL1); int num4 = Mathf.RoundToInt(Interaction_LightningRod.EFFECTIVE_DISTANCE_LVL2); LightningRodRangeLvl1 = ConfigInstance.Bind<int>("09. Structures", "Lightning Rod Range (Basic)", num3, new ConfigDescription($"The range of the basic lightning rod. Default is {num3}.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(10, 100), new object[1] { new ConfigurationManagerAttributes { Order = 8 } })); LightningRodRangeLvl1.SettingChanged += delegate { Interaction_LightningRod.EFFECTIVE_DISTANCE_LVL1 = LightningRodRangeLvl1.Value; }; LightningRodRangeLvl2 = ConfigInstance.Bind<int>("09. Structures", "Lightning Rod Range (Upgraded)", num4, new ConfigDescription($"The range of the upgraded lightning rod. Default is {num4}.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(10, 100), new object[1] { new ConfigurationManagerAttributes { Order = 7 } })); LightningRodRangeLvl2.SettingChanged += delegate { Interaction_LightningRod.EFFECTIVE_DISTANCE_LVL2 = LightningRodRangeLvl2.Value; }; CookedMeatMealsContainBone = ConfigInstance.Bind<bool>("09. Structures", "Cooked Meat Meals Contain Bone", false, new ConfigDescription("Meat + fish meals will spawn 1 - 3 bones when cooked.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 6 } })); CookedMeatMealsContainBone.SettingChanged += delegate { ConfigCache.MarkDirty("CookedMeatMealsContainBone"); }; AddSpiderWebsToOfferings = ConfigInstance.Bind<bool>("09. Structures", "Add Spider Webs To Offerings", false, new ConfigDescription("Adds Spider Webs to the Offering Shrines default offerings.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5 } })); AddSpiderWebsToOfferings.SettingChanged += delegate { ConfigCache.MarkDirty("AddSpiderWebsToOfferings"); }; AddCrystalShardsToOfferings = ConfigInstance.Bind<bool>("09. Structures", "Add Crystals To Offerings", false, new ConfigDescription("Adds Crystal Shards to the Offering Shrines rare offerings.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 4 } })); AddCrystalShardsToOfferings.SettingChanged += delegate { ConfigCache.MarkDirty("AddCrystalShardsToOfferings"); }; ProduceSpiderWebsFromLumber = ConfigInstance.Bind<bool>("09. Structures", "Lumber Stations Produce Spider Webs", false, new ConfigDescription("Lumber stations will produce spider webs from logs collected.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); ProduceSpiderWebsFromLumber.SettingChanged += delegate { ConfigCache.MarkDirty("ProduceSpiderWebsFromLumber"); }; SpiderWebsPerLogs = ConfigInstance.Bind<int>("09. Structures", "Spider Webs Per Logs", 5, new ConfigDescription("Number of logs needed to produce 1 spider web.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), new object[1] { new ConfigurationManagerAttributes { Order = 2 } })); SpiderWebsPerLogs.SettingChanged += delegate { ConfigCache.MarkDirty("SpiderWebsPerLogs"); }; ProduceCrystalShardsFromStone = ConfigInstance.Bind<bool>("09. Structures", "Mining Stations Produce Crystal Shards", false, new ConfigDescription("Mining stations will produce crystal shards from stone collected.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); ProduceCrystalShardsFromStone.SettingChanged += delegate { ConfigCache.MarkDirty("ProduceCrystalShardsFromStone"); }; CrystalShardsPerStone = ConfigInstance.Bind<int>("09. Structures", "Crystal Shards Per Stone", 5, new ConfigDescription("Number of stone needed to produce 1 crystal shard.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), new object[1] { new ConfigurationManagerAttributes { Order = 2 } })); CrystalShardsPerStone.SettingChanged += delegate { ConfigCache.MarkDirty("CrystalShardsPerStone"); }; EnableGameSpeedManipulation = ConfigInstance.Bind<bool>("10. Game Speed", "Enable Game Speed Manipulation", false, new ConfigDescription("Use left/right arrows keys to increase/decrease game speed in 0.25 increments. Up arrow to reset to default.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 8 } })); ShortenGameSpeedIncrements = ConfigInstance.Bind<bool>("10. Game Speed", "Shorten Game Speed Increments", false, new ConfigDescription("When enabled, speed changes in large steps (0.25x, 1x, 2x, 3x, 4x, 5x). When disabled (default), speed changes in fine 0.25x increments (0.25x, 0.5x, 0.75x, 1x, 1.25x... up to 5x).", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 7 } })); ResetTimeScaleKey = ConfigInstance.Bind<KeyboardShortcut>("10. Game Speed", "Reset Time Scale Key", new KeyboardShortcut((KeyCode)273, Array.Empty<KeyCode>()), new ConfigDescription("The keyboard shortcut to reset the game speed to 1.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 6 } })); IncreaseGameSpeedKey = ConfigInstance.Bind<KeyboardShortcut>("10. Game Speed", "Increase Game Speed Key", new KeyboardShortcut((KeyCode)275, Array.Empty<KeyCode>()), new ConfigDescription("The keyboard shortcut to increase the game speed.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5 } })); DecreaseGameSpeedKey = ConfigInstance.Bind<KeyboardShortcut>("10. Game Speed", "Decrease Game Speed Key", new KeyboardShortcut((KeyCode)276, Array.Empty<KeyCode>()), new ConfigDescription("The keyboard shortcut to decrease the game speed.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 4 } })); FastCollecting = ConfigInstance.Bind<bool>("10. Game Speed", "Speed Up Collection", false, new ConfigDescription("Increases the rate you can collect from the shrines, and other structures.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Speed Up Collection**", Order = 4 } })); FastCollecting.SettingChanged += delegate { ShowRestartMessage(); }; CollectShrineDevotionInstantly = ConfigInstance.Bind<bool>("10. Game Speed", "Collect Shrine Devotion Instantly", false, new ConfigDescription("When collecting devotion from the shrine, collect all instantly instead of holding to collect.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); SlowDownTimeMultiplier = ConfigInstance.Bind<float>("10. Game Speed", "Slow Down Time Multiplier", 1f, new ConfigDescription("The multiplier to use for slow down time. For example, the default value of 2 is making the day twice as long.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1] { new ConfigurationManagerAttributes { Order = 2 } })); SlowDownTimeMultiplier.SettingChanged += delegate { SlowDownTimeMultiplier.Value = Mathf.Round(SlowDownTimeMultiplier.Value * 4f) / 4f; }; FastRitualSermons = ConfigInstance.Bind<bool>("10. Game Speed", "Fast Rituals & Sermons", false, new ConfigDescription("Speeds up rituals and sermons.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 0 } })); FastRitualSermons.SettingChanged += delegate { if (!FastRitualSermons.Value) { RitualSermonSpeed.RitualRunning = false; GameManager.SetTimeScale(1f); } }; RitualCooldownTime = ConfigInstance.Bind<float>("10. Game Speed", "Ritual Cooldown Time Multiplier", 1f, new ConfigDescription("Scales ritual cooldown duration.\n• 2.0 = Double cooldown (slower)\n• 1.0 = Normal cooldown\n• 0.5 = 50% of normal (faster)\n• 0.25 = 25% of normal (much faster)\n\nDrag left to reduce cooldown time.\nAllowed range: 0.1x to 2.0x.\n\n<i>Note: Applies only to newly performed rituals.</i>", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 2f), new object[1] { new ConfigurationManagerAttributes { Order = 0 } })); RitualCooldownTime.SettingChanged += delegate { RitualCooldownTime.Value = Mathf.Round(RitualCooldownTime.Value * 4f) / 4f; }; EnableAutoCollect = ConfigInstance.Bind<bool>("11. Auto-Interact (Chests)", "Enable Auto Collect", false, new ConfigDescription("Makes chests automatically send you the resources when you're nearby.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 6, DispName = "Enable Auto Collect**" } })); EnableAutoCollect.SettingChanged += delegate { ShowRestartMessage(); }; AutoCollectFromFarmStationChests = ConfigInstance.Bind<bool>("11. Auto-Interact (Chests)", "Auto Collect From Farm Station Chests", false, new ConfigDescription("Automatically collect from farm station chests.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5, DispName = " └ Auto Collect From Farm Station Chests" } })); TriggerAmount = ConfigInstance.Bind<int>("11. Auto-Interact (Chests)", "Trigger Amount", 5, new ConfigDescription("The amount of resources needed to trigger the auto-interact.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 100), new object[1] { new ConfigurationManagerAttributes { Order = 4, ShowRangeAsPercent = false, DispName = " └ Trigger Amount" } })); AutoInteractRangeMulti = ConfigInstance.Bind<float>("11. Auto-Interact (Chests)", "Loot Magnet Range Multiplier", 1f, new ConfigDescription("Enter a multiplier to use for auto-collect range when using custom range.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1] { new ConfigurationManagerAttributes { Order = 1, DispName = " └ Loot Magnet Range Multiplier" } })); AutoInteractRangeMulti.SettingChanged += delegate { AutoInteractRangeMulti.Value = Mathf.Round(AutoInteractRangeMulti.Value * 4f) / 4f; }; UseMultiplesOf32 = ConfigInstance.Bind<bool>("12. Capacities", "Use Multiples of 32", true, new ConfigDescription("Use multiples of 32 for silo capacity.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 7 } })); UseMultiplesOf32.SettingChanged += delegate { ConfigCache.MarkDirty("UseMultiplesOf32"); }; SiloCapacityMulti = ConfigInstance.Bind<float>("12. Capacities", "Silo Capacity Multiplier", 1f, new ConfigDescription("Enter a multiplier to use for silo capacity when using custom capacity.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[2] { null, new ConfigurationManagerAttributes { Order = 4 } })); SiloCapacityMulti.SettingChanged += delegate { SiloCapacityMulti.Value = Mathf.Round(SiloCapacityMulti.Value * 4f) / 4f; ConfigCache.MarkDirty("SiloCapacityMulti"); }; SoulCapacityMulti = ConfigInstance.Bind<float>("12. Capacities", "Soul Capacity Multiplier", 1f, new ConfigDescription("Enter a multiplier to use for soul capacity when using custom capacity.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[2] { null, new ConfigurationManagerAttributes { Order = 1 } })); SoulCapacityMulti.SettingChanged += delegate { SoulCapacityMulti.Value = Mathf.Round(SoulCapacityMulti.Value * 4f) / 4f; ConfigCache.MarkDirty("SoulCapacityMulti"); }; DisableAllNotifications = ConfigInstance.Bind<bool>("13. Notifications", "Disable All Notifications", false, new ConfigDescription("Disable all in-game notifications. This also prevents custom notifications below from working.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 10 } })); AllowCriticalNotifications = ConfigInstance.Bind<bool>("13. Notifications", "Allow Critical Notifications", true, new ConfigDescription("When 'Disable All Notifications' is enabled, still show critical notifications (deaths, weapon destruction, dissenters).", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 9, DispName = " └ Allow Critical Notifications" } })); NotifyOfScarecrowTraps = ConfigInstance.Bind<bool>("13. Notifications", "Notify of Scarecrow Traps", false, new ConfigDescription("Display a notification when the farm scarecrows have caught a trap!", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5 } })); NotifyOfNoFuel = ConfigInstance.Bind<bool>("13. Notifications", "Notify of No Fuel", false, new ConfigDescription("Display a notification when a structure has run out of fuel.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 4 } })); NotifyOfBedCollapse = ConfigInstance.Bind<bool>("13. Notifications", "Notify of Bed Collapse", false, new ConfigDescription("Display a notification when a bed has collapsed.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); ShowPhaseNotifications = ConfigInstance.Bind<bool>("13. Notifications", "Phase Notifications", false, new ConfigDescription("Show a notification when the time of day changes.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 2 } })); ShowPhaseNotifications.SettingChanged += delegate { ConfigCache.MarkDirty("ShowPhaseNotifications"); }; ShowWeatherChangeNotifications = ConfigInstance.Bind<bool>("13. Notifications", "Weather Change Notifications", false, new ConfigDescription("Show a notification when the weather changes.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 1 } })); ShowWeatherChangeNotifications.SettingChanged += delegate { ConfigCache.MarkDirty("ShowWeatherChangeNotifications"); }; PrioritizeRequestedFollowers = ConfigInstance.Bind<bool>("14. Followers", "Prioritize Requested Followers", false, new ConfigDescription("Followers with active requests (rituals, missions, mating, etc.) appear at the top of selection lists.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 9 } })); GiveFollowersNewNecklaces = ConfigInstance.Bind<bool>("14. Followers", "Give Followers New Necklaces", false, new ConfigDescription("Followers will be able to receive new necklaces, with the old one being returned to you.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 8 } })); CleanseIllnessAndExhaustionOnLevelUp = ConfigInstance.Bind<bool>("14. Followers", "Cleanse Illness and Exhaustion", false, new ConfigDescription("When a follower 'levels up', if they are sick or exhausted, the status is cleansed.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 7 } })); CollectTitheFromOldFollowers = ConfigInstance.Bind<bool>("14. Followers", "Collect Tithe From Old Followers", false, new ConfigDescription("Enable collecting tithe from the elderly.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 6 } })); IntimidateOldFollowers = ConfigInstance.Bind<bool>("14. Followers", "Intimidate Old Followers", false, new ConfigDescription("Enable intimidating the elderly.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5 } })); UncapLevelBenefits = ConfigInstance.Bind<bool>("14. Followers", "Uncap Level Benefits", false, new ConfigDescription("Removes the level 10 cap on follower benefits. Productivity, prayer devotion, and sacrifice rewards will scale beyond level 10. (The base game removed the level cap in 1.5.0, but benefits are still capped at level 10.)", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 4 } })); MakeOldFollowersWork = ConfigInstance.Bind<bool>("14. Followers", "Make Old Followers Work", false, new ConfigDescription("Enable the elderly to work.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Make Old Followers Work**", Order = 3 } })); MakeOldFollowersWork.SettingChanged += delegate { ShowRestartMessage(); }; MinRangeLifeExpectancy = ConfigInstance.Bind<int>("14. Followers", "Minimum Range Life Expectancy", 40, new ConfigDescription("The lowest possible life expectancy a follower can have. The game will randomly choose a value between this and the maximum value below. This must be less than the maximum.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 100), new object[1] { new ConfigurationManagerAttributes { ShowRangeAsPercent = false, Order = 2 } })); MinRangeLifeExpectancy.SettingChanged += delegate { EnforceRangeSanity(); }; MaxRangeLifeExpectancy = ConfigInstance.Bind<int>("14. Followers", "Maximum Range Life Expectancy", 55, new ConfigDescription("The highest possible life expectancy a follower can have. The game will randomly choose a value between the minimum above and this value.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 100), new object[1] { new ConfigurationManagerAttributes { ShowRangeAsPercent = false, Order = 0 } })); MaxRangeLifeExpectancy.SettingChanged += delegate { EnforceRangeSanity(); }; MassBribe = ConfigInstance.Bind<bool>("14. Followers", "Mass Bribe", false, new ConfigDescription("When bribing a follower, all followers are bribed at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Bribe**", Order = -1 } })); MassBribe.SettingChanged += delegate { ShowRestartMessage(); }; MassBless = ConfigInstance.Bind<bool>("14. Followers", "Mass Bless", false, new ConfigDescription("When blessing a follower, all followers are blessed at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Bless**", Order = -2 } })); MassBless.SettingChanged += delegate { ShowRestartMessage(); }; MassExtort = ConfigInstance.Bind<bool>("14. Followers", "Mass Extort", false, new ConfigDescription("When extorting a follower, all followers are extorted at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Extort**", Order = -3 } })); MassExtort.SettingChanged += delegate { ShowRestartMessage(); }; MassIntimidate = ConfigInstance.Bind<bool>("14. Followers", "Mass Intimidate", false, new ConfigDescription("When intimidating a follower, all followers are intimidated at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Intimidate**", Order = -4 } })); MassIntimidate.SettingChanged += delegate { ShowRestartMessage(); }; MassInspire = ConfigInstance.Bind<bool>("14. Followers", "Mass Inspire", false, new ConfigDescription("When inspiring a follower, all followers are inspired at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Inspire**", Order = -5 } })); MassInspire.SettingChanged += delegate { ShowRestartMessage(); }; MassRomance = ConfigInstance.Bind<bool>("14. Followers", "Mass Romance", false, new ConfigDescription("When romancing a follower, all followers are romanced at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Romance**", Order = -6 } })); MassRomance.SettingChanged += delegate { ShowRestartMessage(); }; MassBully = ConfigInstance.Bind<bool>("14. Followers", "Mass Bully", false, new ConfigDescription("When bullying a follower, all followers are bullied at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Bully**", Order = -7 } })); MassBully.SettingChanged += delegate { ShowRestartMessage(); }; MassReassure = ConfigInstance.Bind<bool>("14. Followers", "Mass Reassure", false, new ConfigDescription("When reassuring a follower, all followers are reassured at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Reassure**", Order = -8 } })); MassReassure.SettingChanged += delegate { ShowRestartMessage(); }; MassReeducate = ConfigInstance.Bind<bool>("14. Followers", "Mass Reeducate", false, new ConfigDescription("When reeducating a follower, all followers are reeducated at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Reeducate**", Order = -9 } })); MassReeducate.SettingChanged += delegate { ShowRestartMessage(); }; MassLevelUp = ConfigInstance.Bind<bool>("14. Followers", "Mass Level Up", false, new ConfigDescription("When leveling up a follower, all eligible followers are leveled up at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Level Up**", Order = -10 } })); MassLevelUp.SettingChanged += delegate { ShowRestartMessage(); }; MassLevelUpInstantSouls = ConfigInstance.Bind<bool>("14. Followers", "Mass Level Up Instant Souls", true, new ConfigDescription("Instantly collect souls during mass level up instead of having them fly to you.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = -11, DispName = " └ Mass Level Up Instant Souls" } })); MassPetDog = ConfigInstance.Bind<bool>("14. Followers", "Mass Pet Dog", false, new ConfigDescription("When petting a dog follower, all dog followers are petted at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Pet Dog**", Order = -12 } })); MassPetDog.SettingChanged += delegate { ShowRestartMessage(); }; MassSinExtract = ConfigInstance.Bind<bool>("14. Followers", "Mass Sin Extract", false, new ConfigDescription("When extracting sin from a follower, all eligible followers have their sin extracted at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Sin Extract**", Order = -13 } })); MassSinExtract.SettingChanged += delegate { ShowRestartMessage(); }; MassCleanAnimals = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Clean Animals", false, new ConfigDescription("When cleaning a stinky animal, all stinky animals are cleaned at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 5 } })); MassFeedAnimals = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Feed Animals", false, new ConfigDescription("When feeding an animal, all hungry animals are fed the same food at once (consumes one item per animal).", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 4 } })); MassMilkAnimals = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Milk Animals", false, new ConfigDescription("When milking an animal, all animals ready for milking are milked at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 3 } })); MassShearAnimals = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Shear Animals", false, new ConfigDescription("When shearing an animal, all animals ready for shearing are sheared at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 2 } })); MassFertilize = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Fertilize", false, new ConfigDescription("When fertilizing a plot, all farm plots are fertilized at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 17 } })); MassWater = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Water", false, new ConfigDescription("When watering a plot, all farm plots are watered at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 16 } })); MassPetAnimals = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Pet Animals", false, new ConfigDescription("When petting a farm animal, all farm animals are petted at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Mass Pet Animals**", Order = 15 } })); MassPetAnimals.SettingChanged += delegate { ShowRestartMessage(); }; CollectAllGodTearsAtOnce = ConfigInstance.Bind<bool>("16. Mass Actions", "Collect All God Tears At Once", false, new ConfigDescription("When collecting god tears from the shrine, collect all available at once instead of one per interaction.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 14 } })); MassCollectFromBeds = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Collect From Beds", false, new ConfigDescription("When collecting resources from a bed, all beds are collected from at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 13 } })); MassCollectFromOuthouses = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Collect From Outhouses", false, new ConfigDescription("When collecting resources from an outhouse, all outhouses are collected from at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 12 } })); MassCollectFromOfferingShrines = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Collect From Offering Shrines", false, new ConfigDescription("When collecting resources from an offering shrine, all offering shrines are collected from at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 11 } })); MassCollectFromPassiveShrines = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Collect From Passive Shrines", false, new ConfigDescription("When collecting resources from a passive shrine, all passive shrines are collected from at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 10 } })); MassCollectFromCompost = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Collect From Compost", false, new ConfigDescription("When collecting resources from a compost, all composts are collected from at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 9 } })); MassCollectFromHarvestTotems = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Collect From Harvest Totems", false, new ConfigDescription("When collecting resources from a harvest totem, all harvest totems are collected from at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 8 } })); MassOpenScarecrows = ConfigInstance.Bind<bool>("16. Mass Actions", "Mass Open Scarecrows", false, new ConfigDescription("When opening a scarecrow trap, all scarecrow traps with caught birds are opened at once.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 7 } })); MassWolfTraps = ConfigInstance.Bind<MassWolfTrapMode>("16. Mass Actions", "Mass Wolf Traps", MassWolfTrapMode.Disabled, new ConfigDescription("Fill Only: Fill all empty traps with the same bait. Collect Only: Collect from all traps with caught wolves. Both: Do both actions.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 6 } })); AllLootMagnets = ConfigInstance.Bind<bool>("17. Loot", "All Loot Magnets", false, new ConfigDescription("All loot is magnetized to you.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 0 } })); AllLootMagnets.SettingChanged += delegate { UpdateAllMagnets(); }; MagnetRangeMultiplier = ConfigInstance.Bind<float>("17. Loot", "Magnet Range Multiplier", 1f, new ConfigDescription("Apply a multiplier to the magnet range.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1] { new ConfigurationManagerAttributes { Order = 0 } })); MagnetRangeMultiplier.SettingChanged += delegate { MagnetRangeMultiplier.Value = MagnetRangeMultiplier.Value * 4f / 4f; UpdateCustomMagnet(); }; VignetteEffect = ConfigInstance.Bind<bool>("18. Post Processing", "Vignette UI Overlay", true, new ConfigDescription("Enable/disable the vignette UI overlay images (separate from the post-processing vignette effect).", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 90 } })); VignetteEffect.SettingChanged += delegate { PostProcessing.ToggleVignette(); }; ReverseEnrichmentNerf = ConfigInstance.Bind<bool>("19. Rituals", "Reverse Enrichment Nerf", false, new ConfigDescription("Reverts the nerf to the Ritual of Enrichment. Coins scale with follower level (level * 20 per follower).", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 0 } })); ResourceChestDepositSounds = ConfigInstance.Bind<bool>("20. Sound", "Resource Chest Deposit Sounds", true, new ConfigDescription("Play sounds when followers deposit resources into chests.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 2 } })); ResourceChestDepositSounds.SettingChanged += delegate { ConfigCache.MarkDirty("ResourceChestDepositSounds"); }; ResourceChestCollectSounds = ConfigInstance.Bind<bool>("20. Sound", "Resource Chest Collect Sounds", true, new ConfigDescription("Play sounds when collecting resources from chests.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 1 } })); ResourceChestCollectSounds.SettingChanged += delegate { ConfigCache.MarkDirty("ResourceChestCollectSounds"); }; AutoRepairMissingLore = ConfigInstance.Bind<bool>("21. Fixes", "Auto Repair Missing Lore", false, new ConfigDescription("Automatically repair missing lore tablets that weren't unlocked due to a previous bug.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 1 } })); AutoRepairMissingLore.SettingChanged += delegate { ShowBackupWarning(); LoreRepairPatches.OnSettingChanged(); }; ConfigInstance.Bind<bool>("ZZ. Reset All Settings", "Reset All Settings", false, new ConfigDescription("Set this to true and save the config file to reset all settings to default.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = 0, HideDefaultButton = true, CustomDrawer = ResetAll } })); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "p1xel8ted.cotl.CultOfQoLCollection"); SceneManager.sceneLoaded += OnSceneLoaded; Helpers.PrintModLoaded("The Cult of QoL Collection", ((BaseUnityPlugin)this).Logger); } private static void ResetAll(ConfigEntryBase entry) { if (_showConfirmationDialog) { DisplayConfirmationDialog(); } else if (GUILayout.Button("Reset All Settings", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) })) { _showConfirmationDialog = true; } } private static void DisplayConfirmationDialog() { GUILayout.Label("Are you sure you want to reset to default settings?", Array.Empty<GUILayoutOption>()); GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); if (GUILayout.Button("Yes", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) })) { RecommendedSettingsAction(); _showConfirmationDialog = false; } if (GUILayout.Button("No", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) })) { _showConfirmationDialog = false; } GUILayout.EndHorizontal(); } private static void RecommendedSettingsAction() { if (!(AccessTools.PropertyGetter(typeof(ConfigFile), "Entries").Invoke(ConfigInstance, null) is Dictionary<ConfigDefinition, ConfigEntryBase> source)) { Log.LogError((object)"[Config] Unable to access config entries for reset."); return; } foreach (KeyValuePair<ConfigDefinition, ConfigEntryBase> item in from ent in source where ent.Value.BoxedValue != ent.Value.DefaultValue where ent.Key.Section != "ZZ. Reset All Settings" select ent) { item.Value.BoxedValue = item.Value.DefaultValue; Log.LogInfo((object)$"[Config] Resetting {item.Key} to default value: {item.Value.DefaultValue}"); } } private static void EnforceRangeSanity() { int value = MinRangeLifeExpectancy.Value; int value2 = MaxRangeLifeExpectancy.Value; if (value >= value2) { if (value > 1) { MinRangeLifeExpectancy.Value = value2 - 1; Log.LogWarning((object)$"[Config] Min was >= Max — adjusted Min to {value2 - 1}"); } else if (value2 < 100) { MaxRangeLifeExpectancy.Value = value + 1; Log.LogWarning((object)$"[Config] Min was >= Max — adjusted Max to {value + 1}"); } else { MinRangeLifeExpectancy.Value = 40; MaxRangeLifeExpectancy.Value = 55; Log.LogWarning((object)"[Config] Min/Max invalid and unresolvable — reset to defaults."); } } } private static void TestWeather(ConfigEntryBase entry) { if (!GUILayout.Button("Test Weather", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) })) { return; } WeatherSystemController instance = WeatherSystemController.Instance; if (Object.op_Implicit((Object)(object)instance)) { switch (WeatherDropDown.Value) { case Weather.WeatherCombo.LightRain: instance.SetWeather((WeatherType)1, (WeatherStrength)0, 16f, true, false); break; case Weather.WeatherCombo.MediumRain: instance.SetWeather((WeatherType)1, (WeatherStrength)1, 16f, true, false); break; case Weather.WeatherCombo.HeavyRain: instance.SetWeather((WeatherType)1, (WeatherStrength)2, 16f, true, false); break; case Weather.WeatherCombo.LightSnow: instance.SetWeather((WeatherType)3, (WeatherStrength)0, 16f, true, false); break; case Weather.WeatherCombo.LightWind: instance.SetWeather((WeatherType)2, (WeatherStrength)0, 16f, true, false); break; default: throw new ArgumentOutOfRangeException(); } } } private static void UpdateNavigationMode() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: 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) MMButton[] array = Resources.FindObjectsOfTypeAll<MMButton>(); foreach (MMButton val in array) { Selectable selectable = val.Selectable; Navigation navigation = val.Selectable.navigation; ((Navigation)(ref navigation)).mode = (Mode)3; selectable.navigation = navigation; } } private static void UpdateAllMagnets() { if (AllLootMagnets.Value) { PickUps.UpdateAllPickUps(); } else { PickUps.RestoreAllPickUps(); } } private static void UpdateCustomMagnet() { if (!Mathf.Approximately(MagnetRangeMultiplier.Value, 1f)) { PickUps.UpdateAllPickUps(); } } private static void OnSceneLoaded(Scene arg0, LoadSceneMode arg1) { UpdateMenuGlitch(); UpdateNavigationMode(); UpdateAllMagnets(); } private static void UpdateMenuGlitch() { MainMenuController val = Object.FindObjectOfType<MainMenuController>(); if (Object.op_Implicit((Object)(object)val)) { val.doIntroGlitch = MainMenuGlitch.Value; } } public static void L(string message) { if (ConfigCache.GetCachedValue("EnableLogging", () => EnableLogging.Value)) { Log.LogInfo((object)message); } } public static void LE(string message) { Log.LogError((object)message); } public static void LW(string message) { Log.LogWarning((object)message); } private static void ShowRestartMessage() { if (!PopupManager.ShowPopup) { PopupManager.ShowPopupDlg("You must restart the game for these changes to take effect, as in totally exit to desktop and restart the game.\n\n** indicates a restart is required if the setting is changed.", showCloseAndDontShowAgain: true); } } private static void ShowBackupWarning() { if (!PopupManager.ShowPopup && AutoRepairMissingLore.Value) { PopupManager.ShowPopupDlg("IMPORTANT: Please back up your save files before enabling this option.\n\nThis feature will attempt to repair missing lore tablets on your next visit to the base. While it should be safe, backing up your saves first is recommended.", showCloseAndDontShowAgain: true); } } private static void HideBepInEx() { ((Object)Chainloader.ManagerObject).hideFlags = (HideFlags)61; ((Object)((Component)ThreadingHelper.Instance).gameObject).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)Chainloader.ManagerObject); Object.DontDestroyOnLoad((Object)(object)((Component)ThreadingHelper.Instance).gameObject); } private void RefreshConfigCache() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) _cachedDirectLoadValue = DirectLoadSave.Value; _cachedEnableQuickSaveValue = EnableQuickSaveShortcut.Value; _cachedDisableAdsValue = DisableAds.Value; _cachedDirectLoadSkipKey = DirectLoadSkipKey.Value; _cachedSaveShortcut = SaveKeyboardShortcut.Value; _configCacheValid = true; } private void InvalidateConfigCache() { _configCacheValid = false; } private void Update() { //IL_004f: Unknown result type (might be due to invalid IL or missing references) if (!_configCacheValid) { RefreshConfigCache(); } if (_cachedDirectLoadValue && (((KeyboardShortcut)(ref _cachedDirectLoadSkipKey)).IsPressed() || ((KeyboardShortcut)(ref _cachedDirectLoadSkipKey)).IsUp() || ((KeyboardShortcut)(ref _cachedDirectLoadSkipKey)).IsDown())) { if (!MenuCleanupPatches.SkipAutoLoad) { L($"{((KeyboardShortcut)(ref _cachedDirectLoadSkipKey)).MainKey} pressed; skipping auto-load."); } MenuCleanupPatches.SkipAutoLoad = true; } if (_cachedEnableQuickSaveValue && ((KeyboardShortcut)(ref _cachedSaveShortcut)).IsUp()) { SaveAndLoad.Save(); NotificationCentre.Instance.PlayGenericNotification("Game Saved!", (Flair)0); } if (!_cachedDisableAdsValue) { return; } if (!Object.op_Implicit((Object)(object)_cachedUIMainMenuController)) { _cachedUIMainMenuController = UIMainMenuController; _cachedAdComponents = null; } if (!Object.op_Implicit((Object)(object)_cachedUIMainMenuController)) { return; } if (_cachedAdComponents == null) { _cachedAdComponents = ((Component)_cachedUIMainMenuController.ad).GetComponents<Component>(); } if (((Component)_cachedUIMainMenuController.ad).gameObject.activeSelf) { Component[] cachedAdComponents = _cachedAdComponents; for (int i = 0; i < cachedAdComponents.Length; i++) { cachedAdComponents[i].gameObject.SetActive(false); } ((Component)_cachedUIMainMenuController.ad).gameObject.SetActive(false); } } } } namespace CultOfQoL.Patches.UI { [Harmony] public static class FollowerSelectPatches { [HarmonyPostfix] [HarmonyPatch(typeof(UIFollowerSelectMenuController), "OnShowFinished")] public static void UIFollowerSelectMenuController_OnShowFinished_Postfix(UIFollowerSelectMenuController __instance) { if (!Plugin.PrioritizeRequestedFollowers.Value) { return; } HashSet<int> followersWithObjectives = new HashSet<int>(); foreach (FollowerInformationBox followerInfoBox in ((UIFollowerSelectBase<FollowerInformationBox>)(object)__instance)._followerInfoBoxes) { if (__instance.DoesFollowerHaveObjective(((FollowerSelectItem)followerInfoBox).FollowerInfo)) { followersWithObjectives.Add(((FollowerSelectItem)followerInfoBox).FollowerInfo.ID); } } if (followersWithObjectives.Count != 0) { List<FollowerInformationBox> list = (from box in ((UIFollowerSelectBase<FollowerInformationBox>)(object)__instance)._followerInfoBoxes orderby (!followersWithObjectives.Contains(((FollowerSelectItem)box).FollowerInfo.ID)) ? 1 : 0, ((UIFollowerSelectBase<FollowerInformationBox>)(object)__instance).FollowerSelectEntries.IndexOf(((FollowerSelectItem)box).FollowerSelectEntry) select box).ToList(); for (int i = 0; i < list.Count; i++) { ((Component)list[i]).transform.SetSiblingIndex(i); } ((UIFollowerSelectBase<FollowerInformationBox>)(object)__instance)._followerInfoBoxes.Clear(); ((UIFollowerSelectBase<FollowerInformationBox>)(object)__instance)._followerInfoBoxes.AddRange(list); } } } [Harmony] public static class MenuCleanupPatches { private static bool ReturningToMenu { get; set; } internal static bool SkipAutoLoad { get; set; } [HarmonyPostfix] [HarmonyPatch(typeof(MainMenu), "Start")] public static void MainMenu_Start(ref MainMenu __instance) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) MMButton[] componentsInChildren = ((Component)__instance).GetComponentsInChildren<MMButton>(); foreach (MMButton val in componentsInChildren) { Selectable selectable = val.Selectable; Navigation navigation = val.Selectable.navigation; ((Navigation)(ref navigation)).mode = (Mode)3; selectable.navigation = navigation; } ((UIMenuBase)__instance).SetActiveStateForMenu(((Component)__instance._creditsButton).gameObject, !Plugin.RemoveMenuClutter.Value); ((UIMenuBase)__instance).SetActiveStateForMenu(((Component)__instance._roadmapButton).gameObject, !Plugin.RemoveMenuClutter.Value); ((Component)__instance._creditsButton).gameObject.SetActive(!Plugin.RemoveMenuClutter.Value); ((Component)__instance._roadmapButton).gameObject.SetActive(!Plugin.RemoveMenuClutter.Value); if (!Plugin.DirectLoadSave.Value || ReturningToMenu || SkipAutoLoad) { return; } ReturningToMenu = true; if (SaveAndLoad.SaveExist(Plugin.SaveSlotToLoad.Value - 1)) { if ((Object)(object)Plugin.UIMainMenuController != (Object)null) { Plugin.UIMainMenuController.LoadMenu.OnTryLoadSaveSlot(Plugin.SaveSlotToLoad.Value - 1); } } else { Plugin.PopupManager.ShowPopupDlg("The slot you selected doesn't contain a save game, so direct load was aborted.", showCloseAndDontShowAgain: false); } } [HarmonyPostfix] [HarmonyPatch(typeof(UIPauseMenuController), "LoadMainMenu")] public static void UIPauseMenuController_LoadMainMenu() { ReturningToMenu = true; SkipAutoLoad = false; } [HarmonyPostfix] [HarmonyPatch(typeof(UIMainMenuController), "Awake")] public static void UIMainMenuController_Awake(ref UIMainMenuController __instance) { Plugin.UIMainMenuController = __instance; ((Component)__instance._discordButton).gameObject.SetActive(!Plugin.RemoveMenuClutter.Value); GameObject val = GameObject.Find("Main Menu Controller/Main Menu/MainMenuContainer/Right/Transform/"); if (!((Object)(object)val == (Object)null)) { ((UIMenuBase)__instance).SetActiveStateForMenu(val.gameObject, !Plugin.RemoveMenuClutter.Value); val.gameObject.SetActive(!Plugin.RemoveMenuClutter.Value); } } [HarmonyPostfix] [HarmonyPatch(typeof(UIPauseMenuController), "Awake")] public static void UIPauseMenuController_Awake(ref UIPauseMenuControl