Decompiled source of Severons Perks v0.9.6

ModTest.dll

Decompiled 2 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
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("ModTest")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ModTest")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("5216a860-e0eb-41e2-ba19-290bf2caba7f")]
[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")]
public class PerkModule_ItemRecycling : PerkModule
{
	public BuffContainer recycleBuff;

	public float recycleChanceMultiplier = 0.3f;

	public override void Initialize(Perk p)
	{
		((PerkModule)this).Initialize(p);
		recycleBuff.id = "itemRecycling";
		ENT_Player player = ENT_Player.GetPlayer();
		bool flag = false;
		if (((GameEntity)player).curBuffs.GetBuffContainer(recycleBuff.id) == null)
		{
			((GameEntity)player).curBuffs.AddBuff(recycleBuff);
			((GameEntity)player).curBuffs.GetBuffContainer(recycleBuff.id).SetMultiplier(recycleChanceMultiplier);
			flag = true;
		}
		BuffContainer buffContainer = ((GameEntity)player).curBuffs.GetBuffContainer(recycleBuff.id);
		buffContainer.loseOverTime = false;
		if (!flag)
		{
			buffContainer.SetMultiplier(buffContainer.GetMultiplier() + recycleChanceMultiplier);
		}
	}
}
[HarmonyPatch(typeof(HandItem_Shoot), "Update")]
public class HandItem_Shoot_Update_Patch
{
	private static void Postfix(HandItem_Shoot __instance)
	{
		ENT_Player player = ENT_Player.GetPlayer();
		if ((Object)(object)((HandItem)__instance).anim != (Object)null && ((Hand_Base)__instance).hand != null && (Object)(object)player != (Object)null && ((GameEntity)player).curBuffs.GetBuffContainer("reloadBuff") != null)
		{
			float multiplier = ((GameEntity)player).curBuffs.GetBuffContainer("reloadBuff").GetMultiplier();
			if (multiplier > 0f)
			{
				((HandItem)__instance).anim.speed = 1f + multiplier;
			}
		}
	}
}
[HarmonyPatch(typeof(HandItem_Melee), "Update")]
public class HandItem_Swing_Update_Patch
{
	private static void Postfix(HandItem_Shoot __instance)
	{
		ENT_Player player = ENT_Player.GetPlayer();
		if ((Object)(object)((HandItem)__instance).anim != (Object)null && ((Hand_Base)__instance).hand != null && (Object)(object)player != (Object)null && ((GameEntity)player).curBuffs.GetBuffContainer("reloadBuff") != null)
		{
			float multiplier = ((GameEntity)player).curBuffs.GetBuffContainer("reloadBuff").GetMultiplier();
			if (multiplier > 0f)
			{
				((HandItem)__instance).anim.speed = 1f + multiplier;
			}
		}
	}
}
[HarmonyPatch(typeof(HandItem), "RemoveItem")]
public class Patch_HandItem_RemoveItem
{
	[HarmonyPrefix]
	public static bool Prefix(HandItem __instance)
	{
		ENT_Player player = ENT_Player.GetPlayer();
		if ((Object)(object)player == (Object)null || ((GameEntity)player).curBuffs == null)
		{
			return true;
		}
		BuffContainer buffContainer = ((GameEntity)player).curBuffs.GetBuffContainer("itemRecycling");
		if (buffContainer == null)
		{
			return true;
		}
		float multiplier = buffContainer.GetMultiplier();
		Debug.Log((object)multiplier);
		if (Random.value < multiplier)
		{
			__instance.active = false;
			__instance.used = false;
			if ((Object)(object)__instance.anim != (Object)null)
			{
				__instance.anim.Rebind();
				__instance.anim.Update(0f);
			}
			HandItem_Food val = (HandItem_Food)(object)((__instance is HandItem_Food) ? __instance : null);
			if (val != null)
			{
				val.FinishEating();
			}
			return false;
		}
		return true;
	}
}
[HarmonyPatch(typeof(Item), "Destroy")]
public class Patch_Item_RemoveItem
{
	[HarmonyPrefix]
	public static bool Prefix(HandItem __instance)
	{
		ENT_Player player = ENT_Player.GetPlayer();
		if ((Object)(object)player == (Object)null || ((GameEntity)player).curBuffs == null)
		{
			return true;
		}
		BuffContainer buffContainer = ((GameEntity)player).curBuffs.GetBuffContainer("itemRecycling");
		if (buffContainer == null)
		{
			return true;
		}
		float num = Mathf.Clamp01(buffContainer.GetMultiplier());
		if (Random.value < num)
		{
			return false;
		}
		return true;
	}
}
public class PerkModule_FastReload : PerkModule
{
	public BuffContainer reloadBuff;

	private int counter = 0;

	public float reloadSpeedMultiplier = 0.2f;

	public override void Initialize(Perk p)
	{
		((PerkModule)this).Initialize(p);
		reloadBuff.id = "reloadBuff";
		ENT_Player player = ENT_Player.GetPlayer();
		if (((GameEntity)player).curBuffs.GetBuffContainer(reloadBuff.id) == null)
		{
			((GameEntity)player).curBuffs.AddBuff(reloadBuff);
		}
		((GameEntity)player).curBuffs.GetBuffContainer(reloadBuff.id).loseOverTime = false;
		((GameEntity)player).curBuffs.GetBuffContainer(reloadBuff.id).SetMultiplier(((GameEntity)player).curBuffs.GetBuffContainer(reloadBuff.id).GetMultiplier() + reloadSpeedMultiplier);
	}
}
public class PerkModule_JumpCombo : PerkModule
{
	public BuffContainer buff;

	public float buffMultiplier = 1f;

	[Header("Combo Settings")]
	public float buffAmount = 0f;

	public float buffMax = 3f;

	public float buffIncreasePerJump = 1f;

	public float buffDecayRate = 5f;

	private BuffContainer currentBuff;

	public override void Initialize(Perk p)
	{
		((PerkModule)this).Initialize(p);
		ENT_Player player = ENT_Player.GetPlayer();
		if (buff.id != "")
		{
			currentBuff = ((GameEntity)player).curBuffs.GetBuffContainer(buff.id);
		}
		if (currentBuff == null)
		{
			((GameEntity)player).curBuffs.AddBuff(buff);
			currentBuff = ((GameEntity)player).curBuffs.GetBuffContainer(buff.id);
		}
		player._OnJump = (Action)Delegate.Combine(player._OnJump, new Action(OnJump));
		currentBuff.SetMultiplier(0f);
		currentBuff.buffs[0].maxAmount = currentBuff.buffs[0].maxAmount * (float)player.GetPerk(p.id).stackAmount;
		Debug.Log((object)currentBuff.buffs[0].maxAmount);
	}

	public override void Update()
	{
		((PerkModule)this).Update();
		ENT_Player player = ENT_Player.GetPlayer();
		if (player.IsGrounded(false) || player.IsHanging())
		{
			buffAmount -= buffDecayRate * Time.deltaTime;
		}
		buffAmount = Mathf.Clamp(buffAmount, 0f, buffMax);
		currentBuff.SetMultiplier(buffAmount * buffMultiplier);
	}

	public void OnJump()
	{
		ENT_Player player = ENT_Player.GetPlayer();
		if (player.IsGrounded(true))
		{
			buffAmount += buffIncreasePerJump;
			buffAmount = Mathf.Clamp(buffAmount, 0f, buffMax);
		}
	}

	public override void OnDestroy(Perk p)
	{
		ENT_Player player = ENT_Player.GetPlayer();
		((GameEntity)player).curBuffs.RemoveBuffContainer(buff.id);
		player._OnJump = (Action)Delegate.Remove(player._OnJump, new Action(OnJump));
		((PerkModule)this).OnDestroy(p);
	}
}
public class PerkModule_Scavenging : PerkModule
{
	private int last_roaches = 0;

	public override void Initialize(Perk p)
	{
		((PerkModule)this).Initialize(p);
		Random random = new Random();
		if (random.Next(100) < 5)
		{
			Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Beans_Periphery", "").itemData.GetClone((Item)null, false));
		}
		else if (random.Next(100) < 20)
		{
			Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Food_Bar", "").itemData.GetClone((Item)null, false));
		}
		else if (random.Next(100) < 100)
		{
			Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Beans", "").itemData.GetClone((Item)null, false));
		}
		random = new Random();
		if (random.Next(100) < 1)
		{
			Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Beans_Periphery", "").itemData.GetClone((Item)null, false));
		}
		else if (random.Next(100) < 20)
		{
			Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Food_Bar", "").itemData.GetClone((Item)null, false));
		}
		else if (random.Next(100) < 100)
		{
			Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Beans", "").itemData.GetClone((Item)null, false));
		}
	}

	public override void Update()
	{
		((PerkModule)this).Update();
		int roaches = CL_GameManager.GetRoaches(false);
		if (roaches < last_roaches)
		{
			Random random = new Random();
			if (random.Next(100) < 1)
			{
				Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Beans_Periphery", "").itemData.GetClone((Item)null, false));
			}
			else if (random.Next(100) < 20)
			{
				Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Food_Bar", "").itemData.GetClone((Item)null, false));
			}
			else if (random.Next(100) < 100)
			{
				Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Beans", "").itemData.GetClone((Item)null, false));
			}
			random = new Random();
			if (random.Next(100) < 1)
			{
				Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Beans_Periphery", "").itemData.GetClone((Item)null, false));
			}
			else if (random.Next(100) < 20)
			{
				Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Food_Bar", "").itemData.GetClone((Item)null, false));
			}
			else if (random.Next(100) < 100)
			{
				Inventory.instance.AddItemToInventoryCenter(CL_AssetManager.GetItemObjectPrefab("Item_Beans", "").itemData.GetClone((Item)null, false));
			}
		}
		last_roaches = roaches;
	}

	public override void OnDestroy(Perk p)
	{
		((PerkModule)this).OnDestroy(p);
	}
}
public class PerkModule_WallJump : PerkModule
{
	public int maxWallJumps = 1;

	public float horizontalPushForce = 0.43f;

	public float verticalJumpForce = 0f;

	private int currentWallJumps = 0;

	private FieldInfo hasJumpedField;

	private bool jumpGranted = false;

	private Vector3 lastWallNormal = Vector3.zero;

	public override void Initialize(Perk p)
	{
		((PerkModule)this).Initialize(p);
		hasJumpedField = typeof(ENT_Player).GetField("temporaryExtraJumpsRemaining", BindingFlags.Instance | BindingFlags.NonPublic);
		ENT_Player player = ENT_Player.GetPlayer();
		player._OnJump = (Action)Delegate.Combine(player._OnJump, new Action(OnJump));
	}

	public override void Update()
	{
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Invalid comparison between Unknown and I4
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		((PerkModule)this).Update();
		ENT_Player player = ENT_Player.GetPlayer();
		if (player.IsHanging() || player.IsGrounded(false))
		{
			currentWallJumps = 0;
			jumpGranted = false;
			lastWallNormal = Vector3.zero;
		}
		if (player.IsGrounded(false) || player.IsHanging() || currentWallJumps >= maxWallJumps)
		{
			return;
		}
		if ((player.cCon.collisionFlags & 1) > 0)
		{
			Vector3 wallNormal = GetWallNormal(player);
			if (wallNormal != Vector3.zero)
			{
				lastWallNormal = wallNormal;
			}
			if (hasJumpedField != null && (int)hasJumpedField.GetValue(player) == 0 && !jumpGranted)
			{
				jumpGranted = true;
				hasJumpedField.SetValue(player, 1);
			}
		}
		else if (jumpGranted && hasJumpedField != null && (int)hasJumpedField.GetValue(player) == 1)
		{
			hasJumpedField.SetValue(player, 0);
			jumpGranted = false;
		}
	}

	public void OnJump()
	{
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: Unknown result type (might be due to invalid IL or missing references)
		//IL_0095: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		ENT_Player player = ENT_Player.GetPlayer();
		if (!player.IsGrounded(false) && jumpGranted && !player.IsHanging())
		{
			currentWallJumps++;
			if (lastWallNormal != Vector3.zero)
			{
				Vector3 val = new Vector3(lastWallNormal.x, 0f, lastWallNormal.z);
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				Vector3 val2 = normalized * horizontalPushForce + Vector3.up * verticalJumpForce;
				((GameEntity)player).AddForce(val2, "");
			}
		}
	}

	private Vector3 GetWallNormal(ENT_Player player)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0094: Unknown result type (might be due to invalid IL or missing references)
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0105: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0115: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_011f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0123: Unknown result type (might be due to invalid IL or missing references)
		//IL_0128: Unknown result type (might be due to invalid IL or missing references)
		//IL_0146: Unknown result type (might be due to invalid IL or missing references)
		//IL_0151: Unknown result type (might be due to invalid IL or missing references)
		//IL_0156: Unknown result type (might be due to invalid IL or missing references)
		//IL_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0169: Unknown result type (might be due to invalid IL or missing references)
		//IL_016e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0171: Unknown result type (might be due to invalid IL or missing references)
		//IL_0172: Unknown result type (might be due to invalid IL or missing references)
		//IL_019d: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0185: Unknown result type (might be due to invalid IL or missing references)
		//IL_018a: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)player.cCon == (Object)null)
		{
			return Vector3.zero;
		}
		Vector3[] obj = new Vector3[8]
		{
			((Component)player).transform.forward,
			-((Component)player).transform.forward,
			((Component)player).transform.right,
			-((Component)player).transform.right,
			default(Vector3),
			default(Vector3),
			default(Vector3),
			default(Vector3)
		};
		Vector3 val = ((Component)player).transform.forward + ((Component)player).transform.right;
		obj[4] = ((Vector3)(ref val)).normalized;
		val = ((Component)player).transform.forward - ((Component)player).transform.right;
		obj[5] = ((Vector3)(ref val)).normalized;
		val = -((Component)player).transform.forward + ((Component)player).transform.right;
		obj[6] = ((Vector3)(ref val)).normalized;
		val = -((Component)player).transform.forward - ((Component)player).transform.right;
		obj[7] = ((Vector3)(ref val)).normalized;
		Vector3[] array = (Vector3[])(object)obj;
		float num = player.cCon.radius + 0.3f;
		Vector3 val2 = ((Component)player).transform.position + player.cCon.center;
		Vector3[] array2 = array;
		RaycastHit val4 = default(RaycastHit);
		foreach (Vector3 val3 in array2)
		{
			if (Physics.Raycast(val2, val3, ref val4, num))
			{
				return ((RaycastHit)(ref val4)).normal;
			}
		}
		return Vector3.zero;
	}

	public override void OnDestroy(Perk p)
	{
		ENT_Player player = ENT_Player.GetPlayer();
		if ((Object)(object)player != (Object)null)
		{
			player._OnJump = (Action)Delegate.Remove(player._OnJump, new Action(OnJump));
		}
		((PerkModule)this).OnDestroy(p);
	}
}
namespace Severon.DropLogPerkMod;

[HarmonyPatch(typeof(App_PerkPage), "GenerateCards")]
public static class DropLogPerkInjectPatch
{
	private static readonly FieldInfo _cardsField = AccessTools.Field(typeof(App_PerkPage), "cards");

	private static Sprite _trainedSoldierCardSprite;

	private static Sprite _perkFrameAdvancedSprite;

	private static bool _spritesLoaded = false;

	[HarmonyPostfix]
	public static void Postfix(App_PerkPage __instance)
	{
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Invalid comparison between Unknown and I4
		//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)__instance == (Object)null) && _cardsField?.GetValue(__instance) is List<App_PerkPage_Card> list && (int)__instance.perkPageType <= 0)
		{
			LoadSpritesIfNeeded();
			Func<Perk>[] array = new Func<Perk>[7] { TrainedSoldier, ItemRecycling, Scavenger, FloatationDevice, RunningJump, AcrobaticLeap, WallBounce };
			Perk val = array[Random.Range(0, array.Length)]();
			if ((Object)(object)val == (Object)null)
			{
				val = WallBounce();
			}
			App_PerkPage_Card val2 = Object.Instantiate<App_PerkPage_Card>(__instance.cardAsset, __instance.cardParent.position, Quaternion.identity, __instance.cardParent);
			if (!((Object)(object)val2 == (Object)null))
			{
				val2.Initialize(__instance, val);
				list.Add(val2);
			}
		}
	}

