using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using DiskCardGame; using HarmonyLib; using InscryptionAPI.Card; using InscryptionAPI.Helpers; using OLD_SA.SmallSigils; 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("OldSa_Bloody_Gear_sigil")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("OldSa_Bloody_Gear_sigil")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("072ebb55-b632-4135-8de6-6cafa189d64a")] [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 OLD_SA.BloodyGear; public static class BloodyGearAPI { public static FullAbility ability; public static void Init() { AbilityInfo val = ScriptableObject.CreateInstance(); ((Object)val).name = "Bloody Gear"; val.rulebookName = "Bloody Gear"; val.metaCategories = new List { (AbilityMetaCategory)0, (AbilityMetaCategory)1 }; val.powerLevel = 4; val.opponentUsable = false; Texture imageAsTexture = (Texture)(object)TextureHelper.GetImageAsTexture("OldSa_Bloody_Gear.png", (FilterMode)0); FieldInfo field = typeof(AbilityInfo).GetField("rulebookDescription", BindingFlags.Instance | BindingFlags.NonPublic); if (field != null) { field.SetValue(val, "When [creature] deals damage, give the struck creature 1 Blood. When it dies, create a Flesh in your hand."); } ability = AbilityManager.Add("OLD_SA", val, typeof(BloodyGearBehaviour), imageAsTexture); } } public class BloodyGearBehaviour : AbilityBehaviour { private readonly HashSet BloodTargets = new HashSet(); public override Ability Ability => BloodyGearAPI.ability.Id; public override bool RespondsToDealDamage(int amount, PlayableCard target) { if ((Object)(object)((AbilityBehaviour)this).Card == (Object)null) { return false; } if (amount <= 0) { return false; } if ((Object)(object)target == (Object)null) { return false; } if (target.Dead) { return false; } return true; } public override IEnumerator OnDealDamage(int amount, PlayableCard target) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if (!((Object)(object)((AbilityBehaviour)this).Card == (Object)null) && !((Object)(object)target == (Object)null) && !target.Dead) { SmallSigilManager.AddStacks(target, (SmallSigilType)3, 1); BloodTargets.Add(target); yield return (object)new WaitForSeconds(0.15f); } } public override bool RespondsToOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer) { if ((Object)(object)((AbilityBehaviour)this).Card == (Object)null) { return false; } if ((Object)(object)card == (Object)null) { return false; } return BloodTargets.Contains(card); } public override IEnumerator OnOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((Object)(object)((AbilityBehaviour)this).Card == (Object)null || (Object)(object)card == (Object)null || !BloodTargets.Contains(card)) { yield break; } int bloodStacks = SmallSigilManager.GetStacks(card, (SmallSigilType)3); List inheritedTribes = null; if ((Object)(object)((Card)card).Info != (Object)null && ((Card)card).Info.tribes != null) { inheritedTribes = new List(((Card)card).Info.tribes); } BloodTargets.Remove(card); if (bloodStacks <= 0) { yield break; } CardInfo flesh = CardLoader.GetCardByName("OLD_SA_BROKEN_FLESH"); if ((Object)(object)flesh == (Object)null) { yield break; } object obj = flesh.Clone(); CardInfo clone = (CardInfo)((obj is CardInfo) ? obj : null); if ((Object)(object)clone == (Object)null) { yield break; } CardModificationInfo statMod = new CardModificationInfo(); statMod.attackAdjustment = bloodStacks - clone.Attack; statMod.healthAdjustment = bloodStacks - clone.Health; clone.Mods.Add(statMod); if (inheritedTribes != null) { clone.tribes = new List(inheritedTribes); } if ((Object)(object)((Card)card).Info != (Object)null && ((Card)card).Info.Mods != null) { foreach (CardModificationInfo originalMod in ((Card)card).Info.Mods) { if (originalMod != null) { CardModificationInfo copiedMod = (CardModificationInfo)originalMod.Clone(); if (copiedMod != null) { clone.Mods.Add(copiedMod); } } } } if ((int)Singleton.Instance.CurrentView > 0) { yield return (object)new WaitForSeconds(0.2f); Singleton.Instance.SwitchToView((View)0, false, false); yield return (object)new WaitForSeconds(0.2f); } yield return Singleton.Instance.SpawnCardToHand(clone, (List)null, 0.25f, (Action)null); yield return (object)new WaitForSeconds(0.45f); yield return ((AbilityBehaviour)this).LearnAbility(0.1f); } } [BepInPlugin("OLD_SA.Bloody_Gear_sigil", "OldSa Bloody Gear Sigil", "1.0.0")] public class BloodyGearPlugin : BaseUnityPlugin { public const string PluginGuid = "OLD_SA.Bloody_Gear_sigil"; public const string PluginName = "OldSa Bloody Gear Sigil"; public const string PluginVersion = "1.0.0"; private void Awake() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown BloodyGearAPI.Init(); Harmony val = new Harmony("OLD_SA.Bloody_Gear_sigil"); val.PatchAll(Assembly.GetExecutingAssembly()); } }