Пример #1
0
        public override List <Shoot> GenerateShoots(ShootingParams shootingParams)
        {
            var attackingSoldiers = this.Soldiers.Where(s => s.W > 0);

            int lootaShoots = 0;
            var lootas      = attackingSoldiers.Where(s => s.Name == "Loota");

            if (lootas.Any())
            {
                //Generate fixed impacts per Loota
                lootaShoots = lootas.First().Weapons[0].GenerateShoots(shootingParams.Distance);
            }

            List <Shoot> shoots = new List <Shoot>();

            foreach (var soldier in attackingSoldiers)
            {
                if (soldier.Name != "Loota")
                {
                    shoots.AddRange(GenerateShoots(soldier, shootingParams));
                }
                else
                {
                    shoots.Add(new Shoot()
                    {
                        Attacker = soldier,
                        Weapon   = soldier.Weapons[0],
                        Attacks  = lootaShoots,
                    });
                }
            }

            return(shoots);
        }
Пример #2
0
            public override int CalcDamage(Wound wound, Model target, ShootingParams shootingParams)
            {
                if (wound.Mortal)
                {
                    return(Dice.Sum(3, 1));
                }

                return(base.CalcDamage(wound, target, shootingParams));
            }
Пример #3
0
 public override Impact ImpactTest(Model attacker, ShootingParams shootingParams)
 {
     return(new Impact()
     {
         Attacker = attacker,
         Weapon = this,
         Impacted = true,
     });
 }
Пример #4
0
            public override int CalcDamage(Wound wound, Model target, ShootingParams shootingParams)
            {
                if (target.Flyer)
                {
                    //Two damage dices versus flyers
                    return(CalcDamage(shootingParams, Damage * 2, DamageDice, DiceModes.Max));
                }

                return(CalcDamage(shootingParams, Damage, DamageDice, DiceModes.Max));
            }
Пример #5
0
            public override Impact ImpactTest(Model attacker, ShootingParams shootingParams)
            {
                var impact = base.ImpactTest(attacker, shootingParams);

                if (impact.CriticalFail)
                {
                    impact.BearerDamage = BearerDamageTypes.FirstWoundOnly;
                }

                return(impact);
            }
Пример #6
0
        public override List <Impact> ResolveShoots(List <Shoot> shoots, ShootingParams shootingParams)
        {
            if (Soldiers.Count(s => s.W > 0) >= 20)
            {
                var nShootingParams = shootingParams.Clone();
                nShootingParams.ShootingModifiers++;

                return(base.ResolveShoots(shoots, nShootingParams));
            }

            return(base.ResolveShoots(shoots, shootingParams));
        }
Пример #7
0
        public override ShootingPhaseStats ShootingPhase(Unit target, ShootingParams shootingParams)
        {
            var stats = base.ShootingPhase(target, shootingParams);

            //Periscope
            if (target.Soldiers.Any(s => s.W > 0))
            {
                stats += base.ShootingPhase(target, shootingParams);
            }

            return(stats);
        }
Пример #8
0
            public override List <Wound> WoundTest(int t, ShootingParams shootingParams)
            {
                var wounds = base.WoundTest(t, shootingParams);

                if (wounds.Count == 0)
                {
                    //Repeats all
                    return(base.WoundTest(t, shootingParams));
                }

                return(wounds);
            }
Пример #9
0
            public override Impact ImpactTest(Model attacker, ShootingParams shootingParams)
            {
                var impact = base.ImpactTest(attacker, shootingParams);

                if (currentStrength >= 11)
                {
                    impact.BearerDamage = BearerDamageTypes.FirstWoundOnly;
                    impact.Mortal       = true;
                }

                return(impact);
            }
Пример #10
0
            public override List <Wound> WoundTest(int t, ShootingParams shootingParams)
            {
                List <Wound> wounds = new List <Wound>();

                int s = CalcStrength();

                if (s >= t)
                {
                    wounds.Add(new Wound(this, 0, false));
                }

                return(wounds);
            }
Пример #11
0
            public override List <Wound> WoundTest(int t, ShootingParams shootingParams)
            {
                List <Wound> wounds = new List <Wound>();

                if (currentStrength >= 11)
                {
                    wounds.Add(new Wound(this, 0, true));
                }

                wounds.AddRange(base.WoundTest(t, shootingParams));

                return(wounds);
            }
Пример #12
0
        public override ShootingPhaseStats ShootingPhase(Unit target, ShootingParams shootingParams)
        {
            //One reroll per alive ammo runt
            shootingParams.ShootingRerolls = this.Soldiers.Count(c => c.W > 0 && c.Name == "Ammo Runt");
            var stats = base.ShootingPhase(target, shootingParams);

            int reShoot = Dice.D6();

            if (reShoot == 6)
            {
                //One reroll per alive ammo runt
                shootingParams.ShootingRerolls = this.Soldiers.Count(c => c.W > 0 && c.Name == "Ammo Runt");
                stats += base.ShootingPhase(target, shootingParams);
            }

            return(stats);
        }