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); }
public override int CalcDamage(Wound wound, Model target, ShootingParams shootingParams) { if (wound.Mortal) { return(Dice.Sum(3, 1)); } return(base.CalcDamage(wound, target, shootingParams)); }
public override Impact ImpactTest(Model attacker, ShootingParams shootingParams) { return(new Impact() { Attacker = attacker, Weapon = this, Impacted = true, }); }
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)); }
public override Impact ImpactTest(Model attacker, ShootingParams shootingParams) { var impact = base.ImpactTest(attacker, shootingParams); if (impact.CriticalFail) { impact.BearerDamage = BearerDamageTypes.FirstWoundOnly; } return(impact); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }