anchor.diff:  
   
   function TKMUnitSpec.SupportsAction(aAct: TKMUnitActionType): Boolean;
  -const UnitSupportedActions: array [TKMUnitType] of TKMUnitActionTypeSet = (
  +const
  +  UnitSupportedActions: array [TKMUnitType] of TKMUnitActionTypeSet = (
       [], [], //None, Any
       [uaWalk, uaDie, uaEat, uaWalkArm], //Serf
       [uaWalk, uaWork, uaDie, uaWork1, uaEat..uaWalkTool2],
  
positive.code:   ft: textfile;
    ii: TKMUnitType;
  begin
      AssignFile(ft,aPath); rewrite(ft);
      writeln(ft,'Name;HitPoints;Attack;AttackHorse;Defence;Speed;Sight;');
      for ii:=Low(TKMUnitType) to High(TKMUnitType) do
      if Items[ii].IsValid then
      begin
        write(ft,Items[ii].GUIName+';');
        write(ft,inttostr(Items[ii].HitPoints)+';');
        write(ft,inttostr(Items[ii].Attack)+';');
        write(ft,inttostr(Items[ii].AttackHorse)+';');
        //write(ft,inttostr(Items[ii].x4)+';');
        write(ft,inttostr(Items[ii].Defence)+';');
        write(ft,floattostr(Items[ii].Speed)+';');
        //write(ft,inttostr(Items[ii].x7)+';');
        write(ft,inttostr(Items[ii].Sight)+';');
        //write(ft,inttostr(Items[ii].x9)+';');
        //write(ft,inttostr(Items[ii].x10)+';');
        //write(ft,inttostr(Items[ii].CanWalkOut)+';');
        //write(ft,inttostr(Items[ii].x11)+';');
        //for kk:=1 to 18 do
        //  write(ft,inttostr(UnitSprite2[ii,kk])+';');
        writeln(ft);
      end;
      closefile(ft);
  
      {AssignFile(ft,ExeDir+'Units.txt'); rewrite(ft);
      for ii:=Low(TKMUnitType) to High(TKMUnitType) do
      if UnitsDat[ii].IsValid then
      begin
        writeln(ft);
        writeln(ft);
        writeln(ft,'NewUnit'+inttostr(ii));
        for kk:=1 to 14 do
        for hh:=1 to 8 do
        //  if UnitSprite[ii].Act[kk].Dir[hh].Step[1]>0 then
            begin
              write(ft,inttostr(kk)+'.'+inttostr(hh)+#9);
              for jj:=1 to 30 do
              if UnitSprite[ii].Act[kk].Dir[hh].Step[jj]>0 then //write(ft,'#');
              write(ft,inttostr(UnitSprite[ii].Act[kk].Dir[hh].Step[jj])+'. ');
              write(ft,inttostr(UnitSprite[ii].Act[kk].Dir[hh].Count)+' ');
              write(ft,inttostr(UnitSprite[ii].Act[kk].Dir[hh].MoveX)+' ');
              write(ft,inttostr(UnitSprite[ii].Act[kk].Dir[hh].MoveY)+' ');
              writeln(ft);
            end;
      end;
      closefile(ft);}
  end;
  
  
  
negative.code: 
    //and the corresponing unit that will be created (matches KaM behavior)
    UNIT_TYPE_TO_OLD_ID: array[TKMUnitType] of integer = (
      -1, -1, //utNone, utAny
      0,1,2,3,4,5,6,7,8,9,10,11,12,13, //Citizens
      14,15,16,17,18,19,20,21,22,23, //Warriors
      -1,-1,-1,-1, {-1,-1,} //TPR warriors (can't be placed with SET_UNIT)
      24,25,26,27,28,29,30,31); //Animals
  
    //This is a map of the valid values for !SET_GROUP, and the corresponing unit that will be created (matches KaM behavior)
    UNIT_ID_TO_TYPE: array[0..40] of TKMUnitType = (
  