anchor.diff:  //* Version: 7000+
   //* Sets whether player A shares his beacons with player B.
   //* Sharing can still only happen between allied players, but this command lets you disable allies from sharing.
  -//* aCompliment: Both ways
  -procedure TKMScriptActions.PlayerShareBeacons(aPlayer1, aPlayer2: Word; aCompliment, aShare: Boolean);
  +//* aBothWays: share in both ways
  +procedure TKMScriptActions.PlayerShareBeacons(aPlayer1, aPlayer2: Word; aBothWays, aShare: Boolean);
   begin
     try
       if  InRange(aPlayer1, 0, gHands.Count - 1)
  
positive.code: 
  
  //* Version: 7000+
  //* Sets array of tiles info, with possible change of 
  //* 1. terrain (tile type), rotation (same as for MapTileSet), 
  //* 2. tile height (same as for MapTileHeightSet)
  //* 3. tile object (same as for MapTileObjectSet)
  //* Works much faster, then applying all changes successively for every tile, because pathfinding compute is executed only once after all changes have been done
  //* aTiles: array of TKMTerrainTileBrief. Check detailed info on this type further
  //* aRevertOnFail - do we need to revert all changes on any error while applying changes. If True, then no changes will be applied on error. If False - we will continue apply changes where possible
  //* aShowDetailedErrors - show detailed errors after. Can slow down the execution, because of logging. If aRevertOnFail is set to True, then only first error will be shown
  //* Returns true, if there was no errors on any tile. False if there was at least 1 error.
  //*
  //* TKMTerrainTileBrief = record
  //*    X, Y: Byte;     // Tile map coordinates
  //*    Terrain: Byte;  // Terrain tile type (0..255)
  //*    Rotation: Byte; // Tile rotation (0..3)
  //*    Height: Byte;   // Heigth (0..100)
  //*    Obj: Byte;      // Object (0..255)
  //*    ChangeSet: TKMTileChangeTypeSet; // Set of changes. F.e. if we want to change terrain type and height, than ChangeSet should contain tctTerrain and tctHeight
  //*  end
  //* where TKMTileChangeTypeSet = set of TKMTileChangeType
  //* where TKMTileChangeType = (tctTerrain, tctHeight, tctObject) // Determines what should be changed on tile
  //* Note: aTiles elements should start from 0, as for dynamic array. So f.e. to change map tile 1,1 we should set aTiles[0][0].
  //* Note: Errors are shown as map tiles (f.e. for error while applying aTiles[0][0] tile there will be a message with for map tile 1,1)
  
  function TKMScriptActions.MapTilesArraySet(aTiles: array of TKMTerrainTileBrief; aRevertOnFail, aShowDetailedErrors: Boolean): Boolean;
    function GetTileErrorsStr(aErrorsIn: TKMTileChangeTypeSet): string;
    var TileChangeType: TKMTileChangeType;
  
negative.code: 
  //* Version: 6222
  //* Stops playing a looped sound that was previously started with either Actions.PlayWAVLooped or Actions.PlayWAVAtLocationLooped.
  //* aSoundIndex: value that was returned by either of those functions when the looped sound was started.
  procedure TKMScriptActions.StopLoopedWAV(aSoundIndex: Integer);
  begin
    try
      gScriptSounds.RemoveLoopSound(aSoundIndex);
    except
      gScriptEvents.ExceptionOutsideScript := True; //Don't blame script for this exception
      raise;
  