	private static void LoadSpritesIfNeeded()
	{
		if (!_spritesLoaded)
		{
			_trainedSoldierCardSprite = LoadSpriteFromFile("TrainedSoldierCard.png");
			_perkFrameAdvancedSprite = LoadSpriteFromFile("PerkCard_Frame_Advanced.png");
			_spritesLoaded = true;
		}
	}

	private static Perk TrainedSoldier()
	{
		Perk val = ScriptableObject.CreateInstance<Perk>();
		val.id = "severon_soldier_perk";
		val.title = "Trained Soldier";
		val.description = "Your weapons are swung, fired, and reloaded faster.";
		val.cost = 5;
		val.perkCard = _trainedSoldierCardSprite;
		val.perkFrame = _perkFrameAdvancedSprite;
		val.modules = new List<PerkModule> { (PerkModule)(object)new PerkModule_FastReload() };
		return val;
	}

	private static Perk ItemRecycling()
	{
		Perk val = ScriptableObject.CreateInstance<Perk>();
		val.id = "severon_recycle_perk";
		val.title = "Item Recycling";
		val.description = "Items have a 30% chance to not be destroyed when they otherwise would be. (Includes food, rebar, ammo, etcetera)";
		val.cost = 8;
		val.modules = new List<PerkModule> { (PerkModule)(object)new PerkModule_ItemRecycling() };
		val.perkCard = _trainedSoldierCardSprite;
		val.perkFrame = _perkFrameAdvancedSprite;
		return val;
	}

