public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.StaticGameData other) {
        if (other == org.bwapi.proxy.messages.GameMessages.StaticGameData.getDefaultInstance()) return this;
        if (staticMineralsBuilder_ == null) {
          if (!other.staticMinerals_.isEmpty()) {
            if (staticMinerals_.isEmpty()) {
              staticMinerals_ = other.staticMinerals_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureStaticMineralsIsMutable();
              staticMinerals_.addAll(other.staticMinerals_);
            }
            onChanged();
          }
        } else {
          if (!other.staticMinerals_.isEmpty()) {
            if (staticMineralsBuilder_.isEmpty()) {
              staticMineralsBuilder_.dispose();
              staticMineralsBuilder_ = null;
              staticMinerals_ = other.staticMinerals_;
              bitField0_ = (bitField0_ & ~0x00000001);
              staticMineralsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStaticMineralsFieldBuilder() : null;
            } else {
              staticMineralsBuilder_.addAllMessages(other.staticMinerals_);
            }
          }
        }
        if (staticGeysersBuilder_ == null) {
          if (!other.staticGeysers_.isEmpty()) {
            if (staticGeysers_.isEmpty()) {
              staticGeysers_ = other.staticGeysers_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureStaticGeysersIsMutable();
              staticGeysers_.addAll(other.staticGeysers_);
            }
            onChanged();
          }
        } else {
          if (!other.staticGeysers_.isEmpty()) {
            if (staticGeysersBuilder_.isEmpty()) {
              staticGeysersBuilder_.dispose();
              staticGeysersBuilder_ = null;
              staticGeysers_ = other.staticGeysers_;
              bitField0_ = (bitField0_ & ~0x00000002);
              staticGeysersBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStaticGeysersFieldBuilder() : null;
            } else {
              staticGeysersBuilder_.addAllMessages(other.staticGeysers_);
            }
          }
        }
        if (staticNeutralUnitsBuilder_ == null) {
          if (!other.staticNeutralUnits_.isEmpty()) {
            if (staticNeutralUnits_.isEmpty()) {
              staticNeutralUnits_ = other.staticNeutralUnits_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureStaticNeutralUnitsIsMutable();
              staticNeutralUnits_.addAll(other.staticNeutralUnits_);
            }
            onChanged();
          }
        } else {
          if (!other.staticNeutralUnits_.isEmpty()) {
            if (staticNeutralUnitsBuilder_.isEmpty()) {
              staticNeutralUnitsBuilder_.dispose();
              staticNeutralUnitsBuilder_ = null;
              staticNeutralUnits_ = other.staticNeutralUnits_;
              bitField0_ = (bitField0_ & ~0x00000004);
              staticNeutralUnitsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStaticNeutralUnitsFieldBuilder() : null;
            } else {
              staticNeutralUnitsBuilder_.addAllMessages(other.staticNeutralUnits_);
            }
          }
        }
        if (other.hasMapWidth()) {
          setMapWidth(other.getMapWidth());
        }
        if (other.hasMapHeight()) {
          setMapHeight(other.getMapHeight());
        }
        if (other.hasMapFilename()) {
          bitField0_ |= 0x00000020;
          mapFilename_ = other.mapFilename_;
          onChanged();
        }
        if (other.hasMapName()) {
          bitField0_ |= 0x00000040;
          mapName_ = other.mapName_;
          onChanged();
        }
        if (other.hasMapHash()) {
          bitField0_ |= 0x00000080;
          mapHash_ = other.mapHash_;
          onChanged();
        }
        if (!other.walkable_.isEmpty()) {
          if (walkable_.isEmpty()) {
            walkable_ = other.walkable_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensureWalkableIsMutable();
            walkable_.addAll(other.walkable_);
          }
          onChanged();
        }
        if (!other.buildable_.isEmpty()) {
          if (buildable_.isEmpty()) {
            buildable_ = other.buildable_;
            bitField0_ = (bitField0_ & ~0x00000200);
          } else {
            ensureBuildableIsMutable();
            buildable_.addAll(other.buildable_);
          }
          onChanged();
        }
        if (!other.groundHeight_.isEmpty()) {
          if (groundHeight_.isEmpty()) {
            groundHeight_ = other.groundHeight_;
            bitField0_ = (bitField0_ & ~0x00000400);
          } else {
            ensureGroundHeightIsMutable();
            groundHeight_.addAll(other.groundHeight_);
          }
          onChanged();
        }
        if (unitTypesBuilder_ == null) {
          if (!other.unitTypes_.isEmpty()) {
            if (unitTypes_.isEmpty()) {
              unitTypes_ = other.unitTypes_;
              bitField0_ = (bitField0_ & ~0x00000800);
            } else {
              ensureUnitTypesIsMutable();
              unitTypes_.addAll(other.unitTypes_);
            }
            onChanged();
          }
        } else {
          if (!other.unitTypes_.isEmpty()) {
            if (unitTypesBuilder_.isEmpty()) {
              unitTypesBuilder_.dispose();
              unitTypesBuilder_ = null;
              unitTypes_ = other.unitTypes_;
              bitField0_ = (bitField0_ & ~0x00000800);
              unitTypesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUnitTypesFieldBuilder() : null;
            } else {
              unitTypesBuilder_.addAllMessages(other.unitTypes_);
            }
          }
        }
        if (weaponsBuilder_ == null) {
          if (!other.weapons_.isEmpty()) {
            if (weapons_.isEmpty()) {
              weapons_ = other.weapons_;
              bitField0_ = (bitField0_ & ~0x00001000);
            } else {
              ensureWeaponsIsMutable();
              weapons_.addAll(other.weapons_);
            }
            onChanged();
          }
        } else {
          if (!other.weapons_.isEmpty()) {
            if (weaponsBuilder_.isEmpty()) {
              weaponsBuilder_.dispose();
              weaponsBuilder_ = null;
              weapons_ = other.weapons_;
              bitField0_ = (bitField0_ & ~0x00001000);
              weaponsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getWeaponsFieldBuilder() : null;
            } else {
              weaponsBuilder_.addAllMessages(other.weapons_);
            }
          }
        }
        if (upgradesBuilder_ == null) {
          if (!other.upgrades_.isEmpty()) {
            if (upgrades_.isEmpty()) {
              upgrades_ = other.upgrades_;
              bitField0_ = (bitField0_ & ~0x00002000);
            } else {
              ensureUpgradesIsMutable();
              upgrades_.addAll(other.upgrades_);
            }
            onChanged();
          }
        } else {
          if (!other.upgrades_.isEmpty()) {
            if (upgradesBuilder_.isEmpty()) {
              upgradesBuilder_.dispose();
              upgradesBuilder_ = null;
              upgrades_ = other.upgrades_;
              bitField0_ = (bitField0_ & ~0x00002000);
              upgradesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUpgradesFieldBuilder() : null;
            } else {
              upgradesBuilder_.addAllMessages(other.upgrades_);
            }
          }
        }
        if (techsBuilder_ == null) {
          if (!other.techs_.isEmpty()) {
            if (techs_.isEmpty()) {
              techs_ = other.techs_;
              bitField0_ = (bitField0_ & ~0x00004000);
            } else {
              ensureTechsIsMutable();
              techs_.addAll(other.techs_);
            }
            onChanged();
          }
        } else {
          if (!other.techs_.isEmpty()) {
            if (techsBuilder_.isEmpty()) {
              techsBuilder_.dispose();
              techsBuilder_ = null;
              techs_ = other.techs_;
              bitField0_ = (bitField0_ & ~0x00004000);
              techsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTechsFieldBuilder() : null;
            } else {
              techsBuilder_.addAllMessages(other.techs_);
            }
          }
        }
        if (colorsBuilder_ == null) {
          if (!other.colors_.isEmpty()) {
            if (colors_.isEmpty()) {
              colors_ = other.colors_;
              bitField0_ = (bitField0_ & ~0x00008000);
            } else {
              ensureColorsIsMutable();
              colors_.addAll(other.colors_);
            }
            onChanged();
          }
        } else {
          if (!other.colors_.isEmpty()) {
            if (colorsBuilder_.isEmpty()) {
              colorsBuilder_.dispose();
              colorsBuilder_ = null;
              colors_ = other.colors_;
              bitField0_ = (bitField0_ & ~0x00008000);
              colorsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getColorsFieldBuilder() : null;
            } else {
              colorsBuilder_.addAllMessages(other.colors_);
            }
          }
        }
        if (racesBuilder_ == null) {
          if (!other.races_.isEmpty()) {
            if (races_.isEmpty()) {
              races_ = other.races_;
              bitField0_ = (bitField0_ & ~0x00010000);
            } else {
              ensureRacesIsMutable();
              races_.addAll(other.races_);
            }
            onChanged();
          }
        } else {
          if (!other.races_.isEmpty()) {
            if (racesBuilder_.isEmpty()) {
              racesBuilder_.dispose();
              racesBuilder_ = null;
              races_ = other.races_;
              bitField0_ = (bitField0_ & ~0x00010000);
              racesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getRacesFieldBuilder() : null;
            } else {
              racesBuilder_.addAllMessages(other.races_);
            }
          }
        }
        if (startLocationsBuilder_ == null) {
          if (!other.startLocations_.isEmpty()) {
            if (startLocations_.isEmpty()) {
              startLocations_ = other.startLocations_;
              bitField0_ = (bitField0_ & ~0x00020000);
            } else {
              ensureStartLocationsIsMutable();
              startLocations_.addAll(other.startLocations_);
            }
            onChanged();
          }
        } else {
          if (!other.startLocations_.isEmpty()) {
            if (startLocationsBuilder_.isEmpty()) {
              startLocationsBuilder_.dispose();
              startLocationsBuilder_ = null;
              startLocations_ = other.startLocations_;
              bitField0_ = (bitField0_ & ~0x00020000);
              startLocationsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStartLocationsFieldBuilder() : null;
            } else {
              startLocationsBuilder_.addAllMessages(other.startLocations_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }