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 list && (int)__instance.perkPageType <= 0) { LoadSpritesIfNeeded(); Func[] array = new Func[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(__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(); 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)(object)new PerkModule_FastReload() }; return val; } private static Perk ItemRecycling() { Perk val = ScriptableObject.CreateInstance(); 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)(object)new PerkModule_ItemRecycling() }; val.perkCard = _trainedSoldierCardSprite; val.perkFrame = _perkFrameAdvancedSprite; return val; } private static Perk Scavenger() { Perk val = ScriptableObject.CreateInstance(); 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)(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(); 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 { 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(); 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 { new Buff { id = "addJump", maxAmount = 2f, amount = 0f }, new Buff { id = "addSpeed", maxAmount = 1f, amount = 0f } } }; val.modules = new List { (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(); 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 { new Buff { id = "addJump", maxAmount = 0.35f, amount = 0f } } } }; val.modules = new List { (PerkModule)(object)item }; val.perkCard = _trainedSoldierCardSprite; val.perkFrame = _perkFrameAdvancedSprite; return val; } private static Perk WallBounce() { Perk val = ScriptableObject.CreateInstance(); 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)(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."); } }