anchor.diff:  
   type
     TTileEnum = (teDefaultFloor, teDefaultWall, teRock, teFloor1, teFloor2, teFloor3, teUpStairs, teDnStairs, teWater, teStoneWall, teWoodenWall,
  -    teStoneFloor, teWoodenFloor, teDoor, teGate, tePortal, teTownPortal);
  +    teStoneFloor, teWoodenFloor, teDoor, teGate, tePortal, teTownPortal, teMagicOrb, teHorne, teAnvil);
   
   const
     StopTiles = [teDefaultWall, teStoneWall, teWoodenWall];
  -  FreeTiles = [teDefaultFloor, teRock, teFloor1, teFloor2, teFloor3, teUpStairs, teDnStairs, teWater];
  -  VillageTiles = [teStoneWall, teWoodenWall, teStoneFloor, teWoodenFloor, teDoor, teGate];
  +  FreeTiles = [teDefaultFloor, teRock, teFloor1, teFloor2, teFloor3, teUpStairs, teDnStairs, teWater, teMagicOrb];
  +  VillageTiles = [teStoneWall, teWoodenWall, teStoneFloor, teWoodenFloor, teDoor, teGate, teMagicOrb, teHorne, teAnvil];
     SpawnTiles = [teDefaultFloor, teRock, teFloor1, teFloor2, teFloor3, teWater];
   
   var
  
positive.code:       end;
    end;
  
    procedure AddNPC(AX, AY: UInt);
    var
      I: UInt;
    begin
      repeat
        I := Math.RandomRange(0, 7);
      until not BNPC[I];
      Mobs.Add(Self.Current, AX, AY, fcNPC, Ord(mbEldan_2the_magic_trader3) + I);
      BNPC[I] := True;
    end;
  
    procedure AddHouse(AX, AY, CX, CY, D: UInt; AV: Boolean; F: Boolean);
    var
      W, H: UInt;
      IsDoor: Boolean;
  
      procedure AddDoor(X, Y: UInt);
      begin
        if IsDoor then
          Exit;
        SetTileEnum(X, Y, Z, teDoor);
        IsDoor := True;
        AddNPC(AX, AY);
      end;
  
    begin
      IsDoor := False;
      W := IfThen(AV, 8, RandomRange(2, 5) * 2);
      H := IfThen(AV, 8, RandomRange(2, 5) * 2);
      AddRect(AX, AY, W, H, teWoodenFloor, teWoodenWall);
  
negative.code:     begin
        case D of
          4:
            AddObjs(0, -(H div 2), 0, (H div 2) - 1);
          5:
            AddObjs(H div 2, 0, -(H div 2) + 1, 0);
          6:
            AddObjs(-(H div 2), 0, (H div 2) - 1, 0);
          7:
            AddObjs(0, H div 2, 0, -(H div 2) + 1);
        end;
        Exit;
      end;
      if F then
        if (AX <= CX) then
          AddObjs(W div 2, 0, -(W div 2) + 1, 0)
        else
          AddObjs(-(W div 2), 0, (W div 2) - 1, 0)
      else if (AY <= CY) then
        AddObjs(0, H div 2, 0, -(H div 2) + 1)
      else
        AddObjs(0, -(H div 2), 0, (H div 2) - 1);
    end;
  
    procedure AddVillage(AX, AY: UInt);
  