docs: function Player(player) {
          var key;
  
          if ('object' !== typeof player) {
              throw new TypeError('Player constructor: player must be object. ' +
                                 'Found: ' + player);
          }
          if ('string' !== typeof player.id) {
              throw new TypeError('Player constructor: id must be string. ' +
                                  'Found: ' + player.id);
          }
  
          // ## Default properties
  
          /**
           * ### Player.id
           *
           * The nodeGame session id associate to the player
           *
           * Usually it is the same as the Socket.io id, but in
           * case of reconnections it can change
           */
          this.id = player.id;
  
          /**
           * ### Player.sid
           *
           * The session id received from the nodeGame server
           */
          this.sid = player.sid;
  
          /**
           * ### Player.clientType
           *
           * The client type (e.g. player, admin, bot, ...)
           */
          this.clientType = player.clientType || null;
  
          /**
           * ### Player.group
           *
           * The group to which the player belongs
           */
          this.group = player.group || null;
  
          /**
           * ### Player.role
           *
           * The role of the player
           */
          this.role = player.role || null;
  
          /**
           * ### Player.partner
           *
           * The partner of the player
           */
          this.partner = player.partner || null;
  
          /**
           * ### Player.count
           *
           * The ordinal position of the player in a PlayerList object
           *
           * @see PlayerList
           */
          this.count = 'undefined' === typeof player.count ? null : player.count;
  
          /**
           * ### Player.admin
           *
           * The admin status of the client
           */
          this.admin = !!player.admin;
  
          /**
           * ### Player.disconnected
           *
           * The connection status of the client
           */
          this.disconnected = !!player.disconnected;
  
          /**
           * ### Player.ip
           *
           * The ip address of the player
           *
           * Note: this can change in mobile networks
           */
          this.ip = player.ip || null;
  
          /**
           * ### Player.name
           *
           * An alphanumeric name associated with the player
           */
          this.name = player.name || null;
  
          /**
           * ### Player.stage
           *
           * Reference to the game-stage the player currently is
           *
           * @see node.game.stage
           * @see GameStage
           */
          this.stage = player.stage || new GameStage();
  
          /**
           * ### Player.stageLevel
           *
           * The current stage level of the player in the game
           *
           * @see node.stageLevels
           */
          this.stageLevel = player.stageLevel || stageLevels.UNINITIALIZED;
  
          /**
           * ### Player.stateLevel
           *
           * The current state level of the player in the game
           *
           * @see node.stateLevels
           */
          this.stateLevel = player.stateLevel || stateLevels.UNINITIALIZED;
  
          /**
           * ### Player.lang
           *
           * The current language used by the player
           *
           * Default language is English with the default path `en/`.
           */
          this.lang = {
              name: 'English',
              shortName: 'en',
              nativeName: 'English',
              path: 'en/'
          };
  
          /**
           * ## Extra properties
           *
           * For security reasons, they cannot be of type function, and they
           * cannot overwrite any previously defined variable
           */
          for (key in player) {
              if (player.hasOwnProperty(key)) {
                  if ('function' !== typeof player[key]) {
                      if (!this.hasOwnProperty(key)) {
                          this[key] = player[key];
                      }
                  }
              }
          }
      }