anchor.diff:    //Only hit unit on step 5
     if Step = 5 then
     begin
  -    DirectionModifier := GetDirModifier(KMUnit.Direction,fOpponent.Direction);
  -    Damage := ((UnitStat[byte(KMUnit.GetUnitType)].Attack+(UnitStat[byte(KMUnit.GetUnitType)].AttackHorseBonus)*byte(UnitGroups[byte(fOpponent.GetUnitType)] = gt_Mounted)) * DirectionModifier)
  -              div max(UnitStat[byte(fOpponent.GetUnitType)].Defence,1); //Not needed, but animals have 0 defence
  +    ut := byte(KMUnit.GetUnitType);
  +    ot := byte(fOpponent.GetUnitType);
  +    Damage := UnitStat[ut].Attack; //Base damage
  +    if InRange(ot, low(UnitGroups), high(UnitGroups)) then
  +      Damage := Damage + UnitStat[ut].AttackHorseBonus * byte(UnitGroups[ot] = gt_Mounted); //Add Anti-horse bonus
  +    Damage := Damage * GetDirModifier(KMUnit.Direction,fOpponent.Direction); //Direction modifier
  +    Damage := Damage div max(UnitStat[ot].Defence,1); //Not needed, but animals have 0 defence
   
       IsHit := (Damage >= Random(101)); //0..100
   
  
positive.code:                fOpponent.IsDead; //unlikely, since unit is already performed TTaskDie
    end;
  
  var Cycle,Step:byte; DirectionModifier:byte; IsHit: boolean; Damage: word;
  begin
    DoEnd := CheckDoEnd;
    if DoEnd then
  
negative.code: 
  
  implementation
  uses KM_PlayersCollection, KM_Terrain, KM_Sound, KM_Units_Warrior;
  
  
  { TUnitActionFight }
  