anchor.diff:    doAddBeacon: Boolean;
   begin
     // Beacon script event must always be run by all players for consistency
  -  gScriptEvents.ProcBeacon(aCommand.Params[3], 1 + (aCommand.Params[1] div 10), 1 + (aCommand.Params[2] div 10));
  +  gScriptEvents.ProcBeacon(aCommand.Params[2], 1 + (aCommand.Params[0] div 10), 1 + (aCommand.Params[1] div 10));
   
     doAddBeacon := False;
   
     case gGameParams.Mode of
       gmSingle,
       gmCampaign,
  -    gmMulti:          doAddBeacon := (aCommand.Params[3] <> PLAYER_NONE) and DoAddPlayerBeacon;
  -    gmMultiSpectate:  doAddBeacon := (aCommand.Params[3] = PLAYER_NONE) // Show spectators beacons while spectating
  +    gmMulti:          doAddBeacon := (aCommand.Params[2] <> PLAYER_NONE) and DoAddPlayerBeacon;
  +    gmMultiSpectate:  doAddBeacon := (aCommand.Params[2] = PLAYER_NONE) // Show spectators beacons while spectating
                                       or (gGameSettings.SpecShowBeacons and DoAddPlayerBeacon);
       gmReplaySingle,
  -    gmReplayMulti:    doAddBeacon := (aCommand.Params[3] <> PLAYER_NONE)  // Do not show spectators beacons in replay
  +    gmReplayMulti:    doAddBeacon := (aCommand.Params[2] <> PLAYER_NONE)  // Do not show spectators beacons in replay
                                       and gGameSettings.ReplayShowBeacons and DoAddPlayerBeacon;
     end;
   
     if doAddBeacon then
  -    gGame.GamePlayInterface.Alerts.AddBeacon(KMPointF(aCommand.Params[1]/10,
  -                                                      aCommand.Params[2]/10),
  -                                                      aCommand.Params[3],
  -                                                      (aCommand.Params[4] or $FF000000),
  +    gGame.GamePlayInterface.Alerts.AddBeacon(KMPointF(aCommand.Params[0]/10,
  +                                                      aCommand.Params[1]/10),
  +                                                      aCommand.Params[2],
  +                                                      (aCommand.Params[3] or $FF000000),
                                                         gGameApp.GlobalTickCount + ALERT_DURATION[atBeacon]);
   end;
   
  
positive.code:       gicGameLoadSave:            ; //Just a marker to know when game was loaded
        gicGameTeamChange:          begin
                                      //Currently unused, disabled to prevent potential exploitation
                                      {fGame.Networking.NetPlayers[Params[1]].Team := Params[2];
                                      fGame.UpdateMultiplayerTeams;
                                      fPlayers.SyncFogOfWar;
                                      if fGame.Networking.IsHost then
                                        fGame.Networking.SendPlayerListAndRefreshPlayersSetup;}
                                    end;
        gicGameAlertBeacon:         ExecGameAlertBeaconCmd(aCommand);
        gicGameHotkeySet:           P.SelectionHotkeys[Params[1]] := Params[2];
        gicGameMessageLogRead:      P.MessageLog[Params[1]].IsReadGIP := True;
        gicGamePlayerChange:        begin
                                      Assert(not gGameParams.IsMapEditor);
                                      gHands[Params[1]].HandType := TKMHandType(Params[2]);
                                      gHands[Params[1]].OwnerNikname := AnsiStrParam;
                                      gGame.GamePlayInterface.UpdateUI; //Update players drop list
                                    end;
        gicGamePlayerDefeat:        begin
                                      gHands.UpdateGoalsForHand(Params[1], False);
                                      gHands[Params[1]].AI.Defeat(False);
                                    end;
        gicGamePlayerAllianceSet:   gHands[Params[1]].Alliances[Params[2]] := TKMAllianceType(Params[3]);
        gicGamePlayerAddDefGoals:     gHands[Params[1]].AI.AddDefaultGoals(IntToBool(Params[2]));
        gicScriptConsoleCommand:    gScriptEvents.CallConsoleCommand(HandIndex, AnsiStrParam, UnicodeStrParams);
        gicScriptSoundRemoveRq:     gGame.AddScriptSoundRemoveRequest(Params[1], HandIndex);
        else                        raise Exception.Create('Unexpected gic command');
      end;
    end;
  
negative.code: type
    TKMGameInputCommand = record
      CommandType: TKMGameInputCommandType;
      Params: array[0..MAX_PARAMS - 1] of Integer;
      FloatParam: Single;
      AnsiStrParam: AnsiString;
      UnicodeStrParams: TKMScriptCommandParamsArray;
  