anchor.diff:  procedure TKMUnitWarrior.SyncLoad;
   begin
     inherited;
  +
     fGroup := TKMUnitGroup(  gHands.GetGroupByUID( Cardinal(fGroup) )  );
     fOrderTargetUnit := TKMUnitWarrior(gHands.GetUnitByUID(cardinal(fOrderTargetUnit)));
     fOrderTargetHouse := gHands.GetHouseByUID(cardinal(fOrderTargetHouse));
  
positive.code: 
  procedure TKMUnitWarrior.Kill(aFrom: TKMHandID; aShowAnimation, aForceDelay: Boolean);
  var
    AlreadyDeadOrDying: Boolean;
  begin
    AlreadyDeadOrDying := IsDeadOrDying; //Inherited will kill the unit
    inherited;
  
    //After inherited so script events can still check which group the warrior is from
    if not AlreadyDeadOrDying then
    begin
      ClearOrderTarget; //This ensures that pointer usage tracking is reset
  
  
negative.code: function TKMUnitWarrior.FindLinkUnit(const aLoc: TKMPoint): TKMUnitWarrior;
  var
    I: Integer;
    foundUnits: TList;
    U: TKMUnit;
    best, L: Single;
  begin
    Result := nil;
    best := MaxSingle;
  
    foundUnits := TList.Create;
    gHands[Owner].Units.GetUnitsInRect(KMRect(aLoc.X - LINK_RADIUS,
                                              aLoc.Y - LINK_RADIUS,
                                              aLoc.X + LINK_RADIUS,
                                              aLoc.Y + LINK_RADIUS),
                                       foundUnits);
  
    for I := 0 to foundUnits.Count - 1 do
    begin
      U := foundUnits[I];
      if (U is TKMUnitWarrior)
        and (U <> Self)
        and (UNIT_TO_GROUP_TYPE[U.UnitType] = UNIT_TO_GROUP_TYPE[fType]) //They must be the same group type
        and TKMUnitWarrior(U).InAGroup then //Check if warrior belongs to some Group
      begin
        L := KMLength(aLoc, U.Position);
        if (L < best) then
        begin
          best := L;
          Result := TKMUnitWarrior(U);
        end;
      end;
    end;
  
    foundUnits.Free;
  end;
  
  
  