using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("AdrenalineModifier")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AdrenalineModifier")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("cd9bbe3f-1ebf-494c-bada-6d4b73adcadc")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace AdrenalineModifier;
[BepInPlugin("mightywa33ior.valheim.adrenalinemodifier", "AdrenalineModifier", "1.0.1")]
public class Main : BaseUnityPlugin
{
[HarmonyPatch(typeof(Player), "AddAdrenaline")]
public static class Patch_Player_AddAdrenaline
{
private static void Prefix(Player __instance, ref float v)
{
if (v > 0f)
{
v *= GetAdrenalineMultiplier();
}
else
{
v *= GetAdrenalineDecayMultiplier();
}
}
public static void Postfix(Player __instance, ref float ___m_adrenalineDegenTimer, ref float v)
{
float maxAdrenaline = ((Character)__instance).GetMaxAdrenaline();
if (v > 0f && maxAdrenaline > 0f)
{
___m_adrenalineDegenTimer *= GetAdrenalineDecayDelayMultiplier();
}
}
}
private const string pluginGUID = "mightywa33ior.valheim.adrenalinemodifier";
private const string pluginName = "AdrenalineModifier";
private const string pluginVersion = "1.0.1";
private readonly Harmony HarmonyInstance = new Harmony("mightywa33ior.valheim.adrenalinemodifier");
public static ManualLogSource logger = Logger.CreateLogSource("AdrenalineModifier");
private static ConfigEntry<float> AdrenalineMultiplier = null;
private static ConfigEntry<float> AdrenalineDecayMultiplier = null;
private static ConfigEntry<float> AdrenalineDecayDelayMultiplier = null;
public static float GetAdrenalineMultiplier()
{
return AdrenalineMultiplier.Value;
}
public static float GetAdrenalineDecayMultiplier()
{
return AdrenalineDecayMultiplier.Value;
}
public static float GetAdrenalineDecayDelayMultiplier()
{
return AdrenalineDecayDelayMultiplier.Value;
}
public void Awake()
{
((BaseUnityPlugin)this).Config.SaveOnConfigSet = false;
AdrenalineMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "AdrenalineMultiplier", 1f, "Multiplier to gained adrenaline (example: harder 0.5, standard 1.0, easier 1.5)");
AdrenalineDecayMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "AdrenalineDecayMultiplier", 1f, "Multiplier to lost adrenaline (example: harder 1.5, standard 1.0, easier 0.5)");
AdrenalineDecayDelayMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "AdrenalineDecayDelayMultiplier", 1f, "Multiplier to delay before adrenaline decay starts (example: harder 0.5, standard 1.0, easier 1.5)");
((BaseUnityPlugin)this).Config.Save();
((BaseUnityPlugin)this).Config.SaveOnConfigSet = true;
Assembly executingAssembly = Assembly.GetExecutingAssembly();
HarmonyInstance.PatchAll(executingAssembly);
}
private void OnDestroy()
{
((BaseUnityPlugin)this).Config.Save();
}
}