public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, theID_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, player_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, type_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, initialType_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt32(5, hitPoints_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(6, initialHitPoints_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt32(7, shields_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt32(8, energy_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeInt32(9, resources_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeInt32(10, initialResources_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeInt32(11, killCount_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeInt32(12, groundWeaponCooldown_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeInt32(13, airWeaponCooldown_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeInt32(14, spellCooldown_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeInt32(15, defenseMatrixPoints_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeInt32(16, defenseMatrixTimer_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeInt32(17, ensnareTimer_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        output.writeInt32(18, irradiateTimer_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        output.writeInt32(19, lockdownTimer_);
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        output.writeInt32(20, maelstromTimer_);
      }
      if (((bitField0_ & 0x00200000) == 0x00200000)) {
        output.writeInt32(21, plagueTimer_);
      }
      if (((bitField0_ & 0x00400000) == 0x00400000)) {
        output.writeInt32(22, removeTimer_);
      }
      if (((bitField0_ & 0x00800000) == 0x00800000)) {
        output.writeInt32(23, stasisTimer_);
      }
      if (((bitField0_ & 0x01000000) == 0x01000000)) {
        output.writeInt32(24, stimTimer_);
      }
      if (((bitField0_ & 0x02000000) == 0x02000000)) {
        output.writeMessage(25, position_);
      }
      if (((bitField0_ & 0x04000000) == 0x04000000)) {
        output.writeMessage(26, initialPosition_);
      }
      if (((bitField0_ & 0x08000000) == 0x08000000)) {
        output.writeMessage(27, tilePosition_);
      }
      if (((bitField0_ & 0x10000000) == 0x10000000)) {
        output.writeMessage(28, initialTilePosition_);
      }
      if (((bitField0_ & 0x20000000) == 0x20000000)) {
        output.writeDouble(30, angle_);
      }
      if (((bitField0_ & 0x40000000) == 0x40000000)) {
        output.writeDouble(31, velocityX_);
      }
      if (((bitField0_ & 0x80000000) == 0x80000000)) {
        output.writeDouble(32, velocityY_);
      }
      if (((bitField1_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(33, target_);
      }
      if (((bitField1_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(34, targetPosition_);
      }
      if (((bitField1_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(35, order_);
      }
      if (((bitField1_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(36, orderTarget_);
      }
      if (((bitField1_ & 0x00000010) == 0x00000010)) {
        output.writeInt32(37, orderTimer_);
      }
      if (((bitField1_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(38, secondaryOrder_);
      }
      if (((bitField1_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(39, buildUnit_);
      }
      if (((bitField1_ & 0x00000080) == 0x00000080)) {
        output.writeInt32(40, remainingBuildTime_);
      }
      if (((bitField1_ & 0x00000100) == 0x00000100)) {
        output.writeInt32(41, remainingTrainTime_);
      }
      if (((bitField1_ & 0x00100000) == 0x00100000)) {
        output.writeMessage(42, carrier_);
      }
      for (int i = 0; i < trainingQueue_.size(); i++) {
        output.writeMessage(43, trainingQueue_.get(i));
      }
      if (((bitField1_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(44, transport_);
      }
      for (int i = 0; i < loadedUnits_.size(); i++) {
        output.writeMessage(45, loadedUnits_.get(i));
      }
      if (((bitField1_ & 0x00000400) == 0x00000400)) {
        output.writeInt32(46, interceptorCount_);
      }
      if (((bitField1_ & 0x00000800) == 0x00000800)) {
        output.writeInt32(47, scarabCount_);
      }
      if (((bitField1_ & 0x00001000) == 0x00001000)) {
        output.writeInt32(48, spiderMineCount_);
      }
      if (((bitField1_ & 0x00002000) == 0x00002000)) {
        output.writeInt32(49, tech_);
      }
      if (((bitField1_ & 0x00004000) == 0x00004000)) {
        output.writeInt32(50, upgrade_);
      }
      if (((bitField1_ & 0x00008000) == 0x00008000)) {
        output.writeInt32(51, remainingResearchTime_);
      }
      if (((bitField1_ & 0x00010000) == 0x00010000)) {
        output.writeInt32(52, remainingUpgradeTime_);
      }
      if (((bitField1_ & 0x00020000) == 0x00020000)) {
        output.writeMessage(53, rallyPosition_);
      }
      if (((bitField1_ & 0x00040000) == 0x00040000)) {
        output.writeMessage(54, rallyUnit_);
      }
      if (((bitField1_ & 0x00080000) == 0x00080000)) {
        output.writeMessage(55, addon_);
      }
      if (((bitField1_ & 0x00400000) == 0x00400000)) {
        output.writeBool(56, exists_);
      }
      if (((bitField1_ & 0x01000000) == 0x01000000)) {
        output.writeBool(57, accelerating_);
      }
      if (((bitField1_ & 0x02000000) == 0x02000000)) {
        output.writeBool(58, beingConstructed_);
      }
      if (((bitField1_ & 0x04000000) == 0x04000000)) {
        output.writeBool(59, beingHealed_);
      }
      if (((bitField1_ & 0x08000000) == 0x08000000)) {
        output.writeBool(60, blind_);
      }
      if (((bitField1_ & 0x10000000) == 0x10000000)) {
        output.writeBool(61, braking_);
      }
      if (((bitField1_ & 0x20000000) == 0x20000000)) {
        output.writeBool(62, burrowed_);
      }
      if (((bitField1_ & 0x40000000) == 0x40000000)) {
        output.writeBool(63, carryingGas_);
      }
      if (((bitField1_ & 0x80000000) == 0x80000000)) {
        output.writeBool(64, carryingMinerals_);
      }
      if (((bitField2_ & 0x00000001) == 0x00000001)) {
        output.writeBool(65, cloaked_);
      }
      if (((bitField2_ & 0x00000002) == 0x00000002)) {
        output.writeBool(66, completed_);
      }
      if (((bitField2_ & 0x00000004) == 0x00000004)) {
        output.writeBool(67, constructing_);
      }
      if (((bitField2_ & 0x00000008) == 0x00000008)) {
        output.writeBool(68, defenseMatrixed_);
      }
      if (((bitField2_ & 0x00000010) == 0x00000010)) {
        output.writeBool(69, ensnared_);
      }
      if (((bitField2_ & 0x00000020) == 0x00000020)) {
        output.writeBool(70, following_);
      }
      if (((bitField2_ & 0x00000040) == 0x00000040)) {
        output.writeBool(71, gatheringGas_);
      }
      if (((bitField2_ & 0x00000080) == 0x00000080)) {
        output.writeBool(72, gatheringMinerals_);
      }
      if (((bitField2_ & 0x00000100) == 0x00000100)) {
        output.writeBool(73, hallucination_);
      }
      if (((bitField2_ & 0x00000200) == 0x00000200)) {
        output.writeBool(74, idle_);
      }
      if (((bitField2_ & 0x00000400) == 0x00000400)) {
        output.writeBool(75, irradiated_);
      }
      if (((bitField2_ & 0x00000800) == 0x00000800)) {
        output.writeBool(76, lifted_);
      }
      if (((bitField2_ & 0x00001000) == 0x00001000)) {
        output.writeBool(77, loaded_);
      }
      if (((bitField2_ & 0x00002000) == 0x00002000)) {
        output.writeBool(78, lockedDown_);
      }
      if (((bitField2_ & 0x00004000) == 0x00004000)) {
        output.writeBool(79, maelstrommed_);
      }
      if (((bitField2_ & 0x00008000) == 0x00008000)) {
        output.writeBool(80, morphing_);
      }
      if (((bitField2_ & 0x00010000) == 0x00010000)) {
        output.writeBool(81, moving_);
      }
      if (((bitField2_ & 0x00020000) == 0x00020000)) {
        output.writeBool(82, parasited_);
      }
      if (((bitField2_ & 0x00040000) == 0x00040000)) {
        output.writeBool(83, patrolling_);
      }
      if (((bitField2_ & 0x00080000) == 0x00080000)) {
        output.writeBool(84, plagued_);
      }
      if (((bitField2_ & 0x00100000) == 0x00100000)) {
        output.writeBool(85, repairing_);
      }
      if (((bitField2_ & 0x00200000) == 0x00200000)) {
        output.writeBool(86, researching_);
      }
      if (((bitField2_ & 0x00400000) == 0x00400000)) {
        output.writeBool(87, selected_);
      }
      if (((bitField2_ & 0x00800000) == 0x00800000)) {
        output.writeBool(88, sieged_);
      }
      if (((bitField2_ & 0x01000000) == 0x01000000)) {
        output.writeBool(89, startingAttack_);
      }
      if (((bitField2_ & 0x02000000) == 0x02000000)) {
        output.writeBool(90, stasised_);
      }
      if (((bitField2_ & 0x04000000) == 0x04000000)) {
        output.writeBool(91, stimmed_);
      }
      if (((bitField2_ & 0x08000000) == 0x08000000)) {
        output.writeBool(92, training_);
      }
      if (((bitField2_ & 0x10000000) == 0x10000000)) {
        output.writeBool(93, underStorm_);
      }
      if (((bitField2_ & 0x80000000) == 0x80000000)) {
        output.writeBool(94, unpowered_);
      }
      if (((bitField3_ & 0x00000001) == 0x00000001)) {
        output.writeBool(95, upgrading_);
      }
      if (((bitField3_ & 0x00000002) == 0x00000002)) {
        output.writeBool(96, visible_);
      }
      if (((bitField3_ & 0x00000004) == 0x00000004)) {
        output.writeBool(97, beingGathered_);
      }
      for (int i = 0; i < larvae_.size(); i++) {
        output.writeMessage(99, larvae_.get(i));
      }
      if (((bitField1_ & 0x00800000) == 0x00800000)) {
        output.writeBool(100, hasNuke_);
      }
      for (int i = 0; i < interceptors_.size(); i++) {
        output.writeMessage(101, interceptors_.get(i));
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeInt32(103, resourceGroup_);
      }
      if (((bitField3_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(104, hatchery_);
      }
      if (((bitField1_ & 0x00200000) == 0x00200000)) {
        output.writeMessage(105, nydusExit_);
      }
      if (((bitField3_ & 0x00000020) == 0x00000020)) {
        output.writeBool(106, detected_);
      }
      if (((bitField3_ & 0x00000040) == 0x00000040)) {
        output.writeBool(107, attacking_);
      }
      if (((bitField3_ & 0x00000080) == 0x00000080)) {
        output.writeBool(108, attackFrame_);
      }
      if (((bitField3_ & 0x00000100) == 0x00000100)) {
        output.writeBool(109, stuck_);
      }
      if (((bitField3_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(110, buildType_);
      }
      if (((bitField2_ & 0x20000000) == 0x20000000)) {
        output.writeBool(111, underAttack_);
      }
      if (((bitField2_ & 0x40000000) == 0x40000000)) {
        output.writeBool(112, underDarkSwarm_);
      }
      getUnknownFields().writeTo(output);
    }