using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Bifrost.Dungeon;
using HarmonyLib;
using MelonLoader;
using MelonLoader.Preferences;
using MoreMimics;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(global::MoreMimics.MoreMimics), "MoreMimics", "1.0.0", "Moccren", null)]
[assembly: MelonGame(null, null)]
[assembly: AssemblyTitle("MoreMimics")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MoreMimics")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("6CF39317-9D7A-4689-8320-58900585671F")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace MoreMimics;
public class MoreMimics : MelonMod
{
public override void OnInitializeMelon()
{
MelonLogger.Msg("MoreMimics loaded. You can tweak spawn values in the MelonPreferences.cfg file found in the folder UserData within the game's directory.");
MoreMimicsConfig.Init();
}
}
[HarmonyPatch(typeof(DungeonMasterInfo))]
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
[HarmonyPatch(new Type[] { typeof(Dungeon_MasterData) })]
internal class DungeonMasterInfoPatch
{
private static void Postfix(DungeonMasterInfo __instance)
{
__instance.MimicSpawnRate *= MoreMimicsConfig.MimicSpawnRateMultiplier.Value;
__instance.NormalMonsterSpawnRate *= MoreMimicsConfig.MonsterSpawnRateMultiplier.Value;
__instance.MimicSpawnTryCount += MoreMimicsConfig.ExtraMimicTryCount.Value;
__instance.NormalMonsterSpawnTryCount += MoreMimicsConfig.ExtraMonsterTryCount.Value;
__instance.MimicSpawnCountMax += MoreMimicsConfig.ExtraMaxMimics.Value;
__instance.MimicSpawnPeriod = (int)((float)__instance.MimicSpawnPeriod * MoreMimicsConfig.MimicSpawnPeriod.Value);
__instance.NormalMonsterSpawnPeriod = (int)((float)__instance.NormalMonsterSpawnPeriod * MoreMimicsConfig.MonsterSpawnPeriod.Value);
}
}
public static class MoreMimicsConfig
{
public static MelonPreferences_Entry<int> MimicSpawnRateMultiplier;
public static MelonPreferences_Entry<int> ExtraMaxMimics;
public static MelonPreferences_Entry<int> ExtraMimicTryCount;
public static MelonPreferences_Entry<float> MimicSpawnPeriod;
public static MelonPreferences_Entry<int> MonsterSpawnRateMultiplier;
public static MelonPreferences_Entry<int> ExtraMonsterTryCount;
public static MelonPreferences_Entry<float> MonsterSpawnPeriod;
public static void Init()
{
MelonPreferences_Category val = MelonPreferences.CreateCategory("MoreMimics");
MimicSpawnRateMultiplier = val.CreateEntry<int>("MimicSpawnRateMultiplier", 2, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
MonsterSpawnRateMultiplier = val.CreateEntry<int>("MonsterSpawnRateMultiplier", 2, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
ExtraMaxMimics = val.CreateEntry<int>("MimicExtraMaxMimics", 3, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
ExtraMimicTryCount = val.CreateEntry<int>("MimicExtraTryCount", 2, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
ExtraMonsterTryCount = val.CreateEntry<int>("MonsterExtraTryCount", 2, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
MimicSpawnPeriod = val.CreateEntry<float>("MimicSpawnPeriod", 0.75f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
MonsterSpawnPeriod = val.CreateEntry<float>("MonsterSpawnPeriod", 0.75f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
}
}