// public void FocusPsiDeficiency()
        // {
        //     if ((maximumPsiCharge() < 0) && !ParentObject.HasEffect("Psiburdening"))
        //     {
        //         ParentObject.ApplyEffect(new Psiburdening(9999));
        //     }
        //     else if ((maximumPsiCharge() > 0) && ParentObject.HasEffect("Psiburdening"))
        //     {
        //         ParentObject.RemoveEffect("Psiburdening");
        //     }
        // }

        // maximum psi an entity can hold
        public int maximumPsiCharge(int Modifier1 = 0)
        {
            try
            {
                Mutations       GetMutations  = ParentObject.GetPart <Mutations>();
                Psybrachiomancy BrachMutation = ParentObject.GetPart <Psybrachiomancy>();
                ArmCost    = (2 + BrachMutation.ArmCounter) + (2 * BrachMutation.ArmCounter) - 1;
                NewArmCost = ArmCost;
                int differenceSum = NewArmCost;
                if (GetMutations.HasMutation("Psybrachiomancy") && ArmCounter >= 1)
                {
                    Dictionary <string, Statistic> Stats = ParentObject.Statistics;
                    float Result = 1 + Stats["Ego"].Modifier;
                    Result += Stats["Toughness"].Modifier / 2f;
                    Result += (Stats["Level"].Value * 0.1f) * Stats["Ego"].Modifier;
                    if (Result < 0f)
                    {
                        return(0);
                    }
                    return((int)Math.Round(Result) - (differenceSum));
                }
                else
                {
                    Dictionary <string, Statistic> Stats = ParentObject.Statistics;
                    float Result = 1 + Stats["Ego"].Modifier;
                    Result += Stats["Toughness"].Modifier / 2f;
                    Result += (Stats["Level"].Value * 0.1f) * Stats["Ego"].Modifier;
                    if (Result < 0f)
                    {
                        return(0);
                    }
                    return((int)Math.Round(Result));
                }
            }
            catch
            {
                Dictionary <string, Statistic> Stats = ParentObject.Statistics;
                float Result = 1 + Stats["Ego"].Modifier;
                Result += Stats["Toughness"].Modifier / 2f;
                Result += (Stats["Level"].Value * 0.1f) * Stats["Ego"].Modifier;
                if (Result < 0f)
                {
                    return(0);
                }
                return((int)Math.Round(Result));
            }
        }
        public override bool FireEvent(Event E)
        {
            if (E.ID == "CommandManifestLimb")
            {
                ArmCost    = (2 + ArmCounter) + (2 * ArmCounter) - 1;
                NewArmCost = ArmCost;
                if (NewArmCost <= focusPsiCurrentMaximumCharges)
                {
                    UpdateCharges();
                    ArmCounter += 1;
                }
                else if (NewArmCost > focusPsiCurrentMaximumCharges)
                {
                    UpdateCharges();
                    return(true);
                }
            }

            if (E.ID == "CommandDismissLimb")
            {
                if (ArmCounter >= 1)
                {
                    ArmCounter -= 1;
                }
                UpdateCharges();
            }

            if (E.ID == "AIGetPassiveMutationList")
            {
                // AddPlayerMessage("Hey prepare, to eat my combustion blast.");
                // AddPlayerMessage($"Currentcharges: {focusPsiCurrentCharges}");
                // AddPlayerMessage($"MaximumPsi: {maximumPsiCharge()}");
                if (focusPsiCurrentCharges < focusPsiCurrentMaximumCharges / 2 && !HandlingCharging())
                {
                    E.AddAICommand("CommandFocusPsi");
                    // AddPlayerMessage($"Currentcharges: {focusPsiCurrentCharges}");
                    AddPlayerMessage("Something is gathering psionic energy ...");
                }
                else if (focusPsiCurrentCharges >= focusPsiCurrentMaximumCharges - 1 && HandlingCharging())
                {
                    E.AddAICommand("CommandFocusPsi");
                    // AddPlayerMessage($"Currentcharges: {focusPsiCurrentCharges}");
                    AddPlayerMessage("Something is gathering psionic energy ...");
                }
            }

            if (E.ID == "CommandFocusPsi")
            {
                if (!base.IsMyActivatedAbilityToggledOn(this.PsiFocusActivatedAbilityID))
                {
                    base.ToggleMyActivatedAbility(this.PsiFocusActivatedAbilityID);
                    string verb1   = "begin to gather";
                    string extra1  = "psionic energy";
                    string TermiP1 = ".";
                    XDidY(ParentObject, verb1, extra1, TermiP1);
                    isCharging = true;
                }
                else
                {
                    base.ToggleMyActivatedAbility(this.PsiFocusActivatedAbilityID);
                    string verb2     = "stop";
                    string extra2    = "gathering psi energy";
                    string termiPun2 = ".";
                    XDidY(ParentObject, verb2, extra2, termiPun2);
                    isCharging = false;
                    UseEnergy(1000);
                }
                UpdateCharges();
                return(false);
            }

            else if (E.ID == "EndTurn")
            {
                Psybrachiomancy BrachMutation     = ParentObject.GetPart <Psybrachiomancy>();
                var             PsiburdeningCatch = ParentObject.GetEffect <Psiburdening>();
                if (base.IsMyActivatedAbilityToggledOn(this.PsiFocusActivatedAbilityID) && (focusPsiCurrentCharges < focusPsiCurrentMaximumCharges))
                {
                    int chanceforpsi = (ParentObject.StatMod("Willpower") * 3) + PsiCounter;
                    if (Stat.Random(1, 100) < chanceforpsi)
                    {
                        focusPsiCurrentCharges++;
                        DidX("charge", "psi energy", ".", ColorAsGoodFor: ParentObject);
                    }
                    else
                    {
                        PsiCounter++;
                    }
                    turnsTilPsiDecay++;
                }
                else if (ParentObject.HasPart("Psybrachiomancy") && BrachMutation.ArmCounter <= Math.Min(1, ParentObject.StatMod("Willpower")) && ParentObject.HasEffect("Psiburdening"))
                {
                    ParentObject.RemoveEffect(PsiburdeningCatch);
                }

                UpdateCharges();
            }

            else if (E.ID == "PsionicDecay")
            {
                if (!(ParentObject.MakeSave("Willpower", effectiveSaveTarget, null, null, "Psionic Decay")))
                {
                    focusPsiCurrentCharges -= E.GetIntParameter("Amount", (int)0); // Current default value is zero, change default value to something more appropriate later
                }

                UpdateCharges();
            }

            else if (E.ID == "FireEventDebuffSystem")
            {
                Psybrachiomancy BrachMutation = ParentObject.GetPart <Psybrachiomancy>();
                if (BrachMutation.ArmCounter > ParentObject.StatMod("Willpower") + BrachMutation.Level / 2 && !ParentObject.HasEffect("Psiburdening"))
                {
                    ParentObject.ApplyEffect(new Psiburdening((Stat.Random(10, 20) - ParentObject.StatMod("Willpower")) * Stat.Random(50, 125)));
                }
                else if (BrachMutation.ArmCounter < ParentObject.StatMod("Willpower") && ParentObject.HasEffect("Psiburdening"))
                {
                    ParentObject.RemoveEffect("Psiburdening");
                }
            }

            return(base.FireEvent(E));
        }