public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, frameCount_);
      }
      for (int i = 0; i < bullets_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, bullets_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, screenX_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, screenY_);
      }
      for (int i = 0; i < units_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, units_.get(i));
      }
      for (int i = 0; i < createdUnits_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, createdUnits_.get(i));
      }
      for (int i = 0; i < destroyedUnits_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, destroyedUnits_.get(i));
      }
      for (int i = 0; i < morphedUnits_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, morphedUnits_.get(i));
      }
      for (int i = 0; i < shownUnits_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, shownUnits_.get(i));
      }
      for (int i = 0; i < hiddenUnits_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, hiddenUnits_.get(i));
      }
      for (int i = 0; i < renegadedUnits_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, renegadedUnits_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < sentText_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(sentText_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getSentTextList().size();
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, nukeDetect_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(15, paused_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(16, replay_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(17, multiplayer_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(18, dynamicTerrainInfo_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(19, terrainInfo_);
      }
      for (int i = 0; i < players_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(20, players_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < leftplayers_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(leftplayers_.get(i));
        }
        size += dataSize;
        size += 2 * getLeftplayersList().size();
      }
      for (int i = 0; i < receivedTexts_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(22, receivedTexts_.get(i));
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(23, gameover_);
      }
      for (int i = 0; i < selectedUnits_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(24, selectedUnits_.get(i));
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(25, isWinner_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(26, screenPosition_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(27, mouseX_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(28, mouseY_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(29, latency_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }