anchor.diff:    AddTile('O', _('Portal'), $FF9999FF, teTownPortal, deDeep_Cave);
     AddTile('O', _('Portal'), $FF9999FF, teTownPortal, deBlood_Cave);
     AddTile('O', _('Portal'), $FF9999FF, teTownPortal, deDrom);
  +  // Magic Orb
  +  AddTile('O', _('Magic Orb'), $FF9999FF, teMagicOrb, deDark_Wood);
  +  AddTile('O', _('Magic Orb'), $FF8888FF, teMagicOrb, deGray_Cave);
  +  AddTile('O', _('Magic Orb'), $FF7777FF, teMagicOrb, deDeep_Cave);
  +  AddTile('O', _('Magic Orb'), $FF6666FF, teMagicOrb, deBlood_Cave);
  +  AddTile('O', _('Magic Orb'), $FF5555FF, teMagicOrb, deDrom);
  +  // Anvil
  +  AddTile('#', _('Anvil'), $FFAAAAAA, teAnvil, deDark_Wood);
  +  AddTile('#', _('Anvil'), $FFAAAAAA, teAnvil, deGray_Cave);
  +  AddTile('#', _('Anvil'), $FFAAAAAA, teAnvil, deDeep_Cave);
  +  AddTile('#', _('Anvil'), $FFAAAAAA, teAnvil, deBlood_Cave);
  +  AddTile('#', _('Anvil'), $FFAAAAAA, teAnvil, deDrom);
  +  // Horne
  +  AddTile('O', _('h'), $FFFF2222, teHorne, deDark_Wood);
  +  AddTile('O', _('h'), $FFFF2222, teHorne, deGray_Cave);
  +  AddTile('O', _('h'), $FFFF2222, teHorne, deDeep_Cave);
  +  AddTile('O', _('h'), $FFFF2222, teHorne, deBlood_Cave);
  +  AddTile('O', _('h'), $FFFF2222, teHorne, deDrom);
   end;
   
   procedure TMap.AddSpot(AX, AY: UInt; ASize: UInt; AZ: TMapEnum; ABaseTileEnum, ATileEnum: TTileEnum);
  
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);
  