using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("LethalUnrandomizer")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("LethalUnrandomizer")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("6c25caf0-1388-40bc-bddb-6fdbfa57c098")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace LethalUnrandomizer { internal class ConfigHandler { private string keyframeSetRegex = "[0-9.]+:[0-9.]+$"; private ConfigEntry ForceWeatherCfg; private ConfigEntry ForcedWeatherTypeCfg; private ConfigEntry ForceMeteorsCfg; private ConfigEntry ForceInfestationsCfg; private ConfigEntry ForcedInfestationTypeCfg; private ConfigEntry ForceLowestScrapValueCfg; private ConfigEntry ForceLowestScrapAmountCfg; private ConfigEntry ChangeLandmineAmtKeyframesCfg; private ConfigEntry ChangeTurretAmtKeyframesCfg; private ConfigEntry ChangeSpikeTrapAmtKeyframesCfg; private ConfigEntry ChangeLandmineSpawnrateCfg; private ConfigEntry ChangeTurretSpawnrateCfg; private ConfigEntry ChangeSpikeTrapSpawnrateCfg; private ConfigEntry WorstLuckRandomLightningCfg; internal bool ForceWeather { get { return ForceWeatherCfg.Value; } set { ForceWeatherCfg.Value = value; } } internal int ForcedWeatherType { get { if (ForcedWeatherTypeCfg.Value < -1 || ForcedWeatherTypeCfg.Value > 5) { return (int)((ConfigEntryBase)ForcedWeatherTypeCfg).DefaultValue; } return ForcedWeatherTypeCfg.Value; } set { ForcedWeatherTypeCfg.Value = value; } } internal bool ForceMeteors { get { return ForceMeteorsCfg.Value; } set { ForceMeteorsCfg.Value = value; } } internal bool ForceInfestations { get { return ForceInfestationsCfg.Value; } set { ForceInfestationsCfg.Value = value; } } internal int ForcedInfestationType { get { if (ForcedInfestationTypeCfg.Value < 0 || ForcedInfestationTypeCfg.Value > 2) { return (int)((ConfigEntryBase)ForcedInfestationTypeCfg).DefaultValue; } return ForcedInfestationTypeCfg.Value; } set { ForcedInfestationTypeCfg.Value = value; } } internal bool ForceLowestScrapValue { get { return ForceLowestScrapValueCfg.Value; } set { ForceLowestScrapValueCfg.Value = value; } } internal bool ForceLowestScrapAmount { get { return ForceLowestScrapAmountCfg.Value; } set { ForceLowestScrapAmountCfg.Value = value; } } internal string ChangeLandmineAmtKeyframes { get { if (!Regex.IsMatch(ChangeLandmineAmtKeyframesCfg.Value, keyframeSetRegex)) { return (string)((ConfigEntryBase)ChangeLandmineAmtKeyframesCfg).DefaultValue; } return ChangeLandmineAmtKeyframesCfg.Value; } set { ChangeLandmineAmtKeyframesCfg.Value = value; } } internal string ChangeTurretAmtKeyframes { get { if (!Regex.IsMatch(ChangeTurretAmtKeyframesCfg.Value, keyframeSetRegex)) { return (string)((ConfigEntryBase)ChangeTurretAmtKeyframesCfg).DefaultValue; } return ChangeTurretAmtKeyframesCfg.Value; } set { ChangeTurretAmtKeyframesCfg.Value = value; } } internal string ChangeSpikeTrapAmtKeyframes { get { if (!Regex.IsMatch(ChangeSpikeTrapAmtKeyframesCfg.Value, keyframeSetRegex)) { return (string)((ConfigEntryBase)ChangeSpikeTrapAmtKeyframesCfg).DefaultValue; } return ChangeSpikeTrapAmtKeyframesCfg.Value; } set { ChangeSpikeTrapAmtKeyframesCfg.Value = value; } } internal bool ChangeLandmineSpawnrate { get { return ChangeLandmineSpawnrateCfg.Value; } set { ChangeLandmineSpawnrateCfg.Value = value; } } internal bool ChangeTurretSpawnrate { get { return ChangeTurretSpawnrateCfg.Value; } set { ChangeTurretSpawnrateCfg.Value = value; } } internal bool ChangeSpikeTrapSpawnrate { get { return ChangeSpikeTrapSpawnrateCfg.Value; } set { ChangeSpikeTrapSpawnrateCfg.Value = value; } } internal bool WorstLuckRandomLightning { get { return WorstLuckRandomLightningCfg.Value; } set { WorstLuckRandomLightningCfg.Value = value; } } public ConfigHandler(ConfigFile Config) { ForceWeatherCfg = Config.Bind("Weather Modifiers", "Force Weather", false, "Forces every moon to have weather type specified by 'forced weather type' (does NOT include FIRST DAY)."); ForcedWeatherTypeCfg = Config.Bind("Weather Modifiers", "Forced Weather Type", 5, "Weather IDs: -1 = clear, 0 = dust clouds (unused), 1 = rainy, 2 = stormy, 3 = foggy, 4 = flooded, 5 = eclipse."); ForceMeteorsCfg = Config.Bind("Special Event Modifiers", "Force Meteors", false, "Forces every day to have a meteor shower."); ForceInfestationsCfg = Config.Bind("Special Event Modifiers", "Force Infestations", false, "Attempts to force every day to have a hording bug or nutcracker infestation specified by 'forced infestation type'. If the selected moon cannot spawn infested enemy type, the infestation will be canceled."); ForcedInfestationTypeCfg = Config.Bind("Special Event Modifiers", "Forced Infestation Type", 0, "Infestation Settings: 0 = random (25% nutcracker, 75% hording bug), 1 = nutcracker, 2 = hording bug."); ForceLowestScrapValueCfg = Config.Bind("Inside Generation Modifiers", "Force Lowest Scrap Value", false, "Force all inside scrap to roll their minimum value."); ForceLowestScrapAmountCfg = Config.Bind("Inside Generation Modifiers", "Force Lowest Scrap Amount", false, "Force all moons to roll their minimum scrap amount."); ChangeLandmineAmtKeyframesCfg = Config.Bind("Trap Spawning Modifiers", "Set Keyframes for Landmine Spawning", "0:5,1:20", "Set keyframes for landmine spawing. Make \"orderd pairs\" using the syntax '