anchor.diff:    S: TKMemoryStream;
     I: Integer;
   begin
  -  Assert(FileExists(aPath), 'units.dat not found at: ' + aPath);
  +  Assert(FileExists(aPath), 'unit.dat not found at: ' + aPath);
   
     S := TKMemoryStreamBinary.Create;
     try
  
positive.code: 
  { TKMUnitsDatCollection }
  constructor TKMResUnits.Create;
  var
    UT: TKMUnitType;
  begin
  
negative.code:   for UT := Low(TKMUnitType) to High(TKMUnitType) do
      fItems[UT] := TKMUnitSpec.Create(UT);
  
    fCRC := LoadUnitsDat(ExeDir + 'data' + PathDelim + 'defines' + PathDelim + 'unit.dat');
  
    // Overwrite units stats only if they are set for default values from original game
    // We don't want to update them, in case player manually edited unit.dat file
    if fItems[utHorseScout].fUnitDat.Sight = DEF_SCOUT_SIGHT then
      fItems[utHorseScout].fUnitDat.Sight := 13;
  
    if fItems[utHorseman].fUnitDat.Attack = DEF_HORSEMAN_ATTACK then
      fItems[utHorseman].fUnitDat.Attack := 35;
  
    if fItems[utPeasant].fUnitDat.AttackHorse = DEF_PEASANT_ATTACK_HORSE then
      fItems[utPeasant].fUnitDat.AttackHorse := 50;
  
    if fItems[utPikeman].fUnitDat.AttackHorse = DEF_PIKEMAN_ATTACK_HORSE then
      fItems[utPikeman].fUnitDat.AttackHorse := 60;
  
    // .Dat mounted speed is 39, but it makes 9 steps per diagonal tile after rounding, while we used to 8 steps
    if fItems[utHorseScout].fUnitDat.Speed = DEF_MOUNTED_SPEED then
      fItems[utHorseScout].fUnitDat.Speed := 40;
  
    if fItems[utCavalry].fUnitDat.Speed = DEF_MOUNTED_SPEED then
      fItems[utCavalry].fUnitDat.Speed := 40;
  
    if fItems[utHorseman].fUnitDat.Speed = DEF_MOUNTED_SPEED then
      fItems[utHorseman].fUnitDat.Speed := 40;
  
    for UT := UNIT_MIN to UNIT_MAX do
    begin
  