anchor.diff:      constructor Create(AOwner: TfMain); reintroduce;
       destructor Destroy; override;
       procedure DropOnMap; virtual; abstract;
  -    procedure DropOnPalette; virtual;
       procedure Render(AState: TLocalState; x,y: integer); virtual; abstract;
       procedure RenderOverlay(AState: TLocalState; x,y: integer); virtual; abstract;
     end;
  
positive.code: procedure TObjectDragProxy.DropOnMap;
  begin
    FOwner.MoveOrCopyObject(FDraggingObject,FOwner.FMap.CurrentLevelIndex,FOwner.FMouseTileX+FShiftX,FOwner.FMouseTileY+FShiftY);
  end;
  
  procedure TObjectDragProxy.DropOnPalette;
  begin
    FOwner.ClearSelection;
    FOwner.DeleteObject(FDraggingObject);
    FDraggingObject := nil;
  end;
  
  procedure TObjectDragProxy.Render(AState: TLocalState; x, y: integer);
  
negative.code:   public
      constructor Create(AOwner: TfMain;ADraggingObject: TMapObject; CurrentX, CurrentY: integer);
      procedure DropOnMap; override;
      procedure Render(AState: TLocalState; x, y: integer); override;
      procedure RenderOverlay(AState: TLocalState; x,y: integer); override;
    end;
  