public static Func <AttackModifier> GetCommonModifierFactor(string factorId)
        {
            switch (factorId)
            {
            case "direction":
                return(() => {
                    AttackDirection dir = Combat.HitLocation.GetAttackDirection(AttackPos, Target);
                    if (Target is Mech mech)
                    {
                        if (mech.IsProne)
                        {
                            return new AttackModifier();           // Prone is another modifier
                        }
                        if (dir == AttackDirection.FromFront)
                        {
                            return new AttackModifier("FRONT ATTACK", Settings.ToHitMechFromFront);
                        }
                        if (dir == AttackDirection.FromLeft || dir == AttackDirection.FromRight)
                        {
                            return new AttackModifier("SIDE ATTACK", Settings.ToHitMechFromSide);
                        }
                        if (dir == AttackDirection.FromBack)
                        {
                            return new AttackModifier("REAR ATTACK", Settings.ToHitMechFromRear);
                        }
                    }
                    else if (Target is Vehicle vehicle)
                    {
                        if (dir == AttackDirection.FromFront)
                        {
                            return new AttackModifier("FRONT ATTACK", Settings.ToHitVehicleFromFront);
                        }
                        if (dir == AttackDirection.FromLeft || dir == AttackDirection.FromRight)
                        {
                            return new AttackModifier("SIDE ATTACK", Settings.ToHitVehicleFromSide);
                        }
                        if (dir == AttackDirection.FromBack)
                        {
                            return new AttackModifier("REAR ATTACK", Settings.ToHitVehicleFromRear);
                        }
                    }
                    return new AttackModifier();
                });

            case "inspired":
                return(() => new AttackModifier("INSPIRED", Math.Min(0f, Hit.GetAttackerAccuracyModifier(Attacker))));

            case "jumped":
                return(() => new AttackModifier("JUMPED", RollModifier.GetJumpedModifier(Attacker)));

            case "selfheat":
                return(() => new AttackModifier("OVERHEAT", Hit.GetHeatModifier(Attacker)));

            case "selfstoodup":
                return(() => new AttackModifier("STOOD UP", Hit.GetStoodUpModifier(Attacker)));

            case "selfterrain":
                return(() => new AttackModifier("TERRAIN", Hit.GetSelfTerrainModifier(AttackPos, false)));

            case "selfterrainmelee":
                return(() => new AttackModifier("TERRAIN", Hit.GetSelfTerrainModifier(AttackPos, true)));

            case "sensorimpaired":
                return(() => new AttackModifier("SENSOR IMPAIRED", Math.Max(0f, Hit.GetAttackerAccuracyModifier(Attacker))));

            case "sprint":
                return(() => new AttackModifier("SPRINTED", Hit.GetSelfSprintedModifier(Attacker)));

            case "targeteffect":
                return(() => new AttackModifier("TARGET EFFECTS", Hit.GetEnemyEffectModifier(Target)));

            case "targetsize":
                return(() => new AttackModifier("TARGET SIZE", Hit.GetTargetSizeModifier(Target)));

            case "targetterrain":
                return(() => new AttackModifier("TARGET TERRAIN", Hit.GetTargetTerrainModifier(Target, TargetPos, false)));

            case "targetterrainmelee":
                return(() => new AttackModifier("TARGET TERRAIN", Hit.GetTargetTerrainModifier(Target, TargetPos, true)));

            case "walked":
                return(() => new AttackModifier("MOVED", Hit.GetSelfSpeedModifier(Attacker)));

            case "weaponaccuracy":
                return(() => new AttackModifier("WEAPON ACCURACY", Hit.GetWeaponAccuracyModifier(Attacker, AttackWeapon)));
            }
            return(null);
        }