	private static Perk Scavenger()
	{
		Perk val = ScriptableObject.CreateInstance<Perk>();
		val.id = "severon_scavenge_perk";
		val.title = "Promotional Deal";
		val.description = "Obtain two random food items when you spend roaches.";
		val.cost = 3;
		val.modules = new List<PerkModule> { (PerkModule)(object)new PerkModule_Scavenging() };
		val.perkCard = _trainedSoldierCardSprite;
		val.perkFrame = _perkFrameAdvancedSprite;
		return val;
	}

	private static Perk FloatationDevice()
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ad: Expected O, but got Unknown
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Expected O, but got Unknown
		//IL_00e5: Expected O, but got Unknown
		Perk val = ScriptableObject.CreateInstance<Perk>();
		val.id = "severon_floater_perk";
		val.title = "Floatation Device";
		val.description = "You have {%addGravity}% less gravity and {%addClimb}% Climbing Speed";
		val.cost = 12;
		val.buff = new BuffContainer
		{
			id = "severon_floater_buff",
			desc = "Floatation Device Effects",
			loseOverTime = false,
			loseRate = 0f,
			buffTime = 1f,
			multiplier = 1f,
			loseRateEffectedByPerks = false,
			buffs = new List<Buff>
			{
				new Buff
				{
					id = "addGravity",
					maxAmount = -0.25f,
					amount = 0f
				},
				new Buff
				{
					id = "addClimb",
					maxAmount = 1f,
					amount = 0f
				}
			}
		};
		val.perkCard = _trainedSoldierCardSprite;
		val.perkFrame = _perkFrameAdvancedSprite;
		return val;
	}

	private static Perk RunningJump()
	{
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Expected O, but got Unknown
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f1: Expected O, but got Unknown
		//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Expected O, but got Unknown
		//IL_0129: Expected O, but got Unknown
		Perk val = ScriptableObject.CreateInstance<Perk>();
		val.id = "severon_Running_jump_perk";
		val.title = "Running Jump";
		val.description = "The longer you sprint while grounded, the higher you jump.";
		val.cost = 10;
		PerkModule_PlayerStates val2 = new PerkModule_PlayerStates
		{
			playerState = (PlayerState)4,
			buffMultiplier = 1f,
			buffChangeRate = 0.4f,
			buffRaiseRateMult = 1f,
			buffLowerRateMult = 2f,
			persistTime = 0f,
			useHandEffectModule = false
		};
		val2.buff = new BuffContainer
		{
			id = "severon_momentum_jump_buff",
			desc = "Sprinting Jump Height Modifier",
			loseOverTime = false,
			loseRate = 0f,
			buffTime = 1f,
			multiplier = 0f,
			buffs = new List<Buff>
			{
				new Buff
				{
					id = "addJump",
					maxAmount = 2f,
					amount = 0f
				},
				new Buff
				{
					id = "addSpeed",
					maxAmount = 1f,
					amount = 0f
				}
			}
		};
		val.modules = new List<PerkModule> { (PerkModule)(object)val2 };
		val.perkCard = _trainedSoldierCardSprite;
		val.perkFrame = _perkFrameAdvancedSprite;
		return val;
	}

	private static Perk AcrobaticLeap()
	{
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_008e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Expected O, but got Unknown
		//IL_00ec: Expected O, but got Unknown
		Perk val = ScriptableObject.CreateInstance<Perk>();
		val.id = "severon_acrobatic_leap_perk";
		val.title = "Acrobatic Leap";
		val.description = "Chaining jumps without touching the ground or hanging grants progressively higher jumps. Loses momentum quickly on landing.";
		val.flavorText = "Whoop.. whup.. WAHOO!";
		val.cost = 5;
		PerkModule_JumpCombo item = new PerkModule_JumpCombo
		{
			buffMultiplier = 1f,
			buffMax = 3f,
			buffIncreasePerJump = 1f,
			buffDecayRate = 4f,
			buff = new BuffContainer
			{
				id = "severon_acrobatic_leap_buff",
				desc = "Jump Combo Momentum",
				loseOverTime = false,
				loseRate = 0f,
				buffTime = 1f,
				multiplier = 0f,
				buffs = new List<Buff>
				{
					new Buff
					{
						id = "addJump",
						maxAmount = 0.35f,
						amount = 0f
					}
				}
			}
		};
		val.modules = new List<PerkModule> { (PerkModule)(object)item };
		val.perkCard = _trainedSoldierCardSprite;
		val.perkFrame = _perkFrameAdvancedSprite;
		return val;
	}

	private static Perk WallBounce()
	{
		Perk val = ScriptableObject.CreateInstance<Perk>();
		val.id = "severon_wall_jump_perk";
		val.title = "Pike Shoes";
		val.description = "You can wall jump once before landing or climbing.";
		val.cost = 8;
		val.modules = new List<PerkModule> { (PerkModule)(object)new PerkModule_WallJump() };
		val.perkCard = _trainedSoldierCardSprite;
		val.perkFrame = _perkFrameAdvancedSprite;
		return val;
	}

	private static Sprite LoadSpriteFromFile(string fileName)
	{
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Expected O, but got Unknown
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
		string text = Path.Combine(directoryName, fileName);
		if (!File.Exists(text))
		{
			Debug.LogError((object)("[SeveronMod] Image file not found at: " + text));
			return null;
		}
		byte[] array = File.ReadAllBytes(text);
		Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false);
		if (ImageConversion.LoadImage(val, array))
		{
			Sprite val2 = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 100f);
			((Texture)val2.texture).filterMode = (FilterMode)0;
			return val2;
		}
		return null;
	}
}
public class PerkModule_LogOnDrop : PerkModule_HoldDrop
{
	public override void HoldDrop(Hand hand)
	{
		((PerkModule_HoldDrop)this).HoldDrop(hand);
		Debug.Log((object)"Drop button held");
	}
}
[BepInPlugin("com.severon.droplogperk", "Severon Drop Log Perk Mod", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
	private void Awake()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		Harmony val = new Harmony("com.severon.droplogperk");
		val.PatchAll();
		((BaseUnityPlugin)this).Logger.LogInfo((object)"Severon's Perk Mod loaded successfully, hell yeah.");
	}
}