diff --git a/.gitmodules b/.gitmodules index bccb30d37daa129e3d01aa8d002019948b33c443..5f132b30f3cd396d3bd6dae88dc12fb74263f805 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +1,15 @@ [submodule "lib/pybind11"] path = lib/pybind11 url = https://github.com/pybind/pybind11 -[submodule "lib/s2client-api"] - path = lib/s2client-api - url = https://github.com/Blizzard/s2client-api.git +[submodule "lib/cpp-sc2"] + path = lib/cpp-sc2 + url = https://github.com/cpp-sc2/cpp-sc2.git [submodule "lib/sc2-gamedata"] path = lib/sc2-gamedata url = https://github.com/noorus/sc2-gamedata.git [submodule "lib/json"] path = lib/json url = https://github.com/nlohmann/json.git +[submodule "lib/sc2-techtree"] + path = lib/sc2-techtree + url = https://github.com/BurnySc2/sc2-techtree.git diff --git a/CMakeLists.txt b/CMakeLists.txt index f92edcefc95300fa7136682acc7fea669f1044cd..6a79da24e0e71bc955c0d424ecbfa47ca4db98a0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ set(BUILD_API_EXAMPLES OFF CACHE INTERNAL "" FORCE) set(BUILD_API_TESTS OFF CACHE INTERNAL "" FORCE) add_subdirectory(lib/pybind11) -add_subdirectory(lib/s2client-api) +add_subdirectory(lib/cpp-sc2) add_subdirectory(src) add_subdirectory(python-api-src) diff --git a/ExtendAPI.md b/ExtendAPI.md new file mode 100644 index 0000000000000000000000000000000000000000..005e30f838b029c9b077a691b68c17f562cb55a9 --- /dev/null +++ b/ExtendAPI.md @@ -0,0 +1,28 @@ +# Extending the API +This is a guide for extending the API and adding more functionality to the courses TDDE25 and TDDD92. + +If a function already exist but you can't use it in python, check and see if it's exist in the library files (pybind). + +1. Create a declaration of your function in the header file. +2. Create a definition of your function in the source file. +3. Depending on which object you decided to extend, you should also add this function to the library file. The library is the pybind, making it possible to use your function in python. +4. Update the documentation. There are instructions on how you build and test the documentation. + + +Example: +We want to add function to unit, returning a bool depending on if it's holding a mineral. We have discovered a function in the SC2 API containing this information (sc2_client.ccp). This is a helper function, it doesn't belong to any object. + +1. In unit.h: ```bool isCarryingMinerals() const;``` +2. In unit.cpp: ```bool Unit::isCarryingMinerals() const +{ + return sc2::IsCarryingMinerals(*m_unit); +}``` +We can access m_unit in the unit file and with sc2::Function() we can access any function in the blizzard API that doesn't belong to any object. The same goes for any object, for example sc2::Point3D makes us able to access the Point3D object. +3. In lib_unit.cpp: ```.def_property_readonly("is_carrying_minerals", &Unit::isCarryingMinerals)``` +4. In the folder named docs we update the documentation. In this case, we update the file unit.rst. + +Common problems: +1. The return in python is a memory address: + Make sure that it returns a correct type. +2. The compiler complains about files I have not even touched: + Make sure that the startUp is library and you have release x64. If you just added a new function in pybind, check it. diff --git a/docs/conf.py b/docs/conf.py index 8b78124b473ebe0cd9134855b361fce16d7050c4..8607f50a47d56ddd778917738e9cb0d6d3865818 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,7 +12,9 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. +# Two paths here to work on both Windows and Linux import sys,os +sys.path.append(os.path.join(os.getcwd(), "..", "build", "python-api-src", "Release")) sys.path.append(os.path.join(os.getcwd(), "..", "build", "python-api-src")) # -- Project information ----------------------------------------------------- diff --git a/docs/constants.rst b/docs/constants.rst index fd97774e4cc502c0b5c2733e2e587c19d8911069..f75b8535ddfbc859aa49b75c7110fb012100ea6d 100644 --- a/docs/constants.rst +++ b/docs/constants.rst @@ -25,6 +25,13 @@ Difficulty :members: :undoc-members: +AIBuild +------- + +.. autoclass:: library.AIBuild + :members: + :undoc-members: + Race ---- diff --git a/docs/gettingstarted.rst b/docs/gettingstarted.rst index 4d8997451b8d86f1eff424f2f96741d21f56d756..037793e338f9110230000d487491afb6ac174866 100644 --- a/docs/gettingstarted.rst +++ b/docs/gettingstarted.rst @@ -127,6 +127,14 @@ However, your bot might will probably be able to play the game faster. If you remove or comment out this line the game will run as fast as possible, only waiting for your bot to return from `on_step`. +If you want to train your agent on certain type of bots. For example, If we +want the opponent to focus on air strategy. You can add the +following line to the bot. + +.. code-block:: python + + participant_2 = create_computer(Race.Random, Difficulty.Easy, AIBuild.Air) + We can also play two bots against each other by changing the row: .. code-block:: python diff --git a/docs/helpers.rst b/docs/helpers.rst index 61065d3a8400b15f8bb235ab6a0de0de48f5b24b..15cc665061d3ba8606024b55399998a459dd264b 100644 --- a/docs/helpers.rst +++ b/docs/helpers.rst @@ -62,6 +62,9 @@ BaseLocation .. autoattribute:: geysers .. automethod:: get_ground_distance + + This function uses BFS and moves in a vertical and horizontal position. Because of this, + the distance might overshoot compared to calculating it with Pythagoras' theorem. .. automethod:: is_occupied_by_player @@ -81,8 +84,13 @@ TechTree This class has some invalid information by default, this can be corrected by placing the file `techtree.json` in the working directory. The - `techtree.json` files are available here_, select the lastest version. A - recent file is included in the `template repository`_. + `techtree.json` files are available here_, select the lastest version. + A techtree for SC2 version >=4.10 is now available (not fully tested yet), + this can be found under the folder data in this link_. + A recent file is included in the `template repository`_. + + Instead of using TechTree, it's possible to use the functions in UnitType for + structure, etc. In IDABot there is functions for getting data about upgrades. .. method:: get_data(argument) -> library.TypeData @@ -90,6 +98,7 @@ TechTree an instance of the class :class:`library.CCUpgrade`, depending on what information is wanted. +.. _link: https://github.com/BurnySc2/sc2-techtree .. _here: https://github.com/noorus/sc2-gamedata .. _`template repository`: https://gitlab.liu.se/starcraft-ai-course/sc2-python-bot @@ -100,6 +109,7 @@ TypeData :members: :undoc-members: + .. TODO: Types for all fields would be nice, is required_units List[UnitType] or List[UNIT_TYPEID]? MapTools @@ -120,8 +130,12 @@ MapTools this suffix uses the same coordinate system as the game, i.e. world coordinates. + The top three methods below takes in a Point2D, but it's possible to + send in x and y as floats instead of Point2D. + .. automethod:: draw_box .. automethod:: draw_circle + .. automethod:: draw_resource_sphere .. automethod:: draw_line .. automethod:: draw_text .. automethod:: draw_text_screen diff --git a/docs/idabot.rst b/docs/idabot.rst index 2a3b0c0d2f9c1339bb38c7ea32f358afc5f71ae9..ad95df7bd7b4bcf3b5a9208f911bda67ebddf81f 100644 --- a/docs/idabot.rst +++ b/docs/idabot.rst @@ -59,6 +59,39 @@ IDABot Sends the string 'message' to the game chat + .. method:: IDABot.has_creep(self, Point2D) -> Boolean + + Returns if the position has a creep + + .. method:: IDABot.move_camera(self, Point2DI) + + Move the camera to the position + + .. method:: IDABot.ability_for_upgrade(self, UpgradeID) + + Ability that researches this upgrade + + Example: If we send in UPGRADE_ID.BANSHEECLOAK, it will return + ABILITY_ID.RESEARCH_BANSHEECLOAKINGFIELD. In this case, + the unit of scv has the ability for this. You can then use the + unit.ability(AbilityID) on the scv for creating the upgrade. + + .. method:: IDABot.upgrade_mineral_cost(self, UpgradeID) + + Mineral cost of researching the upgrade + + .. method:: IDABot.upgrade_gas_cost(self, UpgradeID) + + Vespene/gas cost of researching the upgrade + + .. method:: IDABot.upgrade_research_time(self, UpgradeID) + + Time in GameLoops to research this upgrade + + .. method:: IDABot.effect_radius(self, EffectID) + + Size of the circle the effect impacts + Attributes: .. autoattribute:: minerals @@ -70,3 +103,91 @@ IDABot .. autoattribute:: max_supply .. autoattribute:: current_frame + +Debug +----- + +When developing AI-methods or when simply having a problem. +The debug-methods are a great tool for speeding up the process. + + .. method:: IDABot.debug_create_unit(self, UnitTypeID, Point2D, Player Constant, Int) + + This method creates the nr (INT) of units on the position :class:`library.Point2D`, the unit + belongs to the Player Constant + + .. method:: IDABot.debug_kill_unit(self, Unit) + + Kills the :class:`library.Unit` + + .. method:: IDABot.debug_show_map(self) + + Make the entire map visible + + .. method:: IDABot.debug_fast_build(self) + + Set the build time in game to 1 + + .. method:: IDABot.debug_enemy_control(self) + + Gives the player full control over the enemy + + .. method:: IDABot.debug_fast_build(self) + + Set the build time in game to 1 + + .. method:: IDABot.debug_ignore_food(self) + + Ignore food in game + + .. method:: IDABot.debug_ignore_resource_cost(self) + + Ignore the resource cost in game. Everything cost 0 resources + + .. method:: IDABot.debug_give_all_resources(self) + + Set the mineral and vespene gas to 5000 + + .. method:: IDABot.debug_god_mode(self) + + Give yourself god mode in the game + + .. method:: IDABot.debug_ignore_mineral(self) + + Ignore the mineral cost in the game + + .. method:: IDABot.debug_no_cooldowns(self) + + Deactivate cooldowns (Basically setting them to 0) + + .. method:: IDABot.debug_give_all_tech(self) + + Give yourself all tech + + .. method:: IDABot.debug_give_all_upgrades(self) + + Give yourself all upgrades + + .. method:: IDABot.debug_set_score(self, Float) + + Set the player score in game + + .. method:: IDABot.debug_end_game(self, Boolean) + + End the game, if the Boolean is True then victory. + If False, defeat. + + .. method:: IDABot.debug_set_energy(self, Float, Unit) + + Set the amount (Float) of energy to the :class:`library.Unit` + The maximum depends on the unit maxenergy. + Note: This is not in percent of the unit energy. + Same goes for life and shields. + + .. method:: IDABot.debug_set_life(self, Float, Unit) + + Set the amount (Float) of life to the unit + + .. method:: IDABot.debug_set_shields(self, Float, Unit) + + Set the amount (Float) of shield to the unit + diff --git a/docs/types.rst b/docs/types.rst index a53e024d9c8e71f2701e594aaa37bbff852ab481..dd9986f59ffb4543fb5b1165a395d28ff6b5a251 100644 --- a/docs/types.rst +++ b/docs/types.rst @@ -6,9 +6,13 @@ For more information about a certain unit type, the wrapper class :class:`library.UnitType` can be used. For a full list of all abilities and upgrades, see :class:`library.ABILITY_ID` -and :class:`library.UPGRADE_ID` respectively. Note that these does not have any +, :class:`library.UPGRADE_ID` and :class:`library.EFFECT_ID` respectively. Note that these does not have any wrapper classes for them. +If any of the ID's doesn't respond with the game. Before contacting the labassistent, check the game version +and the compatibility through Liquipedia. Some ID's might be left after a patch and is not available in +the game anymore. + UnitType -------- @@ -40,3 +44,12 @@ UPGRADE_ID .. autoclass:: library.UPGRADE_ID :members: :undoc-members: + +EFFECT_ID +---------- +EffectID is for things like ravager bile, or fungal or even a scan. + +.. autoclass:: library.EFFECT_ID + :members: + :undoc-members: + diff --git a/docs/unit.rst b/docs/unit.rst index d298b02253208bd1905dfdd18e0aabf3010d812f..16aa1d46c7c8d7ef33073845d400bb05cf11f9ee 100644 --- a/docs/unit.rst +++ b/docs/unit.rst @@ -32,11 +32,14 @@ Unit .. autoattribute:: hit_points .. autoattribute:: max_hit_points + Returns the max health + .. autoattribute:: max_shields + .. autoattribute:: max_energy .. autoattribute:: id .. autoattribute:: is_alive .. autoattribute:: is_blip - Returns true if unit is a "blip" - a ping on the map. + Returns true if unit is a "blip" - a ping on the map .. autoattribute:: is_being_constructed @@ -56,7 +59,7 @@ Unit .. attribute:: Unit.player Returns the constant corresponding to player which this unit belongs to. - See :ref:`playerconstants` for more information. + See :ref:`playerconstants` for more information .. autoattribute:: position .. autoattribute:: current_ability_id @@ -77,19 +80,36 @@ Unit Returns if this unit is currently holding minerals + .. autoattribute:: is_carrying_gas + + Returns if this unit is currently holding gas + .. attribute:: Unit.target - Returns target if unit has one, otherwise will fail the assertion (make sure not to call this unless certain that the unit has a target!). + Returns target if unit has one, otherwise will fail the assertion (make sure not to call this unless certain that the unit has a target!) + + .. autoattribute:: gas_left_in_refinery + + This is used on the geyser. + Returns the amount of gas left in refinery + + .. autoattribute:: minerals_left_in_mineralfield + + Returns the amount of minerals left in mineralfield + + .. autoattribute:: owner + + Returns the Player ID, the owner of the unit Methods: .. automethod:: ability - Call an ability directly, different abilities has different targets. Some target the unit itself (no argument), target a point (Point2D as argument) and some target a Unit (instance of Unit as argument). + Call an ability directly, different abilities has different targets. Some target the unit itself (no argument), target a point (Point2D as argument) and some target a Unit (instance of Unit as argument) .. method:: Unit.is_constructing(self, unit_type: library.UnitType) - Returns true if the unit is currently constructing another unit of type `unit_type`. Note that `unit_type` needs to be an instance of :class:`library.UnitType`. + Returns true if the unit is currently constructing another unit of type `unit_type`. Note that `unit_type` needs to be an instance of :class:`library.UnitType` .. automethod:: stop .. automethod:: attack_unit @@ -107,7 +127,7 @@ Unit .. automethod:: morph .. method:: Unit.has_target - Returns True if the target has a valid target and False otherwise. + Returns True if the target has a valid target and False otherwise .. automethod:: hold_position .. automethod:: stop_dance diff --git a/lib/cpp-sc2 b/lib/cpp-sc2 new file mode 160000 index 0000000000000000000000000000000000000000..f8bbf67bb3284bdf8f82544b464f4692f4f451ce --- /dev/null +++ b/lib/cpp-sc2 @@ -0,0 +1 @@ +Subproject commit f8bbf67bb3284bdf8f82544b464f4692f4f451ce diff --git a/lib/s2client-api b/lib/s2client-api deleted file mode 160000 index d9ba0a33d6ce9d233c2a4ee988360c188fbe9dbf..0000000000000000000000000000000000000000 --- a/lib/s2client-api +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d9ba0a33d6ce9d233c2a4ee988360c188fbe9dbf diff --git a/lib/sc2-techtree b/lib/sc2-techtree new file mode 160000 index 0000000000000000000000000000000000000000..c92eaf8d8cee8bda4a19f95d81b43d65f23174a9 --- /dev/null +++ b/lib/sc2-techtree @@ -0,0 +1 @@ +Subproject commit c92eaf8d8cee8bda4a19f95d81b43d65f23174a9 diff --git a/python-api-src/CMakeLists.txt b/python-api-src/CMakeLists.txt index d2d99321846b3d88be23729a773e9f254cf4b06d..16bb62042b6a08f6a5c4da7d377e818d045415f6 100644 --- a/python-api-src/CMakeLists.txt +++ b/python-api-src/CMakeLists.txt @@ -1,7 +1,7 @@ include_directories(SYSTEM - ${PROJECT_SOURCE_DIR}/lib/s2client-api/include - ${PROJECT_SOURCE_DIR}/lib/s2client-api/contrib/protobuf/src - ${PROJECT_BINARY_DIR}/lib/s2client-api/generated + ${PROJECT_SOURCE_DIR}/lib/cpp-sc2/include + ${PROJECT_SOURCE_DIR}/lib/cpp-sc2/contrib/protobuf/src + ${PROJECT_BINARY_DIR}/lib/cpp-sc2/generated ${PROJECT_SOURCE_DIR}/lib/json/include ) @@ -10,7 +10,7 @@ file(GLOB BOT_SOURCES "../src/*.cpp" "../src/*.h" "../src/*.hpp") file(GLOB LIBRARY_SOURCES "*.cpp" "*.h") -link_directories(${PROJECT_BINARY_DIR}/s2client-api/bin) +link_directories(${PROJECT_BINARY_DIR}/cpp-sc2/bin) # Enable compilation of the SC2 version of the bot code # TODO: Remove all remaining BW code diff --git a/python-api-src/lib_building_placer.cpp b/python-api-src/lib_building_placer.cpp index b925c749ab99620325d6f9fd6195b60d37ee1024..f2aed9730fc09bea3c798a35ddc9dfcf06e7dc7e 100644 --- a/python-api-src/lib_building_placer.cpp +++ b/python-api-src/lib_building_placer.cpp @@ -6,8 +6,8 @@ void define_building_placer(py::module & m) { py::class_<BuildingPlacer>(m, "BuildingPlacer") .def("can_build_here", &BuildingPlacer::canBuildHere, "x"_a, "y"_a, "unit_type"_a) - .def("can_build_here_with_spaces", &BuildingPlacer::canBuildHereWithSpace, "x"_a, "y"_a, "unit_type"_a, "build_distance"_a) - .def("get_build_location_near", &BuildingPlacer::getBuildLocationNear, "point2di"_a, "unit_type"_a, "build_distance"_a = 2, "search_count"_a = 1000) - .def("reserve_tiles", &BuildingPlacer::reserveTiles, "x"_a, "y"_a, "width"_a, "height"_a) - .def("free_tiles", &BuildingPlacer::freeTiles, "x"_a, "y"_a, "width"_a, "height"_a); + .def("can_build_here_with_spaces", &BuildingPlacer::canBuildHereWithSpace, "Creates a square with the help of x, y, distance_to_building and the size of the unit_type. Good approach if we later gonna make a addon to the building.", "x"_a, "y"_a, "unit_type"_a, "distance_to_building"_a) + .def("get_build_location_near", &BuildingPlacer::getBuildLocationNear, "The search_count is how many building we should check (nearby buildings, instead of i < size, we can switch size to search_count). distance_to_building is the distance to the closest building.", "point2di"_a, "unit_type"_a, "distance_to_building"_a = 2, "search_count"_a = 1000) + .def("reserve_tiles", &BuildingPlacer::reserveTiles, "It's possible to reserve tiles, which makes it impossible to build at the position given by x and y.", "x"_a, "y"_a, "width"_a, "height"_a) + .def("free_tiles", &BuildingPlacer::freeTiles,"Free the tile (x, y) from reservation", "x"_a, "y"_a, "width"_a, "height"_a); } \ No newline at end of file diff --git a/python-api-src/lib_map_tools.cpp b/python-api-src/lib_map_tools.cpp index 65c421d80f8d6ccbf520bb05a2771f1d74fdce84..b871070a089ad951c63e60e28e59d61a3fee3701 100644 --- a/python-api-src/lib_map_tools.cpp +++ b/python-api-src/lib_map_tools.cpp @@ -20,6 +20,7 @@ void define_map_tools(py::module & m) .def("draw_line", py::overload_cast<const CCPosition &, const CCPosition &, const CCColor &>(&MapTools::drawLine, py::const_), py::arg("start"), py::arg("stop"), py::arg("color") = sc2::Colors::White) .def("draw_box", py::overload_cast<const CCPosition &, const CCPosition &, const CCColor &>(&MapTools::drawBox, py::const_), py::arg("top_left"), py::arg("bottom_right"), py::arg("color") = sc2::Colors::White) .def("draw_circle", py::overload_cast<const CCPosition &, CCPositionType, const CCColor &>(&MapTools::drawCircle, py::const_), py::arg("center"), py::arg("radius"), py::arg("color") = sc2::Colors::White) + .def("draw_resource_sphere", &MapTools::drawResourceSphere, py::arg("center"), py::arg("radius"), py::arg("color") = sc2::Colors::White) .def("draw_text", &MapTools::drawText, "position"_a, "text"_a, "color"_a = sc2::Colors::White) .def("draw_text_screen", &MapTools::drawTextScreen, "percentage_x"_a, "percentage_y"_a, "text"_a, "color"_a = sc2::Colors::White) .def("is_valid_tile", py::overload_cast<int, int>(&MapTools::isValidTile, py::const_), "x"_a, "y"_a) diff --git a/python-api-src/lib_sc2_typeenums.cpp b/python-api-src/lib_sc2_typeenums.cpp index 235056ce29cc1711fc5297aa93dd85ab90013fc3..9fd2551a7050a2534e1fd430b56d2d09b5914fa8 100644 --- a/python-api-src/lib_sc2_typeenums.cpp +++ b/python-api-src/lib_sc2_typeenums.cpp @@ -7,226 +7,2075 @@ namespace py = pybind11; void define_typeenums(py::module & m) { py::enum_<sc2::UNIT_TYPEID>(m, "UNIT_TYPEID") - .value("INVALID", sc2::UNIT_TYPEID::INVALID) - .value("TERRAN_ARMORY", sc2::UNIT_TYPEID::TERRAN_ARMORY) - .value("TERRAN_AUTOTURRET", sc2::UNIT_TYPEID::TERRAN_AUTOTURRET) - .value("TERRAN_BANSHEE", sc2::UNIT_TYPEID::TERRAN_BANSHEE) - .value("TERRAN_BARRACKS", sc2::UNIT_TYPEID::TERRAN_BARRACKS) - .value("TERRAN_BARRACKSFLYING", sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING) - .value("TERRAN_BARRACKSREACTOR", sc2::UNIT_TYPEID::TERRAN_BARRACKSREACTOR) - .value("TERRAN_BARRACKSTECHLAB", sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB) - .value("TERRAN_BATTLECRUISER", sc2::UNIT_TYPEID::TERRAN_BATTLECRUISER) - .value("TERRAN_BUNKER", sc2::UNIT_TYPEID::TERRAN_BUNKER) - .value("TERRAN_COMMANDCENTER", sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER) - .value("TERRAN_COMMANDCENTERFLYING", sc2::UNIT_TYPEID::TERRAN_COMMANDCENTERFLYING) - .value("TERRAN_CYCLONE", sc2::UNIT_TYPEID::TERRAN_CYCLONE) - .value("TERRAN_ENGINEERINGBAY", sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY) - .value("TERRAN_FACTORY", sc2::UNIT_TYPEID::TERRAN_FACTORY) - .value("TERRAN_FACTORYFLYING", sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING) - .value("TERRAN_FACTORYREACTOR", sc2::UNIT_TYPEID::TERRAN_FACTORYREACTOR) - .value("TERRAN_FACTORYTECHLAB", sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB) - .value("TERRAN_FUSIONCORE", sc2::UNIT_TYPEID::TERRAN_FUSIONCORE) - .value("TERRAN_GHOST", sc2::UNIT_TYPEID::TERRAN_GHOST) - .value("TERRAN_GHOSTACADEMY", sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY) - .value("TERRAN_HELLION", sc2::UNIT_TYPEID::TERRAN_HELLION) - .value("TERRAN_HELLIONTANK", sc2::UNIT_TYPEID::TERRAN_HELLIONTANK) - .value("TERRAN_LIBERATOR", sc2::UNIT_TYPEID::TERRAN_LIBERATOR) - .value("TERRAN_LIBERATORAG", sc2::UNIT_TYPEID::TERRAN_LIBERATORAG) - .value("TERRAN_MARAUDER", sc2::UNIT_TYPEID::TERRAN_MARAUDER) - .value("TERRAN_MARINE", sc2::UNIT_TYPEID::TERRAN_MARINE) - .value("TERRAN_MEDIVAC", sc2::UNIT_TYPEID::TERRAN_MEDIVAC) - .value("TERRAN_MISSILETURRET", sc2::UNIT_TYPEID::TERRAN_MISSILETURRET) - .value("TERRAN_MULE", sc2::UNIT_TYPEID::TERRAN_MULE) - .value("TERRAN_ORBITALCOMMAND", sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND) - .value("TERRAN_ORBITALCOMMANDFLYING", sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMANDFLYING) - .value("TERRAN_PLANETARYFORTRESS", sc2::UNIT_TYPEID::TERRAN_PLANETARYFORTRESS) - .value("TERRAN_RAVEN", sc2::UNIT_TYPEID::TERRAN_RAVEN) - .value("TERRAN_REAPER", sc2::UNIT_TYPEID::TERRAN_REAPER) - .value("TERRAN_REFINERY", sc2::UNIT_TYPEID::TERRAN_REFINERY) - .value("TERRAN_SCV", sc2::UNIT_TYPEID::TERRAN_SCV) - .value("TERRAN_SENSORTOWER", sc2::UNIT_TYPEID::TERRAN_SENSORTOWER) - .value("TERRAN_SIEGETANK", sc2::UNIT_TYPEID::TERRAN_SIEGETANK) - .value("TERRAN_SIEGETANKSIEGED", sc2::UNIT_TYPEID::TERRAN_SIEGETANKSIEGED) - .value("TERRAN_STARPORT", sc2::UNIT_TYPEID::TERRAN_STARPORT) - .value("TERRAN_STARPORTFLYING", sc2::UNIT_TYPEID::TERRAN_STARPORTFLYING) - .value("TERRAN_STARPORTREACTOR", sc2::UNIT_TYPEID::TERRAN_STARPORTREACTOR) - .value("TERRAN_STARPORTTECHLAB", sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB) - .value("TERRAN_SUPPLYDEPOT", sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT) - .value("TERRAN_SUPPLYDEPOTLOWERED", sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOTLOWERED) - .value("TERRAN_THOR", sc2::UNIT_TYPEID::TERRAN_THOR) - .value("TERRAN_THORAP", sc2::UNIT_TYPEID::TERRAN_THORAP) - .value("TERRAN_VIKINGASSAULT", sc2::UNIT_TYPEID::TERRAN_VIKINGASSAULT) - .value("TERRAN_VIKINGFIGHTER", sc2::UNIT_TYPEID::TERRAN_VIKINGFIGHTER) - .value("TERRAN_WIDOWMINE", sc2::UNIT_TYPEID::TERRAN_WIDOWMINE) - .value("TERRAN_WIDOWMINEBURROWED", sc2::UNIT_TYPEID::TERRAN_WIDOWMINEBURROWED) - .value("TERRAN_KD8CHARGE", sc2::UNIT_TYPEID::TERRAN_KD8CHARGE) - .value("TERRAN_NUKE", sc2::UNIT_TYPEID::TERRAN_NUKE) - .value("TERRAN_POINTDEFENSEDRONE", sc2::UNIT_TYPEID::TERRAN_POINTDEFENSEDRONE) - .value("TERRAN_REACTOR", sc2::UNIT_TYPEID::TERRAN_REACTOR) - .value("TERRAN_TECHLAB", sc2::UNIT_TYPEID::TERRAN_TECHLAB) - .value("ZERG_BANELING", sc2::UNIT_TYPEID::ZERG_BANELING) - .value("ZERG_BANELINGBURROWED", sc2::UNIT_TYPEID::ZERG_BANELINGBURROWED) - .value("ZERG_BANELINGCOCOON", sc2::UNIT_TYPEID::ZERG_BANELINGCOCOON) - .value("ZERG_BANELINGNEST", sc2::UNIT_TYPEID::ZERG_BANELINGNEST) - .value("ZERG_BROODLING", sc2::UNIT_TYPEID::ZERG_BROODLING) - .value("ZERG_BROODLORD", sc2::UNIT_TYPEID::ZERG_BROODLORD) - .value("ZERG_BROODLORDCOCOON", sc2::UNIT_TYPEID::ZERG_BROODLORDCOCOON) - .value("ZERG_CHANGELING", sc2::UNIT_TYPEID::ZERG_CHANGELING) - .value("ZERG_CHANGELINGMARINE", sc2::UNIT_TYPEID::ZERG_CHANGELINGMARINE) - .value("ZERG_CHANGELINGMARINESHIELD", sc2::UNIT_TYPEID::ZERG_CHANGELINGMARINESHIELD) - .value("ZERG_CHANGELINGZEALOT", sc2::UNIT_TYPEID::ZERG_CHANGELINGZEALOT) - .value("ZERG_CHANGELINGZERGLING", sc2::UNIT_TYPEID::ZERG_CHANGELINGZERGLING) - .value("ZERG_CHANGELINGZERGLINGWINGS", sc2::UNIT_TYPEID::ZERG_CHANGELINGZERGLINGWINGS) - .value("ZERG_CORRUPTOR", sc2::UNIT_TYPEID::ZERG_CORRUPTOR) - .value("ZERG_CREEPTUMOR", sc2::UNIT_TYPEID::ZERG_CREEPTUMOR) - .value("ZERG_CREEPTUMORBURROWED", sc2::UNIT_TYPEID::ZERG_CREEPTUMORBURROWED) - .value("ZERG_CREEPTUMORQUEEN", sc2::UNIT_TYPEID::ZERG_CREEPTUMORQUEEN) - .value("ZERG_DRONE", sc2::UNIT_TYPEID::ZERG_DRONE) - .value("ZERG_DRONEBURROWED", sc2::UNIT_TYPEID::ZERG_DRONEBURROWED) - .value("ZERG_EGG", sc2::UNIT_TYPEID::ZERG_EGG) - .value("ZERG_EVOLUTIONCHAMBER", sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER) - .value("ZERG_EXTRACTOR", sc2::UNIT_TYPEID::ZERG_EXTRACTOR) - .value("ZERG_GREATERSPIRE", sc2::UNIT_TYPEID::ZERG_GREATERSPIRE) - .value("ZERG_HATCHERY", sc2::UNIT_TYPEID::ZERG_HATCHERY) - .value("ZERG_HIVE", sc2::UNIT_TYPEID::ZERG_HIVE) - .value("ZERG_HYDRALISK", sc2::UNIT_TYPEID::ZERG_HYDRALISK) - .value("ZERG_HYDRALISKBURROWED", sc2::UNIT_TYPEID::ZERG_HYDRALISKBURROWED) - .value("ZERG_HYDRALISKDEN", sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN) - .value("ZERG_INFESTATIONPIT", sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT) - .value("ZERG_INFESTEDTERRANSEGG", sc2::UNIT_TYPEID::ZERG_INFESTEDTERRANSEGG) - .value("ZERG_INFESTOR", sc2::UNIT_TYPEID::ZERG_INFESTOR) - .value("ZERG_INFESTORBURROWED", sc2::UNIT_TYPEID::ZERG_INFESTORBURROWED) - .value("ZERG_INFESTORTERRAN", sc2::UNIT_TYPEID::ZERG_INFESTORTERRAN) - .value("ZERG_LAIR", sc2::UNIT_TYPEID::ZERG_LAIR) - .value("ZERG_LARVA", sc2::UNIT_TYPEID::ZERG_LARVA) - .value("ZERG_LOCUSTMP", sc2::UNIT_TYPEID::ZERG_LOCUSTMP) - .value("ZERG_LOCUSTMPFLYING", sc2::UNIT_TYPEID::ZERG_LOCUSTMPFLYING) - .value("ZERG_LURKERDENMP", sc2::UNIT_TYPEID::ZERG_LURKERDENMP) - .value("ZERG_LURKERMP", sc2::UNIT_TYPEID::ZERG_LURKERMP) - .value("ZERG_LURKERMPBURROWED", sc2::UNIT_TYPEID::ZERG_LURKERMPBURROWED) - .value("ZERG_LURKERMPEGG", sc2::UNIT_TYPEID::ZERG_LURKERMPEGG) - .value("ZERG_MUTALISK", sc2::UNIT_TYPEID::ZERG_MUTALISK) - .value("ZERG_NYDUSCANAL", sc2::UNIT_TYPEID::ZERG_NYDUSCANAL) - .value("ZERG_NYDUSNETWORK", sc2::UNIT_TYPEID::ZERG_NYDUSNETWORK) - .value("ZERG_OVERLORD", sc2::UNIT_TYPEID::ZERG_OVERLORD) - .value("ZERG_OVERLORDCOCOON", sc2::UNIT_TYPEID::ZERG_OVERLORDCOCOON) - .value("ZERG_OVERLORDTRANSPORT", sc2::UNIT_TYPEID::ZERG_OVERLORDTRANSPORT) - .value("ZERG_OVERSEER", sc2::UNIT_TYPEID::ZERG_OVERSEER) - .value("ZERG_QUEEN", sc2::UNIT_TYPEID::ZERG_QUEEN) - .value("ZERG_QUEENBURROWED", sc2::UNIT_TYPEID::ZERG_QUEENBURROWED) - .value("ZERG_RAVAGER", sc2::UNIT_TYPEID::ZERG_RAVAGER) - .value("ZERG_RAVAGERCOCOON", sc2::UNIT_TYPEID::ZERG_RAVAGERCOCOON) - .value("ZERG_ROACH", sc2::UNIT_TYPEID::ZERG_ROACH) - .value("ZERG_ROACHBURROWED", sc2::UNIT_TYPEID::ZERG_ROACHBURROWED) - .value("ZERG_ROACHWARREN", sc2::UNIT_TYPEID::ZERG_ROACHWARREN) - .value("ZERG_SPAWNINGPOOL", sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL) - .value("ZERG_SPINECRAWLER", sc2::UNIT_TYPEID::ZERG_SPINECRAWLER) - .value("ZERG_SPINECRAWLERUPROOTED", sc2::UNIT_TYPEID::ZERG_SPINECRAWLERUPROOTED) - .value("ZERG_SPIRE", sc2::UNIT_TYPEID::ZERG_SPIRE) - .value("ZERG_SPORECRAWLER", sc2::UNIT_TYPEID::ZERG_SPORECRAWLER) - .value("ZERG_SPORECRAWLERUPROOTED", sc2::UNIT_TYPEID::ZERG_SPORECRAWLERUPROOTED) - .value("ZERG_SWARMHOSTBURROWEDMP", sc2::UNIT_TYPEID::ZERG_SWARMHOSTBURROWEDMP) - .value("ZERG_SWARMHOSTMP", sc2::UNIT_TYPEID::ZERG_SWARMHOSTMP) - .value("ZERG_TRANSPORTOVERLORDCOCOON", sc2::UNIT_TYPEID::ZERG_TRANSPORTOVERLORDCOCOON) - .value("ZERG_ULTRALISK", sc2::UNIT_TYPEID::ZERG_ULTRALISK) - .value("ZERG_ULTRALISKCAVERN", sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN) - .value("ZERG_VIPER", sc2::UNIT_TYPEID::ZERG_VIPER) - .value("ZERG_ZERGLING", sc2::UNIT_TYPEID::ZERG_ZERGLING) - .value("ZERG_ZERGLINGBURROWED", sc2::UNIT_TYPEID::ZERG_ZERGLINGBURROWED) - .value("ZERG_PARASITICBOMBDUMMY", sc2::UNIT_TYPEID::ZERG_PARASITICBOMBDUMMY) - .value("PROTOSS_ADEPT", sc2::UNIT_TYPEID::PROTOSS_ADEPT) - .value("PROTOSS_ADEPTPHASESHIFT", sc2::UNIT_TYPEID::PROTOSS_ADEPTPHASESHIFT) - .value("PROTOSS_ARCHON", sc2::UNIT_TYPEID::PROTOSS_ARCHON) - .value("PROTOSS_ASSIMILATOR", sc2::UNIT_TYPEID::PROTOSS_ASSIMILATOR) - .value("PROTOSS_CARRIER", sc2::UNIT_TYPEID::PROTOSS_CARRIER) - .value("PROTOSS_COLOSSUS", sc2::UNIT_TYPEID::PROTOSS_COLOSSUS) - .value("PROTOSS_CYBERNETICSCORE", sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE) - .value("PROTOSS_DARKSHRINE", sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE) - .value("PROTOSS_DARKTEMPLAR", sc2::UNIT_TYPEID::PROTOSS_DARKTEMPLAR) - .value("PROTOSS_DISRUPTOR", sc2::UNIT_TYPEID::PROTOSS_DISRUPTOR) - .value("PROTOSS_DISRUPTORPHASED", sc2::UNIT_TYPEID::PROTOSS_DISRUPTORPHASED) - .value("PROTOSS_FLEETBEACON", sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON) - .value("PROTOSS_FORGE", sc2::UNIT_TYPEID::PROTOSS_FORGE) - .value("PROTOSS_GATEWAY", sc2::UNIT_TYPEID::PROTOSS_GATEWAY) - .value("PROTOSS_HIGHTEMPLAR", sc2::UNIT_TYPEID::PROTOSS_HIGHTEMPLAR) - .value("PROTOSS_IMMORTAL", sc2::UNIT_TYPEID::PROTOSS_IMMORTAL) - .value("PROTOSS_INTERCEPTOR", sc2::UNIT_TYPEID::PROTOSS_INTERCEPTOR) - .value("PROTOSS_MOTHERSHIP", sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIP) - .value("PROTOSS_MOTHERSHIPCORE", sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIPCORE) - .value("PROTOSS_NEXUS", sc2::UNIT_TYPEID::PROTOSS_NEXUS) - .value("PROTOSS_OBSERVER", sc2::UNIT_TYPEID::PROTOSS_OBSERVER) - .value("PROTOSS_ORACLE", sc2::UNIT_TYPEID::PROTOSS_ORACLE) - .value("PROTOSS_ORACLESTASISTRAP", sc2::UNIT_TYPEID::PROTOSS_ORACLESTASISTRAP) - .value("PROTOSS_PHOENIX", sc2::UNIT_TYPEID::PROTOSS_PHOENIX) - .value("PROTOSS_PHOTONCANNON", sc2::UNIT_TYPEID::PROTOSS_PHOTONCANNON) - .value("PROTOSS_PROBE", sc2::UNIT_TYPEID::PROTOSS_PROBE) - .value("PROTOSS_PYLON", sc2::UNIT_TYPEID::PROTOSS_PYLON) - .value("PROTOSS_PYLONOVERCHARGED", sc2::UNIT_TYPEID::PROTOSS_PYLONOVERCHARGED) - .value("PROTOSS_ROBOTICSBAY", sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY) - .value("PROTOSS_ROBOTICSFACILITY", sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY) - .value("PROTOSS_SENTRY", sc2::UNIT_TYPEID::PROTOSS_SENTRY) - .value("PROTOSS_SHIELDBATTERY", sc2::UNIT_TYPEID::PROTOSS_SHIELDBATTERY) - .value("PROTOSS_STALKER", sc2::UNIT_TYPEID::PROTOSS_STALKER) - .value("PROTOSS_STARGATE", sc2::UNIT_TYPEID::PROTOSS_STARGATE) - .value("PROTOSS_TEMPEST", sc2::UNIT_TYPEID::PROTOSS_TEMPEST) - .value("PROTOSS_TEMPLARARCHIVE", sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE) - .value("PROTOSS_TWILIGHTCOUNCIL", sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL) - .value("PROTOSS_VOIDRAY", sc2::UNIT_TYPEID::PROTOSS_VOIDRAY) - .value("PROTOSS_WARPGATE", sc2::UNIT_TYPEID::PROTOSS_WARPGATE) - .value("PROTOSS_WARPPRISM", sc2::UNIT_TYPEID::PROTOSS_WARPPRISM) - .value("PROTOSS_WARPPRISMPHASING", sc2::UNIT_TYPEID::PROTOSS_WARPPRISMPHASING) - .value("PROTOSS_ZEALOT", sc2::UNIT_TYPEID::PROTOSS_ZEALOT) - .value("NEUTRAL_BATTLESTATIONMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_BATTLESTATIONMINERALFIELD) - .value("NEUTRAL_BATTLESTATIONMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_BATTLESTATIONMINERALFIELD750) - .value("NEUTRAL_COLLAPSIBLEROCKTOWERDEBRIS", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERDEBRIS) - .value("NEUTRAL_COLLAPSIBLEROCKTOWERDIAGONAL", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERDIAGONAL) - .value("NEUTRAL_COLLAPSIBLEROCKTOWERPUSHUNIT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERPUSHUNIT) - .value("NEUTRAL_COLLAPSIBLETERRANTOWERDEBRIS", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERDEBRIS) - .value("NEUTRAL_COLLAPSIBLETERRANTOWERDIAGONAL", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERDIAGONAL) - .value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNIT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNIT) - .value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPLEFT) - .value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPRIGHT) - .value("NEUTRAL_COLLAPSIBLETERRANTOWERRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERRAMPLEFT) - .value("NEUTRAL_COLLAPSIBLETERRANTOWERRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERRAMPRIGHT) - .value("NEUTRAL_DEBRISRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_DEBRISRAMPLEFT) - .value("NEUTRAL_DEBRISRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_DEBRISRAMPRIGHT) - .value("NEUTRAL_DESTRUCTIBLEDEBRIS6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRIS6X6) - .value("NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEBLUR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEBLUR) - .value("NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEULBR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEULBR) - .value("NEUTRAL_DESTRUCTIBLEROCK6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEROCK6X6) - .value("NEUTRAL_DESTRUCTIBLEROCKEX1DIAGONALHUGEBLUR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEROCKEX1DIAGONALHUGEBLUR) - .value("NEUTRAL_FORCEFIELD", sc2::UNIT_TYPEID::NEUTRAL_FORCEFIELD) - .value("NEUTRAL_KARAKFEMALE", sc2::UNIT_TYPEID::NEUTRAL_KARAKFEMALE) - .value("NEUTRAL_LABMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD) - .value("NEUTRAL_LABMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD750) - .value("NEUTRAL_MINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD) - .value("NEUTRAL_MINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD750) - .value("NEUTRAL_PROTOSSVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_PROTOSSVESPENEGEYSER) - .value("NEUTRAL_PURIFIERMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERMINERALFIELD) - .value("NEUTRAL_PURIFIERMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERMINERALFIELD750) - .value("NEUTRAL_PURIFIERRICHMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERRICHMINERALFIELD) - .value("NEUTRAL_PURIFIERRICHMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERRICHMINERALFIELD750) - .value("NEUTRAL_PURIFIERVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERVESPENEGEYSER) - .value("NEUTRAL_RICHMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD) - .value("NEUTRAL_RICHMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD750) - .value("NEUTRAL_RICHVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_RICHVESPENEGEYSER) - .value("NEUTRAL_SCANTIPEDE", sc2::UNIT_TYPEID::NEUTRAL_SCANTIPEDE) - .value("NEUTRAL_SHAKURASVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_SHAKURASVESPENEGEYSER) - .value("NEUTRAL_SPACEPLATFORMGEYSER", sc2::UNIT_TYPEID::NEUTRAL_SPACEPLATFORMGEYSER) - .value("NEUTRAL_UNBUILDABLEBRICKSDESTRUCTIBLE", sc2::UNIT_TYPEID::NEUTRAL_UNBUILDABLEBRICKSDESTRUCTIBLE) - .value("NEUTRAL_UNBUILDABLEPLATESDESTRUCTIBLE", sc2::UNIT_TYPEID::NEUTRAL_UNBUILDABLEPLATESDESTRUCTIBLE) - .value("NEUTRAL_UTILITYBOT", sc2::UNIT_TYPEID::NEUTRAL_UTILITYBOT) - .value("NEUTRAL_VESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_VESPENEGEYSER) - .value("NEUTRAL_XELNAGATOWER", sc2::UNIT_TYPEID::NEUTRAL_XELNAGATOWER) + .value("ABANDONEDBUILDING", sc2::UNIT_TYPEID::ABANDONEDBUILDING) + .value("ABERRATIONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ABERRATIONACGLUESCREENDUMMY) + .value("ACCELERATIONZONEFLYINGLARGE", sc2::UNIT_TYPEID::ACCELERATIONZONEFLYINGLARGE) + .value("ACCELERATIONZONEFLYINGMEDIUM", sc2::UNIT_TYPEID::ACCELERATIONZONEFLYINGMEDIUM) + .value("ACCELERATIONZONEFLYINGSMALL", sc2::UNIT_TYPEID::ACCELERATIONZONEFLYINGSMALL) + .value("ACCELERATIONZONELARGE", sc2::UNIT_TYPEID::ACCELERATIONZONELARGE) + .value("ACCELERATIONZONEMEDIUM", sc2::UNIT_TYPEID::ACCELERATIONZONEMEDIUM) + .value("ACCELERATIONZONESMALL", sc2::UNIT_TYPEID::ACCELERATIONZONESMALL) + .value("ACIDSALIVAWEAPON", sc2::UNIT_TYPEID::ACIDSALIVAWEAPON) + .value("ACIDSPINESWEAPON", sc2::UNIT_TYPEID::ACIDSPINESWEAPON) + .value("ADEPTFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ADEPTFENIXACGLUESCREENDUMMY) + .value("ADEPTPIERCINGWEAPON", sc2::UNIT_TYPEID::ADEPTPIERCINGWEAPON) + .value("ADEPTUPGRADEWEAPON", sc2::UNIT_TYPEID::ADEPTUPGRADEWEAPON) + .value("ADEPTWEAPON", sc2::UNIT_TYPEID::ADEPTWEAPON) + .value("ADJUTANTCAPSULE", sc2::UNIT_TYPEID::ADJUTANTCAPSULE) + .value("AIURLIGHTBRIDGEABANDONEDNE10", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE10) + .value("AIURLIGHTBRIDGEABANDONEDNE10OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE10OUT) + .value("AIURLIGHTBRIDGEABANDONEDNE12", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE12) + .value("AIURLIGHTBRIDGEABANDONEDNE12OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE12OUT) + .value("AIURLIGHTBRIDGEABANDONEDNE8", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE8) + .value("AIURLIGHTBRIDGEABANDONEDNE8OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE8OUT) + .value("AIURLIGHTBRIDGEABANDONEDNW10", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW10) + .value("AIURLIGHTBRIDGEABANDONEDNW10OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW10OUT) + .value("AIURLIGHTBRIDGEABANDONEDNW12", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW12) + .value("AIURLIGHTBRIDGEABANDONEDNW12OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW12OUT) + .value("AIURLIGHTBRIDGEABANDONEDNW8", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW8) + .value("AIURLIGHTBRIDGEABANDONEDNW8OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW8OUT) + .value("AIURLIGHTBRIDGENE10", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE10) + .value("AIURLIGHTBRIDGENE10OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE10OUT) + .value("AIURLIGHTBRIDGENE12", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE12) + .value("AIURLIGHTBRIDGENE12OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE12OUT) + .value("AIURLIGHTBRIDGENE8", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE8) + .value("AIURLIGHTBRIDGENE8OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE8OUT) + .value("AIURLIGHTBRIDGENW10", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW10) + .value("AIURLIGHTBRIDGENW10OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW10OUT) + .value("AIURLIGHTBRIDGENW12", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW12) + .value("AIURLIGHTBRIDGENW12OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW12OUT) + .value("AIURLIGHTBRIDGENW8", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW8) + .value("AIURLIGHTBRIDGENW8OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW8OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLENE10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENE10OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLENE12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENE12OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLENE8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENE8OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLENW10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENW10OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLENW12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENW12OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLENW8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENW8OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLESE10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESE10OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLESE12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESE12OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLESE8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESE8OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLESW10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESW10OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLESW12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESW12OUT) + .value("AIURTEMPLEBRIDGEDESTRUCTIBLESW8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESW8OUT) + .value("AIURTEMPLEBRIDGENE10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENE10OUT) + .value("AIURTEMPLEBRIDGENE12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENE12OUT) + .value("AIURTEMPLEBRIDGENE8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENE8OUT) + .value("AIURTEMPLEBRIDGENW10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENW10OUT) + .value("AIURTEMPLEBRIDGENW12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENW12OUT) + .value("AIURTEMPLEBRIDGENW8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENW8OUT) + .value("ANTEPLOTT", sc2::UNIT_TYPEID::ANTEPLOTT) + .value("ARBITERMP", sc2::UNIT_TYPEID::ARBITERMP) + .value("ARBITERMPWEAPONMISSILE", sc2::UNIT_TYPEID::ARBITERMPWEAPONMISSILE) + .value("ARCHIVE", sc2::UNIT_TYPEID::ARCHIVE) + .value("ARCHIVESEALED", sc2::UNIT_TYPEID::ARCHIVESEALED) + .value("ARCHONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ARCHONACGLUESCREENDUMMY) + .value("ARTANIS", sc2::UNIT_TYPEID::ARTANIS) + .value("ARTIFACT", sc2::UNIT_TYPEID::ARTIFACT) + .value("ARTIFACTPIECE1", sc2::UNIT_TYPEID::ARTIFACTPIECE1) + .value("ARTIFACTPIECE2", sc2::UNIT_TYPEID::ARTIFACTPIECE2) + .value("ARTIFACTPIECE3", sc2::UNIT_TYPEID::ARTIFACTPIECE3) + .value("ARTIFACTPIECE4", sc2::UNIT_TYPEID::ARTIFACTPIECE4) + .value("ARTIFACTPIECE5", sc2::UNIT_TYPEID::ARTIFACTPIECE5) + .value("ARTIFACTVAULT", sc2::UNIT_TYPEID::ARTIFACTVAULT) + .value("ARTILLERYMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ARTILLERYMENGSKACGLUESCREENDUMMY) + .value("ARTOSILOPE", sc2::UNIT_TYPEID::ARTOSILOPE) + .value("ATALASERBATTERYLMWEAPON", sc2::UNIT_TYPEID::ATALASERBATTERYLMWEAPON) + .value("ATSLASERBATTERYLMWEAPON", sc2::UNIT_TYPEID::ATSLASERBATTERYLMWEAPON) + .value("AUTOMATEDREFINERY", sc2::UNIT_TYPEID::AUTOMATEDREFINERY) + .value("AUTOTESTATTACKER", sc2::UNIT_TYPEID::AUTOTESTATTACKER) + .value("AUTOTESTATTACKTARGETAIR", sc2::UNIT_TYPEID::AUTOTESTATTACKTARGETAIR) + .value("AUTOTESTATTACKTARGETGROUND", sc2::UNIT_TYPEID::AUTOTESTATTACKTARGETGROUND) + .value("AUTOTURRETRELEASEWEAPON", sc2::UNIT_TYPEID::AUTOTURRETRELEASEWEAPON) + .value("AVERNUSGATECONTROL", sc2::UNIT_TYPEID::AVERNUSGATECONTROL) + .value("BACKLASHROCKETSLMWEAPON", sc2::UNIT_TYPEID::BACKLASHROCKETSLMWEAPON) + .value("BALL", sc2::UNIT_TYPEID::BALL) + .value("BANELINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BANELINGACGLUESCREENDUMMY) + .value("BANSHEEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BANSHEEACGLUESCREENDUMMY) + .value("BARRACKSTECHREACTOR", sc2::UNIT_TYPEID::BARRACKSTECHREACTOR) + .value("BATTLECRUISERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BATTLECRUISERACGLUESCREENDUMMY) + .value("BATTLECRUISERHELIOS", sc2::UNIT_TYPEID::BATTLECRUISERHELIOS) + .value("BATTLECRUISERHELIOSALMWEAPON", sc2::UNIT_TYPEID::BATTLECRUISERHELIOSALMWEAPON) + .value("BATTLECRUISERHELIOSGLMWEAPON", sc2::UNIT_TYPEID::BATTLECRUISERHELIOSGLMWEAPON) + .value("BATTLECRUISERHELIOSMORPH", sc2::UNIT_TYPEID::BATTLECRUISERHELIOSMORPH) + .value("BATTLECRUISERLOKILMWEAPON", sc2::UNIT_TYPEID::BATTLECRUISERLOKILMWEAPON) + .value("BATTLECRUISERMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BATTLECRUISERMENGSKACGLUESCREENDUMMY) + .value("BEACONARMY", sc2::UNIT_TYPEID::BEACONARMY) + .value("BEACONATTACK", sc2::UNIT_TYPEID::BEACONATTACK) + .value("BEACONAUTO", sc2::UNIT_TYPEID::BEACONAUTO) + .value("BEACONCLAIM", sc2::UNIT_TYPEID::BEACONCLAIM) + .value("BEACONCUSTOM1", sc2::UNIT_TYPEID::BEACONCUSTOM1) + .value("BEACONCUSTOM2", sc2::UNIT_TYPEID::BEACONCUSTOM2) + .value("BEACONCUSTOM3", sc2::UNIT_TYPEID::BEACONCUSTOM3) + .value("BEACONCUSTOM4", sc2::UNIT_TYPEID::BEACONCUSTOM4) + .value("BEACONDEFEND", sc2::UNIT_TYPEID::BEACONDEFEND) + .value("BEACONDETECT", sc2::UNIT_TYPEID::BEACONDETECT) + .value("BEACONEXPAND", sc2::UNIT_TYPEID::BEACONEXPAND) + .value("BEACONHARASS", sc2::UNIT_TYPEID::BEACONHARASS) + .value("BEACONIDLE", sc2::UNIT_TYPEID::BEACONIDLE) + .value("BEACONRALLY", sc2::UNIT_TYPEID::BEACONRALLY) + .value("BEACONSCOUT", sc2::UNIT_TYPEID::BEACONSCOUT) + .value("BEACON_NOVA", sc2::UNIT_TYPEID::BEACON_NOVA) + .value("BEACON_NOVASMALL", sc2::UNIT_TYPEID::BEACON_NOVASMALL) + .value("BEACON_PROTOSS", sc2::UNIT_TYPEID::BEACON_PROTOSS) + .value("BEACON_PROTOSSSMALL", sc2::UNIT_TYPEID::BEACON_PROTOSSSMALL) + .value("BEACON_TERRAN", sc2::UNIT_TYPEID::BEACON_TERRAN) + .value("BEACON_TERRANSMALL", sc2::UNIT_TYPEID::BEACON_TERRANSMALL) + .value("BEACON_ZERG", sc2::UNIT_TYPEID::BEACON_ZERG) + .value("BEACON_ZERGSMALL", sc2::UNIT_TYPEID::BEACON_ZERGSMALL) + .value("BILELAUNCHERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BILELAUNCHERACGLUESCREENDUMMY) + .value("BIODOME", sc2::UNIT_TYPEID::BIODOME) + .value("BIODOMECOMMAND", sc2::UNIT_TYPEID::BIODOMECOMMAND) + .value("BIODOMECOMMANDFLYING", sc2::UNIT_TYPEID::BIODOMECOMMANDFLYING) + .value("BIODOMEHALFBUILT", sc2::UNIT_TYPEID::BIODOMEHALFBUILT) + .value("BIOPLASMIDDISCHARGEWEAPON", sc2::UNIT_TYPEID::BIOPLASMIDDISCHARGEWEAPON) + .value("BIOSTASISMISSILE", sc2::UNIT_TYPEID::BIOSTASISMISSILE) + .value("BLACKOPSMISSILETURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BLACKOPSMISSILETURRETACGLUESCREENDUMMY) + .value("BLASTERBILLYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BLASTERBILLYACGLUESCREENDUMMY) + .value("BLIMP", sc2::UNIT_TYPEID::BLIMP) + .value("BLIMPADS", sc2::UNIT_TYPEID::BLIMPADS) + .value("BLIMPMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BLIMPMENGSKACGLUESCREENDUMMY) + .value("BLOCKER16X16", sc2::UNIT_TYPEID::BLOCKER16X16) + .value("BLOCKER4X4", sc2::UNIT_TYPEID::BLOCKER4X4) + .value("BLOCKER6X6", sc2::UNIT_TYPEID::BLOCKER6X6) + .value("BLOCKER8X8", sc2::UNIT_TYPEID::BLOCKER8X8) + .value("BRAXISALPHADESTRUCTIBLE1X1", sc2::UNIT_TYPEID::BRAXISALPHADESTRUCTIBLE1X1) + .value("BRAXISALPHADESTRUCTIBLE2X2", sc2::UNIT_TYPEID::BRAXISALPHADESTRUCTIBLE2X2) + .value("BREACHINGCHARGE", sc2::UNIT_TYPEID::BREACHINGCHARGE) + .value("BRIDGEBLOCKER4X12", sc2::UNIT_TYPEID::BRIDGEBLOCKER4X12) + .value("BROODLINGESCORT", sc2::UNIT_TYPEID::BROODLINGESCORT) + .value("BROODLORDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BROODLORDACGLUESCREENDUMMY) + .value("BROODLORDAWEAPON", sc2::UNIT_TYPEID::BROODLORDAWEAPON) + .value("BROODLORDBWEAPON", sc2::UNIT_TYPEID::BROODLORDBWEAPON) + .value("BROODLORDEGG", sc2::UNIT_TYPEID::BROODLORDEGG) + .value("BROODLORDEGGMISSILE", sc2::UNIT_TYPEID::BROODLORDEGGMISSILE) + .value("BROODLORDWEAPON", sc2::UNIT_TYPEID::BROODLORDWEAPON) + .value("BRUTALISK", sc2::UNIT_TYPEID::BRUTALISK) + .value("BRUTALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BRUTALISKACGLUESCREENDUMMY) + .value("BRUTALISKWEAPON", sc2::UNIT_TYPEID::BRUTALISKWEAPON) + .value("BUBBACOMMERCIAL", sc2::UNIT_TYPEID::BUBBACOMMERCIAL) + .value("BUNKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BUNKERACGLUESCREENDUMMY) + .value("BUNKERDEPOTMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BUNKERDEPOTMENGSKACGLUESCREENDUMMY) + .value("BUNKERUPGRADEDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BUNKERUPGRADEDACGLUESCREENDUMMY) + .value("BYPASSARMORDRONE", sc2::UNIT_TYPEID::BYPASSARMORDRONE) + .value("CABOOSE", sc2::UNIT_TYPEID::CABOOSE) + .value("CARGOTRUCKUNITBARRELS", sc2::UNIT_TYPEID::CARGOTRUCKUNITBARRELS) + .value("CARGOTRUCKUNITFLATBED", sc2::UNIT_TYPEID::CARGOTRUCKUNITFLATBED) + .value("CARGOTRUCKUNITTRAILER", sc2::UNIT_TYPEID::CARGOTRUCKUNITTRAILER) + .value("CARRIERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CARRIERACGLUESCREENDUMMY) + .value("CARRIERAIURACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CARRIERAIURACGLUESCREENDUMMY) + .value("CARRIERFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CARRIERFENIXACGLUESCREENDUMMY) + .value("CARRIONBIRD", sc2::UNIT_TYPEID::CARRIONBIRD) + .value("CASTANARDESTRUCTIBLEDEBRIS", sc2::UNIT_TYPEID::CASTANARDESTRUCTIBLEDEBRIS) + .value("CASTANARULTRALISKSHACKLEDUNIT", sc2::UNIT_TYPEID::CASTANARULTRALISKSHACKLEDUNIT) + .value("CASTANARWINDOWLARGEDIAGONALBLURUNIT", sc2::UNIT_TYPEID::CASTANARWINDOWLARGEDIAGONALBLURUNIT) + .value("CASTANARWINDOWLARGEDIAGONALULBRUNIT", sc2::UNIT_TYPEID::CASTANARWINDOWLARGEDIAGONALULBRUNIT) + .value("CAUSTICSPRAYMISSILE", sc2::UNIT_TYPEID::CAUSTICSPRAYMISSILE) + .value("CELLBLOCKB", sc2::UNIT_TYPEID::CELLBLOCKB) + .value("CHARDESTRUCTIBLEROCKCOVER", sc2::UNIT_TYPEID::CHARDESTRUCTIBLEROCKCOVER) + .value("CHARDESTRUCTIBLEROCKCOVERULDR", sc2::UNIT_TYPEID::CHARDESTRUCTIBLEROCKCOVERULDR) + .value("CHARDESTRUCTIBLEROCKCOVERURDL", sc2::UNIT_TYPEID::CHARDESTRUCTIBLEROCKCOVERURDL) + .value("CHARDESTRUCTIBLEROCKCOVERV", sc2::UNIT_TYPEID::CHARDESTRUCTIBLEROCKCOVERV) + .value("CHECKSTATION", sc2::UNIT_TYPEID::CHECKSTATION) + .value("CHECKSTATIONDIAGONALBLUR", sc2::UNIT_TYPEID::CHECKSTATIONDIAGONALBLUR) + .value("CHECKSTATIONDIAGONALBLUROPENED", sc2::UNIT_TYPEID::CHECKSTATIONDIAGONALBLUROPENED) + .value("CHECKSTATIONDIAGONALULBR", sc2::UNIT_TYPEID::CHECKSTATIONDIAGONALULBR) + .value("CHECKSTATIONDIAGONALULBROPENED", sc2::UNIT_TYPEID::CHECKSTATIONDIAGONALULBROPENED) + .value("CHECKSTATIONOPENED", sc2::UNIT_TYPEID::CHECKSTATIONOPENED) + .value("CHECKSTATIONVERTICAL", sc2::UNIT_TYPEID::CHECKSTATIONVERTICAL) + .value("CHECKSTATIONVERTICALOPENED", sc2::UNIT_TYPEID::CHECKSTATIONVERTICALOPENED) + .value("CHRYSALISEGG", sc2::UNIT_TYPEID::CHRYSALISEGG) + .value("CIVILIAN", sc2::UNIT_TYPEID::CIVILIAN) + .value("CIVILIANCARSUNIT", sc2::UNIT_TYPEID::CIVILIANCARSUNIT) + .value("CIVILIANFEMALE", sc2::UNIT_TYPEID::CIVILIANFEMALE) + .value("CIVILIANSHIPWRECKED", sc2::UNIT_TYPEID::CIVILIANSHIPWRECKED) + .value("CIVILIANWEAPON", sc2::UNIT_TYPEID::CIVILIANWEAPON) + .value("CLEANINGBOT", sc2::UNIT_TYPEID::CLEANINGBOT) + .value("COLLAPSIBLEPURIFIERTOWERDEBRIS", sc2::UNIT_TYPEID::COLLAPSIBLEPURIFIERTOWERDEBRIS) + .value("COLLAPSIBLEPURIFIERTOWERDIAGONAL", sc2::UNIT_TYPEID::COLLAPSIBLEPURIFIERTOWERDIAGONAL) + .value("COLLAPSIBLEPURIFIERTOWERPUSHUNIT", sc2::UNIT_TYPEID::COLLAPSIBLEPURIFIERTOWERPUSHUNIT) + .value("COLLAPSIBLEROCKTOWER", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWER) + .value("COLLAPSIBLEROCKTOWERDEBRISRAMPLEFT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERDEBRISRAMPLEFT) + .value("COLLAPSIBLEROCKTOWERDEBRISRAMPLEFTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERDEBRISRAMPLEFTGREEN) + .value("COLLAPSIBLEROCKTOWERDEBRISRAMPRIGHT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERDEBRISRAMPRIGHT) + .value("COLLAPSIBLEROCKTOWERDEBRISRAMPRIGHTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERDEBRISRAMPRIGHTGREEN) + .value("COLLAPSIBLEROCKTOWERPUSHUNITRAMPLEFT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERPUSHUNITRAMPLEFT) + .value("COLLAPSIBLEROCKTOWERPUSHUNITRAMPLEFTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERPUSHUNITRAMPLEFTGREEN) + .value("COLLAPSIBLEROCKTOWERPUSHUNITRAMPRIGHT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERPUSHUNITRAMPRIGHT) + .value("COLLAPSIBLEROCKTOWERPUSHUNITRAMPRIGHTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERPUSHUNITRAMPRIGHTGREEN) + .value("COLLAPSIBLEROCKTOWERRAMPLEFT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERRAMPLEFT) + .value("COLLAPSIBLEROCKTOWERRAMPLEFTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERRAMPLEFTGREEN) + .value("COLLAPSIBLEROCKTOWERRAMPRIGHT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERRAMPRIGHT) + .value("COLLAPSIBLEROCKTOWERRAMPRIGHTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERRAMPRIGHTGREEN) + .value("COLLAPSIBLETERRANTOWER", sc2::UNIT_TYPEID::COLLAPSIBLETERRANTOWER) + .value("COLONIST", sc2::UNIT_TYPEID::COLONIST) + .value("COLONISTBIODOME", sc2::UNIT_TYPEID::COLONISTBIODOME) + .value("COLONISTBIODOMEHALFBUILT", sc2::UNIT_TYPEID::COLONISTBIODOMEHALFBUILT) + .value("COLONISTFEMALE", sc2::UNIT_TYPEID::COLONISTFEMALE) + .value("COLONISTHUT", sc2::UNIT_TYPEID::COLONISTHUT) + .value("COLONISTSHIP", sc2::UNIT_TYPEID::COLONISTSHIP) + .value("COLONISTSHIPFLYING", sc2::UNIT_TYPEID::COLONISTSHIPFLYING) + .value("COLONISTSHIPTHANSON02A", sc2::UNIT_TYPEID::COLONISTSHIPTHANSON02A) + .value("COLONISTTRANSPORT", sc2::UNIT_TYPEID::COLONISTTRANSPORT) + .value("COLONISTVEHICLEUNIT", sc2::UNIT_TYPEID::COLONISTVEHICLEUNIT) + .value("COLONISTVEHICLEUNIT01", sc2::UNIT_TYPEID::COLONISTVEHICLEUNIT01) + .value("COLONYINFESTATIONWEAPON", sc2::UNIT_TYPEID::COLONYINFESTATIONWEAPON) + .value("COLOSSUSACGLUESCREENDUMMY", sc2::UNIT_TYPEID::COLOSSUSACGLUESCREENDUMMY) + .value("COLOSSUSFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::COLOSSUSFENIXACGLUESCREENDUMMY) + .value("COLOSSUSPURIFIERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::COLOSSUSPURIFIERACGLUESCREENDUMMY) + .value("COLOSSUSTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::COLOSSUSTALDARIMACGLUESCREENDUMMY) + .value("COMMENTATORBOT1", sc2::UNIT_TYPEID::COMMENTATORBOT1) + .value("COMMENTATORBOT2", sc2::UNIT_TYPEID::COMMENTATORBOT2) + .value("COMMENTATORBOT3", sc2::UNIT_TYPEID::COMMENTATORBOT3) + .value("COMMENTATORBOT4", sc2::UNIT_TYPEID::COMMENTATORBOT4) + .value("COMPOUNDMANSION_DOORE", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORE) + .value("COMPOUNDMANSION_DOORELOWERED", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORELOWERED) + .value("COMPOUNDMANSION_DOORN", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORN) + .value("COMPOUNDMANSION_DOORNE", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORNE) + .value("COMPOUNDMANSION_DOORNELOWERED", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORNELOWERED) + .value("COMPOUNDMANSION_DOORNLOWERED", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORNLOWERED) + .value("COMPOUNDMANSION_DOORNW", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORNW) + .value("COMPOUNDMANSION_DOORNWLOWERED", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORNWLOWERED) + .value("CONSUMEDNAFEEDBACKWEAPON", sc2::UNIT_TYPEID::CONSUMEDNAFEEDBACKWEAPON) + .value("CONTAMINATEWEAPON", sc2::UNIT_TYPEID::CONTAMINATEWEAPON) + .value("CORROSIVEPARASITEWEAPON", sc2::UNIT_TYPEID::CORROSIVEPARASITEWEAPON) + .value("CORRUPTIONWEAPON", sc2::UNIT_TYPEID::CORRUPTIONWEAPON) + .value("CORRUPTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CORRUPTORACGLUESCREENDUMMY) + .value("CORSAIRACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CORSAIRACGLUESCREENDUMMY) + .value("CORSAIRMP", sc2::UNIT_TYPEID::CORSAIRMP) + .value("COVERTBANSHEEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::COVERTBANSHEEACGLUESCREENDUMMY) + .value("COW", sc2::UNIT_TYPEID::COW) + .value("CRABEETLE", sc2::UNIT_TYPEID::CRABEETLE) + .value("CREEPBLOCKER1X1", sc2::UNIT_TYPEID::CREEPBLOCKER1X1) + .value("CREEPBLOCKER4X4", sc2::UNIT_TYPEID::CREEPBLOCKER4X4) + .value("CREEPERHOSTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CREEPERHOSTACGLUESCREENDUMMY) + .value("CREEPONLYBLOCKER4X4", sc2::UNIT_TYPEID::CREEPONLYBLOCKER4X4) + .value("CREEPTUMORMISSILE", sc2::UNIT_TYPEID::CREEPTUMORMISSILE) + .value("CRUISERBIKE", sc2::UNIT_TYPEID::CRUISERBIKE) + .value("CYCLONEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CYCLONEACGLUESCREENDUMMY) + .value("CYCLONEMISSILE", sc2::UNIT_TYPEID::CYCLONEMISSILE) + .value("CYCLONEMISSILELARGE", sc2::UNIT_TYPEID::CYCLONEMISSILELARGE) + .value("CYCLONEMISSILELARGEAIR", sc2::UNIT_TYPEID::CYCLONEMISSILELARGEAIR) + .value("CYCLONEMISSILELARGEAIRALTERNATIVE", sc2::UNIT_TYPEID::CYCLONEMISSILELARGEAIRALTERNATIVE) + .value("D8CHARGE", sc2::UNIT_TYPEID::D8CHARGE) + .value("D8CHARGEWEAPON", sc2::UNIT_TYPEID::D8CHARGEWEAPON) + .value("D8CLUSTERBOMB", sc2::UNIT_TYPEID::D8CLUSTERBOMB) + .value("D8CLUSTERBOMBWEAPON", sc2::UNIT_TYPEID::D8CLUSTERBOMBWEAPON) + .value("DARKARCHONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DARKARCHONACGLUESCREENDUMMY) + .value("DARKPYLONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DARKPYLONACGLUESCREENDUMMY) + .value("DARKTEMPLARSHAKURASACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DARKTEMPLARSHAKURASACGLUESCREENDUMMY) + .value("DATACORE", sc2::UNIT_TYPEID::DATACORE) + .value("DEBRIS2X2NONCONJOINED", sc2::UNIT_TYPEID::DEBRIS2X2NONCONJOINED) + .value("DEFENSEWALLE", sc2::UNIT_TYPEID::DEFENSEWALLE) + .value("DEFENSEWALLN", sc2::UNIT_TYPEID::DEFENSEWALLN) + .value("DEFENSEWALLNE", sc2::UNIT_TYPEID::DEFENSEWALLNE) + .value("DEFENSEWALLNW", sc2::UNIT_TYPEID::DEFENSEWALLNW) + .value("DEFENSEWALLS", sc2::UNIT_TYPEID::DEFENSEWALLS) + .value("DEFENSEWALLSE", sc2::UNIT_TYPEID::DEFENSEWALLSE) + .value("DEFENSEWALLSW", sc2::UNIT_TYPEID::DEFENSEWALLSW) + .value("DEFENSEWALLW", sc2::UNIT_TYPEID::DEFENSEWALLW) + .value("DEFILERBONESAMPLE", sc2::UNIT_TYPEID::DEFILERBONESAMPLE) + .value("DEFILERMP", sc2::UNIT_TYPEID::DEFILERMP) + .value("DEFILERMPBURROWED", sc2::UNIT_TYPEID::DEFILERMPBURROWED) + .value("DEFILERMPDARKSWARMWEAPON", sc2::UNIT_TYPEID::DEFILERMPDARKSWARMWEAPON) + .value("DEFILERMPPLAGUEWEAPON", sc2::UNIT_TYPEID::DEFILERMPPLAGUEWEAPON) + .value("DESERTPLANETSEARCHLIGHT", sc2::UNIT_TYPEID::DESERTPLANETSEARCHLIGHT) + .value("DESERTPLANETSTREETLIGHT", sc2::UNIT_TYPEID::DESERTPLANETSTREETLIGHT) + .value("DESTRUCTIBLEBILLBOARDSCROLLINGTEXT", sc2::UNIT_TYPEID::DESTRUCTIBLEBILLBOARDSCROLLINGTEXT) + .value("DESTRUCTIBLEBILLBOARDTALL", sc2::UNIT_TYPEID::DESTRUCTIBLEBILLBOARDTALL) + .value("DESTRUCTIBLEBULLHORNLIGHTS", sc2::UNIT_TYPEID::DESTRUCTIBLEBULLHORNLIGHTS) + .value("DESTRUCTIBLECITYDEBRIS2X4HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRIS2X4HORIZONTAL) + .value("DESTRUCTIBLECITYDEBRIS2X4VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRIS2X4VERTICAL) + .value("DESTRUCTIBLECITYDEBRIS2X6HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRIS2X6HORIZONTAL) + .value("DESTRUCTIBLECITYDEBRIS2X6VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRIS2X6VERTICAL) + .value("DESTRUCTIBLECITYDEBRIS4X4", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRIS4X4) + .value("DESTRUCTIBLECITYDEBRISHUGEDIAGONALBLUR", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRISHUGEDIAGONALBLUR) + .value("DESTRUCTIBLECITYDEBRISHUGEDIAGONALULBR", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRISHUGEDIAGONALULBR) + .value("DESTRUCTIBLEDEBRIS4X4", sc2::UNIT_TYPEID::DESTRUCTIBLEDEBRIS4X4) + .value("DESTRUCTIBLEEXPEDITIONGATE6X6", sc2::UNIT_TYPEID::DESTRUCTIBLEEXPEDITIONGATE6X6) + .value("DESTRUCTIBLEGARAGE", sc2::UNIT_TYPEID::DESTRUCTIBLEGARAGE) + .value("DESTRUCTIBLEGARAGELARGE", sc2::UNIT_TYPEID::DESTRUCTIBLEGARAGELARGE) + .value("DESTRUCTIBLEGATEDIAGONALBLUR", sc2::UNIT_TYPEID::DESTRUCTIBLEGATEDIAGONALBLUR) + .value("DESTRUCTIBLEGATEDIAGONALBLURLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATEDIAGONALBLURLOWERED) + .value("DESTRUCTIBLEGATEDIAGONALULBR", sc2::UNIT_TYPEID::DESTRUCTIBLEGATEDIAGONALULBR) + .value("DESTRUCTIBLEGATEDIAGONALULBRLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATEDIAGONALULBRLOWERED) + .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTHORIZONTAL) + .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALBF", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALBF) + .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALBFLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALBFLOWERED) + .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALLOWERED) + .value("DESTRUCTIBLEGATESTRAIGHTVERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTVERTICAL) + .value("DESTRUCTIBLEGATESTRAIGHTVERTICALLF", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTVERTICALLF) + .value("DESTRUCTIBLEGATESTRAIGHTVERTICALLFLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTVERTICALLFLOWERED) + .value("DESTRUCTIBLEGATESTRAIGHTVERTICALLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTVERTICALLOWERED) + .value("DESTRUCTIBLEICE2X4HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEICE2X4HORIZONTAL) + .value("DESTRUCTIBLEICE2X4VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEICE2X4VERTICAL) + .value("DESTRUCTIBLEICE2X6HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEICE2X6HORIZONTAL) + .value("DESTRUCTIBLEICE2X6VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEICE2X6VERTICAL) + .value("DESTRUCTIBLEICE4X4", sc2::UNIT_TYPEID::DESTRUCTIBLEICE4X4) + .value("DESTRUCTIBLEICE6X6", sc2::UNIT_TYPEID::DESTRUCTIBLEICE6X6) + .value("DESTRUCTIBLEICEDIAGONALHUGEBLUR", sc2::UNIT_TYPEID::DESTRUCTIBLEICEDIAGONALHUGEBLUR) + .value("DESTRUCTIBLEICEDIAGONALHUGEULBR", sc2::UNIT_TYPEID::DESTRUCTIBLEICEDIAGONALHUGEULBR) + .value("DESTRUCTIBLEICEHORIZONTALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLEICEHORIZONTALHUGE) + .value("DESTRUCTIBLEICEVERTICALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLEICEVERTICALHUGE) + .value("DESTRUCTIBLEKORHALFLAG", sc2::UNIT_TYPEID::DESTRUCTIBLEKORHALFLAG) + .value("DESTRUCTIBLEKORHALFOLIAGE", sc2::UNIT_TYPEID::DESTRUCTIBLEKORHALFOLIAGE) + .value("DESTRUCTIBLEKORHALPODIUM", sc2::UNIT_TYPEID::DESTRUCTIBLEKORHALPODIUM) + .value("DESTRUCTIBLEKORHALTREE", sc2::UNIT_TYPEID::DESTRUCTIBLEKORHALTREE) + .value("DESTRUCTIBLERAMPDIAGONALHUGEBLUR", sc2::UNIT_TYPEID::DESTRUCTIBLERAMPDIAGONALHUGEBLUR) + .value("DESTRUCTIBLERAMPDIAGONALHUGEULBR", sc2::UNIT_TYPEID::DESTRUCTIBLERAMPDIAGONALHUGEULBR) + .value("DESTRUCTIBLERAMPHORIZONTALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLERAMPHORIZONTALHUGE) + .value("DESTRUCTIBLERAMPVERTICALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLERAMPVERTICALHUGE) + .value("DESTRUCTIBLEROCK2X4HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK2X4HORIZONTAL) + .value("DESTRUCTIBLEROCK2X4VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK2X4VERTICAL) + .value("DESTRUCTIBLEROCK2X6HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK2X6HORIZONTAL) + .value("DESTRUCTIBLEROCK2X6VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK2X6VERTICAL) + .value("DESTRUCTIBLEROCK4X4", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK4X4) + .value("DESTRUCTIBLEROCK6X6WEAK", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK6X6WEAK) + .value("DESTRUCTIBLEROCKEX12X4HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX12X4HORIZONTAL) + .value("DESTRUCTIBLEROCKEX12X4VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX12X4VERTICAL) + .value("DESTRUCTIBLEROCKEX12X6HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX12X6HORIZONTAL) + .value("DESTRUCTIBLEROCKEX12X6VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX12X6VERTICAL) + .value("DESTRUCTIBLEROCKEX14X4", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX14X4) + .value("DESTRUCTIBLEROCKEX16X6", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX16X6) + .value("DESTRUCTIBLEROCKEX1DIAGONALHUGEULBR", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX1DIAGONALHUGEULBR) + .value("DESTRUCTIBLEROCKEX1HORIZONTALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX1HORIZONTALHUGE) + .value("DESTRUCTIBLEROCKEX1VERTICALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX1VERTICALHUGE) + .value("DESTRUCTIBLESANDBAGS", sc2::UNIT_TYPEID::DESTRUCTIBLESANDBAGS) + .value("DESTRUCTIBLESEARCHLIGHT", sc2::UNIT_TYPEID::DESTRUCTIBLESEARCHLIGHT) + .value("DESTRUCTIBLESIGNSCONSTRUCTION", sc2::UNIT_TYPEID::DESTRUCTIBLESIGNSCONSTRUCTION) + .value("DESTRUCTIBLESIGNSDIRECTIONAL", sc2::UNIT_TYPEID::DESTRUCTIBLESIGNSDIRECTIONAL) + .value("DESTRUCTIBLESIGNSFUNNY", sc2::UNIT_TYPEID::DESTRUCTIBLESIGNSFUNNY) + .value("DESTRUCTIBLESIGNSICONS", sc2::UNIT_TYPEID::DESTRUCTIBLESIGNSICONS) + .value("DESTRUCTIBLESIGNSWARNING", sc2::UNIT_TYPEID::DESTRUCTIBLESIGNSWARNING) + .value("DESTRUCTIBLESPACEPLATFORMBARRIER", sc2::UNIT_TYPEID::DESTRUCTIBLESPACEPLATFORMBARRIER) + .value("DESTRUCTIBLESPACEPLATFORMSIGN", sc2::UNIT_TYPEID::DESTRUCTIBLESPACEPLATFORMSIGN) + .value("DESTRUCTIBLESTOREFRONTCITYPROPS", sc2::UNIT_TYPEID::DESTRUCTIBLESTOREFRONTCITYPROPS) + .value("DESTRUCTIBLESTREETLIGHT", sc2::UNIT_TYPEID::DESTRUCTIBLESTREETLIGHT) + .value("DESTRUCTIBLETRAFFICSIGNAL", sc2::UNIT_TYPEID::DESTRUCTIBLETRAFFICSIGNAL) + .value("DESTRUCTIBLEWALLCORNER45", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45) + .value("DESTRUCTIBLEWALLCORNER45BL90R", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45BL90R) + .value("DESTRUCTIBLEWALLCORNER45BR90T", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45BR90T) + .value("DESTRUCTIBLEWALLCORNER45UL90B", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45UL90B) + .value("DESTRUCTIBLEWALLCORNER45ULBL", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45ULBL) + .value("DESTRUCTIBLEWALLCORNER45ULUR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45ULUR) + .value("DESTRUCTIBLEWALLCORNER45UR90L", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45UR90L) + .value("DESTRUCTIBLEWALLCORNER45URBR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45URBR) + .value("DESTRUCTIBLEWALLCORNER90B45UR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90B45UR) + .value("DESTRUCTIBLEWALLCORNER90BR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90BR) + .value("DESTRUCTIBLEWALLCORNER90L45BR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90L45BR) + .value("DESTRUCTIBLEWALLCORNER90LB", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90LB) + .value("DESTRUCTIBLEWALLCORNER90LT", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90LT) + .value("DESTRUCTIBLEWALLCORNER90R45UL", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90R45UL) + .value("DESTRUCTIBLEWALLCORNER90T45BL", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90T45BL) + .value("DESTRUCTIBLEWALLCORNER90TR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90TR) + .value("DESTRUCTIBLEWALLDIAGONALBLUR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLDIAGONALBLUR) + .value("DESTRUCTIBLEWALLDIAGONALBLURLF", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLDIAGONALBLURLF) + .value("DESTRUCTIBLEWALLDIAGONALULBR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLDIAGONALULBR) + .value("DESTRUCTIBLEWALLDIAGONALULBRLF", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLDIAGONALULBRLF) + .value("DESTRUCTIBLEWALLSTRAIGHTHORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLSTRAIGHTHORIZONTAL) + .value("DESTRUCTIBLEWALLSTRAIGHTHORIZONTALBF", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLSTRAIGHTHORIZONTALBF) + .value("DESTRUCTIBLEWALLSTRAIGHTVERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLSTRAIGHTVERTICAL) + .value("DESTRUCTIBLEWALLVERTICALLF", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLVERTICALLF) + .value("DESTRUCTIBLEZERGINFESTATION3X3", sc2::UNIT_TYPEID::DESTRUCTIBLEZERGINFESTATION3X3) + .value("DEVASTATIONTURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DEVASTATIONTURRETACGLUESCREENDUMMY) + .value("DEVASTATORMISSILEWEAPON", sc2::UNIT_TYPEID::DEVASTATORMISSILEWEAPON) + .value("DEVILDOG", sc2::UNIT_TYPEID::DEVILDOG) + .value("DEVOURERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DEVOURERACGLUESCREENDUMMY) + .value("DEVOURERCOCOONMP", sc2::UNIT_TYPEID::DEVOURERCOCOONMP) + .value("DEVOURERMP", sc2::UNIT_TYPEID::DEVOURERMP) + .value("DEVOURERMPWEAPONMISSILE", sc2::UNIT_TYPEID::DEVOURERMPWEAPONMISSILE) + .value("DEVOURERTISSUEDOODAD", sc2::UNIT_TYPEID::DEVOURERTISSUEDOODAD) + .value("DEVOURERTISSUEMISSILE", sc2::UNIT_TYPEID::DEVOURERTISSUEMISSILE) + .value("DEVOURERTISSUESAMPLE", sc2::UNIT_TYPEID::DEVOURERTISSUESAMPLE) + .value("DEVOURERTISSUESAMPLETUBE", sc2::UNIT_TYPEID::DEVOURERTISSUESAMPLETUBE) + .value("DIAMONDBACK", sc2::UNIT_TYPEID::DIAMONDBACK) + .value("DIGESTERCREEPSPRAYTARGETUNIT", sc2::UNIT_TYPEID::DIGESTERCREEPSPRAYTARGETUNIT) + .value("DIGESTERCREEPSPRAYUNIT", sc2::UNIT_TYPEID::DIGESTERCREEPSPRAYUNIT) + .value("DISRUPTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DISRUPTORACGLUESCREENDUMMY) + .value("DOG", sc2::UNIT_TYPEID::DOG) + .value("DOMINIONKILLTEAM", sc2::UNIT_TYPEID::DOMINIONKILLTEAM) + .value("DOMINIONKILLTEAMLMWEAPON", sc2::UNIT_TYPEID::DOMINIONKILLTEAMLMWEAPON) + .value("DRAGOONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DRAGOONACGLUESCREENDUMMY) + .value("DRAKKENLASERDRILL", sc2::UNIT_TYPEID::DRAKKENLASERDRILL) + .value("DRBATTLECRUISERALMWEAPON", sc2::UNIT_TYPEID::DRBATTLECRUISERALMWEAPON) + .value("DRBATTLECRUISERGLMWEAPON", sc2::UNIT_TYPEID::DRBATTLECRUISERGLMWEAPON) + .value("DUKESREVENGE", sc2::UNIT_TYPEID::DUKESREVENGE) + .value("DUMPTRUCK", sc2::UNIT_TYPEID::DUMPTRUCK) + .value("DUSKWING", sc2::UNIT_TYPEID::DUSKWING) + .value("DUSKWINGWEAPON", sc2::UNIT_TYPEID::DUSKWINGWEAPON) + .value("EGGPURPLE", sc2::UNIT_TYPEID::EGGPURPLE) + .value("ELEVATORBLOCKER", sc2::UNIT_TYPEID::ELEVATORBLOCKER) + .value("ELITEMARINEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ELITEMARINEACGLUESCREENDUMMY) + .value("ELSECARO_COLONIST_HUT", sc2::UNIT_TYPEID::ELSECARO_COLONIST_HUT) + .value("EMP2WEAPON", sc2::UNIT_TYPEID::EMP2WEAPON) + .value("ENEMYPATHINGBLOCKER16X16", sc2::UNIT_TYPEID::ENEMYPATHINGBLOCKER16X16) + .value("ENEMYPATHINGBLOCKER1X1", sc2::UNIT_TYPEID::ENEMYPATHINGBLOCKER1X1) + .value("ENEMYPATHINGBLOCKER2X2", sc2::UNIT_TYPEID::ENEMYPATHINGBLOCKER2X2) + .value("ENEMYPATHINGBLOCKER4X4", sc2::UNIT_TYPEID::ENEMYPATHINGBLOCKER4X4) + .value("ENEMYPATHINGBLOCKER8X8", sc2::UNIT_TYPEID::ENEMYPATHINGBLOCKER8X8) + .value("EXPERIMENTALPLASMAGUNWEAPON", sc2::UNIT_TYPEID::EXPERIMENTALPLASMAGUNWEAPON) + .value("EXPLODINGBARRELLARGE", sc2::UNIT_TYPEID::EXPLODINGBARRELLARGE) + .value("EXTENDINGBRIDGENEWIDE10", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE10) + .value("EXTENDINGBRIDGENEWIDE10OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE10OUT) + .value("EXTENDINGBRIDGENEWIDE12", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE12) + .value("EXTENDINGBRIDGENEWIDE12OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE12OUT) + .value("EXTENDINGBRIDGENEWIDE8", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE8) + .value("EXTENDINGBRIDGENEWIDE8OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE8OUT) + .value("EXTENDINGBRIDGENWWIDE10", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE10) + .value("EXTENDINGBRIDGENWWIDE10OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE10OUT) + .value("EXTENDINGBRIDGENWWIDE12", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE12) + .value("EXTENDINGBRIDGENWWIDE12OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE12OUT) + .value("EXTENDINGBRIDGENWWIDE8", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE8) + .value("EXTENDINGBRIDGENWWIDE8OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE8OUT) + .value("EYESTALKWEAPON", sc2::UNIT_TYPEID::EYESTALKWEAPON) + .value("FACTORYTECHREACTOR", sc2::UNIT_TYPEID::FACTORYTECHREACTOR) + .value("FEEDERLING", sc2::UNIT_TYPEID::FEEDERLING) + .value("FIREBAT", sc2::UNIT_TYPEID::FIREBAT) + .value("FIREBATACGLUESCREENDUMMY", sc2::UNIT_TYPEID::FIREBATACGLUESCREENDUMMY) + .value("FIREROACHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::FIREROACHACGLUESCREENDUMMY) + .value("FIREWORKSBLUE", sc2::UNIT_TYPEID::FIREWORKSBLUE) + .value("FIREWORKSRED", sc2::UNIT_TYPEID::FIREWORKSRED) + .value("FIREWORKSYELLOW", sc2::UNIT_TYPEID::FIREWORKSYELLOW) + .value("FLAMINGBETTY", sc2::UNIT_TYPEID::FLAMINGBETTY) + .value("FLAMINGBETTYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::FLAMINGBETTYACGLUESCREENDUMMY) + .value("FLATBEDTRUCK", sc2::UNIT_TYPEID::FLATBEDTRUCK) + .value("FLYOVERUNIT", sc2::UNIT_TYPEID::FLYOVERUNIT) + .value("FOOD1000", sc2::UNIT_TYPEID::FOOD1000) + .value("FREIGHTCAR", sc2::UNIT_TYPEID::FREIGHTCAR) + .value("FRENZYWEAPON", sc2::UNIT_TYPEID::FRENZYWEAPON) + .value("FUNGALGROWTHMISSILE", sc2::UNIT_TYPEID::FUNGALGROWTHMISSILE) + .value("FUSIONREACTOR", sc2::UNIT_TYPEID::FUSIONREACTOR) + .value("G4CHARGEWEAPON", sc2::UNIT_TYPEID::G4CHARGEWEAPON) + .value("GASCANISTER", sc2::UNIT_TYPEID::GASCANISTER) + .value("GASCANISTERPROTOSS", sc2::UNIT_TYPEID::GASCANISTERPROTOSS) + .value("GASCANISTERZERG", sc2::UNIT_TYPEID::GASCANISTERZERG) + .value("GATECONTROLUNIT", sc2::UNIT_TYPEID::GATECONTROLUNIT) + .value("GHOSTALTERNATE", sc2::UNIT_TYPEID::GHOSTALTERNATE) + .value("GHOSTLASERLINES", sc2::UNIT_TYPEID::GHOSTLASERLINES) + .value("GHOSTMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::GHOSTMENGSKACGLUESCREENDUMMY) + .value("GHOSTNOVA", sc2::UNIT_TYPEID::GHOSTNOVA) + .value("GLAIVEWURMBOUNCEWEAPON", sc2::UNIT_TYPEID::GLAIVEWURMBOUNCEWEAPON) + .value("GLAIVEWURMM2WEAPON", sc2::UNIT_TYPEID::GLAIVEWURMM2WEAPON) + .value("GLAIVEWURMM3WEAPON", sc2::UNIT_TYPEID::GLAIVEWURMM3WEAPON) + .value("GLAIVEWURMWEAPON", sc2::UNIT_TYPEID::GLAIVEWURMWEAPON) + .value("GLOBESTATUE", sc2::UNIT_TYPEID::GLOBESTATUE) + .value("GOLIATH", sc2::UNIT_TYPEID::GOLIATH) + .value("GOLIATHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::GOLIATHACGLUESCREENDUMMY) + .value("GOLIATHAWEAPON", sc2::UNIT_TYPEID::GOLIATHAWEAPON) + .value("GRAPPLEWEAPON", sc2::UNIT_TYPEID::GRAPPLEWEAPON) + .value("GUARDIANACGLUESCREENDUMMY", sc2::UNIT_TYPEID::GUARDIANACGLUESCREENDUMMY) + .value("GUARDIANCOCOONMP", sc2::UNIT_TYPEID::GUARDIANCOCOONMP) + .value("GUARDIANMP", sc2::UNIT_TYPEID::GUARDIANMP) + .value("GUARDIANMPWEAPON", sc2::UNIT_TYPEID::GUARDIANMPWEAPON) + .value("HAILSTORMMISSILESWEAPON", sc2::UNIT_TYPEID::HAILSTORMMISSILESWEAPON) + .value("HAMMERSECURITY", sc2::UNIT_TYPEID::HAMMERSECURITY) + .value("HAMMERSECURITYLMWEAPON", sc2::UNIT_TYPEID::HAMMERSECURITYLMWEAPON) + .value("HEALINGPOTIONTESTINSTANT", sc2::UNIT_TYPEID::HEALINGPOTIONTESTINSTANT) + .value("HEALINGPOTIONTESTTARGET", sc2::UNIT_TYPEID::HEALINGPOTIONTESTTARGET) + .value("HEAVYSIEGETANKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HEAVYSIEGETANKACGLUESCREENDUMMY) + .value("HELLBATACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HELLBATACGLUESCREENDUMMY) + .value("HELLBATRANGERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HELLBATRANGERACGLUESCREENDUMMY) + .value("HELPEREMITTERSELECTIONARROW", sc2::UNIT_TYPEID::HELPEREMITTERSELECTIONARROW) + .value("HELSANGELASSAULT", sc2::UNIT_TYPEID::HELSANGELASSAULT) + .value("HELSANGELFIGHTER", sc2::UNIT_TYPEID::HELSANGELFIGHTER) + .value("HELSANGELFIGHTERWEAPON", sc2::UNIT_TYPEID::HELSANGELFIGHTERWEAPON) + .value("HERC", sc2::UNIT_TYPEID::HERC) + .value("HERCPLACEMENT", sc2::UNIT_TYPEID::HERCPLACEMENT) + .value("HERCULES", sc2::UNIT_TYPEID::HERCULES) + .value("HERCULESACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HERCULESACGLUESCREENDUMMY) + .value("HERCULESLANDER", sc2::UNIT_TYPEID::HERCULESLANDER) + .value("HERCULESLANDERFLYING", sc2::UNIT_TYPEID::HERCULESLANDERFLYING) + .value("HERONUKE", sc2::UNIT_TYPEID::HERONUKE) + .value("HHBATTLECRUISERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHBATTLECRUISERACGLUESCREENDUMMY) + .value("HHBOMBERPLATFORMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHBOMBERPLATFORMACGLUESCREENDUMMY) + .value("HHHELLIONTANKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHHELLIONTANKACGLUESCREENDUMMY) + .value("HHMERCSTARPORTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHMERCSTARPORTACGLUESCREENDUMMY) + .value("HHMISSILETURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHMISSILETURRETACGLUESCREENDUMMY) + .value("HHRAVENACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHRAVENACGLUESCREENDUMMY) + .value("HHREAPERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHREAPERACGLUESCREENDUMMY) + .value("HHVIKINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHVIKINGACGLUESCREENDUMMY) + .value("HHWIDOWMINEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHWIDOWMINEACGLUESCREENDUMMY) + .value("HHWRAITHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHWRAITHACGLUESCREENDUMMY) + .value("HIGHTEMPLARACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HIGHTEMPLARACGLUESCREENDUMMY) + .value("HIGHTEMPLARSKINPREVIEW", sc2::UNIT_TYPEID::HIGHTEMPLARSKINPREVIEW) + .value("HIGHTEMPLARTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HIGHTEMPLARTALDARIMACGLUESCREENDUMMY) + .value("HIGHTEMPLARWEAPONMISSILE", sc2::UNIT_TYPEID::HIGHTEMPLARWEAPONMISSILE) + .value("HIVEMINDEMULATOR", sc2::UNIT_TYPEID::HIVEMINDEMULATOR) + .value("HOLDINGPEN", sc2::UNIT_TYPEID::HOLDINGPEN) + .value("HOMELARGE", sc2::UNIT_TYPEID::HOMELARGE) + .value("HOMESMALL", sc2::UNIT_TYPEID::HOMESMALL) + .value("HUNTERKILLER", sc2::UNIT_TYPEID::HUNTERKILLER) + .value("HUNTERKILLERBURROWED", sc2::UNIT_TYPEID::HUNTERKILLERBURROWED) + .value("HUNTERKILLERWEAPON", sc2::UNIT_TYPEID::HUNTERKILLERWEAPON) + .value("HUNTERSEEKERWEAPON", sc2::UNIT_TYPEID::HUNTERSEEKERWEAPON) + .value("HURRICANEMISSILELEFT", sc2::UNIT_TYPEID::HURRICANEMISSILELEFT) + .value("HURRICANEMISSILERIGHT", sc2::UNIT_TYPEID::HURRICANEMISSILERIGHT) + .value("HUT", sc2::UNIT_TYPEID::HUT) + .value("HYBRID", sc2::UNIT_TYPEID::HYBRID) + .value("HYBRIDCPLASMAWEAPON", sc2::UNIT_TYPEID::HYBRIDCPLASMAWEAPON) + .value("HYBRIDDESTROYER", sc2::UNIT_TYPEID::HYBRIDDESTROYER) + .value("HYBRIDREAVER", sc2::UNIT_TYPEID::HYBRIDREAVER) + .value("HYBRIDSINGULARITYFEEDBACKWEAPON", sc2::UNIT_TYPEID::HYBRIDSINGULARITYFEEDBACKWEAPON) + .value("HYDRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HYDRALISKACGLUESCREENDUMMY) + .value("HYDRALISKIMPALEMISSILE", sc2::UNIT_TYPEID::HYDRALISKIMPALEMISSILE) + .value("HYDRALISKLURKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HYDRALISKLURKERACGLUESCREENDUMMY) + .value("HYPERION", sc2::UNIT_TYPEID::HYPERION) + .value("HYPERIONALMWEAPON", sc2::UNIT_TYPEID::HYPERIONALMWEAPON) + .value("HYPERIONLMWEAPON", sc2::UNIT_TYPEID::HYPERIONLMWEAPON) + .value("HYPERIONYAMATOSPECIALWEAPON", sc2::UNIT_TYPEID::HYPERIONYAMATOSPECIALWEAPON) + .value("ICE2X2NONCONJOINED", sc2::UNIT_TYPEID::ICE2X2NONCONJOINED) + .value("ICEPROTOSSCRATES", sc2::UNIT_TYPEID::ICEPROTOSSCRATES) + .value("IMMORTALACGLUESCREENDUMMY", sc2::UNIT_TYPEID::IMMORTALACGLUESCREENDUMMY) + .value("IMMORTALFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::IMMORTALFENIXACGLUESCREENDUMMY) + .value("IMMORTALKARAXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::IMMORTALKARAXACGLUESCREENDUMMY) + .value("IMMORTALTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::IMMORTALTALDARIMACGLUESCREENDUMMY) + .value("INFESTABLEBIODOME", sc2::UNIT_TYPEID::INFESTABLEBIODOME) + .value("INFESTABLECOLONISTBIODOME", sc2::UNIT_TYPEID::INFESTABLECOLONISTBIODOME) + .value("INFESTABLECOLONISTHUT", sc2::UNIT_TYPEID::INFESTABLECOLONISTHUT) + .value("INFESTABLEHUT", sc2::UNIT_TYPEID::INFESTABLEHUT) + .value("INFESTATIONSPIRE", sc2::UNIT_TYPEID::INFESTATIONSPIRE) + .value("INFESTEDABOMINATION", sc2::UNIT_TYPEID::INFESTEDABOMINATION) + .value("INFESTEDABOMINATIONBURROWED", sc2::UNIT_TYPEID::INFESTEDABOMINATIONBURROWED) + .value("INFESTEDACIDSPINESWEAPON", sc2::UNIT_TYPEID::INFESTEDACIDSPINESWEAPON) + .value("INFESTEDARMORY", sc2::UNIT_TYPEID::INFESTEDARMORY) + .value("INFESTEDBARRACKS", sc2::UNIT_TYPEID::INFESTEDBARRACKS) + .value("INFESTEDBUNKER", sc2::UNIT_TYPEID::INFESTEDBUNKER) + .value("INFESTEDCC", sc2::UNIT_TYPEID::INFESTEDCC) + .value("INFESTEDCIVILIAN", sc2::UNIT_TYPEID::INFESTEDCIVILIAN) + .value("INFESTEDCIVILIANBURROWED", sc2::UNIT_TYPEID::INFESTEDCIVILIANBURROWED) + .value("INFESTEDCOCOON", sc2::UNIT_TYPEID::INFESTEDCOCOON) + .value("INFESTEDCOLONISTSHIP", sc2::UNIT_TYPEID::INFESTEDCOLONISTSHIP) + .value("INFESTEDENGBAY", sc2::UNIT_TYPEID::INFESTEDENGBAY) + .value("INFESTEDFACTORY", sc2::UNIT_TYPEID::INFESTEDFACTORY) + .value("INFESTEDMERCHAVEN", sc2::UNIT_TYPEID::INFESTEDMERCHAVEN) + .value("INFESTEDMISSILETURRET", sc2::UNIT_TYPEID::INFESTEDMISSILETURRET) + .value("INFESTEDREFINERY", sc2::UNIT_TYPEID::INFESTEDREFINERY) + .value("INFESTEDSTARPORT", sc2::UNIT_TYPEID::INFESTEDSTARPORT) + .value("INFESTEDSUPPLY", sc2::UNIT_TYPEID::INFESTEDSUPPLY) + .value("INFESTEDTERRAN", sc2::UNIT_TYPEID::INFESTEDTERRAN) + .value("INFESTEDTERRANCAMPAIGN", sc2::UNIT_TYPEID::INFESTEDTERRANCAMPAIGN) + .value("INFESTEDTERRANCAMPAIGNBURROWED", sc2::UNIT_TYPEID::INFESTEDTERRANCAMPAIGNBURROWED) + .value("INFESTEDTERRANSEGGPLACEMENT", sc2::UNIT_TYPEID::INFESTEDTERRANSEGGPLACEMENT) + .value("INFESTEDTERRANSWEAPON", sc2::UNIT_TYPEID::INFESTEDTERRANSWEAPON) + .value("INFESTEDVENTBROODLORDEGG", sc2::UNIT_TYPEID::INFESTEDVENTBROODLORDEGG) + .value("INFESTEDVENTCORRUPTOREGG", sc2::UNIT_TYPEID::INFESTEDVENTCORRUPTOREGG) + .value("INFESTEDVENTEGGMISSILE", sc2::UNIT_TYPEID::INFESTEDVENTEGGMISSILE) + .value("INFESTEDVENTMUTALISKEGG", sc2::UNIT_TYPEID::INFESTEDVENTMUTALISKEGG) + .value("INFESTORENSNAREATTACKMISSILE", sc2::UNIT_TYPEID::INFESTORENSNAREATTACKMISSILE) + .value("INFESTORTERRANBURROWED", sc2::UNIT_TYPEID::INFESTORTERRANBURROWED) + .value("INFESTORTERRANSWEAPON", sc2::UNIT_TYPEID::INFESTORTERRANSWEAPON) + .value("INHIBITORZONEFLYINGLARGE", sc2::UNIT_TYPEID::INHIBITORZONEFLYINGLARGE) + .value("INHIBITORZONEFLYINGMEDIUM", sc2::UNIT_TYPEID::INHIBITORZONEFLYINGMEDIUM) + .value("INHIBITORZONEFLYINGSMALL", sc2::UNIT_TYPEID::INHIBITORZONEFLYINGSMALL) + .value("INHIBITORZONELARGE", sc2::UNIT_TYPEID::INHIBITORZONELARGE) + .value("INHIBITORZONEMEDIUM", sc2::UNIT_TYPEID::INHIBITORZONEMEDIUM) + .value("INHIBITORZONESMALL", sc2::UNIT_TYPEID::INHIBITORZONESMALL) + .value("INVALID", sc2::UNIT_TYPEID::INVALID) + .value("INVISIBLEPYLON", sc2::UNIT_TYPEID::INVISIBLEPYLON) + .value("INVISIBLETARGETDUMMY", sc2::UNIT_TYPEID::INVISIBLETARGETDUMMY) + .value("IONCANNONSWEAPON", sc2::UNIT_TYPEID::IONCANNONSWEAPON) + .value("IPISTOLAD", sc2::UNIT_TYPEID::IPISTOLAD) + .value("ITEMGRAVITYBOMBS", sc2::UNIT_TYPEID::ITEMGRAVITYBOMBS) + .value("ITEMGRAVITYBOMBSWEAPON", sc2::UNIT_TYPEID::ITEMGRAVITYBOMBSWEAPON) + .value("ITEMGRENADES", sc2::UNIT_TYPEID::ITEMGRENADES) + .value("ITEMGRENADESWEAPON", sc2::UNIT_TYPEID::ITEMGRENADESWEAPON) + .value("ITEMMEDKIT", sc2::UNIT_TYPEID::ITEMMEDKIT) + .value("ITEMMINES", sc2::UNIT_TYPEID::ITEMMINES) + .value("JORIUMSTOCKPILE", sc2::UNIT_TYPEID::JORIUMSTOCKPILE) + .value("KARAKMALE", sc2::UNIT_TYPEID::KARAKMALE) + .value("KARASS", sc2::UNIT_TYPEID::KARASS) + .value("KARASSWEAPON", sc2::UNIT_TYPEID::KARASSWEAPON) + .value("KD8CHARGEWEAPON", sc2::UNIT_TYPEID::KD8CHARGEWEAPON) + .value("KERRIGAN", sc2::UNIT_TYPEID::KERRIGAN) + .value("KERRIGANCHAR", sc2::UNIT_TYPEID::KERRIGANCHAR) + .value("KERRIGANCHARBURROWED", sc2::UNIT_TYPEID::KERRIGANCHARBURROWED) + .value("KERRIGANCHARWEAPON", sc2::UNIT_TYPEID::KERRIGANCHARWEAPON) + .value("KERRIGANEGG", sc2::UNIT_TYPEID::KERRIGANEGG) + .value("KERRIGANWEAPON", sc2::UNIT_TYPEID::KERRIGANWEAPON) + .value("KHAYDARINMONOLITHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::KHAYDARINMONOLITHACGLUESCREENDUMMY) + .value("L800ETC_AD", sc2::UNIT_TYPEID::L800ETC_AD) + .value("LABBOT", sc2::UNIT_TYPEID::LABBOT) + .value("LARVARELEASEMISSILE", sc2::UNIT_TYPEID::LARVARELEASEMISSILE) + .value("LEVIATHAN", sc2::UNIT_TYPEID::LEVIATHAN) + .value("LEVIATHANACGLUESCREENDUMMY", sc2::UNIT_TYPEID::LEVIATHANACGLUESCREENDUMMY) + .value("LEVIATHANSCOURGEMISSILE", sc2::UNIT_TYPEID::LEVIATHANSCOURGEMISSILE) + .value("LIBERATORAGMISSILE", sc2::UNIT_TYPEID::LIBERATORAGMISSILE) + .value("LIBERATORDAMAGEMISSILE", sc2::UNIT_TYPEID::LIBERATORDAMAGEMISSILE) + .value("LIBERATORMISSILE", sc2::UNIT_TYPEID::LIBERATORMISSILE) + .value("LIBERATORSKINPREVIEW", sc2::UNIT_TYPEID::LIBERATORSKINPREVIEW) + .value("LIGHTNINGBOMBWEAPON", sc2::UNIT_TYPEID::LIGHTNINGBOMBWEAPON) + .value("LOCUSTMPEGGAMISSILEWEAPON", sc2::UNIT_TYPEID::LOCUSTMPEGGAMISSILEWEAPON) + .value("LOCUSTMPEGGBMISSILEWEAPON", sc2::UNIT_TYPEID::LOCUSTMPEGGBMISSILEWEAPON) + .value("LOCUSTMPPRECURSOR", sc2::UNIT_TYPEID::LOCUSTMPPRECURSOR) + .value("LOCUSTMPWEAPON", sc2::UNIT_TYPEID::LOCUSTMPWEAPON) + .value("LOGISTICSHEADQUARTERS", sc2::UNIT_TYPEID::LOGISTICSHEADQUARTERS) + .value("LOKI", sc2::UNIT_TYPEID::LOKI) + .value("LOKIHURRICANEMISSILELEFT", sc2::UNIT_TYPEID::LOKIHURRICANEMISSILELEFT) + .value("LOKIHURRICANEMISSILERIGHT", sc2::UNIT_TYPEID::LOKIHURRICANEMISSILERIGHT) + .value("LOKIYAMATOWEAPON", sc2::UNIT_TYPEID::LOKIYAMATOWEAPON) + .value("LONGBOLTMISSILEWEAPON", sc2::UNIT_TYPEID::LONGBOLTMISSILEWEAPON) + .value("LURKER", sc2::UNIT_TYPEID::LURKER) + .value("LURKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::LURKERACGLUESCREENDUMMY) + .value("LURKERBURROWED", sc2::UNIT_TYPEID::LURKERBURROWED) + .value("LURKERDEN", sc2::UNIT_TYPEID::LURKERDEN) + .value("LURKEREGG", sc2::UNIT_TYPEID::LURKEREGG) + .value("LYOTE", sc2::UNIT_TYPEID::LYOTE) + .value("MAAR", sc2::UNIT_TYPEID::MAAR) + .value("MAARWARPINUNIT", sc2::UNIT_TYPEID::MAARWARPINUNIT) + .value("MAINCELLBLOCK", sc2::UNIT_TYPEID::MAINCELLBLOCK) + .value("MARAUDERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MARAUDERACGLUESCREENDUMMY) + .value("MARAUDERCOMMANDOACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MARAUDERCOMMANDOACGLUESCREENDUMMY) + .value("MARAUDERMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MARAUDERMENGSKACGLUESCREENDUMMY) + .value("MARINEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MARINEACGLUESCREENDUMMY) + .value("MARSARABRIDGEBLUR", sc2::UNIT_TYPEID::MARSARABRIDGEBLUR) + .value("MARSARABRIDGEBRUL", sc2::UNIT_TYPEID::MARSARABRIDGEBRUL) + .value("MECHABANELINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHABANELINGACGLUESCREENDUMMY) + .value("MECHABATTLECARRIERLORDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHABATTLECARRIERLORDACGLUESCREENDUMMY) + .value("MECHACORRUPTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHACORRUPTORACGLUESCREENDUMMY) + .value("MECHAHYDRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHAHYDRALISKACGLUESCREENDUMMY) + .value("MECHAINFESTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHAINFESTORACGLUESCREENDUMMY) + .value("MECHALURKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHALURKERACGLUESCREENDUMMY) + .value("MECHAOVERSEERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHAOVERSEERACGLUESCREENDUMMY) + .value("MECHASPINECRAWLERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHASPINECRAWLERACGLUESCREENDUMMY) + .value("MECHASPORECRAWLERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHASPORECRAWLERACGLUESCREENDUMMY) + .value("MECHAULTRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHAULTRALISKACGLUESCREENDUMMY) + .value("MECHAZERGLINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHAZERGLINGACGLUESCREENDUMMY) + .value("MEDIC", sc2::UNIT_TYPEID::MEDIC) + .value("MEDICACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MEDICACGLUESCREENDUMMY) + .value("MEDIVACMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MEDIVACMENGSKACGLUESCREENDUMMY) + .value("MENGSKHOLOGRAMBILLBOARD", sc2::UNIT_TYPEID::MENGSKHOLOGRAMBILLBOARD) + .value("MENGSKSTATUE", sc2::UNIT_TYPEID::MENGSKSTATUE) + .value("MENGSKSTATUEALONE", sc2::UNIT_TYPEID::MENGSKSTATUEALONE) + .value("MERCCOMPOUND", sc2::UNIT_TYPEID::MERCCOMPOUND) + .value("MERCENARYFORTRESS", sc2::UNIT_TYPEID::MERCENARYFORTRESS) + .value("METALGATEDIAGONALBLUR", sc2::UNIT_TYPEID::METALGATEDIAGONALBLUR) + .value("METALGATEDIAGONALBLURLOWERED", sc2::UNIT_TYPEID::METALGATEDIAGONALBLURLOWERED) + .value("METALGATEDIAGONALULBR", sc2::UNIT_TYPEID::METALGATEDIAGONALULBR) + .value("METALGATEDIAGONALULBRLOWERED", sc2::UNIT_TYPEID::METALGATEDIAGONALULBRLOWERED) + .value("METALGATESTRAIGHTHORIZONTAL", sc2::UNIT_TYPEID::METALGATESTRAIGHTHORIZONTAL) + .value("METALGATESTRAIGHTHORIZONTALBF", sc2::UNIT_TYPEID::METALGATESTRAIGHTHORIZONTALBF) + .value("METALGATESTRAIGHTHORIZONTALBFLOWERED", sc2::UNIT_TYPEID::METALGATESTRAIGHTHORIZONTALBFLOWERED) + .value("METALGATESTRAIGHTHORIZONTALLOWERED", sc2::UNIT_TYPEID::METALGATESTRAIGHTHORIZONTALLOWERED) + .value("METALGATESTRAIGHTVERTICAL", sc2::UNIT_TYPEID::METALGATESTRAIGHTVERTICAL) + .value("METALGATESTRAIGHTVERTICALLF", sc2::UNIT_TYPEID::METALGATESTRAIGHTVERTICALLF) + .value("METALGATESTRAIGHTVERTICALLFLOWERED", sc2::UNIT_TYPEID::METALGATESTRAIGHTVERTICALLFLOWERED) + .value("METALGATESTRAIGHTVERTICALLOWERED", sc2::UNIT_TYPEID::METALGATESTRAIGHTVERTICALLOWERED) + .value("MINDSIPHONRETURNWEAPON", sc2::UNIT_TYPEID::MINDSIPHONRETURNWEAPON) + .value("MINDSIPHONWEAPON", sc2::UNIT_TYPEID::MINDSIPHONWEAPON) + .value("MINERALCRYSTAL", sc2::UNIT_TYPEID::MINERALCRYSTAL) + .value("MINERALFIELDOPAQUE", sc2::UNIT_TYPEID::MINERALFIELDOPAQUE) + .value("MINERALFIELDOPAQUE900", sc2::UNIT_TYPEID::MINERALFIELDOPAQUE900) + .value("MINERMALE", sc2::UNIT_TYPEID::MINERMALE) + .value("MISSILETURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MISSILETURRETACGLUESCREENDUMMY) + .value("MISSILETURRETMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MISSILETURRETMENGSKACGLUESCREENDUMMY) + .value("MOHANDAR", sc2::UNIT_TYPEID::MOHANDAR) + .value("MONLYTHARTIFACTFORCEFIELD", sc2::UNIT_TYPEID::MONLYTHARTIFACTFORCEFIELD) + .value("MONLYTHFORCEFIELDSTATUE", sc2::UNIT_TYPEID::MONLYTHFORCEFIELDSTATUE) + .value("MONOLITH", sc2::UNIT_TYPEID::MONOLITH) + .value("MOOPY", sc2::UNIT_TYPEID::MOOPY) + .value("MOTHERSHIPCOREWEAPONWEAPON", sc2::UNIT_TYPEID::MOTHERSHIPCOREWEAPONWEAPON) + .value("MULTIKILLOBJECT", sc2::UNIT_TYPEID::MULTIKILLOBJECT) + .value("MURLOCMARINE", sc2::UNIT_TYPEID::MURLOCMARINE) + .value("MUTALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MUTALISKACGLUESCREENDUMMY) + .value("MUTALISKBROODLORDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MUTALISKBROODLORDACGLUESCREENDUMMY) + .value("MUTALISKEGG", sc2::UNIT_TYPEID::MUTALISKEGG) + .value("MUTALISKEGGMISSILE", sc2::UNIT_TYPEID::MUTALISKEGGMISSILE) + .value("NATURALGAS", sc2::UNIT_TYPEID::NATURALGAS) + .value("NATURALMINERALS", sc2::UNIT_TYPEID::NATURALMINERALS) + .value("NATURALMINERALSRED", sc2::UNIT_TYPEID::NATURALMINERALSRED) + .value("NEEDLESPINESWEAPON", sc2::UNIT_TYPEID::NEEDLESPINESWEAPON) + .value("NEURALPARASITETENTACLEMISSILE", sc2::UNIT_TYPEID::NEURALPARASITETENTACLEMISSILE) + .value("NEURALPARASITEWEAPON", sc2::UNIT_TYPEID::NEURALPARASITEWEAPON) + .value("NEUTRAL_BATTLESTATIONMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_BATTLESTATIONMINERALFIELD) + .value("NEUTRAL_BATTLESTATIONMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_BATTLESTATIONMINERALFIELD750) + .value("NEUTRAL_COLLAPSIBLEROCKTOWERDEBRIS", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERDEBRIS) + .value("NEUTRAL_COLLAPSIBLEROCKTOWERDIAGONAL", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERDIAGONAL) + .value("NEUTRAL_COLLAPSIBLEROCKTOWERPUSHUNIT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERPUSHUNIT) + .value("NEUTRAL_COLLAPSIBLETERRANTOWERDEBRIS", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERDEBRIS) + .value("NEUTRAL_COLLAPSIBLETERRANTOWERDIAGONAL", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERDIAGONAL) + .value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNIT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNIT) + .value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPLEFT) + .value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPRIGHT) + .value("NEUTRAL_COLLAPSIBLETERRANTOWERRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERRAMPLEFT) + .value("NEUTRAL_COLLAPSIBLETERRANTOWERRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERRAMPRIGHT) + .value("NEUTRAL_DEBRISRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_DEBRISRAMPLEFT) + .value("NEUTRAL_DEBRISRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_DEBRISRAMPRIGHT) + .value("NEUTRAL_DESTRUCTIBLECITYDEBRIS6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLECITYDEBRIS6X6) + .value("NEUTRAL_DESTRUCTIBLEDEBRIS6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRIS6X6) + .value("NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEBLUR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEBLUR) + .value("NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEULBR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEULBR) + .value("NEUTRAL_DESTRUCTIBLEROCK6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEROCK6X6) + .value("NEUTRAL_DESTRUCTIBLEROCKEX1DIAGONALHUGEBLUR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEROCKEX1DIAGONALHUGEBLUR) + .value("NEUTRAL_FORCEFIELD", sc2::UNIT_TYPEID::NEUTRAL_FORCEFIELD) + .value("NEUTRAL_KARAKFEMALE", sc2::UNIT_TYPEID::NEUTRAL_KARAKFEMALE) + .value("NEUTRAL_LABMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD) + .value("NEUTRAL_LABMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD750) + .value("NEUTRAL_MINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD) + .value("NEUTRAL_MINERALFIELD450", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD450) + .value("NEUTRAL_MINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD750) + .value("NEUTRAL_PROTOSSVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_PROTOSSVESPENEGEYSER) + .value("NEUTRAL_PURIFIERMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERMINERALFIELD) + .value("NEUTRAL_PURIFIERMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERMINERALFIELD750) + .value("NEUTRAL_PURIFIERRICHMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERRICHMINERALFIELD) + .value("NEUTRAL_PURIFIERRICHMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERRICHMINERALFIELD750) + .value("NEUTRAL_PURIFIERVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERVESPENEGEYSER) + .value("NEUTRAL_RICHMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD) + .value("NEUTRAL_RICHMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD750) + .value("NEUTRAL_RICHVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_RICHVESPENEGEYSER) + .value("NEUTRAL_SCANTIPEDE", sc2::UNIT_TYPEID::NEUTRAL_SCANTIPEDE) + .value("NEUTRAL_SHAKURASVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_SHAKURASVESPENEGEYSER) + .value("NEUTRAL_SPACEPLATFORMGEYSER", sc2::UNIT_TYPEID::NEUTRAL_SPACEPLATFORMGEYSER) + .value("NEUTRAL_UNBUILDABLEBRICKSDESTRUCTIBLE", sc2::UNIT_TYPEID::NEUTRAL_UNBUILDABLEBRICKSDESTRUCTIBLE) + .value("NEUTRAL_UNBUILDABLEPLATESDESTRUCTIBLE", sc2::UNIT_TYPEID::NEUTRAL_UNBUILDABLEPLATESDESTRUCTIBLE) + .value("NEUTRAL_UTILITYBOT", sc2::UNIT_TYPEID::NEUTRAL_UTILITYBOT) + .value("NEUTRAL_VESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_VESPENEGEYSER) + .value("NEUTRAL_XELNAGATOWER", sc2::UNIT_TYPEID::NEUTRAL_XELNAGATOWER) + .value("NEWFOLSOMPRISONENTRANCE", sc2::UNIT_TYPEID::NEWFOLSOMPRISONENTRANCE) + .value("NEWSARCTURUSINTERVIEWSET", sc2::UNIT_TYPEID::NEWSARCTURUSINTERVIEWSET) + .value("NEWSARCTURUSPRESSROOM", sc2::UNIT_TYPEID::NEWSARCTURUSPRESSROOM) + .value("NEWSMEINHOFFREFUGEECENTER", sc2::UNIT_TYPEID::NEWSMEINHOFFREFUGEECENTER) + .value("NEWSRAYNORLOGO", sc2::UNIT_TYPEID::NEWSRAYNORLOGO) + .value("NEWSTVEFFECT", sc2::UNIT_TYPEID::NEWSTVEFFECT) + .value("NOVA", sc2::UNIT_TYPEID::NOVA) + .value("NUKENOODLESCOMMERCIAL", sc2::UNIT_TYPEID::NUKENOODLESCOMMERCIAL) + .value("NUKEPACK", sc2::UNIT_TYPEID::NUKEPACK) + .value("NUKESILONOVA", sc2::UNIT_TYPEID::NUKESILONOVA) + .value("NYDUSCANALATTACKER", sc2::UNIT_TYPEID::NYDUSCANALATTACKER) + .value("NYDUSCANALATTACKERWEAPON", sc2::UNIT_TYPEID::NYDUSCANALATTACKERWEAPON) + .value("NYDUSCANALCREEPER", sc2::UNIT_TYPEID::NYDUSCANALCREEPER) + .value("NYDUSNETWORKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::NYDUSNETWORKACGLUESCREENDUMMY) + .value("NYDUSWORMLAVADEATH", sc2::UNIT_TYPEID::NYDUSWORMLAVADEATH) + .value("OBELISK", sc2::UNIT_TYPEID::OBELISK) + .value("OBSERVERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::OBSERVERACGLUESCREENDUMMY) + .value("OBSERVERFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::OBSERVERFENIXACGLUESCREENDUMMY) + .value("ODIN", sc2::UNIT_TYPEID::ODIN) + .value("ODINAAWEAPON", sc2::UNIT_TYPEID::ODINAAWEAPON) + .value("ODINBUILD", sc2::UNIT_TYPEID::ODINBUILD) + .value("ODINWRECKAGE", sc2::UNIT_TYPEID::ODINWRECKAGE) + .value("OMEGALISK", sc2::UNIT_TYPEID::OMEGALISK) + .value("OMEGALISKBURROWED", sc2::UNIT_TYPEID::OMEGALISKBURROWED) + .value("OMEGANETWORKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::OMEGANETWORKACGLUESCREENDUMMY) + .value("ORACLEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ORACLEACGLUESCREENDUMMY) + .value("ORACLEWEAPON", sc2::UNIT_TYPEID::ORACLEWEAPON) + .value("ORBITALCOMMANDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ORBITALCOMMANDACGLUESCREENDUMMY) + .value("OVERLORDGENERATECREEPKEYBIND", sc2::UNIT_TYPEID::OVERLORDGENERATECREEPKEYBIND) + .value("OVERMIND", sc2::UNIT_TYPEID::OVERMIND) + .value("OVERMINDREMAINS", sc2::UNIT_TYPEID::OVERMINDREMAINS) + .value("OVERSEERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::OVERSEERACGLUESCREENDUMMY) + .value("OVERSEERZAGARAACGLUESCREENDUMMY", sc2::UNIT_TYPEID::OVERSEERZAGARAACGLUESCREENDUMMY) + .value("PALLETGAS", sc2::UNIT_TYPEID::PALLETGAS) + .value("PALLETMINERALS", sc2::UNIT_TYPEID::PALLETMINERALS) + .value("PARASITESPOREWEAPON", sc2::UNIT_TYPEID::PARASITESPOREWEAPON) + .value("PARASITICBOMBMISSILE", sc2::UNIT_TYPEID::PARASITICBOMBMISSILE) + .value("PARASITICBOMBRELAYDUMMY", sc2::UNIT_TYPEID::PARASITICBOMBRELAYDUMMY) + .value("PATHINGBLOCKER1X1", sc2::UNIT_TYPEID::PATHINGBLOCKER1X1) + .value("PATHINGBLOCKER2X2", sc2::UNIT_TYPEID::PATHINGBLOCKER2X2) + .value("PATHINGBLOCKERRADIUS1", sc2::UNIT_TYPEID::PATHINGBLOCKERRADIUS1) + .value("PERDITIONTURRET", sc2::UNIT_TYPEID::PERDITIONTURRET) + .value("PERDITIONTURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PERDITIONTURRETACGLUESCREENDUMMY) + .value("PERDITIONTURRETUNDERGROUND", sc2::UNIT_TYPEID::PERDITIONTURRETUNDERGROUND) + .value("PERMANENTCREEPBLOCKER1X1", sc2::UNIT_TYPEID::PERMANENTCREEPBLOCKER1X1) + .value("PHOENIXAIURACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PHOENIXAIURACGLUESCREENDUMMY) + .value("PHOENIXPURIFIERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PHOENIXPURIFIERACGLUESCREENDUMMY) + .value("PHOTONCANNONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PHOTONCANNONACGLUESCREENDUMMY) + .value("PHOTONCANNONFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PHOTONCANNONFENIXACGLUESCREENDUMMY) + .value("PHOTONCANNONTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PHOTONCANNONTALDARIMACGLUESCREENDUMMY) + .value("PHOTONCANNONWEAPON", sc2::UNIT_TYPEID::PHOTONCANNONWEAPON) + .value("PHYSICSCAPSULE", sc2::UNIT_TYPEID::PHYSICSCAPSULE) + .value("PHYSICSCUBE", sc2::UNIT_TYPEID::PHYSICSCUBE) + .value("PHYSICSCYLINDER", sc2::UNIT_TYPEID::PHYSICSCYLINDER) + .value("PHYSICSKNOT", sc2::UNIT_TYPEID::PHYSICSKNOT) + .value("PHYSICSL", sc2::UNIT_TYPEID::PHYSICSL) + .value("PHYSICSPRIMITIVES", sc2::UNIT_TYPEID::PHYSICSPRIMITIVES) + .value("PHYSICSSPHERE", sc2::UNIT_TYPEID::PHYSICSSPHERE) + .value("PHYSICSSTAR", sc2::UNIT_TYPEID::PHYSICSSTAR) + .value("PICKUPCHRONORIFTCHARGE", sc2::UNIT_TYPEID::PICKUPCHRONORIFTCHARGE) + .value("PICKUPCHRONORIFTDEVICE", sc2::UNIT_TYPEID::PICKUPCHRONORIFTDEVICE) + .value("PICKUPENERGY100", sc2::UNIT_TYPEID::PICKUPENERGY100) + .value("PICKUPENERGY25", sc2::UNIT_TYPEID::PICKUPENERGY25) + .value("PICKUPENERGY50", sc2::UNIT_TYPEID::PICKUPENERGY50) + .value("PICKUPENERGYFULL", sc2::UNIT_TYPEID::PICKUPENERGYFULL) + .value("PICKUPGRENADES", sc2::UNIT_TYPEID::PICKUPGRENADES) + .value("PICKUPHEALTH100", sc2::UNIT_TYPEID::PICKUPHEALTH100) + .value("PICKUPHEALTH25", sc2::UNIT_TYPEID::PICKUPHEALTH25) + .value("PICKUPHEALTH50", sc2::UNIT_TYPEID::PICKUPHEALTH50) + .value("PICKUPHEALTHFULL", sc2::UNIT_TYPEID::PICKUPHEALTHFULL) + .value("PICKUPMANARECHARGE", sc2::UNIT_TYPEID::PICKUPMANARECHARGE) + .value("PICKUPMEDICRECHARGE", sc2::UNIT_TYPEID::PICKUPMEDICRECHARGE) + .value("PICKUPMINES", sc2::UNIT_TYPEID::PICKUPMINES) + .value("PICKUPPALLETGAS", sc2::UNIT_TYPEID::PICKUPPALLETGAS) + .value("PICKUPPALLETMINERALS", sc2::UNIT_TYPEID::PICKUPPALLETMINERALS) + .value("PICKUPPLASMAGUN", sc2::UNIT_TYPEID::PICKUPPLASMAGUN) + .value("PICKUPPLASMAROUNDS", sc2::UNIT_TYPEID::PICKUPPLASMAROUNDS) + .value("PICKUPPSISTORM", sc2::UNIT_TYPEID::PICKUPPSISTORM) + .value("PICKUPRESTORATIONCHARGE", sc2::UNIT_TYPEID::PICKUPRESTORATIONCHARGE) + .value("PICKUPSCRAPSALVAGE1X1", sc2::UNIT_TYPEID::PICKUPSCRAPSALVAGE1X1) + .value("PICKUPSCRAPSALVAGE2X2", sc2::UNIT_TYPEID::PICKUPSCRAPSALVAGE2X2) + .value("PICKUPSCRAPSALVAGE3X3", sc2::UNIT_TYPEID::PICKUPSCRAPSALVAGE3X3) + .value("PLASMATORPEDOESWEAPON", sc2::UNIT_TYPEID::PLASMATORPEDOESWEAPON) + .value("PLATFORMCONNECTOR", sc2::UNIT_TYPEID::PLATFORMCONNECTOR) + .value("POINTDEFENSEDRONERELEASEWEAPON", sc2::UNIT_TYPEID::POINTDEFENSEDRONERELEASEWEAPON) + .value("PORTCITY_BRIDGE_UNITE10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE10) + .value("PORTCITY_BRIDGE_UNITE10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE10OUT) + .value("PORTCITY_BRIDGE_UNITE12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE12) + .value("PORTCITY_BRIDGE_UNITE12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE12OUT) + .value("PORTCITY_BRIDGE_UNITE8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE8) + .value("PORTCITY_BRIDGE_UNITE8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE8OUT) + .value("PORTCITY_BRIDGE_UNITN10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN10) + .value("PORTCITY_BRIDGE_UNITN10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN10OUT) + .value("PORTCITY_BRIDGE_UNITN12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN12) + .value("PORTCITY_BRIDGE_UNITN12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN12OUT) + .value("PORTCITY_BRIDGE_UNITN8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN8) + .value("PORTCITY_BRIDGE_UNITN8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN8OUT) + .value("PORTCITY_BRIDGE_UNITNE10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE10) + .value("PORTCITY_BRIDGE_UNITNE10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE10OUT) + .value("PORTCITY_BRIDGE_UNITNE12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE12) + .value("PORTCITY_BRIDGE_UNITNE12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE12OUT) + .value("PORTCITY_BRIDGE_UNITNE8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE8) + .value("PORTCITY_BRIDGE_UNITNE8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE8OUT) + .value("PORTCITY_BRIDGE_UNITNW10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW10) + .value("PORTCITY_BRIDGE_UNITNW10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW10OUT) + .value("PORTCITY_BRIDGE_UNITNW12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW12) + .value("PORTCITY_BRIDGE_UNITNW12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW12OUT) + .value("PORTCITY_BRIDGE_UNITNW8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW8) + .value("PORTCITY_BRIDGE_UNITNW8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW8OUT) + .value("PORTCITY_BRIDGE_UNITS10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS10) + .value("PORTCITY_BRIDGE_UNITS10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS10OUT) + .value("PORTCITY_BRIDGE_UNITS12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS12) + .value("PORTCITY_BRIDGE_UNITS12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS12OUT) + .value("PORTCITY_BRIDGE_UNITS8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS8) + .value("PORTCITY_BRIDGE_UNITS8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS8OUT) + .value("PORTCITY_BRIDGE_UNITSE10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE10) + .value("PORTCITY_BRIDGE_UNITSE10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE10OUT) + .value("PORTCITY_BRIDGE_UNITSE12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE12) + .value("PORTCITY_BRIDGE_UNITSE12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE12OUT) + .value("PORTCITY_BRIDGE_UNITSE8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE8) + .value("PORTCITY_BRIDGE_UNITSE8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE8OUT) + .value("PORTCITY_BRIDGE_UNITSW10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW10) + .value("PORTCITY_BRIDGE_UNITSW10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW10OUT) + .value("PORTCITY_BRIDGE_UNITSW12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW12) + .value("PORTCITY_BRIDGE_UNITSW12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW12OUT) + .value("PORTCITY_BRIDGE_UNITSW8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW8) + .value("PORTCITY_BRIDGE_UNITSW8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW8OUT) + .value("PORTCITY_BRIDGE_UNITW10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW10) + .value("PORTCITY_BRIDGE_UNITW10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW10OUT) + .value("PORTCITY_BRIDGE_UNITW12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW12) + .value("PORTCITY_BRIDGE_UNITW12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW12OUT) + .value("PORTCITY_BRIDGE_UNITW8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW8) + .value("PORTCITY_BRIDGE_UNITW8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW8OUT) + .value("PORTJUNKER", sc2::UNIT_TYPEID::PORTJUNKER) + .value("PREDATOR", sc2::UNIT_TYPEID::PREDATOR) + .value("PRESERVERA", sc2::UNIT_TYPEID::PRESERVERA) + .value("PRESERVERB", sc2::UNIT_TYPEID::PRESERVERB) + .value("PRESERVERBASE", sc2::UNIT_TYPEID::PRESERVERBASE) + .value("PRESERVERC", sc2::UNIT_TYPEID::PRESERVERC) + .value("PRESERVERPRISON", sc2::UNIT_TYPEID::PRESERVERPRISON) + .value("PRIMALGUARDIANACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALGUARDIANACGLUESCREENDUMMY) + .value("PRIMALHYDRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALHYDRALISKACGLUESCREENDUMMY) + .value("PRIMALIMPALERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALIMPALERACGLUESCREENDUMMY) + .value("PRIMALMUTALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALMUTALISKACGLUESCREENDUMMY) + .value("PRIMALROACHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALROACHACGLUESCREENDUMMY) + .value("PRIMALSWARMHOSTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALSWARMHOSTACGLUESCREENDUMMY) + .value("PRIMALULTRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALULTRALISKACGLUESCREENDUMMY) + .value("PRIMALWURMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALWURMACGLUESCREENDUMMY) + .value("PRIMALZERGLINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALZERGLINGACGLUESCREENDUMMY) + .value("PRISONERCIVILIAN", sc2::UNIT_TYPEID::PRISONERCIVILIAN) + .value("PRISONERSPECTRE", sc2::UNIT_TYPEID::PRISONERSPECTRE) + .value("PRISONZEALOT", sc2::UNIT_TYPEID::PRISONZEALOT) + .value("PROTOSSCRATES", sc2::UNIT_TYPEID::PROTOSSCRATES) + .value("PROTOSSPSIELEMENTS", sc2::UNIT_TYPEID::PROTOSSPSIELEMENTS) + .value("PROTOSSRELIC", sc2::UNIT_TYPEID::PROTOSSRELIC) + .value("PROTOSSSNAKESEGMENTDEMO", sc2::UNIT_TYPEID::PROTOSSSNAKESEGMENTDEMO) + .value("PROTOSS_ADEPT", sc2::UNIT_TYPEID::PROTOSS_ADEPT) + .value("PROTOSS_ADEPTPHASESHIFT", sc2::UNIT_TYPEID::PROTOSS_ADEPTPHASESHIFT) + .value("PROTOSS_ARCHON", sc2::UNIT_TYPEID::PROTOSS_ARCHON) + .value("PROTOSS_ASSIMILATOR", sc2::UNIT_TYPEID::PROTOSS_ASSIMILATOR) + .value("PROTOSS_ASSIMILATORRICH", sc2::UNIT_TYPEID::PROTOSS_ASSIMILATORRICH) + .value("PROTOSS_CARRIER", sc2::UNIT_TYPEID::PROTOSS_CARRIER) + .value("PROTOSS_COLOSSUS", sc2::UNIT_TYPEID::PROTOSS_COLOSSUS) + .value("PROTOSS_CYBERNETICSCORE", sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE) + .value("PROTOSS_DARKSHRINE", sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE) + .value("PROTOSS_DARKTEMPLAR", sc2::UNIT_TYPEID::PROTOSS_DARKTEMPLAR) + .value("PROTOSS_DISRUPTOR", sc2::UNIT_TYPEID::PROTOSS_DISRUPTOR) + .value("PROTOSS_DISRUPTORPHASED", sc2::UNIT_TYPEID::PROTOSS_DISRUPTORPHASED) + .value("PROTOSS_FLEETBEACON", sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON) + .value("PROTOSS_FORGE", sc2::UNIT_TYPEID::PROTOSS_FORGE) + .value("PROTOSS_GATEWAY", sc2::UNIT_TYPEID::PROTOSS_GATEWAY) + .value("PROTOSS_HIGHTEMPLAR", sc2::UNIT_TYPEID::PROTOSS_HIGHTEMPLAR) + .value("PROTOSS_IMMORTAL", sc2::UNIT_TYPEID::PROTOSS_IMMORTAL) + .value("PROTOSS_INTERCEPTOR", sc2::UNIT_TYPEID::PROTOSS_INTERCEPTOR) + .value("PROTOSS_MOTHERSHIP", sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIP) + .value("PROTOSS_MOTHERSHIPCORE", sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIPCORE) + .value("PROTOSS_NEXUS", sc2::UNIT_TYPEID::PROTOSS_NEXUS) + .value("PROTOSS_OBSERVER", sc2::UNIT_TYPEID::PROTOSS_OBSERVER) + .value("PROTOSS_OBSERVERSIEGEMODE", sc2::UNIT_TYPEID::PROTOSS_OBSERVERSIEGEMODE) + .value("PROTOSS_ORACLE", sc2::UNIT_TYPEID::PROTOSS_ORACLE) + .value("PROTOSS_ORACLESTASISTRAP", sc2::UNIT_TYPEID::PROTOSS_ORACLESTASISTRAP) + .value("PROTOSS_PHOENIX", sc2::UNIT_TYPEID::PROTOSS_PHOENIX) + .value("PROTOSS_PHOTONCANNON", sc2::UNIT_TYPEID::PROTOSS_PHOTONCANNON) + .value("PROTOSS_PROBE", sc2::UNIT_TYPEID::PROTOSS_PROBE) + .value("PROTOSS_PYLON", sc2::UNIT_TYPEID::PROTOSS_PYLON) + .value("PROTOSS_PYLONOVERCHARGED", sc2::UNIT_TYPEID::PROTOSS_PYLONOVERCHARGED) + .value("PROTOSS_ROBOTICSBAY", sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY) + .value("PROTOSS_ROBOTICSFACILITY", sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY) + .value("PROTOSS_SENTRY", sc2::UNIT_TYPEID::PROTOSS_SENTRY) + .value("PROTOSS_SHIELDBATTERY", sc2::UNIT_TYPEID::PROTOSS_SHIELDBATTERY) + .value("PROTOSS_STALKER", sc2::UNIT_TYPEID::PROTOSS_STALKER) + .value("PROTOSS_STARGATE", sc2::UNIT_TYPEID::PROTOSS_STARGATE) + .value("PROTOSS_TEMPEST", sc2::UNIT_TYPEID::PROTOSS_TEMPEST) + .value("PROTOSS_TEMPLARARCHIVE", sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE) + .value("PROTOSS_TWILIGHTCOUNCIL", sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL) + .value("PROTOSS_VOIDRAY", sc2::UNIT_TYPEID::PROTOSS_VOIDRAY) + .value("PROTOSS_WARPGATE", sc2::UNIT_TYPEID::PROTOSS_WARPGATE) + .value("PROTOSS_WARPPRISM", sc2::UNIT_TYPEID::PROTOSS_WARPPRISM) + .value("PROTOSS_WARPPRISMPHASING", sc2::UNIT_TYPEID::PROTOSS_WARPPRISMPHASING) + .value("PROTOSS_ZEALOT", sc2::UNIT_TYPEID::PROTOSS_ZEALOT) + .value("PSIDISRUPTOR", sc2::UNIT_TYPEID::PSIDISRUPTOR) + .value("PSIINDOCTRINATOR", sc2::UNIT_TYPEID::PSIINDOCTRINATOR) + .value("PSIOPSCOMMERCIAL", sc2::UNIT_TYPEID::PSIOPSCOMMERCIAL) + .value("PSISHOCKWEAPON", sc2::UNIT_TYPEID::PSISHOCKWEAPON) + .value("PUNISHERGRENADESLMWEAPON", sc2::UNIT_TYPEID::PUNISHERGRENADESLMWEAPON) + .value("PURIFIER", sc2::UNIT_TYPEID::PURIFIER) + .value("PURIFIERBLASTMARKUNIT", sc2::UNIT_TYPEID::PURIFIERBLASTMARKUNIT) + .value("PYGALISK", sc2::UNIT_TYPEID::PYGALISK) + .value("PYGALISKCOCOON", sc2::UNIT_TYPEID::PYGALISKCOCOON) + .value("QUEENCOOPACGLUESCREENDUMMY", sc2::UNIT_TYPEID::QUEENCOOPACGLUESCREENDUMMY) + .value("QUEENMP", sc2::UNIT_TYPEID::QUEENMP) + .value("QUEENMPENSNAREMISSILE", sc2::UNIT_TYPEID::QUEENMPENSNAREMISSILE) + .value("QUEENMPSPAWNBROODLINGSMISSILE", sc2::UNIT_TYPEID::QUEENMPSPAWNBROODLINGSMISSILE) + .value("QUEENZAGARAACGLUESCREENDUMMY", sc2::UNIT_TYPEID::QUEENZAGARAACGLUESCREENDUMMY) + .value("QUESTIONMARK", sc2::UNIT_TYPEID::QUESTIONMARK) + .value("RAIDLIBERATORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAIDLIBERATORACGLUESCREENDUMMY) + .value("RAILGUNTURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAILGUNTURRETACGLUESCREENDUMMY) + .value("RAPTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAPTORACGLUESCREENDUMMY) + .value("RAVAGERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAVAGERACGLUESCREENDUMMY) + .value("RAVAGERBURROWED", sc2::UNIT_TYPEID::RAVAGERBURROWED) + .value("RAVAGERCORROSIVEBILEMISSILE", sc2::UNIT_TYPEID::RAVAGERCORROSIVEBILEMISSILE) + .value("RAVAGERWEAPONMISSILE", sc2::UNIT_TYPEID::RAVAGERWEAPONMISSILE) + .value("RAVASAURACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAVASAURACGLUESCREENDUMMY) + .value("RAVENREPAIRDRONE", sc2::UNIT_TYPEID::RAVENREPAIRDRONE) + .value("RAVENREPAIRDRONERELEASEWEAPON", sc2::UNIT_TYPEID::RAVENREPAIRDRONERELEASEWEAPON) + .value("RAVENSCRAMBLERMISSILE", sc2::UNIT_TYPEID::RAVENSCRAMBLERMISSILE) + .value("RAVENSHREDDERMISSILEWEAPON", sc2::UNIT_TYPEID::RAVENSHREDDERMISSILEWEAPON) + .value("RAVENTYPEIIACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAVENTYPEIIACGLUESCREENDUMMY) + .value("RAYNOR", sc2::UNIT_TYPEID::RAYNOR) + .value("RAYNOR01", sc2::UNIT_TYPEID::RAYNOR01) + .value("RAYNORCOMMANDO", sc2::UNIT_TYPEID::RAYNORCOMMANDO) + .value("REAPERPLACEHOLDER", sc2::UNIT_TYPEID::REAPERPLACEHOLDER) + .value("REAPERPLACEMENT", sc2::UNIT_TYPEID::REAPERPLACEMENT) + .value("REAVERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::REAVERACGLUESCREENDUMMY) + .value("REDSTONELAVACRITTER", sc2::UNIT_TYPEID::REDSTONELAVACRITTER) + .value("REDSTONELAVACRITTERBURROWED", sc2::UNIT_TYPEID::REDSTONELAVACRITTERBURROWED) + .value("REDSTONELAVACRITTERINJURED", sc2::UNIT_TYPEID::REDSTONELAVACRITTERINJURED) + .value("REDSTONELAVACRITTERINJUREDBURROWED", sc2::UNIT_TYPEID::REDSTONELAVACRITTERINJUREDBURROWED) + .value("RELEASEINTERCEPTORSBEACON", sc2::UNIT_TYPEID::RELEASEINTERCEPTORSBEACON) + .value("RENEGADELONGBOLTMISSILEWEAPON", sc2::UNIT_TYPEID::RENEGADELONGBOLTMISSILEWEAPON) + .value("RENEGADEMISSILETURRET", sc2::UNIT_TYPEID::RENEGADEMISSILETURRET) + .value("REPLICANT", sc2::UNIT_TYPEID::REPLICANT) + .value("REPTILECRATE", sc2::UNIT_TYPEID::REPTILECRATE) + .value("REPULSERFIELD10", sc2::UNIT_TYPEID::REPULSERFIELD10) + .value("REPULSERFIELD12", sc2::UNIT_TYPEID::REPULSERFIELD12) + .value("REPULSERFIELD6", sc2::UNIT_TYPEID::REPULSERFIELD6) + .value("REPULSERFIELD8", sc2::UNIT_TYPEID::REPULSERFIELD8) + .value("REPULSORCANNONWEAPON", sc2::UNIT_TYPEID::REPULSORCANNONWEAPON) + .value("RESOURCEBLOCKER", sc2::UNIT_TYPEID::RESOURCEBLOCKER) + .value("RIPFIELDGENERATOR", sc2::UNIT_TYPEID::RIPFIELDGENERATOR) + .value("RIPFIELDGENERATORSMALL", sc2::UNIT_TYPEID::RIPFIELDGENERATORSMALL) + .value("ROACHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ROACHACGLUESCREENDUMMY) + .value("ROACHVILEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ROACHVILEACGLUESCREENDUMMY) + .value("ROCKS2X2NONCONJOINED", sc2::UNIT_TYPEID::ROCKS2X2NONCONJOINED) + .value("ROUGHTERRAIN", sc2::UNIT_TYPEID::ROUGHTERRAIN) + .value("SCIENCEFACILITY", sc2::UNIT_TYPEID::SCIENCEFACILITY) + .value("SCIENCEVESSEL", sc2::UNIT_TYPEID::SCIENCEVESSEL) + .value("SCIENCEVESSELACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SCIENCEVESSELACGLUESCREENDUMMY) + .value("SCIENTIST", sc2::UNIT_TYPEID::SCIENTIST) + .value("SCOPETEST", sc2::UNIT_TYPEID::SCOPETEST) + .value("SCOURGE", sc2::UNIT_TYPEID::SCOURGE) + .value("SCOURGEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SCOURGEACGLUESCREENDUMMY) + .value("SCOURGEMP", sc2::UNIT_TYPEID::SCOURGEMP) + .value("SCOUT", sc2::UNIT_TYPEID::SCOUT) + .value("SCOUTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SCOUTACGLUESCREENDUMMY) + .value("SCOUTAIRWEAPONLEFT", sc2::UNIT_TYPEID::SCOUTAIRWEAPONLEFT) + .value("SCOUTAIRWEAPONRIGHT", sc2::UNIT_TYPEID::SCOUTAIRWEAPONRIGHT) + .value("SCOUTMP", sc2::UNIT_TYPEID::SCOUTMP) + .value("SCOUTMPAIRWEAPONLEFT", sc2::UNIT_TYPEID::SCOUTMPAIRWEAPONLEFT) + .value("SCOUTMPAIRWEAPONRIGHT", sc2::UNIT_TYPEID::SCOUTMPAIRWEAPONRIGHT) + .value("SCRAPHUGE", sc2::UNIT_TYPEID::SCRAPHUGE) + .value("SCRAPSALVAGE1X1", sc2::UNIT_TYPEID::SCRAPSALVAGE1X1) + .value("SCRAPSALVAGE2X2", sc2::UNIT_TYPEID::SCRAPSALVAGE2X2) + .value("SCRAPSALVAGE3X3", sc2::UNIT_TYPEID::SCRAPSALVAGE3X3) + .value("SECRETDOCUMENTS", sc2::UNIT_TYPEID::SECRETDOCUMENTS) + .value("SECURITYGATEDIAGONALBLUR", sc2::UNIT_TYPEID::SECURITYGATEDIAGONALBLUR) + .value("SECURITYGATEDIAGONALBLURLOWERED", sc2::UNIT_TYPEID::SECURITYGATEDIAGONALBLURLOWERED) + .value("SECURITYGATEDIAGONALULBR", sc2::UNIT_TYPEID::SECURITYGATEDIAGONALULBR) + .value("SECURITYGATEDIAGONALULBRLOWERED", sc2::UNIT_TYPEID::SECURITYGATEDIAGONALULBRLOWERED) + .value("SECURITYGATESTRAIGHTHORIZONTAL", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTHORIZONTAL) + .value("SECURITYGATESTRAIGHTHORIZONTALBF", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTHORIZONTALBF) + .value("SECURITYGATESTRAIGHTHORIZONTALBFLOWERED", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTHORIZONTALBFLOWERED) + .value("SECURITYGATESTRAIGHTHORIZONTALLOWERED", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTHORIZONTALLOWERED) + .value("SECURITYGATESTRAIGHTVERTICAL", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTVERTICAL) + .value("SECURITYGATESTRAIGHTVERTICALLF", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTVERTICALLF) + .value("SECURITYGATESTRAIGHTVERTICALLFLOWERED", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTVERTICALLFLOWERED) + .value("SECURITYGATESTRAIGHTVERTICALLOWERED", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTVERTICALLOWERED) + .value("SEEKERMISSILE", sc2::UNIT_TYPEID::SEEKERMISSILE) + .value("SELENDIS", sc2::UNIT_TYPEID::SELENDIS) + .value("SELENDISINTERCEPTOR", sc2::UNIT_TYPEID::SELENDISINTERCEPTOR) + .value("SENTRYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SENTRYACGLUESCREENDUMMY) + .value("SENTRYFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SENTRYFENIXACGLUESCREENDUMMY) + .value("SENTRYGUN", sc2::UNIT_TYPEID::SENTRYGUN) + .value("SENTRYGUNUNDERGROUND", sc2::UNIT_TYPEID::SENTRYGUNUNDERGROUND) + .value("SENTRYPURIFIERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SENTRYPURIFIERACGLUESCREENDUMMY) + .value("SENTRYTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SENTRYTALDARIMACGLUESCREENDUMMY) + .value("SHAKURASLIGHTBRIDGENE10", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE10) + .value("SHAKURASLIGHTBRIDGENE10OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE10OUT) + .value("SHAKURASLIGHTBRIDGENE12", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE12) + .value("SHAKURASLIGHTBRIDGENE12OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE12OUT) + .value("SHAKURASLIGHTBRIDGENE8", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE8) + .value("SHAKURASLIGHTBRIDGENE8OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE8OUT) + .value("SHAKURASLIGHTBRIDGENW10", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW10) + .value("SHAKURASLIGHTBRIDGENW10OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW10OUT) + .value("SHAKURASLIGHTBRIDGENW12", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW12) + .value("SHAKURASLIGHTBRIDGENW12OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW12OUT) + .value("SHAKURASLIGHTBRIDGENW8", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW8) + .value("SHAKURASLIGHTBRIDGENW8OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW8OUT) + .value("SHAPE4POINTSTAR", sc2::UNIT_TYPEID::SHAPE4POINTSTAR) + .value("SHAPE5POINTSTAR", sc2::UNIT_TYPEID::SHAPE5POINTSTAR) + .value("SHAPE6POINTSTAR", sc2::UNIT_TYPEID::SHAPE6POINTSTAR) + .value("SHAPE8POINTSTAR", sc2::UNIT_TYPEID::SHAPE8POINTSTAR) + .value("SHAPEAPPLE", sc2::UNIT_TYPEID::SHAPEAPPLE) + .value("SHAPEARROWPOINTER", sc2::UNIT_TYPEID::SHAPEARROWPOINTER) + .value("SHAPEBANANA", sc2::UNIT_TYPEID::SHAPEBANANA) + .value("SHAPEBASEBALL", sc2::UNIT_TYPEID::SHAPEBASEBALL) + .value("SHAPEBASEBALLBAT", sc2::UNIT_TYPEID::SHAPEBASEBALLBAT) + .value("SHAPEBASKETBALL", sc2::UNIT_TYPEID::SHAPEBASKETBALL) + .value("SHAPEBOWL", sc2::UNIT_TYPEID::SHAPEBOWL) + .value("SHAPEBOX", sc2::UNIT_TYPEID::SHAPEBOX) + .value("SHAPECAPSULE", sc2::UNIT_TYPEID::SHAPECAPSULE) + .value("SHAPECARROT", sc2::UNIT_TYPEID::SHAPECARROT) + .value("SHAPECASHLARGE", sc2::UNIT_TYPEID::SHAPECASHLARGE) + .value("SHAPECASHMEDIUM", sc2::UNIT_TYPEID::SHAPECASHMEDIUM) + .value("SHAPECASHSMALL", sc2::UNIT_TYPEID::SHAPECASHSMALL) + .value("SHAPECHERRY", sc2::UNIT_TYPEID::SHAPECHERRY) + .value("SHAPECONE", sc2::UNIT_TYPEID::SHAPECONE) + .value("SHAPECRESCENTMOON", sc2::UNIT_TYPEID::SHAPECRESCENTMOON) + .value("SHAPECUBE", sc2::UNIT_TYPEID::SHAPECUBE) + .value("SHAPECYLINDER", sc2::UNIT_TYPEID::SHAPECYLINDER) + .value("SHAPEDECAHEDRON", sc2::UNIT_TYPEID::SHAPEDECAHEDRON) + .value("SHAPEDIAMOND", sc2::UNIT_TYPEID::SHAPEDIAMOND) + .value("SHAPEDODECAHEDRON", sc2::UNIT_TYPEID::SHAPEDODECAHEDRON) + .value("SHAPEDOLLARSIGN", sc2::UNIT_TYPEID::SHAPEDOLLARSIGN) + .value("SHAPEEGG", sc2::UNIT_TYPEID::SHAPEEGG) + .value("SHAPEEUROSIGN", sc2::UNIT_TYPEID::SHAPEEUROSIGN) + .value("SHAPEFOOTBALL", sc2::UNIT_TYPEID::SHAPEFOOTBALL) + .value("SHAPEFOOTBALLCOLORED", sc2::UNIT_TYPEID::SHAPEFOOTBALLCOLORED) + .value("SHAPEGEMSTONE", sc2::UNIT_TYPEID::SHAPEGEMSTONE) + .value("SHAPEGOLFBALL", sc2::UNIT_TYPEID::SHAPEGOLFBALL) + .value("SHAPEGOLFCLUB", sc2::UNIT_TYPEID::SHAPEGOLFCLUB) + .value("SHAPEGRAPE", sc2::UNIT_TYPEID::SHAPEGRAPE) + .value("SHAPEHAND", sc2::UNIT_TYPEID::SHAPEHAND) + .value("SHAPEHEART", sc2::UNIT_TYPEID::SHAPEHEART) + .value("SHAPEHOCKEYPUCK", sc2::UNIT_TYPEID::SHAPEHOCKEYPUCK) + .value("SHAPEHOCKEYSTICK", sc2::UNIT_TYPEID::SHAPEHOCKEYSTICK) + .value("SHAPEHORSESHOE", sc2::UNIT_TYPEID::SHAPEHORSESHOE) + .value("SHAPEICOSAHEDRON", sc2::UNIT_TYPEID::SHAPEICOSAHEDRON) + .value("SHAPEJACK", sc2::UNIT_TYPEID::SHAPEJACK) + .value("SHAPELEMON", sc2::UNIT_TYPEID::SHAPELEMON) + .value("SHAPELEMONSMALL", sc2::UNIT_TYPEID::SHAPELEMONSMALL) + .value("SHAPEMONEYBAG", sc2::UNIT_TYPEID::SHAPEMONEYBAG) + .value("SHAPEO", sc2::UNIT_TYPEID::SHAPEO) + .value("SHAPEOCTAHEDRON", sc2::UNIT_TYPEID::SHAPEOCTAHEDRON) + .value("SHAPEORANGE", sc2::UNIT_TYPEID::SHAPEORANGE) + .value("SHAPEORANGESMALL", sc2::UNIT_TYPEID::SHAPEORANGESMALL) + .value("SHAPEPEANUT", sc2::UNIT_TYPEID::SHAPEPEANUT) + .value("SHAPEPEAR", sc2::UNIT_TYPEID::SHAPEPEAR) + .value("SHAPEPINEAPPLE", sc2::UNIT_TYPEID::SHAPEPINEAPPLE) + .value("SHAPEPLUSSIGN", sc2::UNIT_TYPEID::SHAPEPLUSSIGN) + .value("SHAPEPOUNDSIGN", sc2::UNIT_TYPEID::SHAPEPOUNDSIGN) + .value("SHAPEPYRAMID", sc2::UNIT_TYPEID::SHAPEPYRAMID) + .value("SHAPERAINBOW", sc2::UNIT_TYPEID::SHAPERAINBOW) + .value("SHAPEROUNDEDCUBE", sc2::UNIT_TYPEID::SHAPEROUNDEDCUBE) + .value("SHAPESADFACE", sc2::UNIT_TYPEID::SHAPESADFACE) + .value("SHAPESHAMROCK", sc2::UNIT_TYPEID::SHAPESHAMROCK) + .value("SHAPESMILEYFACE", sc2::UNIT_TYPEID::SHAPESMILEYFACE) + .value("SHAPESOCCERBALL", sc2::UNIT_TYPEID::SHAPESOCCERBALL) + .value("SHAPESPADE", sc2::UNIT_TYPEID::SHAPESPADE) + .value("SHAPESPHERE", sc2::UNIT_TYPEID::SHAPESPHERE) + .value("SHAPESTRAWBERRY", sc2::UNIT_TYPEID::SHAPESTRAWBERRY) + .value("SHAPETENNISBALL", sc2::UNIT_TYPEID::SHAPETENNISBALL) + .value("SHAPETETRAHEDRON", sc2::UNIT_TYPEID::SHAPETETRAHEDRON) + .value("SHAPETHICKTORUS", sc2::UNIT_TYPEID::SHAPETHICKTORUS) + .value("SHAPETHINTORUS", sc2::UNIT_TYPEID::SHAPETHINTORUS) + .value("SHAPETORUS", sc2::UNIT_TYPEID::SHAPETORUS) + .value("SHAPETREASURECHESTCLOSED", sc2::UNIT_TYPEID::SHAPETREASURECHESTCLOSED) + .value("SHAPETREASURECHESTOPEN", sc2::UNIT_TYPEID::SHAPETREASURECHESTOPEN) + .value("SHAPETUBE", sc2::UNIT_TYPEID::SHAPETUBE) + .value("SHAPEWATERMELON", sc2::UNIT_TYPEID::SHAPEWATERMELON) + .value("SHAPEWATERMELONSMALL", sc2::UNIT_TYPEID::SHAPEWATERMELONSMALL) + .value("SHAPEWONSIGN", sc2::UNIT_TYPEID::SHAPEWONSIGN) + .value("SHAPEX", sc2::UNIT_TYPEID::SHAPEX) + .value("SHAPEYENSIGN", sc2::UNIT_TYPEID::SHAPEYENSIGN) + .value("SHEEP", sc2::UNIT_TYPEID::SHEEP) + .value("SHIELDBATTERYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SHIELDBATTERYACGLUESCREENDUMMY) + .value("SHIPALARM", sc2::UNIT_TYPEID::SHIPALARM) + .value("SHORTBRIDGEHORIZONTAL", sc2::UNIT_TYPEID::SHORTBRIDGEHORIZONTAL) + .value("SHORTBRIDGEVERTICAL", sc2::UNIT_TYPEID::SHORTBRIDGEVERTICAL) + .value("SIEGEBREAKER", sc2::UNIT_TYPEID::SIEGEBREAKER) + .value("SIEGEBREAKERSIEGED", sc2::UNIT_TYPEID::SIEGEBREAKERSIEGED) + .value("SIEGETANKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SIEGETANKACGLUESCREENDUMMY) + .value("SIEGETANKMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SIEGETANKMENGSKACGLUESCREENDUMMY) + .value("SIEGETANKSKINPREVIEW", sc2::UNIT_TYPEID::SIEGETANKSKINPREVIEW) + .value("SILIBERATORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SILIBERATORACGLUESCREENDUMMY) + .value("SLAYNELEMENTAL", sc2::UNIT_TYPEID::SLAYNELEMENTAL) + .value("SLAYNELEMENTALGRABAIRUNIT", sc2::UNIT_TYPEID::SLAYNELEMENTALGRABAIRUNIT) + .value("SLAYNELEMENTALGRABGROUNDUNIT", sc2::UNIT_TYPEID::SLAYNELEMENTALGRABGROUNDUNIT) + .value("SLAYNELEMENTALGRABWEAPON", sc2::UNIT_TYPEID::SLAYNELEMENTALGRABWEAPON) + .value("SLAYNELEMENTALWEAPON", sc2::UNIT_TYPEID::SLAYNELEMENTALWEAPON) + .value("SLAYNSWARMHOSTSPAWNFLYER", sc2::UNIT_TYPEID::SLAYNSWARMHOSTSPAWNFLYER) + .value("SMADJUTANT", sc2::UNIT_TYPEID::SMADJUTANT) + .value("SMADJUTANTHOLOGRAM", sc2::UNIT_TYPEID::SMADJUTANTHOLOGRAM) + .value("SMANNABELLE", sc2::UNIT_TYPEID::SMANNABELLE) + .value("SMARCTURUSHOLOGRAM", sc2::UNIT_TYPEID::SMARCTURUSHOLOGRAM) + .value("SMARCTURUSMENGSK", sc2::UNIT_TYPEID::SMARCTURUSMENGSK) + .value("SMARMORYBANSHEE", sc2::UNIT_TYPEID::SMARMORYBANSHEE) + .value("SMARMORYBANSHEEPHCRATE", sc2::UNIT_TYPEID::SMARMORYBANSHEEPHCRATE) + .value("SMARMORYDROPSHIP", sc2::UNIT_TYPEID::SMARMORYDROPSHIP) + .value("SMARMORYDROPSHIPPHCRATE", sc2::UNIT_TYPEID::SMARMORYDROPSHIPPHCRATE) + .value("SMARMORYGHOSTCRATE", sc2::UNIT_TYPEID::SMARMORYGHOSTCRATE) + .value("SMARMORYGHOSTCRATEPHCRATE", sc2::UNIT_TYPEID::SMARMORYGHOSTCRATEPHCRATE) + .value("SMARMORYRIFLE", sc2::UNIT_TYPEID::SMARMORYRIFLE) + .value("SMARMORYSPECTRECRATE", sc2::UNIT_TYPEID::SMARMORYSPECTRECRATE) + .value("SMARMORYSPECTRECRATEPHCRATE", sc2::UNIT_TYPEID::SMARMORYSPECTRECRATEPHCRATE) + .value("SMARMORYSPIDERMINE", sc2::UNIT_TYPEID::SMARMORYSPIDERMINE) + .value("SMARMORYSPIDERMINEPHCRATE", sc2::UNIT_TYPEID::SMARMORYSPIDERMINEPHCRATE) + .value("SMARMORYTANK", sc2::UNIT_TYPEID::SMARMORYTANK) + .value("SMARMORYTANKPHCRATE", sc2::UNIT_TYPEID::SMARMORYTANKPHCRATE) + .value("SMARMORYVIKING", sc2::UNIT_TYPEID::SMARMORYVIKING) + .value("SMARMORYVIKINGPHCRATE", sc2::UNIT_TYPEID::SMARMORYVIKINGPHCRATE) + .value("SMBANSHEE", sc2::UNIT_TYPEID::SMBANSHEE) + .value("SMBOUNTYHUNTER", sc2::UNIT_TYPEID::SMBOUNTYHUNTER) + .value("SMBRALIK", sc2::UNIT_TYPEID::SMBRALIK) + .value("SMBRIDGEPLANETAGRIA", sc2::UNIT_TYPEID::SMBRIDGEPLANETAGRIA) + .value("SMBRIDGEPLANETAIUR", sc2::UNIT_TYPEID::SMBRIDGEPLANETAIUR) + .value("SMBRIDGEPLANETAVERNUS", sc2::UNIT_TYPEID::SMBRIDGEPLANETAVERNUS) + .value("SMBRIDGEPLANETBELSHIR", sc2::UNIT_TYPEID::SMBRIDGEPLANETBELSHIR) + .value("SMBRIDGEPLANETCASTANAR", sc2::UNIT_TYPEID::SMBRIDGEPLANETCASTANAR) + .value("SMBRIDGEPLANETCHAR", sc2::UNIT_TYPEID::SMBRIDGEPLANETCHAR) + .value("SMBRIDGEPLANETHAVEN", sc2::UNIT_TYPEID::SMBRIDGEPLANETHAVEN) + .value("SMBRIDGEPLANETKORHAL", sc2::UNIT_TYPEID::SMBRIDGEPLANETKORHAL) + .value("SMBRIDGEPLANETMEINHOFF", sc2::UNIT_TYPEID::SMBRIDGEPLANETMEINHOFF) + .value("SMBRIDGEPLANETMONLYTH", sc2::UNIT_TYPEID::SMBRIDGEPLANETMONLYTH) + .value("SMBRIDGEPLANETNEWFOLSOM", sc2::UNIT_TYPEID::SMBRIDGEPLANETNEWFOLSOM) + .value("SMBRIDGEPLANETPORTZION", sc2::UNIT_TYPEID::SMBRIDGEPLANETPORTZION) + .value("SMBRIDGEPLANETREDSTONE", sc2::UNIT_TYPEID::SMBRIDGEPLANETREDSTONE) + .value("SMBRIDGEPLANETSHAKURAS", sc2::UNIT_TYPEID::SMBRIDGEPLANETSHAKURAS) + .value("SMBRIDGEPLANETSPACE", sc2::UNIT_TYPEID::SMBRIDGEPLANETSPACE) + .value("SMBRIDGEPLANETSPACEASTEROIDS", sc2::UNIT_TYPEID::SMBRIDGEPLANETSPACEASTEROIDS) + .value("SMBRIDGEPLANETTARSONIS", sc2::UNIT_TYPEID::SMBRIDGEPLANETTARSONIS) + .value("SMBRIDGEPLANETTYPHON", sc2::UNIT_TYPEID::SMBRIDGEPLANETTYPHON) + .value("SMBRIDGEPLANETTYRADOR", sc2::UNIT_TYPEID::SMBRIDGEPLANETTYRADOR) + .value("SMBRIDGEPLANETULAAN", sc2::UNIT_TYPEID::SMBRIDGEPLANETULAAN) + .value("SMBRIDGEPLANETULNAR", sc2::UNIT_TYPEID::SMBRIDGEPLANETULNAR) + .value("SMBRIDGEPLANETVALHALLA", sc2::UNIT_TYPEID::SMBRIDGEPLANETVALHALLA) + .value("SMBRIDGEPLANETXIL", sc2::UNIT_TYPEID::SMBRIDGEPLANETXIL) + .value("SMBRIDGEPLANETZHAKULDAS", sc2::UNIT_TYPEID::SMBRIDGEPLANETZHAKULDAS) + .value("SMBRIDGEWINDOWSPACE", sc2::UNIT_TYPEID::SMBRIDGEWINDOWSPACE) + .value("SMCADE", sc2::UNIT_TYPEID::SMCADE) + .value("SMCAMERABRIDGE", sc2::UNIT_TYPEID::SMCAMERABRIDGE) + .value("SMCAMERATERRAN01", sc2::UNIT_TYPEID::SMCAMERATERRAN01) + .value("SMCAMERATERRAN02A", sc2::UNIT_TYPEID::SMCAMERATERRAN02A) + .value("SMCAMERATERRAN02B", sc2::UNIT_TYPEID::SMCAMERATERRAN02B) + .value("SMCAMERATERRAN03", sc2::UNIT_TYPEID::SMCAMERATERRAN03) + .value("SMCAMERATERRAN04", sc2::UNIT_TYPEID::SMCAMERATERRAN04) + .value("SMCAMERATERRAN04A", sc2::UNIT_TYPEID::SMCAMERATERRAN04A) + .value("SMCAMERATERRAN04B", sc2::UNIT_TYPEID::SMCAMERATERRAN04B) + .value("SMCAMERATERRAN05", sc2::UNIT_TYPEID::SMCAMERATERRAN05) + .value("SMCAMERATERRAN06A", sc2::UNIT_TYPEID::SMCAMERATERRAN06A) + .value("SMCAMERATERRAN06B", sc2::UNIT_TYPEID::SMCAMERATERRAN06B) + .value("SMCAMERATERRAN06C", sc2::UNIT_TYPEID::SMCAMERATERRAN06C) + .value("SMCAMERATERRAN07", sc2::UNIT_TYPEID::SMCAMERATERRAN07) + .value("SMCAMERATERRAN08", sc2::UNIT_TYPEID::SMCAMERATERRAN08) + .value("SMCAMERATERRAN09", sc2::UNIT_TYPEID::SMCAMERATERRAN09) + .value("SMCAMERATERRAN10", sc2::UNIT_TYPEID::SMCAMERATERRAN10) + .value("SMCAMERATERRAN11", sc2::UNIT_TYPEID::SMCAMERATERRAN11) + .value("SMCAMERATERRAN12", sc2::UNIT_TYPEID::SMCAMERATERRAN12) + .value("SMCAMERATERRAN13", sc2::UNIT_TYPEID::SMCAMERATERRAN13) + .value("SMCAMERATERRAN14", sc2::UNIT_TYPEID::SMCAMERATERRAN14) + .value("SMCAMERATERRAN15", sc2::UNIT_TYPEID::SMCAMERATERRAN15) + .value("SMCAMERATERRAN16", sc2::UNIT_TYPEID::SMCAMERATERRAN16) + .value("SMCAMERATERRAN17", sc2::UNIT_TYPEID::SMCAMERATERRAN17) + .value("SMCAMERATERRAN20", sc2::UNIT_TYPEID::SMCAMERATERRAN20) + .value("SMCHARBATTLEFIELDENDPROPS", sc2::UNIT_TYPEID::SMCHARBATTLEFIELDENDPROPS) + .value("SMCHARBATTLEZONEARTIFACTHS", sc2::UNIT_TYPEID::SMCHARBATTLEZONEARTIFACTHS) + .value("SMCHARBATTLEZONEBRIEFCASEHS", sc2::UNIT_TYPEID::SMCHARBATTLEZONEBRIEFCASEHS) + .value("SMCHARBATTLEZONEBRIEFINGSET", sc2::UNIT_TYPEID::SMCHARBATTLEZONEBRIEFINGSET) + .value("SMCHARBATTLEZONEBRIEFINGSET2", sc2::UNIT_TYPEID::SMCHARBATTLEZONEBRIEFINGSET2) + .value("SMCHARBATTLEZONEBRIEFINGSETLEFT", sc2::UNIT_TYPEID::SMCHARBATTLEZONEBRIEFINGSETLEFT) + .value("SMCHARBATTLEZONEBRIEFINGSETRIGHT", sc2::UNIT_TYPEID::SMCHARBATTLEZONEBRIEFINGSETRIGHT) + .value("SMCHARBATTLEZONEDROPSHIPHS", sc2::UNIT_TYPEID::SMCHARBATTLEZONEDROPSHIPHS) + .value("SMCHARBATTLEZONEFLAG", sc2::UNIT_TYPEID::SMCHARBATTLEZONEFLAG) + .value("SMCHARBATTLEZONERADIOHS", sc2::UNIT_TYPEID::SMCHARBATTLEZONERADIOHS) + .value("SMCHARBATTLEZONESET", sc2::UNIT_TYPEID::SMCHARBATTLEZONESET) + .value("SMCHARBATTLEZONESET2", sc2::UNIT_TYPEID::SMCHARBATTLEZONESET2) + .value("SMCHARBATTLEZONESET3", sc2::UNIT_TYPEID::SMCHARBATTLEZONESET3) + .value("SMCHARBATTLEZONESET4", sc2::UNIT_TYPEID::SMCHARBATTLEZONESET4) + .value("SMCHARBATTLEZONESET5", sc2::UNIT_TYPEID::SMCHARBATTLEZONESET5) + .value("SMCHARBATTLEZONESHADOWBOX", sc2::UNIT_TYPEID::SMCHARBATTLEZONESHADOWBOX) + .value("SMCHARBATTLEZONETURRET", sc2::UNIT_TYPEID::SMCHARBATTLEZONETURRET) + .value("SMCHARCUTSCENES00", sc2::UNIT_TYPEID::SMCHARCUTSCENES00) + .value("SMCHARCUTSCENES01", sc2::UNIT_TYPEID::SMCHARCUTSCENES01) + .value("SMCHARCUTSCENES02", sc2::UNIT_TYPEID::SMCHARCUTSCENES02) + .value("SMCHARCUTSCENES03", sc2::UNIT_TYPEID::SMCHARCUTSCENES03) + .value("SMCHARGATLINGGUN", sc2::UNIT_TYPEID::SMCHARGATLINGGUN) + .value("SMCHARINTERACTIVE02SKYPARALLAX", sc2::UNIT_TYPEID::SMCHARINTERACTIVE02SKYPARALLAX) + .value("SMCHARINTERACTIVESKYPARALLAX", sc2::UNIT_TYPEID::SMCHARINTERACTIVESKYPARALLAX) + .value("SMCIVILIAN", sc2::UNIT_TYPEID::SMCIVILIAN) + .value("SMCOOPER", sc2::UNIT_TYPEID::SMCOOPER) + .value("SMDONNYVERMILLION", sc2::UNIT_TYPEID::SMDONNYVERMILLION) + .value("SMDONNYVERMILLIONDEATH", sc2::UNIT_TYPEID::SMDONNYVERMILLIONDEATH) + .value("SMDONNYVERMILLIONSET", sc2::UNIT_TYPEID::SMDONNYVERMILLIONSET) + .value("SMDROPSHIP", sc2::UNIT_TYPEID::SMDROPSHIP) + .value("SMDROPSHIPBLUE", sc2::UNIT_TYPEID::SMDROPSHIPBLUE) + .value("SMEARL", sc2::UNIT_TYPEID::SMEARL) + .value("SMFIREBAT", sc2::UNIT_TYPEID::SMFIREBAT) + .value("SMFIREBATPHCRATE", sc2::UNIT_TYPEID::SMFIREBATPHCRATE) + .value("SMFIRSTOFFICER", sc2::UNIT_TYPEID::SMFIRSTOFFICER) + .value("SMFLY", sc2::UNIT_TYPEID::SMFLY) + .value("SMGENERICMALEGREASEMONKEY01", sc2::UNIT_TYPEID::SMGENERICMALEGREASEMONKEY01) + .value("SMGENERICMALEGREASEMONKEY02", sc2::UNIT_TYPEID::SMGENERICMALEGREASEMONKEY02) + .value("SMGENERICMALEOFFICER01", sc2::UNIT_TYPEID::SMGENERICMALEOFFICER01) + .value("SMGENERICMALEOFFICER02", sc2::UNIT_TYPEID::SMGENERICMALEOFFICER02) + .value("SMHALL", sc2::UNIT_TYPEID::SMHALL) + .value("SMHAVENPLANET", sc2::UNIT_TYPEID::SMHAVENPLANET) + .value("SMHILL", sc2::UNIT_TYPEID::SMHILL) + .value("SMHYDRALISK", sc2::UNIT_TYPEID::SMHYDRALISK) + .value("SMHYDRALISKDEAD", sc2::UNIT_TYPEID::SMHYDRALISKDEAD) + .value("SMHYPERIONARMORER", sc2::UNIT_TYPEID::SMHYPERIONARMORER) + .value("SMHYPERIONARMORYSPACELIGHTING", sc2::UNIT_TYPEID::SMHYPERIONARMORYSPACELIGHTING) + .value("SMHYPERIONARMORYSTAGE1SET", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1SET) + .value("SMHYPERIONARMORYSTAGE1SET01", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1SET01) + .value("SMHYPERIONARMORYSTAGE1SET02", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1SET02) + .value("SMHYPERIONARMORYSTAGE1SET03", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1SET03) + .value("SMHYPERIONARMORYSTAGE1SWANNCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1SWANNCAMERAS) + .value("SMHYPERIONARMORYSTAGE1TECHNOLOGYCONSOLEHS", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1TECHNOLOGYCONSOLEHS) + .value("SMHYPERIONARMORYVIKING", sc2::UNIT_TYPEID::SMHYPERIONARMORYVIKING) + .value("SMHYPERIONBRIDGEBRIEFING", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEBRIEFING) + .value("SMHYPERIONBRIDGEBRIEFINGCENTER", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEBRIEFINGCENTER) + .value("SMHYPERIONBRIDGEBRIEFINGLEFT", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEBRIEFINGLEFT) + .value("SMHYPERIONBRIDGEBRIEFINGRIGHT", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEBRIEFINGRIGHT) + .value("SMHYPERIONBRIDGEHOLOMAP", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEHOLOMAP) + .value("SMHYPERIONBRIDGEPROPS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEPROPS) + .value("SMHYPERIONBRIDGESTAGE1BATTLECOMMANDHS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1BATTLECOMMANDHS) + .value("SMHYPERIONBRIDGESTAGE1BATTLEREPORTSHS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1BATTLEREPORTSHS) + .value("SMHYPERIONBRIDGESTAGE1BOW", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1BOW) + .value("SMHYPERIONBRIDGESTAGE1CANTINAHS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1CANTINAHS) + .value("SMHYPERIONBRIDGESTAGE1CENTERCONSOLEHS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1CENTERCONSOLEHS) + .value("SMHYPERIONBRIDGESTAGE1HANSONCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1HANSONCAMERAS) + .value("SMHYPERIONBRIDGESTAGE1HORNERCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1HORNERCAMERAS) + .value("SMHYPERIONBRIDGESTAGE1SET", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1SET) + .value("SMHYPERIONBRIDGESTAGE1SET2", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1SET2) + .value("SMHYPERIONBRIDGESTAGE1SET3", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1SET3) + .value("SMHYPERIONBRIDGESTAGE1TOSHCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1TOSHCAMERAS) + .value("SMHYPERIONBRIDGESTAGE1TYCHUSCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1TYCHUSCAMERAS) + .value("SMHYPERIONBRIDGESTAGE1WINDOWHS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1WINDOWHS) + .value("SMHYPERIONBRIDGETRAYNOR03BRIEFINGCAMERA", sc2::UNIT_TYPEID::SMHYPERIONBRIDGETRAYNOR03BRIEFINGCAMERA) + .value("SMHYPERIONCANTINABADGEHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINABADGEHS) + .value("SMHYPERIONCANTINAHYDRACLAWSHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAHYDRACLAWSHS) + .value("SMHYPERIONCANTINAMERCCOMPUTERHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAMERCCOMPUTERHS) + .value("SMHYPERIONCANTINAPOSTER1HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPOSTER1HS) + .value("SMHYPERIONCANTINAPOSTER2HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPOSTER2HS) + .value("SMHYPERIONCANTINAPOSTER3HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPOSTER3HS) + .value("SMHYPERIONCANTINAPOSTER4HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPOSTER4HS) + .value("SMHYPERIONCANTINAPOSTER5HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPOSTER5HS) + .value("SMHYPERIONCANTINAPROGRESSFRAME", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPROGRESSFRAME) + .value("SMHYPERIONCANTINAPROPS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPROPS) + .value("SMHYPERIONCANTINASTAGE1ARCADEGAMEHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1ARCADEGAMEHS) + .value("SMHYPERIONCANTINASTAGE1CORKBOARDHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1CORKBOARDHS) + .value("SMHYPERIONCANTINASTAGE1EXITHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1EXITHS) + .value("SMHYPERIONCANTINASTAGE1JUKEBOXHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1JUKEBOXHS) + .value("SMHYPERIONCANTINASTAGE1PROGRESS1HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS1HS) + .value("SMHYPERIONCANTINASTAGE1PROGRESS2HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS2HS) + .value("SMHYPERIONCANTINASTAGE1PROGRESS3HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS3HS) + .value("SMHYPERIONCANTINASTAGE1PROGRESS4HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS4HS) + .value("SMHYPERIONCANTINASTAGE1PROGRESS5HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS5HS) + .value("SMHYPERIONCANTINASTAGE1PROGRESS6HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS6HS) + .value("SMHYPERIONCANTINASTAGE1SET", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1SET) + .value("SMHYPERIONCANTINASTAGE1SET2", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1SET2) + .value("SMHYPERIONCANTINASTAGE1STAIRCASEHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1STAIRCASEHS) + .value("SMHYPERIONCANTINASTAGE1TVHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1TVHS) + .value("SMHYPERIONCANTINASTAGE1WALLPIECE", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1WALLPIECE) + .value("SMHYPERIONCANTINATOSHCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONCANTINATOSHCAMERAS) + .value("SMHYPERIONCANTINATYCHUSCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONCANTINATYCHUSCAMERAS) + .value("SMHYPERIONCANTINAYBARRACAMERAS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAYBARRACAMERAS) + .value("SMHYPERIONCORRIDORPROPS", sc2::UNIT_TYPEID::SMHYPERIONCORRIDORPROPS) + .value("SMHYPERIONCORRIDORSET", sc2::UNIT_TYPEID::SMHYPERIONCORRIDORSET) + .value("SMHYPERIONEXTERIOR", sc2::UNIT_TYPEID::SMHYPERIONEXTERIOR) + .value("SMHYPERIONEXTERIORHOLOGRAM", sc2::UNIT_TYPEID::SMHYPERIONEXTERIORHOLOGRAM) + .value("SMHYPERIONEXTERIORLOW", sc2::UNIT_TYPEID::SMHYPERIONEXTERIORLOW) + .value("SMHYPERIONLABADJUTANTCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONLABADJUTANTCAMERAS) + .value("SMHYPERIONLABARTIFACTBASEHS", sc2::UNIT_TYPEID::SMHYPERIONLABARTIFACTBASEHS) + .value("SMHYPERIONLABARTIFACTPART1HS", sc2::UNIT_TYPEID::SMHYPERIONLABARTIFACTPART1HS) + .value("SMHYPERIONLABARTIFACTPART2HS", sc2::UNIT_TYPEID::SMHYPERIONLABARTIFACTPART2HS) + .value("SMHYPERIONLABARTIFACTPART3HS", sc2::UNIT_TYPEID::SMHYPERIONLABARTIFACTPART3HS) + .value("SMHYPERIONLABARTIFACTPART4HS", sc2::UNIT_TYPEID::SMHYPERIONLABARTIFACTPART4HS) + .value("SMHYPERIONLABCOWINCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONLABCOWINCAMERAS) + .value("SMHYPERIONLABHANSONCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONLABHANSONCAMERAS) + .value("SMHYPERIONMEDLABBRIEFING", sc2::UNIT_TYPEID::SMHYPERIONMEDLABBRIEFING) + .value("SMHYPERIONMEDLABBRIEFINGCENTER", sc2::UNIT_TYPEID::SMHYPERIONMEDLABBRIEFINGCENTER) + .value("SMHYPERIONMEDLABBRIEFINGLEFT", sc2::UNIT_TYPEID::SMHYPERIONMEDLABBRIEFINGLEFT) + .value("SMHYPERIONMEDLABBRIEFINGRIGHT", sc2::UNIT_TYPEID::SMHYPERIONMEDLABBRIEFINGRIGHT) + .value("SMHYPERIONMEDLABCRYOTUBEA", sc2::UNIT_TYPEID::SMHYPERIONMEDLABCRYOTUBEA) + .value("SMHYPERIONMEDLABCRYOTUBEB", sc2::UNIT_TYPEID::SMHYPERIONMEDLABCRYOTUBEB) + .value("SMHYPERIONMEDLABPROPS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROPS) + .value("SMHYPERIONMEDLABPROTOSSCRYOTUBE0HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE0HS) + .value("SMHYPERIONMEDLABPROTOSSCRYOTUBE1HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE1HS) + .value("SMHYPERIONMEDLABPROTOSSCRYOTUBE2HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE2HS) + .value("SMHYPERIONMEDLABPROTOSSCRYOTUBE3HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE3HS) + .value("SMHYPERIONMEDLABPROTOSSCRYOTUBE4HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE4HS) + .value("SMHYPERIONMEDLABPROTOSSCRYOTUBE5HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE5HS) + .value("SMHYPERIONMEDLABSTAGE1ARTIFACTHS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1ARTIFACTHS) + .value("SMHYPERIONMEDLABSTAGE1CONSOLEHS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1CONSOLEHS) + .value("SMHYPERIONMEDLABSTAGE1CRYSTALHS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1CRYSTALHS) + .value("SMHYPERIONMEDLABSTAGE1DOORHS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1DOORHS) + .value("SMHYPERIONMEDLABSTAGE1SET", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1SET) + .value("SMHYPERIONMEDLABSTAGE1SET2", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1SET2) + .value("SMHYPERIONMEDLABSTAGE1SETLIGHTS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1SETLIGHTS) + .value("SMHYPERIONMEDLABZERGCRYOTUBE0HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE0HS) + .value("SMHYPERIONMEDLABZERGCRYOTUBE1HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE1HS) + .value("SMHYPERIONMEDLABZERGCRYOTUBE2HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE2HS) + .value("SMHYPERIONMEDLABZERGCRYOTUBE3HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE3HS) + .value("SMHYPERIONMEDLABZERGCRYOTUBE4HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE4HS) + .value("SMHYPERIONMEDLABZERGCRYOTUBE5HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE5HS) + .value("SMKACHINSKY", sc2::UNIT_TYPEID::SMKACHINSKY) + .value("SMKATELOCKWELL", sc2::UNIT_TYPEID::SMKATELOCKWELL) + .value("SMKERRIGANPHOTO", sc2::UNIT_TYPEID::SMKERRIGANPHOTO) + .value("SMLABASSISTANT", sc2::UNIT_TYPEID::SMLABASSISTANT) + .value("SMLEEKENO", sc2::UNIT_TYPEID::SMLEEKENO) + .value("SMLEEKENOSET", sc2::UNIT_TYPEID::SMLEEKENOSET) + .value("SMMARAUDER", sc2::UNIT_TYPEID::SMMARAUDER) + .value("SMMARAUDERPHCRATE", sc2::UNIT_TYPEID::SMMARAUDERPHCRATE) + .value("SMMARINE01", sc2::UNIT_TYPEID::SMMARINE01) + .value("SMMARINE02", sc2::UNIT_TYPEID::SMMARINE02) + .value("SMMARINE02AOD", sc2::UNIT_TYPEID::SMMARINE02AOD) + .value("SMMARINE03", sc2::UNIT_TYPEID::SMMARINE03) + .value("SMMARINE04", sc2::UNIT_TYPEID::SMMARINE04) + .value("SMMARINERIFLE", sc2::UNIT_TYPEID::SMMARINERIFLE) + .value("SMMARSARABARBADGEHS", sc2::UNIT_TYPEID::SMMARSARABARBADGEHS) + .value("SMMARSARABARBOTTLESHS", sc2::UNIT_TYPEID::SMMARSARABARBOTTLESHS) + .value("SMMARSARABARBRIEFINGSET", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGSET) + .value("SMMARSARABARBRIEFINGSET2", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGSET2) + .value("SMMARSARABARBRIEFINGSETLEFT", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGSETLEFT) + .value("SMMARSARABARBRIEFINGSETRIGHT", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGSETRIGHT) + .value("SMMARSARABARBRIEFINGTVMAIN", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVMAIN) + .value("SMMARSARABARBRIEFINGTVMAIN2", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVMAIN2) + .value("SMMARSARABARBRIEFINGTVMAIN3", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVMAIN3) + .value("SMMARSARABARBRIEFINGTVPORTRAIT1", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVPORTRAIT1) + .value("SMMARSARABARBRIEFINGTVPORTRAIT2", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVPORTRAIT2) + .value("SMMARSARABARBRIEFINGTVPORTRAIT3", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVPORTRAIT3) + .value("SMMARSARABARBRIEFINGTVPORTRAIT4", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVPORTRAIT4) + .value("SMMARSARABARBRIEFINGTVPORTRAIT5", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVPORTRAIT5) + .value("SMMARSARABARCORKBOARDBACKGROUND", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDBACKGROUND) + .value("SMMARSARABARCORKBOARDHS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDHS) + .value("SMMARSARABARCORKBOARDITEM1HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM1HS) + .value("SMMARSARABARCORKBOARDITEM2HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM2HS) + .value("SMMARSARABARCORKBOARDITEM3HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM3HS) + .value("SMMARSARABARCORKBOARDITEM4HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM4HS) + .value("SMMARSARABARCORKBOARDITEM5HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM5HS) + .value("SMMARSARABARCORKBOARDITEM6HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM6HS) + .value("SMMARSARABARCORKBOARDITEM7HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM7HS) + .value("SMMARSARABARCORKBOARDITEM8HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM8HS) + .value("SMMARSARABARCORKBOARDITEM9HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM9HS) + .value("SMMARSARABARHYDRALISKSKULLHS", sc2::UNIT_TYPEID::SMMARSARABARHYDRALISKSKULLHS) + .value("SMMARSARABARJUKEBOXHS", sc2::UNIT_TYPEID::SMMARSARABARJUKEBOXHS) + .value("SMMARSARABARKERRIGANPHOTOHS", sc2::UNIT_TYPEID::SMMARSARABARKERRIGANPHOTOHS) + .value("SMMARSARABARPROPS", sc2::UNIT_TYPEID::SMMARSARABARPROPS) + .value("SMMARSARABARSET", sc2::UNIT_TYPEID::SMMARSARABARSET) + .value("SMMARSARABARSET2", sc2::UNIT_TYPEID::SMMARSARABARSET2) + .value("SMMARSARABARSTARMAPHS", sc2::UNIT_TYPEID::SMMARSARABARSTARMAPHS) + .value("SMMARSARABARTVHS", sc2::UNIT_TYPEID::SMMARSARABARTVHS) + .value("SMMARSARABARTYCHUSCAMERAS", sc2::UNIT_TYPEID::SMMARSARABARTYCHUSCAMERAS) + .value("SMMARSARAPLANET", sc2::UNIT_TYPEID::SMMARSARAPLANET) + .value("SMMIKELIBERTY", sc2::UNIT_TYPEID::SMMIKELIBERTY) + .value("SMMUTALISK", sc2::UNIT_TYPEID::SMMUTALISK) + .value("SMNOVA", sc2::UNIT_TYPEID::SMNOVA) + .value("SMPRESSROOMPROPS", sc2::UNIT_TYPEID::SMPRESSROOMPROPS) + .value("SMRAYNORCOMMANDER", sc2::UNIT_TYPEID::SMRAYNORCOMMANDER) + .value("SMRAYNORGUN", sc2::UNIT_TYPEID::SMRAYNORGUN) + .value("SMRAYNORHANDS", sc2::UNIT_TYPEID::SMRAYNORHANDS) + .value("SMRAYNORMARINE", sc2::UNIT_TYPEID::SMRAYNORMARINE) + .value("SMSHADOWBOX", sc2::UNIT_TYPEID::SMSHADOWBOX) + .value("SMSTETMANN", sc2::UNIT_TYPEID::SMSTETMANN) + .value("SMTERRAN01FX", sc2::UNIT_TYPEID::SMTERRAN01FX) + .value("SMTERRAN03FX", sc2::UNIT_TYPEID::SMTERRAN03FX) + .value("SMTERRAN05FX", sc2::UNIT_TYPEID::SMTERRAN05FX) + .value("SMTERRAN05FXMUTALISKS", sc2::UNIT_TYPEID::SMTERRAN05FXMUTALISKS) + .value("SMTERRAN05PROPS", sc2::UNIT_TYPEID::SMTERRAN05PROPS) + .value("SMTERRAN06AFX", sc2::UNIT_TYPEID::SMTERRAN06AFX) + .value("SMTERRAN06APROPS", sc2::UNIT_TYPEID::SMTERRAN06APROPS) + .value("SMTERRAN06BFX", sc2::UNIT_TYPEID::SMTERRAN06BFX) + .value("SMTERRAN06BPROPS", sc2::UNIT_TYPEID::SMTERRAN06BPROPS) + .value("SMTERRAN06CFX", sc2::UNIT_TYPEID::SMTERRAN06CFX) + .value("SMTERRAN07FX", sc2::UNIT_TYPEID::SMTERRAN07FX) + .value("SMTERRAN07PROPS", sc2::UNIT_TYPEID::SMTERRAN07PROPS) + .value("SMTERRAN08PROPS", sc2::UNIT_TYPEID::SMTERRAN08PROPS) + .value("SMTERRAN09FX", sc2::UNIT_TYPEID::SMTERRAN09FX) + .value("SMTERRAN09PROPS", sc2::UNIT_TYPEID::SMTERRAN09PROPS) + .value("SMTERRAN11FX", sc2::UNIT_TYPEID::SMTERRAN11FX) + .value("SMTERRAN11FXBLOOD", sc2::UNIT_TYPEID::SMTERRAN11FXBLOOD) + .value("SMTERRAN11FXDEBRIS", sc2::UNIT_TYPEID::SMTERRAN11FXDEBRIS) + .value("SMTERRAN11FXDEBRIS1", sc2::UNIT_TYPEID::SMTERRAN11FXDEBRIS1) + .value("SMTERRAN11FXDEBRIS2", sc2::UNIT_TYPEID::SMTERRAN11FXDEBRIS2) + .value("SMTERRAN11FXEXPLOSIONS", sc2::UNIT_TYPEID::SMTERRAN11FXEXPLOSIONS) + .value("SMTERRAN11FXMISSILES", sc2::UNIT_TYPEID::SMTERRAN11FXMISSILES) + .value("SMTERRAN11PROPS", sc2::UNIT_TYPEID::SMTERRAN11PROPS) + .value("SMTERRAN11PROPSBURROWROCKS", sc2::UNIT_TYPEID::SMTERRAN11PROPSBURROWROCKS) + .value("SMTERRAN11PROPSRIFLESHELLS", sc2::UNIT_TYPEID::SMTERRAN11PROPSRIFLESHELLS) + .value("SMTERRAN12FX", sc2::UNIT_TYPEID::SMTERRAN12FX) + .value("SMTERRAN12PROPS", sc2::UNIT_TYPEID::SMTERRAN12PROPS) + .value("SMTERRAN13PROPS", sc2::UNIT_TYPEID::SMTERRAN13PROPS) + .value("SMTERRAN14FX", sc2::UNIT_TYPEID::SMTERRAN14FX) + .value("SMTERRAN14PROPS", sc2::UNIT_TYPEID::SMTERRAN14PROPS) + .value("SMTERRAN15FX", sc2::UNIT_TYPEID::SMTERRAN15FX) + .value("SMTERRAN15PROPS", sc2::UNIT_TYPEID::SMTERRAN15PROPS) + .value("SMTERRAN16FX", sc2::UNIT_TYPEID::SMTERRAN16FX) + .value("SMTERRAN16FXFLAK", sc2::UNIT_TYPEID::SMTERRAN16FXFLAK) + .value("SMTERRAN17FX", sc2::UNIT_TYPEID::SMTERRAN17FX) + .value("SMTERRAN17PROPS", sc2::UNIT_TYPEID::SMTERRAN17PROPS) + .value("SMTERRANREADYROOMLEFTTV", sc2::UNIT_TYPEID::SMTERRANREADYROOMLEFTTV) + .value("SMTERRANREADYROOMMAINTV", sc2::UNIT_TYPEID::SMTERRANREADYROOMMAINTV) + .value("SMTERRANREADYROOMRIGHTTV", sc2::UNIT_TYPEID::SMTERRANREADYROOMRIGHTTV) + .value("SMTERRANREADYROOMSET", sc2::UNIT_TYPEID::SMTERRANREADYROOMSET) + .value("SMTESTCAMERA", sc2::UNIT_TYPEID::SMTESTCAMERA) + .value("SMTOSHKNIFE", sc2::UNIT_TYPEID::SMTOSHKNIFE) + .value("SMTOSHSHUTTLEPROPS", sc2::UNIT_TYPEID::SMTOSHSHUTTLEPROPS) + .value("SMTOSHSHUTTLESET", sc2::UNIT_TYPEID::SMTOSHSHUTTLESET) + .value("SMTOSHSHUTTLESET2", sc2::UNIT_TYPEID::SMTOSHSHUTTLESET2) + .value("SMTVSTATIC", sc2::UNIT_TYPEID::SMTVSTATIC) + .value("SMUNNCAMERA", sc2::UNIT_TYPEID::SMUNNCAMERA) + .value("SMUNNSCREEN", sc2::UNIT_TYPEID::SMUNNSCREEN) + .value("SMUNNSET", sc2::UNIT_TYPEID::SMUNNSET) + .value("SMVALERIANFLAGSHIPCORRIDORSSET", sc2::UNIT_TYPEID::SMVALERIANFLAGSHIPCORRIDORSSET) + .value("SMVALERIANFLAGSHIPCORRIDORSSET2", sc2::UNIT_TYPEID::SMVALERIANFLAGSHIPCORRIDORSSET2) + .value("SMVALERIANFLAGSHIPCORRIDORSSET3", sc2::UNIT_TYPEID::SMVALERIANFLAGSHIPCORRIDORSSET3) + .value("SMVALERIANFLAGSHIPCORRIDORSSET4", sc2::UNIT_TYPEID::SMVALERIANFLAGSHIPCORRIDORSSET4) + .value("SMVALERIANMENGSK", sc2::UNIT_TYPEID::SMVALERIANMENGSK) + .value("SMVALERIANOBSERVATORYPAINTINGHS", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYPAINTINGHS) + .value("SMVALERIANOBSERVATORYPROPS", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYPROPS) + .value("SMVALERIANOBSERVATORYSET", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYSET) + .value("SMVALERIANOBSERVATORYSET2", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYSET2) + .value("SMVALERIANOBSERVATORYSET3", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYSET3) + .value("SMVALERIANOBSERVATORYSTARMAP", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYSTARMAP) + .value("SMVIKING", sc2::UNIT_TYPEID::SMVIKING) + .value("SMYBARRA", sc2::UNIT_TYPEID::SMYBARRA) + .value("SMZERATUL", sc2::UNIT_TYPEID::SMZERATUL) + .value("SMZERGEDHANSON", sc2::UNIT_TYPEID::SMZERGEDHANSON) + .value("SMZERGLING", sc2::UNIT_TYPEID::SMZERGLING) + .value("SNARE_PLACEHOLDER", sc2::UNIT_TYPEID::SNARE_PLACEHOLDER) + .value("SNOWGLAZESTARTERMP", sc2::UNIT_TYPEID::SNOWGLAZESTARTERMP) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8", sc2::UNIT_TYPEID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8OUT", sc2::UNIT_TYPEID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8OUT) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8", sc2::UNIT_TYPEID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8OUT", sc2::UNIT_TYPEID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8OUT) + .value("SPACEDIABLO", sc2::UNIT_TYPEID::SPACEDIABLO) + .value("SPACEPLATFORMCLIFFDOOR0", sc2::UNIT_TYPEID::SPACEPLATFORMCLIFFDOOR0) + .value("SPACEPLATFORMCLIFFDOOR1", sc2::UNIT_TYPEID::SPACEPLATFORMCLIFFDOOR1) + .value("SPACEPLATFORMCLIFFDOOROPEN0", sc2::UNIT_TYPEID::SPACEPLATFORMCLIFFDOOROPEN0) + .value("SPACEPLATFORMCLIFFDOOROPEN1", sc2::UNIT_TYPEID::SPACEPLATFORMCLIFFDOOROPEN1) + .value("SPACEPLATFORMDESTRUCTIBLEJUMBOBLOCKER", sc2::UNIT_TYPEID::SPACEPLATFORMDESTRUCTIBLEJUMBOBLOCKER) + .value("SPACEPLATFORMDESTRUCTIBLELARGEBLOCKER", sc2::UNIT_TYPEID::SPACEPLATFORMDESTRUCTIBLELARGEBLOCKER) + .value("SPACEPLATFORMDESTRUCTIBLEMEDIUMBLOCKER", sc2::UNIT_TYPEID::SPACEPLATFORMDESTRUCTIBLEMEDIUMBLOCKER) + .value("SPACEPLATFORMDESTRUCTIBLESMALLBLOCKER", sc2::UNIT_TYPEID::SPACEPLATFORMDESTRUCTIBLESMALLBLOCKER) + .value("SPACEPLATFORMREACTORPATHINGBLOCKER", sc2::UNIT_TYPEID::SPACEPLATFORMREACTORPATHINGBLOCKER) + .value("SPACEPLATFORMVENTSUNIT", sc2::UNIT_TYPEID::SPACEPLATFORMVENTSUNIT) + .value("SPARTANCOMPANY", sc2::UNIT_TYPEID::SPARTANCOMPANY) + .value("SPARTANCOMPANYAWEAPON", sc2::UNIT_TYPEID::SPARTANCOMPANYAWEAPON) + .value("SPECIALOPSDROPSHIP", sc2::UNIT_TYPEID::SPECIALOPSDROPSHIP) + .value("SPECOPSGHOSTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SPECOPSGHOSTACGLUESCREENDUMMY) + .value("SPECTRE", sc2::UNIT_TYPEID::SPECTRE) + .value("SPECTRENUKE", sc2::UNIT_TYPEID::SPECTRENUKE) + .value("SPIDERMINE", sc2::UNIT_TYPEID::SPIDERMINE) + .value("SPIDERMINEBURROWED", sc2::UNIT_TYPEID::SPIDERMINEBURROWED) + .value("SPINECRAWLERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SPINECRAWLERACGLUESCREENDUMMY) + .value("SPINECRAWLERWEAPON", sc2::UNIT_TYPEID::SPINECRAWLERWEAPON) + .value("SPINNINGDIZZYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SPINNINGDIZZYACGLUESCREENDUMMY) + .value("SPLITTERLINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SPLITTERLINGACGLUESCREENDUMMY) + .value("SPORECANNON", sc2::UNIT_TYPEID::SPORECANNON) + .value("SPORECANNONFIREMISSILE", sc2::UNIT_TYPEID::SPORECANNONFIREMISSILE) + .value("SPORECRAWLERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SPORECRAWLERACGLUESCREENDUMMY) + .value("SPORECRAWLERWEAPON", sc2::UNIT_TYPEID::SPORECRAWLERWEAPON) + .value("SS_BACKGROUNDSPACE00", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACE00) + .value("SS_BACKGROUNDSPACE01", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACE01) + .value("SS_BACKGROUNDSPACE02", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACE02) + .value("SS_BACKGROUNDSPACELARGE", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACELARGE) + .value("SS_BACKGROUNDSPACEPROT00", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROT00) + .value("SS_BACKGROUNDSPACEPROT01", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROT01) + .value("SS_BACKGROUNDSPACEPROT02", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROT02) + .value("SS_BACKGROUNDSPACEPROT03", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROT03) + .value("SS_BACKGROUNDSPACEPROT04", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROT04) + .value("SS_BACKGROUNDSPACEPROTOSSLARGE", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROTOSSLARGE) + .value("SS_BACKGROUNDSPACETERRAN00", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACETERRAN00) + .value("SS_BACKGROUNDSPACETERRAN01", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACETERRAN01) + .value("SS_BACKGROUNDSPACETERRAN02", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACETERRAN02) + .value("SS_BACKGROUNDSPACETERRANLARGE", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACETERRANLARGE) + .value("SS_BACKGROUNDSPACEZERG00", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEZERG00) + .value("SS_BACKGROUNDSPACEZERG01", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEZERG01) + .value("SS_BACKGROUNDSPACEZERG02", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEZERG02) + .value("SS_BACKGROUNDSPACEZERGLARGE", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEZERGLARGE) + .value("SS_BACKGROUNDZERG01", sc2::UNIT_TYPEID::SS_BACKGROUNDZERG01) + .value("SS_BATTLECRUISER", sc2::UNIT_TYPEID::SS_BATTLECRUISER) + .value("SS_BATTLECRUISERHUNTERSEEKERMISSILE", sc2::UNIT_TYPEID::SS_BATTLECRUISERHUNTERSEEKERMISSILE) + .value("SS_BATTLECRUISERMISSILE", sc2::UNIT_TYPEID::SS_BATTLECRUISERMISSILE) + .value("SS_BATTLECRUISERMISSILELAUNCHER", sc2::UNIT_TYPEID::SS_BATTLECRUISERMISSILELAUNCHER) + .value("SS_BLACKEDGEBORDER", sc2::UNIT_TYPEID::SS_BLACKEDGEBORDER) + .value("SS_CARRIER", sc2::UNIT_TYPEID::SS_CARRIER) + .value("SS_CARRIERBOSS", sc2::UNIT_TYPEID::SS_CARRIERBOSS) + .value("SS_CARRIERBOSSMISSILE", sc2::UNIT_TYPEID::SS_CARRIERBOSSMISSILE) + .value("SS_CORRUPTOR", sc2::UNIT_TYPEID::SS_CORRUPTOR) + .value("SS_CORRUPTORMISSILE", sc2::UNIT_TYPEID::SS_CORRUPTORMISSILE) + .value("SS_FIGHTER", sc2::UNIT_TYPEID::SS_FIGHTER) + .value("SS_FIGHTERDRONEMISSILE", sc2::UNIT_TYPEID::SS_FIGHTERDRONEMISSILE) + .value("SS_FIGHTERMISSILELEFT", sc2::UNIT_TYPEID::SS_FIGHTERMISSILELEFT) + .value("SS_FIGHTERMISSILERIGHT", sc2::UNIT_TYPEID::SS_FIGHTERMISSILERIGHT) + .value("SS_INTERCEPTOR", sc2::UNIT_TYPEID::SS_INTERCEPTOR) + .value("SS_INTERCEPTORMISSILE", sc2::UNIT_TYPEID::SS_INTERCEPTORMISSILE) + .value("SS_INTERCEPTORSPAWNMISSILE", sc2::UNIT_TYPEID::SS_INTERCEPTORSPAWNMISSILE) + .value("SS_LEVIATHAN", sc2::UNIT_TYPEID::SS_LEVIATHAN) + .value("SS_LEVIATHANBOMB", sc2::UNIT_TYPEID::SS_LEVIATHANBOMB) + .value("SS_LEVIATHANBOMBMISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANBOMBMISSILE) + .value("SS_LEVIATHANSPAWNBOMBMISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANSPAWNBOMBMISSILE) + .value("SS_LEVIATHANTENTACLEL1MISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANTENTACLEL1MISSILE) + .value("SS_LEVIATHANTENTACLEL2MISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANTENTACLEL2MISSILE) + .value("SS_LEVIATHANTENTACLER1MISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANTENTACLER1MISSILE) + .value("SS_LEVIATHANTENTACLER2MISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANTENTACLER2MISSILE) + .value("SS_LEVIATHANTENTACLETARGET", sc2::UNIT_TYPEID::SS_LEVIATHANTENTACLETARGET) + .value("SS_LIGHTNINGPROJECTORFACELEFT", sc2::UNIT_TYPEID::SS_LIGHTNINGPROJECTORFACELEFT) + .value("SS_LIGHTNINGPROJECTORFACERIGHT", sc2::UNIT_TYPEID::SS_LIGHTNINGPROJECTORFACERIGHT) + .value("SS_PHOENIX", sc2::UNIT_TYPEID::SS_PHOENIX) + .value("SS_PHOENIXMISSILE", sc2::UNIT_TYPEID::SS_PHOENIXMISSILE) + .value("SS_POWERUPBOMB", sc2::UNIT_TYPEID::SS_POWERUPBOMB) + .value("SS_POWERUPHEALTH", sc2::UNIT_TYPEID::SS_POWERUPHEALTH) + .value("SS_POWERUPSIDEMISSILES", sc2::UNIT_TYPEID::SS_POWERUPSIDEMISSILES) + .value("SS_POWERUPSTRONGERMISSILES", sc2::UNIT_TYPEID::SS_POWERUPSTRONGERMISSILES) + .value("SS_SCIENCEVESSEL", sc2::UNIT_TYPEID::SS_SCIENCEVESSEL) + .value("SS_SCIENCEVESSELMISSILE", sc2::UNIT_TYPEID::SS_SCIENCEVESSELMISSILE) + .value("SS_SCOURGE", sc2::UNIT_TYPEID::SS_SCOURGE) + .value("SS_SCOURGEMISSILE", sc2::UNIT_TYPEID::SS_SCOURGEMISSILE) + .value("SS_SCOUT", sc2::UNIT_TYPEID::SS_SCOUT) + .value("SS_SCOUTMISSILE", sc2::UNIT_TYPEID::SS_SCOUTMISSILE) + .value("SS_STRONGMISSILE1", sc2::UNIT_TYPEID::SS_STRONGMISSILE1) + .value("SS_STRONGMISSILE2", sc2::UNIT_TYPEID::SS_STRONGMISSILE2) + .value("SS_SWARMGUARDIAN", sc2::UNIT_TYPEID::SS_SWARMGUARDIAN) + .value("SS_SWARMGUARDIANMISSILE", sc2::UNIT_TYPEID::SS_SWARMGUARDIANMISSILE) + .value("SS_TERRATRON", sc2::UNIT_TYPEID::SS_TERRATRON) + .value("SS_TERRATRONBEAMTARGET", sc2::UNIT_TYPEID::SS_TERRATRONBEAMTARGET) + .value("SS_TERRATRONMISSILE", sc2::UNIT_TYPEID::SS_TERRATRONMISSILE) + .value("SS_TERRATRONMISSILELAUNCHER", sc2::UNIT_TYPEID::SS_TERRATRONMISSILELAUNCHER) + .value("SS_TERRATRONMISSILESPINNER", sc2::UNIT_TYPEID::SS_TERRATRONMISSILESPINNER) + .value("SS_TERRATRONMISSILESPINNERLAUNCHER", sc2::UNIT_TYPEID::SS_TERRATRONMISSILESPINNERLAUNCHER) + .value("SS_TERRATRONMISSILESPINNERMISSILE", sc2::UNIT_TYPEID::SS_TERRATRONMISSILESPINNERMISSILE) + .value("SS_TERRATRONSAW", sc2::UNIT_TYPEID::SS_TERRATRONSAW) + .value("SS_WRAITH", sc2::UNIT_TYPEID::SS_WRAITH) + .value("SS_WRAITHMISSILE", sc2::UNIT_TYPEID::SS_WRAITHMISSILE) + .value("STALKERSHAKURASACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STALKERSHAKURASACGLUESCREENDUMMY) + .value("STALKERTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STALKERTALDARIMACGLUESCREENDUMMY) + .value("STALKERWEAPON", sc2::UNIT_TYPEID::STALKERWEAPON) + .value("STARPORTTECHREACTOR", sc2::UNIT_TYPEID::STARPORTTECHREACTOR) + .value("STEREOSCOPICOPTIONSUNIT", sc2::UNIT_TYPEID::STEREOSCOPICOPTIONSUNIT) + .value("STETMANN", sc2::UNIT_TYPEID::STETMANN) + .value("STONEZEALOT", sc2::UNIT_TYPEID::STONEZEALOT) + .value("STRIKEGOLIATHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STRIKEGOLIATHACGLUESCREENDUMMY) + .value("STUKOVBROODQUEENACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVBROODQUEENACGLUESCREENDUMMY) + .value("STUKOVINFESTEDBANSHEEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDBANSHEEACGLUESCREENDUMMY) + .value("STUKOVINFESTEDBUNKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDBUNKERACGLUESCREENDUMMY) + .value("STUKOVINFESTEDCIVILIANACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDCIVILIANACGLUESCREENDUMMY) + .value("STUKOVINFESTEDDIAMONDBACKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDDIAMONDBACKACGLUESCREENDUMMY) + .value("STUKOVINFESTEDMARINEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDMARINEACGLUESCREENDUMMY) + .value("STUKOVINFESTEDMISSILETURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDMISSILETURRETACGLUESCREENDUMMY) + .value("STUKOVINFESTEDSIEGETANKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDSIEGETANKACGLUESCREENDUMMY) + .value("STUKOVINFESTEDTROOPERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDTROOPERACGLUESCREENDUMMY) + .value("SUPERWARPGATE", sc2::UNIT_TYPEID::SUPERWARPGATE) + .value("SUPPLICANTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SUPPLICANTACGLUESCREENDUMMY) + .value("SUPPLYDEPOTDROP", sc2::UNIT_TYPEID::SUPPLYDEPOTDROP) + .value("SWANN", sc2::UNIT_TYPEID::SWANN) + .value("SWANNWEAPON", sc2::UNIT_TYPEID::SWANNWEAPON) + .value("SWARMHOSTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SWARMHOSTACGLUESCREENDUMMY) + .value("SWARMLING", sc2::UNIT_TYPEID::SWARMLING) + .value("SWARMLINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SWARMLINGACGLUESCREENDUMMY) + .value("SWARMQUEENACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SWARMQUEENACGLUESCREENDUMMY) + .value("SYSTEM_SNAPSHOT_DUMMY", sc2::UNIT_TYPEID::SYSTEM_SNAPSHOT_DUMMY) + .value("TALDARIMMOTHERSHIP", sc2::UNIT_TYPEID::TALDARIMMOTHERSHIP) + .value("TALDARIMPRISON", sc2::UNIT_TYPEID::TALDARIMPRISON) + .value("TALDARIMPRISONCRYSTAL", sc2::UNIT_TYPEID::TALDARIMPRISONCRYSTAL) + .value("TALONSMISSILEWEAPON", sc2::UNIT_TYPEID::TALONSMISSILEWEAPON) + .value("TANKERTRUCK", sc2::UNIT_TYPEID::TANKERTRUCK) + .value("TARSONISENGINE", sc2::UNIT_TYPEID::TARSONISENGINE) + .value("TARSONISENGINEFAST", sc2::UNIT_TYPEID::TARSONISENGINEFAST) + .value("TARSONIS_DOORE", sc2::UNIT_TYPEID::TARSONIS_DOORE) + .value("TARSONIS_DOORELOWERED", sc2::UNIT_TYPEID::TARSONIS_DOORELOWERED) + .value("TARSONIS_DOORN", sc2::UNIT_TYPEID::TARSONIS_DOORN) + .value("TARSONIS_DOORNE", sc2::UNIT_TYPEID::TARSONIS_DOORNE) + .value("TARSONIS_DOORNELOWERED", sc2::UNIT_TYPEID::TARSONIS_DOORNELOWERED) + .value("TARSONIS_DOORNLOWERED", sc2::UNIT_TYPEID::TARSONIS_DOORNLOWERED) + .value("TARSONIS_DOORNW", sc2::UNIT_TYPEID::TARSONIS_DOORNW) + .value("TARSONIS_DOORNWLOWERED", sc2::UNIT_TYPEID::TARSONIS_DOORNWLOWERED) + .value("TASSADAR", sc2::UNIT_TYPEID::TASSADAR) + .value("TAURENOUTHOUSE", sc2::UNIT_TYPEID::TAURENOUTHOUSE) + .value("TAURENSPACEMARINE", sc2::UNIT_TYPEID::TAURENSPACEMARINE) + .value("TECHREACTOR", sc2::UNIT_TYPEID::TECHREACTOR) + .value("TEMPESTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TEMPESTACGLUESCREENDUMMY) + .value("TEMPESTWEAPON", sc2::UNIT_TYPEID::TEMPESTWEAPON) + .value("TEMPESTWEAPONGROUND", sc2::UNIT_TYPEID::TEMPESTWEAPONGROUND) + .value("TENTACLEAMISSILE", sc2::UNIT_TYPEID::TENTACLEAMISSILE) + .value("TENTACLEBMISSILE", sc2::UNIT_TYPEID::TENTACLEBMISSILE) + .value("TENTACLECMISSILE", sc2::UNIT_TYPEID::TENTACLECMISSILE) + .value("TENTACLEDMISSILE", sc2::UNIT_TYPEID::TENTACLEDMISSILE) + .value("TERRANBUGGY", sc2::UNIT_TYPEID::TERRANBUGGY) + .value("TERRANDROPPOD", sc2::UNIT_TYPEID::TERRANDROPPOD) + .value("TERRAN_ARMORY", sc2::UNIT_TYPEID::TERRAN_ARMORY) + .value("TERRAN_AUTOTURRET", sc2::UNIT_TYPEID::TERRAN_AUTOTURRET) + .value("TERRAN_BANSHEE", sc2::UNIT_TYPEID::TERRAN_BANSHEE) + .value("TERRAN_BARRACKS", sc2::UNIT_TYPEID::TERRAN_BARRACKS) + .value("TERRAN_BARRACKSFLYING", sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING) + .value("TERRAN_BARRACKSREACTOR", sc2::UNIT_TYPEID::TERRAN_BARRACKSREACTOR) + .value("TERRAN_BARRACKSTECHLAB", sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB) + .value("TERRAN_BATTLECRUISER", sc2::UNIT_TYPEID::TERRAN_BATTLECRUISER) + .value("TERRAN_BUNKER", sc2::UNIT_TYPEID::TERRAN_BUNKER) + .value("TERRAN_COMMANDCENTER", sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER) + .value("TERRAN_COMMANDCENTERFLYING", sc2::UNIT_TYPEID::TERRAN_COMMANDCENTERFLYING) + .value("TERRAN_CYCLONE", sc2::UNIT_TYPEID::TERRAN_CYCLONE) + .value("TERRAN_ENGINEERINGBAY", sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY) + .value("TERRAN_FACTORY", sc2::UNIT_TYPEID::TERRAN_FACTORY) + .value("TERRAN_FACTORYFLYING", sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING) + .value("TERRAN_FACTORYREACTOR", sc2::UNIT_TYPEID::TERRAN_FACTORYREACTOR) + .value("TERRAN_FACTORYTECHLAB", sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB) + .value("TERRAN_FUSIONCORE", sc2::UNIT_TYPEID::TERRAN_FUSIONCORE) + .value("TERRAN_GHOST", sc2::UNIT_TYPEID::TERRAN_GHOST) + .value("TERRAN_GHOSTACADEMY", sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY) + .value("TERRAN_HELLION", sc2::UNIT_TYPEID::TERRAN_HELLION) + .value("TERRAN_HELLIONTANK", sc2::UNIT_TYPEID::TERRAN_HELLIONTANK) + .value("TERRAN_KD8CHARGE", sc2::UNIT_TYPEID::TERRAN_KD8CHARGE) + .value("TERRAN_LIBERATOR", sc2::UNIT_TYPEID::TERRAN_LIBERATOR) + .value("TERRAN_LIBERATORAG", sc2::UNIT_TYPEID::TERRAN_LIBERATORAG) + .value("TERRAN_MARAUDER", sc2::UNIT_TYPEID::TERRAN_MARAUDER) + .value("TERRAN_MARINE", sc2::UNIT_TYPEID::TERRAN_MARINE) + .value("TERRAN_MEDIVAC", sc2::UNIT_TYPEID::TERRAN_MEDIVAC) + .value("TERRAN_MISSILETURRET", sc2::UNIT_TYPEID::TERRAN_MISSILETURRET) + .value("TERRAN_MULE", sc2::UNIT_TYPEID::TERRAN_MULE) + .value("TERRAN_NUKE", sc2::UNIT_TYPEID::TERRAN_NUKE) + .value("TERRAN_ORBITALCOMMAND", sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND) + .value("TERRAN_ORBITALCOMMANDFLYING", sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMANDFLYING) + .value("TERRAN_PLANETARYFORTRESS", sc2::UNIT_TYPEID::TERRAN_PLANETARYFORTRESS) + .value("TERRAN_POINTDEFENSEDRONE", sc2::UNIT_TYPEID::TERRAN_POINTDEFENSEDRONE) + .value("TERRAN_PREVIEWBUNKERUPGRADED", sc2::UNIT_TYPEID::TERRAN_PREVIEWBUNKERUPGRADED) + .value("TERRAN_RAVEN", sc2::UNIT_TYPEID::TERRAN_RAVEN) + .value("TERRAN_REACTOR", sc2::UNIT_TYPEID::TERRAN_REACTOR) + .value("TERRAN_REAPER", sc2::UNIT_TYPEID::TERRAN_REAPER) + .value("TERRAN_REFINERY", sc2::UNIT_TYPEID::TERRAN_REFINERY) + .value("TERRAN_REFINERYRICH", sc2::UNIT_TYPEID::TERRAN_REFINERYRICH) + .value("TERRAN_SCV", sc2::UNIT_TYPEID::TERRAN_SCV) + .value("TERRAN_SENSORTOWER", sc2::UNIT_TYPEID::TERRAN_SENSORTOWER) + .value("TERRAN_SIEGETANK", sc2::UNIT_TYPEID::TERRAN_SIEGETANK) + .value("TERRAN_SIEGETANKSIEGED", sc2::UNIT_TYPEID::TERRAN_SIEGETANKSIEGED) + .value("TERRAN_STARPORT", sc2::UNIT_TYPEID::TERRAN_STARPORT) + .value("TERRAN_STARPORTFLYING", sc2::UNIT_TYPEID::TERRAN_STARPORTFLYING) + .value("TERRAN_STARPORTREACTOR", sc2::UNIT_TYPEID::TERRAN_STARPORTREACTOR) + .value("TERRAN_STARPORTTECHLAB", sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB) + .value("TERRAN_SUPPLYDEPOT", sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT) + .value("TERRAN_SUPPLYDEPOTLOWERED", sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOTLOWERED) + .value("TERRAN_TECHLAB", sc2::UNIT_TYPEID::TERRAN_TECHLAB) + .value("TERRAN_THOR", sc2::UNIT_TYPEID::TERRAN_THOR) + .value("TERRAN_THORAP", sc2::UNIT_TYPEID::TERRAN_THORAP) + .value("TERRAN_VIKINGASSAULT", sc2::UNIT_TYPEID::TERRAN_VIKINGASSAULT) + .value("TERRAN_VIKINGFIGHTER", sc2::UNIT_TYPEID::TERRAN_VIKINGFIGHTER) + .value("TERRAN_WIDOWMINE", sc2::UNIT_TYPEID::TERRAN_WIDOWMINE) + .value("TERRAN_WIDOWMINEBURROWED", sc2::UNIT_TYPEID::TERRAN_WIDOWMINEBURROWED) + .value("TERRAZINECANISTER", sc2::UNIT_TYPEID::TERRAZINECANISTER) + .value("TERRAZINENODE", sc2::UNIT_TYPEID::TERRAZINENODE) + .value("TERRAZINENODEDEADTERRAN", sc2::UNIT_TYPEID::TERRAZINENODEDEADTERRAN) + .value("TERRAZINENODEHAPPYPROTOSS", sc2::UNIT_TYPEID::TERRAZINENODEHAPPYPROTOSS) + .value("TERRAZINETANK", sc2::UNIT_TYPEID::TERRAZINETANK) + .value("TESTHERO", sc2::UNIT_TYPEID::TESTHERO) + .value("TESTHERODEBUGMISSILEABILITY1WEAPON", sc2::UNIT_TYPEID::TESTHERODEBUGMISSILEABILITY1WEAPON) + .value("TESTHERODEBUGMISSILEABILITY2WEAPON", sc2::UNIT_TYPEID::TESTHERODEBUGMISSILEABILITY2WEAPON) + .value("TESTHEROTHROWMISSILE", sc2::UNIT_TYPEID::TESTHEROTHROWMISSILE) + .value("TESTSHOP", sc2::UNIT_TYPEID::TESTSHOP) + .value("TESTZERG", sc2::UNIT_TYPEID::TESTZERG) + .value("THORAALANCE", sc2::UNIT_TYPEID::THORAALANCE) + .value("THORAAWEAPON", sc2::UNIT_TYPEID::THORAAWEAPON) + .value("THORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::THORACGLUESCREENDUMMY) + .value("THORMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::THORMENGSKACGLUESCREENDUMMY) + .value("THORNLIZARD", sc2::UNIT_TYPEID::THORNLIZARD) + .value("THORWRECKAGE", sc2::UNIT_TYPEID::THORWRECKAGE) + .value("TORNADOMISSILEDUMMYWEAPON", sc2::UNIT_TYPEID::TORNADOMISSILEDUMMYWEAPON) + .value("TORNADOMISSILEWEAPON", sc2::UNIT_TYPEID::TORNADOMISSILEWEAPON) + .value("TORRASQUEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TORRASQUEACGLUESCREENDUMMY) + .value("TOSH", sc2::UNIT_TYPEID::TOSH) + .value("TOSSGRENADEWEAPON", sc2::UNIT_TYPEID::TOSSGRENADEWEAPON) + .value("TOWERMINE", sc2::UNIT_TYPEID::TOWERMINE) + .value("TRAFFICSIGNAL", sc2::UNIT_TYPEID::TRAFFICSIGNAL) + .value("TRANSPORTTRUCK", sc2::UNIT_TYPEID::TRANSPORTTRUCK) + .value("TRAYNOR01SIGNSDESTRUCTIBLE1", sc2::UNIT_TYPEID::TRAYNOR01SIGNSDESTRUCTIBLE1) + .value("TROOPERMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TROOPERMENGSKACGLUESCREENDUMMY) + .value("TRUCKFLATBEDUNIT", sc2::UNIT_TYPEID::TRUCKFLATBEDUNIT) + .value("TRUCKSEMIUNIT", sc2::UNIT_TYPEID::TRUCKSEMIUNIT) + .value("TRUCKUTILITYUNIT", sc2::UNIT_TYPEID::TRUCKUTILITYUNIT) + .value("TYCHUSCHAINGUN", sc2::UNIT_TYPEID::TYCHUSCHAINGUN) + .value("TYCHUSCOMMANDO", sc2::UNIT_TYPEID::TYCHUSCOMMANDO) + .value("TYCHUSEJECTMISSILE", sc2::UNIT_TYPEID::TYCHUSEJECTMISSILE) + .value("TYCHUSFIREBATACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSFIREBATACGLUESCREENDUMMY) + .value("TYCHUSGHOSTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSGHOSTACGLUESCREENDUMMY) + .value("TYCHUSGRENADEWEAPON", sc2::UNIT_TYPEID::TYCHUSGRENADEWEAPON) + .value("TYCHUSHERCACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSHERCACGLUESCREENDUMMY) + .value("TYCHUSMARAUDERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSMARAUDERACGLUESCREENDUMMY) + .value("TYCHUSMEDICACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSMEDICACGLUESCREENDUMMY) + .value("TYCHUSREAPERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSREAPERACGLUESCREENDUMMY) + .value("TYCHUSSCVAUTOTURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSSCVAUTOTURRETACGLUESCREENDUMMY) + .value("TYCHUSSPECTREACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSSPECTREACGLUESCREENDUMMY) + .value("TYCHUSWARHOUNDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSWARHOUNDACGLUESCREENDUMMY) + .value("TYRANNOZORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYRANNOZORACGLUESCREENDUMMY) + .value("ULAANSMOKEBRIDGE", sc2::UNIT_TYPEID::ULAANSMOKEBRIDGE) + .value("ULTRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ULTRALISKACGLUESCREENDUMMY) + .value("ULTRASONICPULSEWEAPON", sc2::UNIT_TYPEID::ULTRASONICPULSEWEAPON) + .value("UNBUILDABLEBRICKSSMALLUNIT", sc2::UNIT_TYPEID::UNBUILDABLEBRICKSSMALLUNIT) + .value("UNBUILDABLEBRICKSUNIT", sc2::UNIT_TYPEID::UNBUILDABLEBRICKSUNIT) + .value("UNBUILDABLEPLATESSMALLUNIT", sc2::UNIT_TYPEID::UNBUILDABLEPLATESSMALLUNIT) + .value("UNBUILDABLEPLATESUNIT", sc2::UNIT_TYPEID::UNBUILDABLEPLATESUNIT) + .value("UNBUILDABLEROCKSDESTRUCTIBLE", sc2::UNIT_TYPEID::UNBUILDABLEROCKSDESTRUCTIBLE) + .value("UNBUILDABLEROCKSSMALLUNIT", sc2::UNIT_TYPEID::UNBUILDABLEROCKSSMALLUNIT) + .value("UNBUILDABLEROCKSUNIT", sc2::UNIT_TYPEID::UNBUILDABLEROCKSUNIT) + .value("URSADAKCALF", sc2::UNIT_TYPEID::URSADAKCALF) + .value("URSADAKFEMALE", sc2::UNIT_TYPEID::URSADAKFEMALE) + .value("URSADAKFEMALEEXOTIC", sc2::UNIT_TYPEID::URSADAKFEMALEEXOTIC) + .value("URSADAKMALE", sc2::UNIT_TYPEID::URSADAKMALE) + .value("URSADAKMALEEXOTIC", sc2::UNIT_TYPEID::URSADAKMALEEXOTIC) + .value("URSADON", sc2::UNIT_TYPEID::URSADON) + .value("URSULA", sc2::UNIT_TYPEID::URSULA) + .value("URUN", sc2::UNIT_TYPEID::URUN) + .value("URUNWEAPONLEFT", sc2::UNIT_TYPEID::URUNWEAPONLEFT) + .value("URUNWEAPONRIGHT", sc2::UNIT_TYPEID::URUNWEAPONRIGHT) + .value("VALHALLABASEDESTRUCTIBLEDOOR", sc2::UNIT_TYPEID::VALHALLABASEDESTRUCTIBLEDOOR) + .value("VALHALLABASEDESTRUCTIBLEDOORDEAD", sc2::UNIT_TYPEID::VALHALLABASEDESTRUCTIBLEDOORDEAD) + .value("VALHALLADESTRUCTIBLEWALL", sc2::UNIT_TYPEID::VALHALLADESTRUCTIBLEWALL) + .value("VIKING", sc2::UNIT_TYPEID::VIKING) + .value("VIKINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VIKINGACGLUESCREENDUMMY) + .value("VIKINGFIGHTERWEAPON", sc2::UNIT_TYPEID::VIKINGFIGHTERWEAPON) + .value("VIKINGMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VIKINGMENGSKACGLUESCREENDUMMY) + .value("VIKINGSKINPREVIEW", sc2::UNIT_TYPEID::VIKINGSKINPREVIEW) + .value("VIKINGSKY_UNIT", sc2::UNIT_TYPEID::VIKINGSKY_UNIT) + .value("VILESTREAMWEAPON", sc2::UNIT_TYPEID::VILESTREAMWEAPON) + .value("VIPERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VIPERACGLUESCREENDUMMY) + .value("VIPERCONSUMESTRUCTUREWEAPON", sc2::UNIT_TYPEID::VIPERCONSUMESTRUCTUREWEAPON) + .value("VIROPHAGE", sc2::UNIT_TYPEID::VIROPHAGE) + .value("VOIDMPIMMORTALREVIVECORPSE", sc2::UNIT_TYPEID::VOIDMPIMMORTALREVIVECORPSE) + .value("VOIDRAYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VOIDRAYACGLUESCREENDUMMY) + .value("VOIDRAYSHAKURASACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VOIDRAYSHAKURASACGLUESCREENDUMMY) + .value("VOIDSEEKER", sc2::UNIT_TYPEID::VOIDSEEKER) + .value("VOIDSEEKERPHASEMINEBLASTSECONDARYWEAPON", sc2::UNIT_TYPEID::VOIDSEEKERPHASEMINEBLASTSECONDARYWEAPON) + .value("VOIDSEEKERPHASEMINEBLASTWEAPON", sc2::UNIT_TYPEID::VOIDSEEKERPHASEMINEBLASTWEAPON) + .value("VOIDSEEKERWEAPON", sc2::UNIT_TYPEID::VOIDSEEKERWEAPON) + .value("VULTURE", sc2::UNIT_TYPEID::VULTURE) + .value("VULTUREACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VULTUREACGLUESCREENDUMMY) + .value("VULTUREWEAPON", sc2::UNIT_TYPEID::VULTUREWEAPON) + .value("WALLOFFIRE", sc2::UNIT_TYPEID::WALLOFFIRE) + .value("WARBOT", sc2::UNIT_TYPEID::WARBOT) + .value("WARBOTBMISSILE", sc2::UNIT_TYPEID::WARBOTBMISSILE) + .value("WARHOUND", sc2::UNIT_TYPEID::WARHOUND) + .value("WARHOUNDWEAPON", sc2::UNIT_TYPEID::WARHOUNDWEAPON) + .value("WARPIG", sc2::UNIT_TYPEID::WARPIG) + .value("WARPPRISMSKINPREVIEW", sc2::UNIT_TYPEID::WARPPRISMSKINPREVIEW) + .value("WARPPRISMTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::WARPPRISMTALDARIMACGLUESCREENDUMMY) + .value("WEAPON", sc2::UNIT_TYPEID::WEAPON) + .value("WEAPONHYBRIDC", sc2::UNIT_TYPEID::WEAPONHYBRIDC) + .value("WEAPONHYBRIDD", sc2::UNIT_TYPEID::WEAPONHYBRIDD) + .value("WIDOWMINEAIRWEAPON", sc2::UNIT_TYPEID::WIDOWMINEAIRWEAPON) + .value("WIDOWMINEWEAPON", sc2::UNIT_TYPEID::WIDOWMINEWEAPON) + .value("WOLFSTATUE", sc2::UNIT_TYPEID::WOLFSTATUE) + .value("WRAITH", sc2::UNIT_TYPEID::WRAITH) + .value("WRAITHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::WRAITHACGLUESCREENDUMMY) + .value("WRAITHAIRWEAPONLEFT", sc2::UNIT_TYPEID::WRAITHAIRWEAPONLEFT) + .value("WRAITHAIRWEAPONRIGHT", sc2::UNIT_TYPEID::WRAITHAIRWEAPONRIGHT) + .value("WRAITHGROUNDWEAPON", sc2::UNIT_TYPEID::WRAITHGROUNDWEAPON) + .value("WRECKEDBATTLECRUISERHELIOSFINAL", sc2::UNIT_TYPEID::WRECKEDBATTLECRUISERHELIOSFINAL) + .value("XELNAGADESTRUCTIBLEBLOCKER6E", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6E) + .value("XELNAGADESTRUCTIBLEBLOCKER6N", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6N) + .value("XELNAGADESTRUCTIBLEBLOCKER6NE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6NE) + .value("XELNAGADESTRUCTIBLEBLOCKER6NW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6NW) + .value("XELNAGADESTRUCTIBLEBLOCKER6S", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6S) + .value("XELNAGADESTRUCTIBLEBLOCKER6SE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6SE) + .value("XELNAGADESTRUCTIBLEBLOCKER6SW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6SW) + .value("XELNAGADESTRUCTIBLEBLOCKER6W", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6W) + .value("XELNAGADESTRUCTIBLEBLOCKER8E", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8E) + .value("XELNAGADESTRUCTIBLEBLOCKER8N", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8N) + .value("XELNAGADESTRUCTIBLEBLOCKER8NE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8NE) + .value("XELNAGADESTRUCTIBLEBLOCKER8NW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8NW) + .value("XELNAGADESTRUCTIBLEBLOCKER8S", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8S) + .value("XELNAGADESTRUCTIBLEBLOCKER8SE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8SE) + .value("XELNAGADESTRUCTIBLEBLOCKER8SW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8SW) + .value("XELNAGADESTRUCTIBLEBLOCKER8W", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8W) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER6E", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6E) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER6N", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6N) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER6NE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6NE) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER6NW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6NW) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER6S", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6S) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER6SE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6SE) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER6SW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6SW) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER6W", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6W) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER8E", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8E) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER8N", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8N) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER8NE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8NE) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER8NW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8NW) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER8S", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8S) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER8SE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8SE) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER8SW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8SW) + .value("XELNAGADESTRUCTIBLERAMPBLOCKER8W", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8W) + .value("XELNAGAHEALINGSHRINE", sc2::UNIT_TYPEID::XELNAGAHEALINGSHRINE) + .value("XELNAGAPRISON", sc2::UNIT_TYPEID::XELNAGAPRISON) + .value("XELNAGAPRISONCONSOLE", sc2::UNIT_TYPEID::XELNAGAPRISONCONSOLE) + .value("XELNAGAPRISONHEIGHT2", sc2::UNIT_TYPEID::XELNAGAPRISONHEIGHT2) + .value("XELNAGAPRISONNORTH", sc2::UNIT_TYPEID::XELNAGAPRISONNORTH) + .value("XELNAGAPRISONNORTHHEIGHT2", sc2::UNIT_TYPEID::XELNAGAPRISONNORTHHEIGHT2) + .value("XELNAGASHRINE", sc2::UNIT_TYPEID::XELNAGASHRINE) + .value("XELNAGASHRINEXIL", sc2::UNIT_TYPEID::XELNAGASHRINEXIL) + .value("XELNAGATEMPLE", sc2::UNIT_TYPEID::XELNAGATEMPLE) + .value("XELNAGATEMPLEDOOR", sc2::UNIT_TYPEID::XELNAGATEMPLEDOOR) + .value("XELNAGATEMPLEDOORBURROWED", sc2::UNIT_TYPEID::XELNAGATEMPLEDOORBURROWED) + .value("XELNAGATEMPLEDOORURDL", sc2::UNIT_TYPEID::XELNAGATEMPLEDOORURDL) + .value("XELNAGATEMPLEDOORURDLBURROWED", sc2::UNIT_TYPEID::XELNAGATEMPLEDOORURDLBURROWED) + .value("XELNAGAVAULT", sc2::UNIT_TYPEID::XELNAGAVAULT) + .value("XELNAGAWORLDSHIPVAULT", sc2::UNIT_TYPEID::XELNAGAWORLDSHIPVAULT) + .value("XELNAGA_CAVERNS_DOORE", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORE) + .value("XELNAGA_CAVERNS_DOOREOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOOREOPENED) + .value("XELNAGA_CAVERNS_DOORN", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORN) + .value("XELNAGA_CAVERNS_DOORNE", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORNE) + .value("XELNAGA_CAVERNS_DOORNEOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORNEOPENED) + .value("XELNAGA_CAVERNS_DOORNOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORNOPENED) + .value("XELNAGA_CAVERNS_DOORNW", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORNW) + .value("XELNAGA_CAVERNS_DOORNWOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORNWOPENED) + .value("XELNAGA_CAVERNS_DOORS", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORS) + .value("XELNAGA_CAVERNS_DOORSE", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORSE) + .value("XELNAGA_CAVERNS_DOORSEOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORSEOPENED) + .value("XELNAGA_CAVERNS_DOORSOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORSOPENED) + .value("XELNAGA_CAVERNS_DOORSW", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORSW) + .value("XELNAGA_CAVERNS_DOORSWOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORSWOPENED) + .value("XELNAGA_CAVERNS_DOORW", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORW) + .value("XELNAGA_CAVERNS_DOORWOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORWOPENED) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH10", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH10) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH10OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH10OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH12", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH12) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH12OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH12OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH8", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH8) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH8OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH8OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE10", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE10) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE10OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE10OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE12", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE12) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE12OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE12OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE8", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE8) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE8OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE8OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW10", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW10) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW10OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW10OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW12", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW12) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW12OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW12OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW8", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW8) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW8OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW8OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV10", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV10) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV10OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV10OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV12", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV12) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV12OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV12OUT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV8", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV8) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV8OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV8OUT) + .value("YAMATOWEAPON", sc2::UNIT_TYPEID::YAMATOWEAPON) + .value("YOINKMISSILE", sc2::UNIT_TYPEID::YOINKMISSILE) + .value("YOINKSIEGETANKMISSILE", sc2::UNIT_TYPEID::YOINKSIEGETANKMISSILE) + .value("YOINKVIKINGAIRMISSILE", sc2::UNIT_TYPEID::YOINKVIKINGAIRMISSILE) + .value("YOINKVIKINGGROUNDMISSILE", sc2::UNIT_TYPEID::YOINKVIKINGGROUNDMISSILE) + .value("ZEALOTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTACGLUESCREENDUMMY) + .value("ZEALOTAIURACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTAIURACGLUESCREENDUMMY) + .value("ZEALOTFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTFENIXACGLUESCREENDUMMY) + .value("ZEALOTPURIFIERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTPURIFIERACGLUESCREENDUMMY) + .value("ZEALOTSHAKURASACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTSHAKURASACGLUESCREENDUMMY) + .value("ZEALOTVORAZUNACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTVORAZUNACGLUESCREENDUMMY) + .value("ZERATUL", sc2::UNIT_TYPEID::ZERATUL) + .value("ZERATULCRYSTALCHARGE", sc2::UNIT_TYPEID::ZERATULCRYSTALCHARGE) + .value("ZERATULDARKTEMPLARACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULDARKTEMPLARACGLUESCREENDUMMY) + .value("ZERATULDISRUPTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULDISRUPTORACGLUESCREENDUMMY) + .value("ZERATULIMMORTALACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULIMMORTALACGLUESCREENDUMMY) + .value("ZERATULOBSERVERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULOBSERVERACGLUESCREENDUMMY) + .value("ZERATULPHOTONCANNONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULPHOTONCANNONACGLUESCREENDUMMY) + .value("ZERATULSENTRYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULSENTRYACGLUESCREENDUMMY) + .value("ZERATULSTALKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULSTALKERACGLUESCREENDUMMY) + .value("ZERATULWARPPRISMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULWARPPRISMACGLUESCREENDUMMY) + .value("ZERGDROPPOD", sc2::UNIT_TYPEID::ZERGDROPPOD) + .value("ZERGDROPPODCREEP", sc2::UNIT_TYPEID::ZERGDROPPODCREEP) + .value("ZERGLINGKERRIGANACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERGLINGKERRIGANACGLUESCREENDUMMY) + .value("ZERGLINGZAGARAACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERGLINGZAGARAACGLUESCREENDUMMY) + .value("ZERG_BANELING", sc2::UNIT_TYPEID::ZERG_BANELING) + .value("ZERG_BANELINGBURROWED", sc2::UNIT_TYPEID::ZERG_BANELINGBURROWED) + .value("ZERG_BANELINGCOCOON", sc2::UNIT_TYPEID::ZERG_BANELINGCOCOON) + .value("ZERG_BANELINGNEST", sc2::UNIT_TYPEID::ZERG_BANELINGNEST) + .value("ZERG_BROODLING", sc2::UNIT_TYPEID::ZERG_BROODLING) + .value("ZERG_BROODLORD", sc2::UNIT_TYPEID::ZERG_BROODLORD) + .value("ZERG_BROODLORDCOCOON", sc2::UNIT_TYPEID::ZERG_BROODLORDCOCOON) + .value("ZERG_CHANGELING", sc2::UNIT_TYPEID::ZERG_CHANGELING) + .value("ZERG_CHANGELINGMARINE", sc2::UNIT_TYPEID::ZERG_CHANGELINGMARINE) + .value("ZERG_CHANGELINGMARINESHIELD", sc2::UNIT_TYPEID::ZERG_CHANGELINGMARINESHIELD) + .value("ZERG_CHANGELINGZEALOT", sc2::UNIT_TYPEID::ZERG_CHANGELINGZEALOT) + .value("ZERG_CHANGELINGZERGLING", sc2::UNIT_TYPEID::ZERG_CHANGELINGZERGLING) + .value("ZERG_CHANGELINGZERGLINGWINGS", sc2::UNIT_TYPEID::ZERG_CHANGELINGZERGLINGWINGS) + .value("ZERG_CORRUPTOR", sc2::UNIT_TYPEID::ZERG_CORRUPTOR) + .value("ZERG_CREEPTUMOR", sc2::UNIT_TYPEID::ZERG_CREEPTUMOR) + .value("ZERG_CREEPTUMORBURROWED", sc2::UNIT_TYPEID::ZERG_CREEPTUMORBURROWED) + .value("ZERG_CREEPTUMORQUEEN", sc2::UNIT_TYPEID::ZERG_CREEPTUMORQUEEN) + .value("ZERG_DRONE", sc2::UNIT_TYPEID::ZERG_DRONE) + .value("ZERG_DRONEBURROWED", sc2::UNIT_TYPEID::ZERG_DRONEBURROWED) + .value("ZERG_EGG", sc2::UNIT_TYPEID::ZERG_EGG) + .value("ZERG_EVOLUTIONCHAMBER", sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER) + .value("ZERG_EXTRACTOR", sc2::UNIT_TYPEID::ZERG_EXTRACTOR) + .value("ZERG_EXTRACTORRICH", sc2::UNIT_TYPEID::ZERG_EXTRACTORRICH) + .value("ZERG_GREATERSPIRE", sc2::UNIT_TYPEID::ZERG_GREATERSPIRE) + .value("ZERG_HATCHERY", sc2::UNIT_TYPEID::ZERG_HATCHERY) + .value("ZERG_HIVE", sc2::UNIT_TYPEID::ZERG_HIVE) + .value("ZERG_HYDRALISK", sc2::UNIT_TYPEID::ZERG_HYDRALISK) + .value("ZERG_HYDRALISKBURROWED", sc2::UNIT_TYPEID::ZERG_HYDRALISKBURROWED) + .value("ZERG_HYDRALISKDEN", sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN) + .value("ZERG_INFESTATIONPIT", sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT) + .value("ZERG_INFESTEDTERRANSEGG", sc2::UNIT_TYPEID::ZERG_INFESTEDTERRANSEGG) + .value("ZERG_INFESTOR", sc2::UNIT_TYPEID::ZERG_INFESTOR) + .value("ZERG_INFESTORBURROWED", sc2::UNIT_TYPEID::ZERG_INFESTORBURROWED) + .value("ZERG_INFESTORTERRAN", sc2::UNIT_TYPEID::ZERG_INFESTORTERRAN) + .value("ZERG_LAIR", sc2::UNIT_TYPEID::ZERG_LAIR) + .value("ZERG_LARVA", sc2::UNIT_TYPEID::ZERG_LARVA) + .value("ZERG_LOCUSTMP", sc2::UNIT_TYPEID::ZERG_LOCUSTMP) + .value("ZERG_LOCUSTMPFLYING", sc2::UNIT_TYPEID::ZERG_LOCUSTMPFLYING) + .value("ZERG_LURKERDENMP", sc2::UNIT_TYPEID::ZERG_LURKERDENMP) + .value("ZERG_LURKERMP", sc2::UNIT_TYPEID::ZERG_LURKERMP) + .value("ZERG_LURKERMPBURROWED", sc2::UNIT_TYPEID::ZERG_LURKERMPBURROWED) + .value("ZERG_LURKERMPEGG", sc2::UNIT_TYPEID::ZERG_LURKERMPEGG) + .value("ZERG_MUTALISK", sc2::UNIT_TYPEID::ZERG_MUTALISK) + .value("ZERG_NYDUSCANAL", sc2::UNIT_TYPEID::ZERG_NYDUSCANAL) + .value("ZERG_NYDUSNETWORK", sc2::UNIT_TYPEID::ZERG_NYDUSNETWORK) + .value("ZERG_OVERLORD", sc2::UNIT_TYPEID::ZERG_OVERLORD) + .value("ZERG_OVERLORDCOCOON", sc2::UNIT_TYPEID::ZERG_OVERLORDCOCOON) + .value("ZERG_OVERLORDTRANSPORT", sc2::UNIT_TYPEID::ZERG_OVERLORDTRANSPORT) + .value("ZERG_OVERSEER", sc2::UNIT_TYPEID::ZERG_OVERSEER) + .value("ZERG_OVERSEERSIEGEMODE", sc2::UNIT_TYPEID::ZERG_OVERSEERSIEGEMODE) + .value("ZERG_PARASITICBOMBDUMMY", sc2::UNIT_TYPEID::ZERG_PARASITICBOMBDUMMY) + .value("ZERG_QUEEN", sc2::UNIT_TYPEID::ZERG_QUEEN) + .value("ZERG_QUEENBURROWED", sc2::UNIT_TYPEID::ZERG_QUEENBURROWED) + .value("ZERG_RAVAGER", sc2::UNIT_TYPEID::ZERG_RAVAGER) + .value("ZERG_RAVAGERCOCOON", sc2::UNIT_TYPEID::ZERG_RAVAGERCOCOON) + .value("ZERG_ROACH", sc2::UNIT_TYPEID::ZERG_ROACH) + .value("ZERG_ROACHBURROWED", sc2::UNIT_TYPEID::ZERG_ROACHBURROWED) + .value("ZERG_ROACHWARREN", sc2::UNIT_TYPEID::ZERG_ROACHWARREN) + .value("ZERG_SPAWNINGPOOL", sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL) + .value("ZERG_SPINECRAWLER", sc2::UNIT_TYPEID::ZERG_SPINECRAWLER) + .value("ZERG_SPINECRAWLERUPROOTED", sc2::UNIT_TYPEID::ZERG_SPINECRAWLERUPROOTED) + .value("ZERG_SPIRE", sc2::UNIT_TYPEID::ZERG_SPIRE) + .value("ZERG_SPORECRAWLER", sc2::UNIT_TYPEID::ZERG_SPORECRAWLER) + .value("ZERG_SPORECRAWLERUPROOTED", sc2::UNIT_TYPEID::ZERG_SPORECRAWLERUPROOTED) + .value("ZERG_SWARMHOSTBURROWEDMP", sc2::UNIT_TYPEID::ZERG_SWARMHOSTBURROWEDMP) + .value("ZERG_SWARMHOSTMP", sc2::UNIT_TYPEID::ZERG_SWARMHOSTMP) + .value("ZERG_TRANSPORTOVERLORDCOCOON", sc2::UNIT_TYPEID::ZERG_TRANSPORTOVERLORDCOCOON) + .value("ZERG_ULTRALISK", sc2::UNIT_TYPEID::ZERG_ULTRALISK) + .value("ZERG_ULTRALISKBURROWED", sc2::UNIT_TYPEID::ZERG_ULTRALISKBURROWED) + .value("ZERG_ULTRALISKCAVERN", sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN) + .value("ZERG_VIPER", sc2::UNIT_TYPEID::ZERG_VIPER) + .value("ZERG_ZERGLING", sc2::UNIT_TYPEID::ZERG_ZERGLING) + .value("ZERG_ZERGLINGBURROWED", sc2::UNIT_TYPEID::ZERG_ZERGLINGBURROWED) + .value("ZERUSDESTRUCTIBLEARCH", sc2::UNIT_TYPEID::ZERUSDESTRUCTIBLEARCH) + .value("ZHAKULDASLIBRARYUNIT", sc2::UNIT_TYPEID::ZHAKULDASLIBRARYUNIT) + .value("ZHAKULDASLIBRARYUNITBURROWED", sc2::UNIT_TYPEID::ZHAKULDASLIBRARYUNITBURROWED) + .value("ZHAKULDASLIGHTBRIDGE", sc2::UNIT_TYPEID::ZHAKULDASLIGHTBRIDGE) + .value("ZHAKULDASLIGHTBRIDGEOFF", sc2::UNIT_TYPEID::ZHAKULDASLIGHTBRIDGEOFF) + .value("ZHAKULDASLIGHTBRIDGEOFFTOPRIGHT", sc2::UNIT_TYPEID::ZHAKULDASLIGHTBRIDGEOFFTOPRIGHT) + .value("ZHAKULDASLIGHTBRIDGETOPRIGHT", sc2::UNIT_TYPEID::ZHAKULDASLIGHTBRIDGETOPRIGHT) + .value("_10SLOTBAG", sc2::UNIT_TYPEID::_10SLOTBAG) + .value("_12SLOTBAG", sc2::UNIT_TYPEID::_12SLOTBAG) + .value("_14SLOTBAG", sc2::UNIT_TYPEID::_14SLOTBAG) + .value("_16SLOTBAG", sc2::UNIT_TYPEID::_16SLOTBAG) + .value("_18SLOTBAG", sc2::UNIT_TYPEID::_18SLOTBAG) + .value("_20SLOTBAG", sc2::UNIT_TYPEID::_20SLOTBAG) + .value("_22SLOTBAG", sc2::UNIT_TYPEID::_22SLOTBAG) + .value("_24SLOTBAG", sc2::UNIT_TYPEID::_24SLOTBAG) + .value("_4SLOTBAG", sc2::UNIT_TYPEID::_4SLOTBAG) + .value("_6SLOTBAG", sc2::UNIT_TYPEID::_6SLOTBAG) + .value("_8SLOTBAG", sc2::UNIT_TYPEID::_8SLOTBAG) .def("__eq__", [](const sc2::UNIT_TYPEID &value, sc2::UnitTypeID &value2) { return value == value2; }); py::enum_<sc2::ABILITY_ID>(m, "ABILITY_ID") .value("INVALID", sc2::ABILITY_ID::INVALID) - .value("SMART", sc2::ABILITY_ID::SMART) + .value("ADVANCEDCONSTRUCTION_CANCEL", sc2::ABILITY_ID::ADVANCEDCONSTRUCTION_CANCEL) + .value("AGGRESSIVEMUTATION", sc2::ABILITY_ID::AGGRESSIVEMUTATION) + .value("AIURLIGHTBRIDGEABANDONEDNE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE10OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGEABANDONEDNE10_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE10_BRIDGERETRACT) + .value("AIURLIGHTBRIDGEABANDONEDNE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE12OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGEABANDONEDNE12_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE12_BRIDGERETRACT) + .value("AIURLIGHTBRIDGEABANDONEDNE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE8OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGEABANDONEDNE8_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE8_BRIDGERETRACT) + .value("AIURLIGHTBRIDGEABANDONEDNW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW10OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGEABANDONEDNW10_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW10_BRIDGERETRACT) + .value("AIURLIGHTBRIDGEABANDONEDNW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW12OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGEABANDONEDNW12_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW12_BRIDGERETRACT) + .value("AIURLIGHTBRIDGEABANDONEDNW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW8OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGEABANDONEDNW8_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW8_BRIDGERETRACT) + .value("AIURLIGHTBRIDGENE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENE10OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGENE10_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENE10_BRIDGERETRACT) + .value("AIURLIGHTBRIDGENE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENE12OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGENE12_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENE12_BRIDGERETRACT) + .value("AIURLIGHTBRIDGENE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENE8OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGENE8_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENE8_BRIDGERETRACT) + .value("AIURLIGHTBRIDGENW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENW10OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGENW10_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENW10_BRIDGERETRACT) + .value("AIURLIGHTBRIDGENW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENW12OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGENW12_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENW12_BRIDGERETRACT) + .value("AIURLIGHTBRIDGENW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENW8OUT_BRIDGEEXTEND) + .value("AIURLIGHTBRIDGENW8_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENW8_BRIDGERETRACT) + .value("AIURTEMPLEBRIDGENE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE10OUT_BRIDGEEXTEND) + .value("AIURTEMPLEBRIDGENE10_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE10_BRIDGERETRACT) + .value("AIURTEMPLEBRIDGENE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE12OUT_BRIDGEEXTEND) + .value("AIURTEMPLEBRIDGENE12_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE12_BRIDGERETRACT) + .value("AIURTEMPLEBRIDGENE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE8OUT_BRIDGEEXTEND) + .value("AIURTEMPLEBRIDGENE8_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE8_BRIDGERETRACT) + .value("AIURTEMPLEBRIDGENW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW10OUT_BRIDGEEXTEND) + .value("AIURTEMPLEBRIDGENW10_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW10_BRIDGERETRACT) + .value("AIURTEMPLEBRIDGENW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW12OUT_BRIDGEEXTEND) + .value("AIURTEMPLEBRIDGENW12_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW12_BRIDGERETRACT) + .value("AIURTEMPLEBRIDGENW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW8OUT_BRIDGEEXTEND) + .value("AIURTEMPLEBRIDGENW8_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW8_BRIDGERETRACT) + .value("ARBITERMPRECALL", sc2::ABILITY_ID::ARBITERMPRECALL) + .value("ARBITERMPSTASISFIELD", sc2::ABILITY_ID::ARBITERMPSTASISFIELD) + .value("ARCHIVESEAL", sc2::ABILITY_ID::ARCHIVESEAL) + .value("ARCHONWARP_ARCHONWARPTARGET", sc2::ABILITY_ID::ARCHONWARP_ARCHONWARPTARGET) + .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL1", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL1) + .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL2", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL2) + .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL3", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL3) + .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL1", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL1) + .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL2", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL2) + .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL3", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL3) + .value("ARTANISVORTEX_VORTEX", sc2::ABILITY_ID::ARTANISVORTEX_VORTEX) + .value("ARTANISWORMHOLETRANSIT_WORMHOLETRANSIT", sc2::ABILITY_ID::ARTANISWORMHOLETRANSIT_WORMHOLETRANSIT) .value("ATTACK", sc2::ABILITY_ID::ATTACK) .value("ATTACK_ATTACK", sc2::ABILITY_ID::ATTACK_ATTACK) + .value("ATTACK_ATTACKALLOWSINVULNERABLE", sc2::ABILITY_ID::ATTACK_ATTACKALLOWSINVULNERABLE) + .value("ATTACK_ATTACKBARRAGE", sc2::ABILITY_ID::ATTACK_ATTACKBARRAGE) .value("ATTACK_ATTACKBUILDING", sc2::ABILITY_ID::ATTACK_ATTACKBUILDING) + .value("ATTACK_ATTACKTOWARDS", sc2::ABILITY_ID::ATTACK_ATTACKTOWARDS) + .value("ATTACK_ATTACKWARPPRISM", sc2::ABILITY_ID::ATTACK_ATTACKWARPPRISM) + .value("ATTACK_BATTLECRUISER", sc2::ABILITY_ID::ATTACK_BATTLECRUISER) .value("ATTACK_REDIRECT", sc2::ABILITY_ID::ATTACK_REDIRECT) + .value("BARRACKSREACTORMORPH_REACTOR", sc2::ABILITY_ID::BARRACKSREACTORMORPH_REACTOR) + .value("BARRACKSTECHLABMORPH_TECHLABBARRACKS", sc2::ABILITY_ID::BARRACKSTECHLABMORPH_TECHLABBARRACKS) + .value("BARRACKSTECHREACTORMORPH_TECHLABBARRACKS", sc2::ABILITY_ID::BARRACKSTECHREACTORMORPH_TECHLABBARRACKS) + .value("BATTLECRUISERATTACKEVALUATOR_MOTHERSHIPCOREATTACK", sc2::ABILITY_ID::BATTLECRUISERATTACKEVALUATOR_MOTHERSHIPCOREATTACK) + .value("BATTLECRUISERMOVE_ACQUIREMOVE", sc2::ABILITY_ID::BATTLECRUISERMOVE_ACQUIREMOVE) + .value("BATTLECRUISERMOVE_MOVE", sc2::ABILITY_ID::BATTLECRUISERMOVE_MOVE) + .value("BATTLECRUISERMOVE_MOVEHOLDPOSITION", sc2::ABILITY_ID::BATTLECRUISERMOVE_MOVEHOLDPOSITION) + .value("BATTLECRUISERMOVE_MOVEPATROL", sc2::ABILITY_ID::BATTLECRUISERMOVE_MOVEPATROL) + .value("BATTLECRUISERMOVE_TURN", sc2::ABILITY_ID::BATTLECRUISERMOVE_TURN) + .value("BATTLECRUISERSTOPEVALUATOR_STOP", sc2::ABILITY_ID::BATTLECRUISERSTOPEVALUATOR_STOP) + .value("BATTLECRUISERSTOP_CHEER", sc2::ABILITY_ID::BATTLECRUISERSTOP_CHEER) + .value("BATTLECRUISERSTOP_DANCE", sc2::ABILITY_ID::BATTLECRUISERSTOP_DANCE) + .value("BATTLECRUISERSTOP_HOLDFIRE", sc2::ABILITY_ID::BATTLECRUISERSTOP_HOLDFIRE) + .value("BEACON_BEACONMOVE", sc2::ABILITY_ID::BEACON_BEACONMOVE) + .value("BEACON_CANCEL", sc2::ABILITY_ID::BEACON_CANCEL) .value("BEHAVIOR_BUILDINGATTACKOFF", sc2::ABILITY_ID::BEHAVIOR_BUILDINGATTACKOFF) .value("BEHAVIOR_BUILDINGATTACKON", sc2::ABILITY_ID::BEHAVIOR_BUILDINGATTACKON) .value("BEHAVIOR_CLOAKOFF", sc2::ABILITY_ID::BEHAVIOR_CLOAKOFF) @@ -238,17 +2087,35 @@ void define_typeenums(py::module & m) .value("BEHAVIOR_GENERATECREEPOFF", sc2::ABILITY_ID::BEHAVIOR_GENERATECREEPOFF) .value("BEHAVIOR_GENERATECREEPON", sc2::ABILITY_ID::BEHAVIOR_GENERATECREEPON) .value("BEHAVIOR_HOLDFIREOFF", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREOFF) + .value("BEHAVIOR_HOLDFIREOFF_GHOST", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREOFF_GHOST) .value("BEHAVIOR_HOLDFIREOFF_LURKER", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREOFF_LURKER) .value("BEHAVIOR_HOLDFIREON", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREON) .value("BEHAVIOR_HOLDFIREON_GHOST", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREON_GHOST) .value("BEHAVIOR_HOLDFIREON_LURKER", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREON_LURKER) .value("BEHAVIOR_PULSARBEAMOFF", sc2::ABILITY_ID::BEHAVIOR_PULSARBEAMOFF) .value("BEHAVIOR_PULSARBEAMON", sc2::ABILITY_ID::BEHAVIOR_PULSARBEAMON) + .value("BIODOMECOMMANDLAND_LAND", sc2::ABILITY_ID::BIODOMECOMMANDLAND_LAND) + .value("BIODOMECOMMANDLIFTOFF_LIFT", sc2::ABILITY_ID::BIODOMECOMMANDLIFTOFF_LIFT) + .value("BIODOMETRANSPORT_BIODOMELOAD", sc2::ABILITY_ID::BIODOMETRANSPORT_BIODOMELOAD) + .value("BIODOMETRANSPORT_BIODOMEUNLOADALL", sc2::ABILITY_ID::BIODOMETRANSPORT_BIODOMEUNLOADALL) + .value("BIOPLASMIDDISCHARGE", sc2::ABILITY_ID::BIOPLASMIDDISCHARGE) + .value("BIOSTASIS", sc2::ABILITY_ID::BIOSTASIS) + .value("BONESHEAL", sc2::ABILITY_ID::BONESHEAL) + .value("BONESTOSSGRENADE_TOSSGRENADETYCHUS", sc2::ABILITY_ID::BONESTOSSGRENADE_TOSSGRENADETYCHUS) + .value("BROODLORDQUEUE2_CANCEL", sc2::ABILITY_ID::BROODLORDQUEUE2_CANCEL) + .value("BROODLORDQUEUE2_CANCELSLOT", sc2::ABILITY_ID::BROODLORDQUEUE2_CANCELSLOT) + .value("BUILDINGSHIELD", sc2::ABILITY_ID::BUILDINGSHIELD) + .value("BUILDINGSTASIS", sc2::ABILITY_ID::BUILDINGSTASIS) + .value("BUILDINPROGRESSNONCANCELLABLE_CANCEL", sc2::ABILITY_ID::BUILDINPROGRESSNONCANCELLABLE_CANCEL) + .value("BUILDINPROGRESSNYDUSCANAL_CANCEL", sc2::ABILITY_ID::BUILDINPROGRESSNYDUSCANAL_CANCEL) + .value("BUILDNYDUSCANAL_CANCEL", sc2::ABILITY_ID::BUILDNYDUSCANAL_CANCEL) + .value("BUILDNYDUSCANAL_SUMMONNYDUSCANALATTACKER", sc2::ABILITY_ID::BUILDNYDUSCANAL_SUMMONNYDUSCANALATTACKER) .value("BUILD_ARMORY", sc2::ABILITY_ID::BUILD_ARMORY) .value("BUILD_ASSIMILATOR", sc2::ABILITY_ID::BUILD_ASSIMILATOR) .value("BUILD_BANELINGNEST", sc2::ABILITY_ID::BUILD_BANELINGNEST) .value("BUILD_BARRACKS", sc2::ABILITY_ID::BUILD_BARRACKS) .value("BUILD_BUNKER", sc2::ABILITY_ID::BUILD_BUNKER) + .value("BUILD_CANCEL", sc2::ABILITY_ID::BUILD_CANCEL) .value("BUILD_COMMANDCENTER", sc2::ABILITY_ID::BUILD_COMMANDCENTER) .value("BUILD_CREEPTUMOR", sc2::ABILITY_ID::BUILD_CREEPTUMOR) .value("BUILD_CREEPTUMOR_QUEEN", sc2::ABILITY_ID::BUILD_CREEPTUMOR_QUEEN) @@ -268,6 +2135,7 @@ void define_typeenums(py::module & m) .value("BUILD_HYDRALISKDEN", sc2::ABILITY_ID::BUILD_HYDRALISKDEN) .value("BUILD_INFESTATIONPIT", sc2::ABILITY_ID::BUILD_INFESTATIONPIT) .value("BUILD_INTERCEPTORS", sc2::ABILITY_ID::BUILD_INTERCEPTORS) + .value("BUILD_LURKERDEN", sc2::ABILITY_ID::BUILD_LURKERDEN) .value("BUILD_MISSILETURRET", sc2::ABILITY_ID::BUILD_MISSILETURRET) .value("BUILD_NEXUS", sc2::ABILITY_ID::BUILD_NEXUS) .value("BUILD_NUKE", sc2::ABILITY_ID::BUILD_NUKE) @@ -300,36 +2168,74 @@ void define_typeenums(py::module & m) .value("BUILD_TEMPLARARCHIVE", sc2::ABILITY_ID::BUILD_TEMPLARARCHIVE) .value("BUILD_TWILIGHTCOUNCIL", sc2::ABILITY_ID::BUILD_TWILIGHTCOUNCIL) .value("BUILD_ULTRALISKCAVERN", sc2::ABILITY_ID::BUILD_ULTRALISKCAVERN) + .value("BUNKERATTACK", sc2::ABILITY_ID::BUNKERATTACK) + .value("BUNKERSTOP_HOLDFIRESPECIAL", sc2::ABILITY_ID::BUNKERSTOP_HOLDFIRESPECIAL) + .value("BUNKERSTOP_STOPBUNKER", sc2::ABILITY_ID::BUNKERSTOP_STOPBUNKER) + .value("BURROWBANELINGDOWN_CANCEL", sc2::ABILITY_ID::BURROWBANELINGDOWN_CANCEL) + .value("BURROWCREEPTUMORDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWCREEPTUMORDOWN_BURROWDOWN) .value("BURROWDOWN", sc2::ABILITY_ID::BURROWDOWN) .value("BURROWDOWN_BANELING", sc2::ABILITY_ID::BURROWDOWN_BANELING) .value("BURROWDOWN_DRONE", sc2::ABILITY_ID::BURROWDOWN_DRONE) .value("BURROWDOWN_HYDRALISK", sc2::ABILITY_ID::BURROWDOWN_HYDRALISK) .value("BURROWDOWN_INFESTOR", sc2::ABILITY_ID::BURROWDOWN_INFESTOR) + .value("BURROWDOWN_INFESTORTERRAN", sc2::ABILITY_ID::BURROWDOWN_INFESTORTERRAN) .value("BURROWDOWN_LURKER", sc2::ABILITY_ID::BURROWDOWN_LURKER) .value("BURROWDOWN_QUEEN", sc2::ABILITY_ID::BURROWDOWN_QUEEN) .value("BURROWDOWN_RAVAGER", sc2::ABILITY_ID::BURROWDOWN_RAVAGER) .value("BURROWDOWN_ROACH", sc2::ABILITY_ID::BURROWDOWN_ROACH) .value("BURROWDOWN_SWARMHOST", sc2::ABILITY_ID::BURROWDOWN_SWARMHOST) + .value("BURROWDOWN_ULTRALISK", sc2::ABILITY_ID::BURROWDOWN_ULTRALISK) .value("BURROWDOWN_WIDOWMINE", sc2::ABILITY_ID::BURROWDOWN_WIDOWMINE) .value("BURROWDOWN_ZERGLING", sc2::ABILITY_ID::BURROWDOWN_ZERGLING) + .value("BURROWDRONEDOWN_CANCEL", sc2::ABILITY_ID::BURROWDRONEDOWN_CANCEL) + .value("BURROWEDBANELINGSTOP_HOLDFIRESPECIAL", sc2::ABILITY_ID::BURROWEDBANELINGSTOP_HOLDFIRESPECIAL) + .value("BURROWEDBANELINGSTOP_STOPROACHBURROWED", sc2::ABILITY_ID::BURROWEDBANELINGSTOP_STOPROACHBURROWED) + .value("BURROWEDSTOP_HOLDFIRESPECIAL", sc2::ABILITY_ID::BURROWEDSTOP_HOLDFIRESPECIAL) + .value("BURROWEDSTOP_STOPROACHBURROWED", sc2::ABILITY_ID::BURROWEDSTOP_STOPROACHBURROWED) + .value("BURROWHUNTERKILLERDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWHUNTERKILLERDOWN_BURROWDOWN) + .value("BURROWHUNTERKILLERDOWN_CANCEL", sc2::ABILITY_ID::BURROWHUNTERKILLERDOWN_CANCEL) + .value("BURROWHUNTERKILLERUP_BURROWUP", sc2::ABILITY_ID::BURROWHUNTERKILLERUP_BURROWUP) + .value("BURROWHYDRALISKDOWN_CANCEL", sc2::ABILITY_ID::BURROWHYDRALISKDOWN_CANCEL) + .value("BURROWINFESTEDABOMINATIONDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWINFESTEDABOMINATIONDOWN_BURROWDOWN) + .value("BURROWINFESTEDABOMINATIONUP_BURROWUP", sc2::ABILITY_ID::BURROWINFESTEDABOMINATIONUP_BURROWUP) + .value("BURROWINFESTEDCIVILIANDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWINFESTEDCIVILIANDOWN_BURROWDOWN) + .value("BURROWINFESTEDCIVILIANUP_BURROWUP", sc2::ABILITY_ID::BURROWINFESTEDCIVILIANUP_BURROWUP) + .value("BURROWINFESTEDTERRANCAMPAIGNDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWINFESTEDTERRANCAMPAIGNDOWN_BURROWDOWN) + .value("BURROWINFESTEDTERRANCAMPAIGNUP_BURROWUP", sc2::ABILITY_ID::BURROWINFESTEDTERRANCAMPAIGNUP_BURROWUP) + .value("BURROWINFESTORDOWN_CANCEL", sc2::ABILITY_ID::BURROWINFESTORDOWN_CANCEL) + .value("BURROWLURKERDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWLURKERDOWN_BURROWDOWN) + .value("BURROWLURKERDOWN_CANCEL", sc2::ABILITY_ID::BURROWLURKERDOWN_CANCEL) + .value("BURROWLURKERMPDOWN_CANCEL", sc2::ABILITY_ID::BURROWLURKERMPDOWN_CANCEL) + .value("BURROWLURKERUP_BURROWUP", sc2::ABILITY_ID::BURROWLURKERUP_BURROWUP) + .value("BURROWOMEGALISKDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWOMEGALISKDOWN_BURROWDOWN) + .value("BURROWOMEGALISKUP_BURROWUP", sc2::ABILITY_ID::BURROWOMEGALISKUP_BURROWUP) + .value("BURROWQUEENDOWN_CANCEL", sc2::ABILITY_ID::BURROWQUEENDOWN_CANCEL) + .value("BURROWRAVAGERDOWN_CANCEL", sc2::ABILITY_ID::BURROWRAVAGERDOWN_CANCEL) + .value("BURROWROACHDOWN_CANCEL", sc2::ABILITY_ID::BURROWROACHDOWN_CANCEL) .value("BURROWUP", sc2::ABILITY_ID::BURROWUP) .value("BURROWUP_BANELING", sc2::ABILITY_ID::BURROWUP_BANELING) .value("BURROWUP_DRONE", sc2::ABILITY_ID::BURROWUP_DRONE) .value("BURROWUP_HYDRALISK", sc2::ABILITY_ID::BURROWUP_HYDRALISK) .value("BURROWUP_INFESTOR", sc2::ABILITY_ID::BURROWUP_INFESTOR) + .value("BURROWUP_INFESTORTERRAN", sc2::ABILITY_ID::BURROWUP_INFESTORTERRAN) .value("BURROWUP_LURKER", sc2::ABILITY_ID::BURROWUP_LURKER) .value("BURROWUP_QUEEN", sc2::ABILITY_ID::BURROWUP_QUEEN) .value("BURROWUP_RAVAGER", sc2::ABILITY_ID::BURROWUP_RAVAGER) .value("BURROWUP_ROACH", sc2::ABILITY_ID::BURROWUP_ROACH) .value("BURROWUP_SWARMHOST", sc2::ABILITY_ID::BURROWUP_SWARMHOST) + .value("BURROWUP_ULTRALISK", sc2::ABILITY_ID::BURROWUP_ULTRALISK) .value("BURROWUP_WIDOWMINE", sc2::ABILITY_ID::BURROWUP_WIDOWMINE) .value("BURROWUP_ZERGLING", sc2::ABILITY_ID::BURROWUP_ZERGLING) + .value("BURROWZERGLINGDOWN_CANCEL", sc2::ABILITY_ID::BURROWZERGLINGDOWN_CANCEL) .value("CANCEL", sc2::ABILITY_ID::CANCEL) .value("CANCELSLOT_ADDON", sc2::ABILITY_ID::CANCELSLOT_ADDON) + .value("CANCELSLOT_HANGARQUEUE5", sc2::ABILITY_ID::CANCELSLOT_HANGARQUEUE5) .value("CANCELSLOT_QUEUE1", sc2::ABILITY_ID::CANCELSLOT_QUEUE1) .value("CANCELSLOT_QUEUE5", sc2::ABILITY_ID::CANCELSLOT_QUEUE5) .value("CANCELSLOT_QUEUECANCELTOSELECTION", sc2::ABILITY_ID::CANCELSLOT_QUEUECANCELTOSELECTION) .value("CANCELSLOT_QUEUEPASSIVE", sc2::ABILITY_ID::CANCELSLOT_QUEUEPASSIVE) + .value("CANCELSLOT_QUEUEPASSIVECANCELTOSELECTION", sc2::ABILITY_ID::CANCELSLOT_QUEUEPASSIVECANCELTOSELECTION) + .value("CANCELTERRAZINEHARVEST_CANCEL", sc2::ABILITY_ID::CANCELTERRAZINEHARVEST_CANCEL) .value("CANCEL_ADEPTPHASESHIFT", sc2::ABILITY_ID::CANCEL_ADEPTPHASESHIFT) .value("CANCEL_ADEPTSHADEPHASESHIFT", sc2::ABILITY_ID::CANCEL_ADEPTSHADEPHASESHIFT) .value("CANCEL_BARRACKSADDON", sc2::ABILITY_ID::CANCEL_BARRACKSADDON) @@ -337,8 +2243,12 @@ void define_typeenums(py::module & m) .value("CANCEL_CREEPTUMOR", sc2::ABILITY_ID::CANCEL_CREEPTUMOR) .value("CANCEL_FACTORYADDON", sc2::ABILITY_ID::CANCEL_FACTORYADDON) .value("CANCEL_GRAVITONBEAM", sc2::ABILITY_ID::CANCEL_GRAVITONBEAM) + .value("CANCEL_HANGARQUEUE5", sc2::ABILITY_ID::CANCEL_HANGARQUEUE5) .value("CANCEL_LAST", sc2::ABILITY_ID::CANCEL_LAST) + .value("CANCEL_LOCKON", sc2::ABILITY_ID::CANCEL_LOCKON) .value("CANCEL_MORPHBROODLORD", sc2::ABILITY_ID::CANCEL_MORPHBROODLORD) + .value("CANCEL_MORPHGREATERSPIRE", sc2::ABILITY_ID::CANCEL_MORPHGREATERSPIRE) + .value("CANCEL_MORPHHIVE", sc2::ABILITY_ID::CANCEL_MORPHHIVE) .value("CANCEL_MORPHLAIR", sc2::ABILITY_ID::CANCEL_MORPHLAIR) .value("CANCEL_MORPHLURKER", sc2::ABILITY_ID::CANCEL_MORPHLURKER) .value("CANCEL_MORPHLURKERDEN", sc2::ABILITY_ID::CANCEL_MORPHLURKERDEN) @@ -348,16 +2258,86 @@ void define_typeenums(py::module & m) .value("CANCEL_MORPHOVERSEER", sc2::ABILITY_ID::CANCEL_MORPHOVERSEER) .value("CANCEL_MORPHPLANETARYFORTRESS", sc2::ABILITY_ID::CANCEL_MORPHPLANETARYFORTRESS) .value("CANCEL_MORPHRAVAGER", sc2::ABILITY_ID::CANCEL_MORPHRAVAGER) + .value("CANCEL_MORPHTHOREXPLOSIVEMODE", sc2::ABILITY_ID::CANCEL_MORPHTHOREXPLOSIVEMODE) + .value("CANCEL_MOTHERSHIPSTASIS", sc2::ABILITY_ID::CANCEL_MOTHERSHIPSTASIS) + .value("CANCEL_NEURALPARASITE", sc2::ABILITY_ID::CANCEL_NEURALPARASITE) + .value("CANCEL_NUKE", sc2::ABILITY_ID::CANCEL_NUKE) + .value("CANCEL_PROTOSSBUILDINGQUEUE", sc2::ABILITY_ID::CANCEL_PROTOSSBUILDINGQUEUE) .value("CANCEL_QUEUE1", sc2::ABILITY_ID::CANCEL_QUEUE1) .value("CANCEL_QUEUE5", sc2::ABILITY_ID::CANCEL_QUEUE5) .value("CANCEL_QUEUEADDON", sc2::ABILITY_ID::CANCEL_QUEUEADDON) .value("CANCEL_QUEUECANCELTOSELECTION", sc2::ABILITY_ID::CANCEL_QUEUECANCELTOSELECTION) .value("CANCEL_QUEUEPASIVE", sc2::ABILITY_ID::CANCEL_QUEUEPASIVE) .value("CANCEL_QUEUEPASSIVECANCELTOSELECTION", sc2::ABILITY_ID::CANCEL_QUEUEPASSIVECANCELTOSELECTION) + .value("CANCEL_SLOT", sc2::ABILITY_ID::CANCEL_SLOT) .value("CANCEL_SPINECRAWLERROOT", sc2::ABILITY_ID::CANCEL_SPINECRAWLERROOT) + .value("CANCEL_SPORECRAWLERROOT", sc2::ABILITY_ID::CANCEL_SPORECRAWLERROOT) .value("CANCEL_STARPORTADDON", sc2::ABILITY_ID::CANCEL_STARPORTADDON) + .value("CANCEL_STASISTRAP", sc2::ABILITY_ID::CANCEL_STASISTRAP) + .value("CANCEL_TEMPESTDISRUPTIONBLAST", sc2::ABILITY_ID::CANCEL_TEMPESTDISRUPTIONBLAST) + .value("CANCEL_VOIDRAYPRISMATICALIGNMENT", sc2::ABILITY_ID::CANCEL_VOIDRAYPRISMATICALIGNMENT) + .value("CHANGESHRINEPROTOSS", sc2::ABILITY_ID::CHANGESHRINEPROTOSS) + .value("CHANGESHRINETERRAN", sc2::ABILITY_ID::CHANGESHRINETERRAN) + .value("CLIFFDOORCLOSE0_SPACEPLATFORMDOORCLOSE", sc2::ABILITY_ID::CLIFFDOORCLOSE0_SPACEPLATFORMDOORCLOSE) + .value("CLIFFDOORCLOSE1_SPACEPLATFORMDOORCLOSE", sc2::ABILITY_ID::CLIFFDOORCLOSE1_SPACEPLATFORMDOORCLOSE) + .value("CLIFFDOOROPEN0_SPACEPLATFORMDOOROPEN", sc2::ABILITY_ID::CLIFFDOOROPEN0_SPACEPLATFORMDOOROPEN) + .value("CLIFFDOOROPEN1_SPACEPLATFORMDOOROPEN", sc2::ABILITY_ID::CLIFFDOOROPEN1_SPACEPLATFORMDOOROPEN) + .value("CLOAKINGDRONE", sc2::ABILITY_ID::CLOAKINGDRONE) + .value("CLONE", sc2::ABILITY_ID::CLONE) + .value("COLONISTSHIPLAND_LAND", sc2::ABILITY_ID::COLONISTSHIPLAND_LAND) + .value("COLONISTSHIPLIFTOFF_LIFT", sc2::ABILITY_ID::COLONISTSHIPLIFTOFF_LIFT) + .value("COLONISTTRANSPORTTRANSPORT_COLONISTTRANSPORTLOAD", sc2::ABILITY_ID::COLONISTTRANSPORTTRANSPORT_COLONISTTRANSPORTLOAD) + .value("COLONISTTRANSPORTTRANSPORT_COLONISTTRANSPORTUNLOADALL", sc2::ABILITY_ID::COLONISTTRANSPORTTRANSPORT_COLONISTTRANSPORTUNLOADALL) + .value("COLONYINFESTATION", sc2::ABILITY_ID::COLONYINFESTATION) + .value("COLONYSHIPTRANSPORT_MEDIVACLOAD", sc2::ABILITY_ID::COLONYSHIPTRANSPORT_MEDIVACLOAD) + .value("COLONYSHIPTRANSPORT_MEDIVACUNLOADALL", sc2::ABILITY_ID::COLONYSHIPTRANSPORT_MEDIVACUNLOADALL) + .value("CONSUMEDNA", sc2::ABILITY_ID::CONSUMEDNA) + .value("CONSUMPTION", sc2::ABILITY_ID::CONSUMPTION) + .value("CORRUPTIONBOMB", sc2::ABILITY_ID::CORRUPTIONBOMB) + .value("CORRUPTIONBOMB_CANCEL", sc2::ABILITY_ID::CORRUPTIONBOMB_CANCEL) + .value("CORRUPTION_CANCEL", sc2::ABILITY_ID::CORRUPTION_CANCEL) + .value("CORRUPTION_CORRUPTIONABILITY", sc2::ABILITY_ID::CORRUPTION_CORRUPTIONABILITY) + .value("CORSAIRMPDISRUPTIONWEB", sc2::ABILITY_ID::CORSAIRMPDISRUPTIONWEB) + .value("CRITTERFLEE", sc2::ABILITY_ID::CRITTERFLEE) + .value("D8CHARGE", sc2::ABILITY_ID::D8CHARGE) + .value("DEFENSIVEMATRIX", sc2::ABILITY_ID::DEFENSIVEMATRIX) + .value("DEFILERMPBURROW_BURROWDOWN", sc2::ABILITY_ID::DEFILERMPBURROW_BURROWDOWN) + .value("DEFILERMPBURROW_CANCEL", sc2::ABILITY_ID::DEFILERMPBURROW_CANCEL) + .value("DEFILERMPCONSUME", sc2::ABILITY_ID::DEFILERMPCONSUME) + .value("DEFILERMPDARKSWARM", sc2::ABILITY_ID::DEFILERMPDARKSWARM) + .value("DEFILERMPPLAGUE", sc2::ABILITY_ID::DEFILERMPPLAGUE) + .value("DEFILERMPUNBURROW_BURROWUP", sc2::ABILITY_ID::DEFILERMPUNBURROW_BURROWUP) + .value("DESTRUCTIBLEGATEDIAGONALBLURLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATEDIAGONALBLURLOWERED_GATEOPEN) + .value("DESTRUCTIBLEGATEDIAGONALBLUR_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATEDIAGONALBLUR_GATECLOSE) + .value("DESTRUCTIBLEGATEDIAGONALULBRLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATEDIAGONALULBRLOWERED_GATEOPEN) + .value("DESTRUCTIBLEGATEDIAGONALULBR_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATEDIAGONALULBR_GATECLOSE) + .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN) + .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALBF_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALBF_GATECLOSE) + .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN) + .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTAL_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTHORIZONTAL_GATECLOSE) + .value("DESTRUCTIBLEGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN) + .value("DESTRUCTIBLEGATESTRAIGHTVERTICALLF_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTVERTICALLF_GATECLOSE) + .value("DESTRUCTIBLEGATESTRAIGHTVERTICALLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTVERTICALLOWERED_GATEOPEN) + .value("DESTRUCTIBLEGATESTRAIGHTVERTICAL_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTVERTICAL_GATECLOSE) + .value("DIGESTERCREEPSPRAY", sc2::ABILITY_ID::DIGESTERCREEPSPRAY) + .value("DIGESTERTRANSPORT_LOADDIGESTER", sc2::ABILITY_ID::DIGESTERTRANSPORT_LOADDIGESTER) + .value("DISGUISEASMARINEWITHOUTSHIELD_MARINE", sc2::ABILITY_ID::DISGUISEASMARINEWITHOUTSHIELD_MARINE) + .value("DISGUISEASMARINEWITHSHIELD_MARINE", sc2::ABILITY_ID::DISGUISEASMARINEWITHSHIELD_MARINE) + .value("DISGUISEASZEALOT_ZEALOT", sc2::ABILITY_ID::DISGUISEASZEALOT_ZEALOT) + .value("DISGUISEASZERGLINGWITHOUTWINGS_ZERGLING", sc2::ABILITY_ID::DISGUISEASZERGLINGWITHOUTWINGS_ZERGLING) + .value("DISGUISEASZERGLINGWITHWINGS_ZERGLING", sc2::ABILITY_ID::DISGUISEASZERGLINGWITHWINGS_ZERGLING) + .value("DOMINATION", sc2::ABILITY_ID::DOMINATION) + .value("DOMINATION_CANCEL", sc2::ABILITY_ID::DOMINATION_CANCEL) + .value("DROPTOSUPPLYDEPOT_RAISE", sc2::ABILITY_ID::DROPTOSUPPLYDEPOT_RAISE) + .value("DUKESREVENGEDEFENSIVEMATRIX_DEFENSIVEMATRIX", sc2::ABILITY_ID::DUKESREVENGEDEFENSIVEMATRIX_DEFENSIVEMATRIX) + .value("DUKESREVENGEMISSILEPODS_MISSILEPODS", sc2::ABILITY_ID::DUKESREVENGEMISSILEPODS_MISSILEPODS) + .value("DUSKWINGBANSHEECLOAKINGFIELD_CLOAKOFF", sc2::ABILITY_ID::DUSKWINGBANSHEECLOAKINGFIELD_CLOAKOFF) + .value("DUSKWINGBANSHEECLOAKINGFIELD_CLOAKONBANSHEE", sc2::ABILITY_ID::DUSKWINGBANSHEECLOAKINGFIELD_CLOAKONBANSHEE) + .value("DUTCHPLACETURRET", sc2::ABILITY_ID::DUTCHPLACETURRET) .value("EFFECT_ABDUCT", sc2::ABILITY_ID::EFFECT_ABDUCT) .value("EFFECT_ADEPTPHASESHIFT", sc2::ABILITY_ID::EFFECT_ADEPTPHASESHIFT) + .value("EFFECT_AMORPHOUSARMORCLOUD", sc2::ABILITY_ID::EFFECT_AMORPHOUSARMORCLOUD) + .value("EFFECT_ANTIARMORMISSILE", sc2::ABILITY_ID::EFFECT_ANTIARMORMISSILE) .value("EFFECT_AUTOTURRET", sc2::ABILITY_ID::EFFECT_AUTOTURRET) .value("EFFECT_BLINDINGCLOUD", sc2::ABILITY_ID::EFFECT_BLINDINGCLOUD) .value("EFFECT_BLINK", sc2::ABILITY_ID::EFFECT_BLINK) @@ -366,6 +2346,7 @@ void define_typeenums(py::module & m) .value("EFFECT_CAUSTICSPRAY", sc2::ABILITY_ID::EFFECT_CAUSTICSPRAY) .value("EFFECT_CHARGE", sc2::ABILITY_ID::EFFECT_CHARGE) .value("EFFECT_CHRONOBOOST", sc2::ABILITY_ID::EFFECT_CHRONOBOOST) + .value("EFFECT_CHRONOBOOSTENERGYCOST", sc2::ABILITY_ID::EFFECT_CHRONOBOOSTENERGYCOST) .value("EFFECT_CONTAMINATE", sc2::ABILITY_ID::EFFECT_CONTAMINATE) .value("EFFECT_CORROSIVEBILE", sc2::ABILITY_ID::EFFECT_CORROSIVEBILE) .value("EFFECT_EMP", sc2::ABILITY_ID::EFFECT_EMP) @@ -381,12 +2362,15 @@ void define_typeenums(py::module & m) .value("EFFECT_IMMORTALBARRIER", sc2::ABILITY_ID::EFFECT_IMMORTALBARRIER) .value("EFFECT_INFESTEDTERRANS", sc2::ABILITY_ID::EFFECT_INFESTEDTERRANS) .value("EFFECT_INJECTLARVA", sc2::ABILITY_ID::EFFECT_INJECTLARVA) + .value("EFFECT_INTERFERENCEMATRIX", sc2::ABILITY_ID::EFFECT_INTERFERENCEMATRIX) .value("EFFECT_KD8CHARGE", sc2::ABILITY_ID::EFFECT_KD8CHARGE) .value("EFFECT_LOCKON", sc2::ABILITY_ID::EFFECT_LOCKON) .value("EFFECT_LOCUSTSWOOP", sc2::ABILITY_ID::EFFECT_LOCUSTSWOOP) .value("EFFECT_MASSRECALL", sc2::ABILITY_ID::EFFECT_MASSRECALL) .value("EFFECT_MASSRECALL_MOTHERSHIP", sc2::ABILITY_ID::EFFECT_MASSRECALL_MOTHERSHIP) .value("EFFECT_MASSRECALL_MOTHERSHIPCORE", sc2::ABILITY_ID::EFFECT_MASSRECALL_MOTHERSHIPCORE) + .value("EFFECT_MASSRECALL_NEXUS", sc2::ABILITY_ID::EFFECT_MASSRECALL_NEXUS) + .value("EFFECT_MASSRECALL_STRATEGICRECALL", sc2::ABILITY_ID::EFFECT_MASSRECALL_STRATEGICRECALL) .value("EFFECT_MEDIVACIGNITEAFTERBURNERS", sc2::ABILITY_ID::EFFECT_MEDIVACIGNITEAFTERBURNERS) .value("EFFECT_NEURALPARASITE", sc2::ABILITY_ID::EFFECT_NEURALPARASITE) .value("EFFECT_NUKECALLDOWN", sc2::ABILITY_ID::EFFECT_NUKECALLDOWN) @@ -397,7 +2381,9 @@ void define_typeenums(py::module & m) .value("EFFECT_PSISTORM", sc2::ABILITY_ID::EFFECT_PSISTORM) .value("EFFECT_PURIFICATIONNOVA", sc2::ABILITY_ID::EFFECT_PURIFICATIONNOVA) .value("EFFECT_REPAIR", sc2::ABILITY_ID::EFFECT_REPAIR) + .value("EFFECT_REPAIRDRONE", sc2::ABILITY_ID::EFFECT_REPAIRDRONE) .value("EFFECT_REPAIR_MULE", sc2::ABILITY_ID::EFFECT_REPAIR_MULE) + .value("EFFECT_REPAIR_REPAIRDRONE", sc2::ABILITY_ID::EFFECT_REPAIR_REPAIRDRONE) .value("EFFECT_REPAIR_SCV", sc2::ABILITY_ID::EFFECT_REPAIR_SCV) .value("EFFECT_RESTORE", sc2::ABILITY_ID::EFFECT_RESTORE) .value("EFFECT_SALVAGE", sc2::ABILITY_ID::EFFECT_SALVAGE) @@ -411,6 +2397,7 @@ void define_typeenums(py::module & m) .value("EFFECT_SPRAY_ZERG", sc2::ABILITY_ID::EFFECT_SPRAY_ZERG) .value("EFFECT_STIM", sc2::ABILITY_ID::EFFECT_STIM) .value("EFFECT_STIM_MARAUDER", sc2::ABILITY_ID::EFFECT_STIM_MARAUDER) + .value("EFFECT_STIM_MARAUDER_REDIRECT", sc2::ABILITY_ID::EFFECT_STIM_MARAUDER_REDIRECT) .value("EFFECT_STIM_MARINE", sc2::ABILITY_ID::EFFECT_STIM_MARINE) .value("EFFECT_STIM_MARINE_REDIRECT", sc2::ABILITY_ID::EFFECT_STIM_MARINE_REDIRECT) .value("EFFECT_SUPPLYDROP", sc2::ABILITY_ID::EFFECT_SUPPLYDROP) @@ -422,6 +2409,37 @@ void define_typeenums(py::module & m) .value("EFFECT_VOIDRAYPRISMATICALIGNMENT", sc2::ABILITY_ID::EFFECT_VOIDRAYPRISMATICALIGNMENT) .value("EFFECT_WIDOWMINEATTACK", sc2::ABILITY_ID::EFFECT_WIDOWMINEATTACK) .value("EFFECT_YAMATOGUN", sc2::ABILITY_ID::EFFECT_YAMATOGUN) + .value("EGGPOP", sc2::ABILITY_ID::EGGPOP) + .value("ENERGYNOVA", sc2::ABILITY_ID::ENERGYNOVA) + .value("EVOLUTIONCHAMBERRESEARCH_EVOLVEPROPULSIVEPERISTALSIS", sc2::ABILITY_ID::EVOLUTIONCHAMBERRESEARCH_EVOLVEPROPULSIVEPERISTALSIS) + .value("EXPERIMENTALPLASMAGUN", sc2::ABILITY_ID::EXPERIMENTALPLASMAGUN) + .value("EXTENDINGBRIDGENEWIDE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE10OUT_BRIDGEEXTEND) + .value("EXTENDINGBRIDGENEWIDE10_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE10_BRIDGERETRACT) + .value("EXTENDINGBRIDGENEWIDE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE12OUT_BRIDGEEXTEND) + .value("EXTENDINGBRIDGENEWIDE12_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE12_BRIDGERETRACT) + .value("EXTENDINGBRIDGENEWIDE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE8OUT_BRIDGEEXTEND) + .value("EXTENDINGBRIDGENEWIDE8_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE8_BRIDGERETRACT) + .value("EXTENDINGBRIDGENWWIDE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE10OUT_BRIDGEEXTEND) + .value("EXTENDINGBRIDGENWWIDE10_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE10_BRIDGERETRACT) + .value("EXTENDINGBRIDGENWWIDE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE12OUT_BRIDGEEXTEND) + .value("EXTENDINGBRIDGENWWIDE12_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE12_BRIDGERETRACT) + .value("EXTENDINGBRIDGENWWIDE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE8OUT_BRIDGEEXTEND) + .value("EXTENDINGBRIDGENWWIDE8_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE8_BRIDGERETRACT) + .value("EYESTALK", sc2::ABILITY_ID::EYESTALK) + .value("EYESTALK_CANCEL", sc2::ABILITY_ID::EYESTALK_CANCEL) + .value("FACTORYREACTORMORPH_REACTOR", sc2::ABILITY_ID::FACTORYREACTORMORPH_REACTOR) + .value("FACTORYTECHLABMORPH_TECHLABFACTORY", sc2::ABILITY_ID::FACTORYTECHLABMORPH_TECHLABFACTORY) + .value("FACTORYTECHREACTORMORPH_TECHLABFACTORY", sc2::ABILITY_ID::FACTORYTECHREACTORMORPH_TECHLABFACTORY) + .value("FLYERSHIELD", sc2::ABILITY_ID::FLYERSHIELD) + .value("FORCEFIELD_CANCEL", sc2::ABILITY_ID::FORCEFIELD_CANCEL) + .value("FRENZY", sc2::ABILITY_ID::FRENZY) + .value("GATHERSPECIALOBJECT", sc2::ABILITY_ID::GATHERSPECIALOBJECT) + .value("GENERAL_HOLDPOSITION", sc2::ABILITY_ID::GENERAL_HOLDPOSITION) + .value("GENERAL_MOVE", sc2::ABILITY_ID::GENERAL_MOVE) + .value("GENERAL_PATROL", sc2::ABILITY_ID::GENERAL_PATROL) + .value("GRAPPLE", sc2::ABILITY_ID::GRAPPLE) + .value("GRAVITONPRISON", sc2::ABILITY_ID::GRAVITONPRISON) + .value("GWALEARN_TESTLEARN", sc2::ABILITY_ID::GWALEARN_TESTLEARN) .value("HALLUCINATION_ADEPT", sc2::ABILITY_ID::HALLUCINATION_ADEPT) .value("HALLUCINATION_ARCHON", sc2::ABILITY_ID::HALLUCINATION_ARCHON) .value("HALLUCINATION_COLOSSUS", sc2::ABILITY_ID::HALLUCINATION_COLOSSUS) @@ -440,6 +2458,7 @@ void define_typeenums(py::module & m) .value("HALT_TERRANBUILD", sc2::ABILITY_ID::HALT_TERRANBUILD) .value("HARVEST_GATHER", sc2::ABILITY_ID::HARVEST_GATHER) .value("HARVEST_GATHER_DRONE", sc2::ABILITY_ID::HARVEST_GATHER_DRONE) + .value("HARVEST_GATHER_MULE", sc2::ABILITY_ID::HARVEST_GATHER_MULE) .value("HARVEST_GATHER_PROBE", sc2::ABILITY_ID::HARVEST_GATHER_PROBE) .value("HARVEST_GATHER_SCV", sc2::ABILITY_ID::HARVEST_GATHER_SCV) .value("HARVEST_RETURN", sc2::ABILITY_ID::HARVEST_RETURN) @@ -447,385 +2466,1360 @@ void define_typeenums(py::module & m) .value("HARVEST_RETURN_MULE", sc2::ABILITY_ID::HARVEST_RETURN_MULE) .value("HARVEST_RETURN_PROBE", sc2::ABILITY_ID::HARVEST_RETURN_PROBE) .value("HARVEST_RETURN_SCV", sc2::ABILITY_ID::HARVEST_RETURN_SCV) - .value("HOLDPOSITION", sc2::ABILITY_ID::HOLDPOSITION) - .value("LAND", sc2::ABILITY_ID::LAND) - .value("LAND_BARRACKS", sc2::ABILITY_ID::LAND_BARRACKS) - .value("LAND_COMMANDCENTER", sc2::ABILITY_ID::LAND_COMMANDCENTER) - .value("LAND_FACTORY", sc2::ABILITY_ID::LAND_FACTORY) - .value("LAND_ORBITALCOMMAND", sc2::ABILITY_ID::LAND_ORBITALCOMMAND) - .value("LAND_STARPORT", sc2::ABILITY_ID::LAND_STARPORT) - .value("LIFT", sc2::ABILITY_ID::LIFT) - .value("LIFT_BARRACKS", sc2::ABILITY_ID::LIFT_BARRACKS) - .value("LIFT_COMMANDCENTER", sc2::ABILITY_ID::LIFT_COMMANDCENTER) - .value("LIFT_FACTORY", sc2::ABILITY_ID::LIFT_FACTORY) - .value("LIFT_ORBITALCOMMAND", sc2::ABILITY_ID::LIFT_ORBITALCOMMAND) - .value("LIFT_STARPORT", sc2::ABILITY_ID::LIFT_STARPORT) - .value("LOAD", sc2::ABILITY_ID::LOAD) - .value("LOADALL", sc2::ABILITY_ID::LOADALL) - .value("LOADALL_COMMANDCENTER", sc2::ABILITY_ID::LOADALL_COMMANDCENTER) - .value("LOAD_BUNKER", sc2::ABILITY_ID::LOAD_BUNKER) - .value("LOAD_MEDIVAC", sc2::ABILITY_ID::LOAD_MEDIVAC) - .value("MORPH_ARCHON", sc2::ABILITY_ID::MORPH_ARCHON) - .value("MORPH_BROODLORD", sc2::ABILITY_ID::MORPH_BROODLORD) - .value("MORPH_GATEWAY", sc2::ABILITY_ID::MORPH_GATEWAY) - .value("MORPH_GREATERSPIRE", sc2::ABILITY_ID::MORPH_GREATERSPIRE) - .value("MORPH_HELLBAT", sc2::ABILITY_ID::MORPH_HELLBAT) - .value("MORPH_HELLION", sc2::ABILITY_ID::MORPH_HELLION) - .value("MORPH_HIVE", sc2::ABILITY_ID::MORPH_HIVE) - .value("MORPH_LAIR", sc2::ABILITY_ID::MORPH_LAIR) - .value("MORPH_LIBERATORAAMODE", sc2::ABILITY_ID::MORPH_LIBERATORAAMODE) - .value("MORPH_LIBERATORAGMODE", sc2::ABILITY_ID::MORPH_LIBERATORAGMODE) - .value("MORPH_LURKER", sc2::ABILITY_ID::MORPH_LURKER) - .value("MORPH_LURKERDEN", sc2::ABILITY_ID::MORPH_LURKERDEN) - .value("MORPH_MOTHERSHIP", sc2::ABILITY_ID::MORPH_MOTHERSHIP) - .value("MORPH_ORBITALCOMMAND", sc2::ABILITY_ID::MORPH_ORBITALCOMMAND) - .value("MORPH_OVERLORDTRANSPORT", sc2::ABILITY_ID::MORPH_OVERLORDTRANSPORT) - .value("MORPH_OVERSEER", sc2::ABILITY_ID::MORPH_OVERSEER) - .value("MORPH_PLANETARYFORTRESS", sc2::ABILITY_ID::MORPH_PLANETARYFORTRESS) - .value("MORPH_RAVAGER", sc2::ABILITY_ID::MORPH_RAVAGER) - .value("MORPH_ROOT", sc2::ABILITY_ID::MORPH_ROOT) - .value("MORPH_SIEGEMODE", sc2::ABILITY_ID::MORPH_SIEGEMODE) - .value("MORPH_SPINECRAWLERROOT", sc2::ABILITY_ID::MORPH_SPINECRAWLERROOT) - .value("MORPH_SPINECRAWLERUPROOT", sc2::ABILITY_ID::MORPH_SPINECRAWLERUPROOT) - .value("MORPH_SPORECRAWLERROOT", sc2::ABILITY_ID::MORPH_SPORECRAWLERROOT) - .value("MORPH_SPORECRAWLERUPROOT", sc2::ABILITY_ID::MORPH_SPORECRAWLERUPROOT) - .value("MORPH_SUPPLYDEPOT_LOWER", sc2::ABILITY_ID::MORPH_SUPPLYDEPOT_LOWER) - .value("MORPH_SUPPLYDEPOT_RAISE", sc2::ABILITY_ID::MORPH_SUPPLYDEPOT_RAISE) - .value("MORPH_THOREXPLOSIVEMODE", sc2::ABILITY_ID::MORPH_THOREXPLOSIVEMODE) - .value("MORPH_THORHIGHIMPACTMODE", sc2::ABILITY_ID::MORPH_THORHIGHIMPACTMODE) - .value("MORPH_UNSIEGE", sc2::ABILITY_ID::MORPH_UNSIEGE) - .value("MORPH_UPROOT", sc2::ABILITY_ID::MORPH_UPROOT) - .value("MORPH_VIKINGASSAULTMODE", sc2::ABILITY_ID::MORPH_VIKINGASSAULTMODE) - .value("MORPH_VIKINGFIGHTERMODE", sc2::ABILITY_ID::MORPH_VIKINGFIGHTERMODE) - .value("MORPH_WARPGATE", sc2::ABILITY_ID::MORPH_WARPGATE) - .value("MORPH_WARPPRISMPHASINGMODE", sc2::ABILITY_ID::MORPH_WARPPRISMPHASINGMODE) - .value("MORPH_WARPPRISMTRANSPORTMODE", sc2::ABILITY_ID::MORPH_WARPPRISMTRANSPORTMODE) - .value("MOVE", sc2::ABILITY_ID::MOVE) - .value("PATROL", sc2::ABILITY_ID::PATROL) - .value("RALLY_BUILDING", sc2::ABILITY_ID::RALLY_BUILDING) - .value("RALLY_COMMANDCENTER", sc2::ABILITY_ID::RALLY_COMMANDCENTER) - .value("RALLY_HATCHERY_UNITS", sc2::ABILITY_ID::RALLY_HATCHERY_UNITS) - .value("RALLY_HATCHERY_WORKERS", sc2::ABILITY_ID::RALLY_HATCHERY_WORKERS) - .value("RALLY_MORPHING_UNIT", sc2::ABILITY_ID::RALLY_MORPHING_UNIT) - .value("RALLY_NEXUS", sc2::ABILITY_ID::RALLY_NEXUS) - .value("RALLY_UNITS", sc2::ABILITY_ID::RALLY_UNITS) - .value("RALLY_WORKERS", sc2::ABILITY_ID::RALLY_WORKERS) - .value("RESEARCH_ADEPTRESONATINGGLAIVES", sc2::ABILITY_ID::RESEARCH_ADEPTRESONATINGGLAIVES) - .value("RESEARCH_ADVANCEDBALLISTICS", sc2::ABILITY_ID::RESEARCH_ADVANCEDBALLISTICS) - .value("RESEARCH_BANSHEECLOAKINGFIELD", sc2::ABILITY_ID::RESEARCH_BANSHEECLOAKINGFIELD) - .value("RESEARCH_BANSHEEHYPERFLIGHTROTORS", sc2::ABILITY_ID::RESEARCH_BANSHEEHYPERFLIGHTROTORS) - .value("RESEARCH_BATTLECRUISERWEAPONREFIT", sc2::ABILITY_ID::RESEARCH_BATTLECRUISERWEAPONREFIT) - .value("RESEARCH_BLINK", sc2::ABILITY_ID::RESEARCH_BLINK) - .value("RESEARCH_BURROW", sc2::ABILITY_ID::RESEARCH_BURROW) - .value("RESEARCH_CENTRIFUGALHOOKS", sc2::ABILITY_ID::RESEARCH_CENTRIFUGALHOOKS) - .value("RESEARCH_CHARGE", sc2::ABILITY_ID::RESEARCH_CHARGE) - .value("RESEARCH_CHITINOUSPLATING", sc2::ABILITY_ID::RESEARCH_CHITINOUSPLATING) - .value("RESEARCH_COMBATSHIELD", sc2::ABILITY_ID::RESEARCH_COMBATSHIELD) - .value("RESEARCH_CONCUSSIVESHELLS", sc2::ABILITY_ID::RESEARCH_CONCUSSIVESHELLS) - .value("RESEARCH_DRILLINGCLAWS", sc2::ABILITY_ID::RESEARCH_DRILLINGCLAWS) - .value("RESEARCH_ENHANCEDMUNITIONS", sc2::ABILITY_ID::RESEARCH_ENHANCEDMUNITIONS) - .value("RESEARCH_EXTENDEDTHERMALLANCE", sc2::ABILITY_ID::RESEARCH_EXTENDEDTHERMALLANCE) - .value("RESEARCH_GLIALREGENERATION", sc2::ABILITY_ID::RESEARCH_GLIALREGENERATION) - .value("RESEARCH_GRAVITICBOOSTER", sc2::ABILITY_ID::RESEARCH_GRAVITICBOOSTER) - .value("RESEARCH_GRAVITICDRIVE", sc2::ABILITY_ID::RESEARCH_GRAVITICDRIVE) - .value("RESEARCH_GROOVEDSPINES", sc2::ABILITY_ID::RESEARCH_GROOVEDSPINES) - .value("RESEARCH_HIGHCAPACITYFUELTANKS", sc2::ABILITY_ID::RESEARCH_HIGHCAPACITYFUELTANKS) - .value("RESEARCH_HISECAUTOTRACKING", sc2::ABILITY_ID::RESEARCH_HISECAUTOTRACKING) - .value("RESEARCH_INFERNALPREIGNITER", sc2::ABILITY_ID::RESEARCH_INFERNALPREIGNITER) - .value("RESEARCH_INTERCEPTORGRAVITONCATAPULT", sc2::ABILITY_ID::RESEARCH_INTERCEPTORGRAVITONCATAPULT) - .value("RESEARCH_MAGFIELDLAUNCHERS", sc2::ABILITY_ID::RESEARCH_MAGFIELDLAUNCHERS) - .value("RESEARCH_MUSCULARAUGMENTS", sc2::ABILITY_ID::RESEARCH_MUSCULARAUGMENTS) - .value("RESEARCH_NEOSTEELFRAME", sc2::ABILITY_ID::RESEARCH_NEOSTEELFRAME) - .value("RESEARCH_NEURALPARASITE", sc2::ABILITY_ID::RESEARCH_NEURALPARASITE) - .value("RESEARCH_PATHOGENGLANDS", sc2::ABILITY_ID::RESEARCH_PATHOGENGLANDS) - .value("RESEARCH_PERSONALCLOAKING", sc2::ABILITY_ID::RESEARCH_PERSONALCLOAKING) - .value("RESEARCH_PHOENIXANIONPULSECRYSTALS", sc2::ABILITY_ID::RESEARCH_PHOENIXANIONPULSECRYSTALS) - .value("RESEARCH_PNEUMATIZEDCARAPACE", sc2::ABILITY_ID::RESEARCH_PNEUMATIZEDCARAPACE) - .value("RESEARCH_PROTOSSAIRARMOR", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMOR) - .value("RESEARCH_PROTOSSAIRARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL1) - .value("RESEARCH_PROTOSSAIRARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL2) - .value("RESEARCH_PROTOSSAIRARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL3) - .value("RESEARCH_PROTOSSAIRWEAPONS", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONS) - .value("RESEARCH_PROTOSSAIRWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL1) - .value("RESEARCH_PROTOSSAIRWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL2) - .value("RESEARCH_PROTOSSAIRWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL3) - .value("RESEARCH_PROTOSSGROUNDARMOR", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMOR) - .value("RESEARCH_PROTOSSGROUNDARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL1) - .value("RESEARCH_PROTOSSGROUNDARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL2) - .value("RESEARCH_PROTOSSGROUNDARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL3) - .value("RESEARCH_PROTOSSGROUNDWEAPONS", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONS) - .value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL1) - .value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL2) - .value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL3) - .value("RESEARCH_PROTOSSSHIELDS", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDS) - .value("RESEARCH_PROTOSSSHIELDSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL1) - .value("RESEARCH_PROTOSSSHIELDSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL2) - .value("RESEARCH_PROTOSSSHIELDSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL3) - .value("RESEARCH_PSISTORM", sc2::ABILITY_ID::RESEARCH_PSISTORM) - .value("RESEARCH_RAPIDFIRELAUNCHERS", sc2::ABILITY_ID::RESEARCH_RAPIDFIRELAUNCHERS) - .value("RESEARCH_RAVENCORVIDREACTOR", sc2::ABILITY_ID::RESEARCH_RAVENCORVIDREACTOR) - .value("RESEARCH_RAVENRECALIBRATEDEXPLOSIVES", sc2::ABILITY_ID::RESEARCH_RAVENRECALIBRATEDEXPLOSIVES) - .value("RESEARCH_SHADOWSTRIKE", sc2::ABILITY_ID::RESEARCH_SHADOWSTRIKE) - .value("RESEARCH_SMARTSERVOS", sc2::ABILITY_ID::RESEARCH_SMARTSERVOS) - .value("RESEARCH_STIMPACK", sc2::ABILITY_ID::RESEARCH_STIMPACK) - .value("RESEARCH_TERRANINFANTRYARMOR", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMOR) - .value("RESEARCH_TERRANINFANTRYARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL1) - .value("RESEARCH_TERRANINFANTRYARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL2) - .value("RESEARCH_TERRANINFANTRYARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL3) - .value("RESEARCH_TERRANINFANTRYWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONS) - .value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL1) - .value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL2) - .value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL3) - .value("RESEARCH_TERRANSHIPWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONS) - .value("RESEARCH_TERRANSHIPWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL1) - .value("RESEARCH_TERRANSHIPWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL2) - .value("RESEARCH_TERRANSHIPWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL3) - .value("RESEARCH_TERRANSTRUCTUREARMORUPGRADE", sc2::ABILITY_ID::RESEARCH_TERRANSTRUCTUREARMORUPGRADE) - .value("RESEARCH_TERRANVEHICLEANDSHIPPLATING", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATING) - .value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1) - .value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2) - .value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3) - .value("RESEARCH_TERRANVEHICLEWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONS) - .value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL1) - .value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL2) - .value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL3) - .value("RESEARCH_TUNNELINGCLAWS", sc2::ABILITY_ID::RESEARCH_TUNNELINGCLAWS) - .value("RESEARCH_WARPGATE", sc2::ABILITY_ID::RESEARCH_WARPGATE) - .value("RESEARCH_ZERGFLYERARMOR", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMOR) - .value("RESEARCH_ZERGFLYERARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL1) - .value("RESEARCH_ZERGFLYERARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL2) - .value("RESEARCH_ZERGFLYERARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL3) - .value("RESEARCH_ZERGFLYERATTACK", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACK) - .value("RESEARCH_ZERGFLYERATTACKLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL1) - .value("RESEARCH_ZERGFLYERATTACKLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL2) - .value("RESEARCH_ZERGFLYERATTACKLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL3) - .value("RESEARCH_ZERGGROUNDARMOR", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMOR) - .value("RESEARCH_ZERGGROUNDARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL1) - .value("RESEARCH_ZERGGROUNDARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL2) - .value("RESEARCH_ZERGGROUNDARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL3) - .value("RESEARCH_ZERGLINGADRENALGLANDS", sc2::ABILITY_ID::RESEARCH_ZERGLINGADRENALGLANDS) - .value("RESEARCH_ZERGLINGMETABOLICBOOST", sc2::ABILITY_ID::RESEARCH_ZERGLINGMETABOLICBOOST) - .value("RESEARCH_ZERGMELEEWEAPONS", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONS) - .value("RESEARCH_ZERGMELEEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL1) - .value("RESEARCH_ZERGMELEEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL2) - .value("RESEARCH_ZERGMELEEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL3) - .value("RESEARCH_ZERGMISSILEWEAPONS", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONS) - .value("RESEARCH_ZERGMISSILEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL1) - .value("RESEARCH_ZERGMISSILEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL2) - .value("RESEARCH_ZERGMISSILEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL3) - .value("SCAN_MOVE", sc2::ABILITY_ID::SCAN_MOVE) - .value("STOP", sc2::ABILITY_ID::STOP) - .value("STOP_BUILDING", sc2::ABILITY_ID::STOP_BUILDING) - .value("STOP_CHEER", sc2::ABILITY_ID::STOP_CHEER) - .value("STOP_DANCE", sc2::ABILITY_ID::STOP_DANCE) - .value("STOP_REDIRECT", sc2::ABILITY_ID::STOP_REDIRECT) - .value("STOP_STOP", sc2::ABILITY_ID::STOP_STOP) - .value("TRAINWARP_ADEPT", sc2::ABILITY_ID::TRAINWARP_ADEPT) - .value("TRAINWARP_DARKTEMPLAR", sc2::ABILITY_ID::TRAINWARP_DARKTEMPLAR) - .value("TRAINWARP_HIGHTEMPLAR", sc2::ABILITY_ID::TRAINWARP_HIGHTEMPLAR) - .value("TRAINWARP_SENTRY", sc2::ABILITY_ID::TRAINWARP_SENTRY) - .value("TRAINWARP_STALKER", sc2::ABILITY_ID::TRAINWARP_STALKER) - .value("TRAINWARP_ZEALOT", sc2::ABILITY_ID::TRAINWARP_ZEALOT) - .value("TRAIN_ADEPT", sc2::ABILITY_ID::TRAIN_ADEPT) - .value("TRAIN_BANELING", sc2::ABILITY_ID::TRAIN_BANELING) - .value("TRAIN_BANSHEE", sc2::ABILITY_ID::TRAIN_BANSHEE) - .value("TRAIN_BATTLECRUISER", sc2::ABILITY_ID::TRAIN_BATTLECRUISER) - .value("TRAIN_CARRIER", sc2::ABILITY_ID::TRAIN_CARRIER) - .value("TRAIN_COLOSSUS", sc2::ABILITY_ID::TRAIN_COLOSSUS) - .value("TRAIN_CORRUPTOR", sc2::ABILITY_ID::TRAIN_CORRUPTOR) - .value("TRAIN_CYCLONE", sc2::ABILITY_ID::TRAIN_CYCLONE) - .value("TRAIN_DARKTEMPLAR", sc2::ABILITY_ID::TRAIN_DARKTEMPLAR) - .value("TRAIN_DISRUPTOR", sc2::ABILITY_ID::TRAIN_DISRUPTOR) - .value("TRAIN_DRONE", sc2::ABILITY_ID::TRAIN_DRONE) - .value("TRAIN_GHOST", sc2::ABILITY_ID::TRAIN_GHOST) - .value("TRAIN_HELLBAT", sc2::ABILITY_ID::TRAIN_HELLBAT) - .value("TRAIN_HELLION", sc2::ABILITY_ID::TRAIN_HELLION) - .value("TRAIN_HIGHTEMPLAR", sc2::ABILITY_ID::TRAIN_HIGHTEMPLAR) - .value("TRAIN_HYDRALISK", sc2::ABILITY_ID::TRAIN_HYDRALISK) - .value("TRAIN_IMMORTAL", sc2::ABILITY_ID::TRAIN_IMMORTAL) - .value("TRAIN_INFESTOR", sc2::ABILITY_ID::TRAIN_INFESTOR) - .value("TRAIN_LIBERATOR", sc2::ABILITY_ID::TRAIN_LIBERATOR) - .value("TRAIN_MARAUDER", sc2::ABILITY_ID::TRAIN_MARAUDER) - .value("TRAIN_MARINE", sc2::ABILITY_ID::TRAIN_MARINE) - .value("TRAIN_MEDIVAC", sc2::ABILITY_ID::TRAIN_MEDIVAC) - .value("TRAIN_MOTHERSHIP", sc2::ABILITY_ID::TRAIN_MOTHERSHIP) - .value("TRAIN_MOTHERSHIPCORE", sc2::ABILITY_ID::TRAIN_MOTHERSHIPCORE) - .value("TRAIN_MUTALISK", sc2::ABILITY_ID::TRAIN_MUTALISK) - .value("TRAIN_OBSERVER", sc2::ABILITY_ID::TRAIN_OBSERVER) - .value("TRAIN_ORACLE", sc2::ABILITY_ID::TRAIN_ORACLE) - .value("TRAIN_OVERLORD", sc2::ABILITY_ID::TRAIN_OVERLORD) - .value("TRAIN_PHOENIX", sc2::ABILITY_ID::TRAIN_PHOENIX) - .value("TRAIN_PROBE", sc2::ABILITY_ID::TRAIN_PROBE) - .value("TRAIN_QUEEN", sc2::ABILITY_ID::TRAIN_QUEEN) - .value("TRAIN_RAVEN", sc2::ABILITY_ID::TRAIN_RAVEN) - .value("TRAIN_REAPER", sc2::ABILITY_ID::TRAIN_REAPER) - .value("TRAIN_ROACH", sc2::ABILITY_ID::TRAIN_ROACH) - .value("TRAIN_SCV", sc2::ABILITY_ID::TRAIN_SCV) - .value("TRAIN_SENTRY", sc2::ABILITY_ID::TRAIN_SENTRY) - .value("TRAIN_SIEGETANK", sc2::ABILITY_ID::TRAIN_SIEGETANK) - .value("TRAIN_STALKER", sc2::ABILITY_ID::TRAIN_STALKER) - .value("TRAIN_SWARMHOST", sc2::ABILITY_ID::TRAIN_SWARMHOST) - .value("TRAIN_TEMPEST", sc2::ABILITY_ID::TRAIN_TEMPEST) - .value("TRAIN_THOR", sc2::ABILITY_ID::TRAIN_THOR) - .value("TRAIN_ULTRALISK", sc2::ABILITY_ID::TRAIN_ULTRALISK) - .value("TRAIN_VIKINGFIGHTER", sc2::ABILITY_ID::TRAIN_VIKINGFIGHTER) - .value("TRAIN_VIPER", sc2::ABILITY_ID::TRAIN_VIPER) - .value("TRAIN_VOIDRAY", sc2::ABILITY_ID::TRAIN_VOIDRAY) - .value("TRAIN_WARPPRISM", sc2::ABILITY_ID::TRAIN_WARPPRISM) - .value("TRAIN_WIDOWMINE", sc2::ABILITY_ID::TRAIN_WIDOWMINE) - .value("TRAIN_ZEALOT", sc2::ABILITY_ID::TRAIN_ZEALOT) - .value("TRAIN_ZERGLING", sc2::ABILITY_ID::TRAIN_ZERGLING) - .value("UNLOADALL", sc2::ABILITY_ID::UNLOADALL) - .value("UNLOADALLAT", sc2::ABILITY_ID::UNLOADALLAT) - .value("UNLOADALLAT_MEDIVAC", sc2::ABILITY_ID::UNLOADALLAT_MEDIVAC) - .value("UNLOADALLAT_OVERLORD", sc2::ABILITY_ID::UNLOADALLAT_OVERLORD) - .value("UNLOADALLAT_WARPPRISM", sc2::ABILITY_ID::UNLOADALLAT_WARPPRISM) - .value("UNLOADALL_BUNKER", sc2::ABILITY_ID::UNLOADALL_BUNKER) - .value("UNLOADALL_COMMANDCENTER", sc2::ABILITY_ID::UNLOADALL_COMMANDCENTER) - .value("UNLOADALL_NYDASNETWORK", sc2::ABILITY_ID::UNLOADALL_NYDASNETWORK) - .value("UNLOADALL_NYDUSWORM", sc2::ABILITY_ID::UNLOADALL_NYDUSWORM) - .value("UNLOADUNIT_BUNKER", sc2::ABILITY_ID::UNLOADUNIT_BUNKER) - .value("UNLOADUNIT_COMMANDCENTER", sc2::ABILITY_ID::UNLOADUNIT_COMMANDCENTER) - .value("UNLOADUNIT_MEDIVAC", sc2::ABILITY_ID::UNLOADUNIT_MEDIVAC) - .value("UNLOADUNIT_NYDASNETWORK", sc2::ABILITY_ID::UNLOADUNIT_NYDASNETWORK) - .value("UNLOADUNIT_OVERLORD", sc2::ABILITY_ID::UNLOADUNIT_OVERLORD) - .value("UNLOADUNIT_WARPPRISM", sc2::ABILITY_ID::UNLOADUNIT_WARPPRISM); + .value("HEAL_MEDICHEAL", sc2::ABILITY_ID::HEAL_MEDICHEAL) + .value("HELIOSCRASHMORPH_CRASHMORPH", sc2::ABILITY_ID::HELIOSCRASHMORPH_CRASHMORPH) + .value("HERCULESLAND", sc2::ABILITY_ID::HERCULESLAND) + .value("HERCULESLIFTOFF_LIFT", sc2::ABILITY_ID::HERCULESLIFTOFF_LIFT) + .value("HERCULESTRANSPORT_MEDIVACLOAD", sc2::ABILITY_ID::HERCULESTRANSPORT_MEDIVACLOAD) + .value("HERCULESTRANSPORT_MEDIVACUNLOADALL", sc2::ABILITY_ID::HERCULESTRANSPORT_MEDIVACUNLOADALL) + .value("HERDINTERACT_HERD", sc2::ABILITY_ID::HERDINTERACT_HERD) + .value("HEROARMNUKE_NUKEARM", sc2::ABILITY_ID::HEROARMNUKE_NUKEARM) + .value("HERONUCLEARSTRIKE_CANCEL", sc2::ABILITY_ID::HERONUCLEARSTRIKE_CANCEL) + .value("HOLDFIRE", sc2::ABILITY_ID::HOLDFIRE) + .value("HOLDFIRE_STOPSPECIAL", sc2::ABILITY_ID::HOLDFIRE_STOPSPECIAL) + .value("HUTTRANSPORT_HUTLOAD", sc2::ABILITY_ID::HUTTRANSPORT_HUTLOAD) + .value("HUTTRANSPORT_HUTUNLOADALL", sc2::ABILITY_ID::HUTTRANSPORT_HUTUNLOADALL) + .value("HYBRIDBLINK_ZERATULBLINK", sc2::ABILITY_ID::HYBRIDBLINK_ZERATULBLINK) + .value("HYBRIDCPLASMABLAST", sc2::ABILITY_ID::HYBRIDCPLASMABLAST) + .value("HYBRIDFAOESTUN", sc2::ABILITY_ID::HYBRIDFAOESTUN) + .value("HYPERIONYAMATOSPECIAL_HYPERIONYAMATOGUN", sc2::ABILITY_ID::HYPERIONYAMATOSPECIAL_HYPERIONYAMATOGUN) + .value("IMPALE", sc2::ABILITY_ID::IMPALE) + .value("IMPLOSION", sc2::ABILITY_ID::IMPLOSION) + .value("INFESTABLEHUTTRANSPORT_HUTLOAD", sc2::ABILITY_ID::INFESTABLEHUTTRANSPORT_HUTLOAD) + .value("INFESTABLEHUTTRANSPORT_HUTUNLOADALL", sc2::ABILITY_ID::INFESTABLEHUTTRANSPORT_HUTUNLOADALL) + .value("INFESTEDVENTSPAWNBROODLORD_SPAWNBROODLORD", sc2::ABILITY_ID::INFESTEDVENTSPAWNBROODLORD_SPAWNBROODLORD) + .value("INFESTEDVENTSPAWNCORRUPTOR_SPAWNCORRUPTOR", sc2::ABILITY_ID::INFESTEDVENTSPAWNCORRUPTOR_SPAWNCORRUPTOR) + .value("INFESTEDVENTSPAWNMUTALISK_LEVIATHANSPAWNMUTALISK", sc2::ABILITY_ID::INFESTEDVENTSPAWNMUTALISK_LEVIATHANSPAWNMUTALISK) + .value("INFESTORENSNARE", sc2::ABILITY_ID::INFESTORENSNARE) + .value("INVULNERABILITYSHIELD", sc2::ABILITY_ID::INVULNERABILITYSHIELD) + .value("IRRADIATE", sc2::ABILITY_ID::IRRADIATE) + .value("IRRADIATE_CANCEL", sc2::ABILITY_ID::IRRADIATE_CANCEL) + .value("KARASSPLASMASURGE", sc2::ABILITY_ID::KARASSPLASMASURGE) + .value("LAND", sc2::ABILITY_ID::LAND) + .value("LAND_BARRACKS", sc2::ABILITY_ID::LAND_BARRACKS) + .value("LAND_COMMANDCENTER", sc2::ABILITY_ID::LAND_COMMANDCENTER) + .value("LAND_FACTORY", sc2::ABILITY_ID::LAND_FACTORY) + .value("LAND_ORBITALCOMMAND", sc2::ABILITY_ID::LAND_ORBITALCOMMAND) + .value("LAND_STARPORT", sc2::ABILITY_ID::LAND_STARPORT) + .value("LEECH", sc2::ABILITY_ID::LEECH) + .value("LEECHRESOURCES_CANCEL", sc2::ABILITY_ID::LEECHRESOURCES_CANCEL) + .value("LEVIATHANSPAWNBROODLORD_SPAWNBROODLORD", sc2::ABILITY_ID::LEVIATHANSPAWNBROODLORD_SPAWNBROODLORD) + .value("LEVIATHANSPAWNMUTALISK", sc2::ABILITY_ID::LEVIATHANSPAWNMUTALISK) + .value("LIBERATORMORPHTOAA_LIBERATORAAMODE", sc2::ABILITY_ID::LIBERATORMORPHTOAA_LIBERATORAAMODE) + .value("LIBERATORMORPHTOAG_LIBERATORAGMODE", sc2::ABILITY_ID::LIBERATORMORPHTOAG_LIBERATORAGMODE) + .value("LIBRARYDOWN", sc2::ABILITY_ID::LIBRARYDOWN) + .value("LIBRARYUP", sc2::ABILITY_ID::LIBRARYUP) + .value("LIFT", sc2::ABILITY_ID::LIFT) + .value("LIFT_BARRACKS", sc2::ABILITY_ID::LIFT_BARRACKS) + .value("LIFT_COMMANDCENTER", sc2::ABILITY_ID::LIFT_COMMANDCENTER) + .value("LIFT_FACTORY", sc2::ABILITY_ID::UNLOADALL_NYDASNETWORK) + .value("LIFT_ORBITALCOMMAND", sc2::ABILITY_ID::LIFT_ORBITALCOMMAND) + .value("LIFT_STARPORT", sc2::ABILITY_ID::LIFT_STARPORT) + .value("LIGHTBRIDGEOFF", sc2::ABILITY_ID::LIGHTBRIDGEOFF) + .value("LIGHTBRIDGEOFFTOPRIGHT_LIGHTBRIDGEOFF", sc2::ABILITY_ID::LIGHTBRIDGEOFFTOPRIGHT_LIGHTBRIDGEOFF) + .value("LIGHTBRIDGEON", sc2::ABILITY_ID::LIGHTBRIDGEON) + .value("LIGHTBRIDGEONTOPRIGHT_LIGHTBRIDGEON", sc2::ABILITY_ID::LIGHTBRIDGEONTOPRIGHT_LIGHTBRIDGEON) + .value("LIGHTNINGBOMB", sc2::ABILITY_ID::LIGHTNINGBOMB) + .value("LIGHTOFAIUR", sc2::ABILITY_ID::LIGHTOFAIUR) + .value("LOAD", sc2::ABILITY_ID::LOAD) + .value("LOADALL", sc2::ABILITY_ID::LOADALL) + .value("LOADALL_COMMANDCENTER", sc2::ABILITY_ID::LOADALL_COMMANDCENTER) + .value("LOAD_BUNKER", sc2::ABILITY_ID::LOAD_BUNKER) + .value("LOAD_MEDIVAC", sc2::ABILITY_ID::LOAD_MEDIVAC) + .value("LOAD_NYDUSNETWORK", sc2::ABILITY_ID::LOAD_NYDUSNETWORK) + .value("LOAD_NYDUSWORM", sc2::ABILITY_ID::LOAD_NYDUSWORM) + .value("LOAD_OVERLORD", sc2::ABILITY_ID::LOAD_OVERLORD) + .value("LOAD_WARPPRISM", sc2::ABILITY_ID::LOAD_WARPPRISM) + .value("LOCKONAIR", sc2::ABILITY_ID::LOCKONAIR) + .value("LOCUSTMPFLYINGMORPHTOGROUND_LOCUSTMPFLYINGSWOOP", sc2::ABILITY_ID::LOCUSTMPFLYINGMORPHTOGROUND_LOCUSTMPFLYINGSWOOP) + .value("LOCUSTMPFLYINGSWOOPATTACK_LOCUSTMPFLYINGSWOOP", sc2::ABILITY_ID::LOCUSTMPFLYINGSWOOPATTACK_LOCUSTMPFLYINGSWOOP) + .value("LOCUSTMPMORPHTOAIR_LOCUSTMPFLYINGSWOOP", sc2::ABILITY_ID::LOCUSTMPMORPHTOAIR_LOCUSTMPFLYINGSWOOP) + .value("LOKIMISSILEPODS_MISSILEPODS", sc2::ABILITY_ID::LOKIMISSILEPODS_MISSILEPODS) + .value("LOKIUNDOCK_LIFT", sc2::ABILITY_ID::LOKIUNDOCK_LIFT) + .value("LOKIYAMATO_LOKIYAMATOGUN", sc2::ABILITY_ID::LOKIYAMATO_LOKIYAMATOGUN) + .value("LURKERASPECTFROMHYDRALISKBURROWED_CANCEL", sc2::ABILITY_ID::LURKERASPECTFROMHYDRALISKBURROWED_CANCEL) + .value("LURKERASPECTFROMHYDRALISKBURROWED_LURKERFROMHYDRALISKBURROWED", sc2::ABILITY_ID::LURKERASPECTFROMHYDRALISKBURROWED_LURKERFROMHYDRALISKBURROWED) + .value("LURKERASPECTMPFROMHYDRALISKBURROWED_CANCEL", sc2::ABILITY_ID::LURKERASPECTMPFROMHYDRALISKBURROWED_CANCEL) + .value("LURKERASPECTMPFROMHYDRALISKBURROWED_LURKERMPFROMHYDRALISKBURROWED", sc2::ABILITY_ID::LURKERASPECTMPFROMHYDRALISKBURROWED_LURKERMPFROMHYDRALISKBURROWED) + .value("LURKERASPECTMP_CANCEL", sc2::ABILITY_ID::LURKERASPECTMP_CANCEL) + .value("LURKERASPECTMP_LURKERMP", sc2::ABILITY_ID::LURKERASPECTMP_LURKERMP) + .value("LURKERASPECT_CANCEL", sc2::ABILITY_ID::LURKERASPECT_CANCEL) + .value("LURKERASPECT_LURKER", sc2::ABILITY_ID::LURKERASPECT_LURKER) + .value("LIGHTBRIDGEONTOPRIGHT_LIGHTBRIDGEON", sc2::ABILITY_ID::LIGHTBRIDGEONTOPRIGHT_LIGHTBRIDGEON) + .value("MAKEVULTURESPIDERMINES_SPIDERMINEREPLENISH", sc2::ABILITY_ID::MAKEVULTURESPIDERMINES_SPIDERMINEREPLENISH) + .value("MASSIVEKNOCKOVER", sc2::ABILITY_ID::MASSIVEKNOCKOVER) + .value("MAXIUMTHRUST_MAXIMUMTHRUST", sc2::ABILITY_ID::MAXIUMTHRUST_MAXIMUMTHRUST) + .value("MERGEABLE_CANCEL", sc2::ABILITY_ID::MERGEABLE_CANCEL) + .value("METALGATEDIAGONALBLURLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATEDIAGONALBLURLOWERED_GATEOPEN) + .value("METALGATEDIAGONALBLUR_GATECLOSE", sc2::ABILITY_ID::METALGATEDIAGONALBLUR_GATECLOSE) + .value("METALGATEDIAGONALULBRLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATEDIAGONALULBRLOWERED_GATEOPEN) + .value("METALGATEDIAGONALULBR_GATECLOSE", sc2::ABILITY_ID::METALGATEDIAGONALULBR_GATECLOSE) + .value("METALGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN) + .value("METALGATESTRAIGHTHORIZONTALBF_GATECLOSE", sc2::ABILITY_ID::METALGATESTRAIGHTHORIZONTALBF_GATECLOSE) + .value("METALGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN) + .value("METALGATESTRAIGHTHORIZONTAL_GATECLOSE", sc2::ABILITY_ID::METALGATESTRAIGHTHORIZONTAL_GATECLOSE) + .value("METALGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN) + .value("METALGATESTRAIGHTVERTICALLF_GATECLOSE", sc2::ABILITY_ID::METALGATESTRAIGHTVERTICALLF_GATECLOSE) + .value("METALGATESTRAIGHTVERTICALLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATESTRAIGHTVERTICALLOWERED_GATEOPEN) + .value("METALGATESTRAIGHTVERTICAL_GATECLOSE", sc2::ABILITY_ID::METALGATESTRAIGHTVERTICAL_GATECLOSE) + .value("MINDBLAST", sc2::ABILITY_ID::MINDBLAST) + .value("MINDCONTROL", sc2::ABILITY_ID::MINDCONTROL) + .value("MISSILEPODS", sc2::ABILITY_ID::MISSILEPODS) + .value("MORPH_ARCHON", sc2::ABILITY_ID::MORPH_ARCHON) + .value("MORPH_BANELING", sc2::ABILITY_ID::MORPH_BANELING) + .value("MORPH_BROODLORD", sc2::ABILITY_ID::MORPH_BROODLORD) + .value("MORPH_CANCEL", sc2::ABILITY_ID::MORPH_CANCEL) + .value("MORPH_GATEWAY", sc2::ABILITY_ID::MORPH_GATEWAY) + .value("MORPH_GREATERSPIRE", sc2::ABILITY_ID::MORPH_GREATERSPIRE) + .value("MORPH_HELLBAT", sc2::ABILITY_ID::MORPH_HELLBAT) + .value("MORPH_HELLION", sc2::ABILITY_ID::MORPH_HELLION) + .value("MORPH_HIVE", sc2::ABILITY_ID::MORPH_HIVE) + .value("MORPH_LAIR", sc2::ABILITY_ID::MORPH_LAIR) + .value("MORPH_LIBERATORAAMODE", sc2::ABILITY_ID::MORPH_LIBERATORAAMODE) + .value("MORPH_LIBERATORAGMODE", sc2::ABILITY_ID::MORPH_LIBERATORAGMODE) + .value("MORPH_LURKER", sc2::ABILITY_ID::MORPH_LURKER) + .value("MORPH_LURKERDEN", sc2::ABILITY_ID::MORPH_LURKERDEN) + .value("MORPH_MORPHTODEVOURERMP", sc2::ABILITY_ID::MORPH_MORPHTODEVOURERMP) + .value("MORPH_MORPHTOGUARDIANMP", sc2::ABILITY_ID::MORPH_MORPHTOGUARDIANMP) + .value("MORPH_MORPHTOINFESTEDCIVILIAN", sc2::ABILITY_ID::MORPH_MORPHTOINFESTEDCIVILIAN) + .value("MORPH_MOTHERSHIP", sc2::ABILITY_ID::MORPH_MOTHERSHIP) + .value("MORPH_MOVE", sc2::ABILITY_ID::MORPH_MOVE) + .value("MORPH_OBSERVERMODE", sc2::ABILITY_ID::MORPH_OBSERVERMODE) + .value("MORPH_ORBITALCOMMAND", sc2::ABILITY_ID::MORPH_ORBITALCOMMAND) + .value("MORPH_OVERLORDTRANSPORT", sc2::ABILITY_ID::MORPH_OVERLORDTRANSPORT) + .value("MORPH_OVERSEER", sc2::ABILITY_ID::MORPH_OVERSEER) + .value("MORPH_OVERSEERMODE", sc2::ABILITY_ID::MORPH_OVERSEERMODE) + .value("MORPH_OVERSIGHTMODE", sc2::ABILITY_ID::MORPH_OVERSIGHTMODE) + .value("MORPH_PLANETARYFORTRESS", sc2::ABILITY_ID::MORPH_PLANETARYFORTRESS) + .value("MORPH_RAVAGER", sc2::ABILITY_ID::MORPH_RAVAGER) + .value("MORPH_ROOT", sc2::ABILITY_ID::MORPH_ROOT) + .value("MORPH_SIEGEMODE", sc2::ABILITY_ID::MORPH_SIEGEMODE) + .value("MORPH_SPINECRAWLERROOT", sc2::ABILITY_ID::MORPH_SPINECRAWLERROOT) + .value("MORPH_SPINECRAWLERUPROOT", sc2::ABILITY_ID::MORPH_SPINECRAWLERUPROOT) + .value("MORPH_SPORECRAWLERROOT", sc2::ABILITY_ID::MORPH_SPORECRAWLERROOT) + .value("MORPH_SPORECRAWLERUPROOT", sc2::ABILITY_ID::MORPH_SPORECRAWLERUPROOT) + .value("MORPH_SUPPLYDEPOT_LOWER", sc2::ABILITY_ID::MORPH_SUPPLYDEPOT_LOWER) + .value("MORPH_SUPPLYDEPOT_RAISE", sc2::ABILITY_ID::MORPH_SUPPLYDEPOT_RAISE) + .value("MORPH_SURVEILLANCEMODE", sc2::ABILITY_ID::MORPH_SURVEILLANCEMODE) + .value("MORPH_THOREXPLOSIVEMODE", sc2::ABILITY_ID::MORPH_THOREXPLOSIVEMODE) + .value("MORPH_THORHIGHIMPACTMODE", sc2::ABILITY_ID::MORPH_THORHIGHIMPACTMODE) + .value("MORPH_UNSIEGE", sc2::ABILITY_ID::MORPH_UNSIEGE) + .value("MORPH_UPROOT", sc2::ABILITY_ID::MORPH_UPROOT) + .value("MORPH_VIKINGASSAULTMODE", sc2::ABILITY_ID::MORPH_VIKINGASSAULTMODE) + .value("MORPH_VIKINGFIGHTERMODE", sc2::ABILITY_ID::MORPH_VIKINGFIGHTERMODE) + .value("MORPH_WARPGATE", sc2::ABILITY_ID::MORPH_WARPGATE) + .value("MORPH_WARPPRISMPHASINGMODE", sc2::ABILITY_ID::MORPH_WARPPRISMPHASINGMODE) + .value("MORPH_WARPPRISMTRANSPORTMODE", sc2::ABILITY_ID::MORPH_WARPPRISMTRANSPORTMODE) + .value("MOTHERSHIPCOREENERGIZE", sc2::ABILITY_ID::MOTHERSHIPCOREENERGIZE) + .value("MOTHERSHIPCOREENERGIZE_CANCEL", sc2::ABILITY_ID::MOTHERSHIPCOREENERGIZE_CANCEL) + .value("MOTHERSHIPCOREPURIFYNEXUSCANCEL_CANCEL", sc2::ABILITY_ID::MOTHERSHIPCOREPURIFYNEXUSCANCEL_CANCEL) + .value("MOTHERSHIPCORETELEPORT", sc2::ABILITY_ID::MOTHERSHIPCORETELEPORT) + .value("MOTHERSHIPCOREWEAPON_MOTHERSHIPSTASIS", sc2::ABILITY_ID::MOTHERSHIPCOREWEAPON_MOTHERSHIPSTASIS) + .value("MOTHERSHIPSTASIS", sc2::ABILITY_ID::MOTHERSHIPSTASIS) + .value("MOVE_ACQUIREMOVE", sc2::ABILITY_ID::MOVE_ACQUIREMOVE) + .value("MOVE_MOVE", sc2::ABILITY_ID::MOVE_MOVE) + .value("MOVE_MOVEHOLDPOSITION", sc2::ABILITY_ID::MOVE_MOVEHOLDPOSITION) + .value("MOVE_MOVEPATROL", sc2::ABILITY_ID::MOVE_MOVEPATROL) + .value("MOVE_TURN", sc2::ABILITY_ID::MOVE_TURN) + .value("NEXUSINVULNERABILITY", sc2::ABILITY_ID::NEXUSINVULNERABILITY) + .value("NEXUSPHASESHIFT", sc2::ABILITY_ID::NEXUSPHASESHIFT) + .value("NEXUSSHIELDOVERCHARGE", sc2::ABILITY_ID::NEXUSSHIELDOVERCHARGE) + .value("NEXUSSHIELDOVERCHARGEOFF", sc2::ABILITY_ID::NEXUSSHIELDOVERCHARGEOFF) + .value("NEXUSSHIELDRECHARGE", sc2::ABILITY_ID::NEXUSSHIELDRECHARGE) + .value("NEXUSSHIELDRECHARGEONPYLON", sc2::ABILITY_ID::NEXUSSHIELDRECHARGEONPYLON) + .value("NOVASNIPE", sc2::ABILITY_ID::NOVASNIPE) + .value("OBLITERATE", sc2::ABILITY_ID::OBLITERATE) + .value("ODINBARRAGE", sc2::ABILITY_ID::ODINBARRAGE) + .value("ODINBARRAGE_CANCEL", sc2::ABILITY_ID::ODINBARRAGE_CANCEL) + .value("ODINNUCLEARSTRIKE_CANCEL", sc2::ABILITY_ID::ODINNUCLEARSTRIKE_CANCEL) + .value("ODINNUCLEARSTRIKE_ODINNUKECALLDOWN", sc2::ABILITY_ID::ODINNUCLEARSTRIKE_ODINNUKECALLDOWN) + .value("ODINWRECKAGE_ODIN", sc2::ABILITY_ID::ODINWRECKAGE_ODIN) + .value("OMEGASTORM", sc2::ABILITY_ID::OMEGASTORM) + .value("ORACLECLOAKFIELD", sc2::ABILITY_ID::ORACLECLOAKFIELD) + .value("ORACLECLOAKINGFIELDTARGETED", sc2::ABILITY_ID::ORACLECLOAKINGFIELDTARGETED) + .value("ORACLENORMALMODE", sc2::ABILITY_ID::ORACLENORMALMODE) + .value("ORACLENORMALMODE_CANCEL", sc2::ABILITY_ID::ORACLENORMALMODE_CANCEL) + .value("ORACLEPHASESHIFT", sc2::ABILITY_ID::ORACLEPHASESHIFT) + .value("ORACLEREVELATIONMODE", sc2::ABILITY_ID::ORACLEREVELATIONMODE) + .value("ORACLEREVELATIONMODE_CANCEL", sc2::ABILITY_ID::ORACLEREVELATIONMODE_CANCEL) + .value("ORACLESTASISTRAPACTIVATE_ACTIVATESTASISWARD", sc2::ABILITY_ID::ORACLESTASISTRAPACTIVATE_ACTIVATESTASISWARD) + .value("ORACLESTASISTRAP_ORACLEBUILDSTASISTRAP", sc2::ABILITY_ID::ORACLESTASISTRAP_ORACLEBUILDSTASISTRAP) + .value("OVERCHARGE", sc2::ABILITY_ID::OVERCHARGE) + .value("PARKCOLONISTVEHICLE", sc2::ABILITY_ID::PARKCOLONISTVEHICLE) + .value("PENETRATINGSHOT", sc2::ABILITY_ID::PENETRATINGSHOT) + .value("PHASEMINEBLAST", sc2::ABILITY_ID::PHASEMINEBLAST) + .value("PHASESHIFT", sc2::ABILITY_ID::PHASESHIFT) + .value("PICKUP", sc2::ABILITY_ID::PICKUP) + .value("PICKUPARCADE_PICKUP", sc2::ABILITY_ID::PICKUPARCADE_PICKUP) + .value("PICKUPGAS100", sc2::ABILITY_ID::PICKUPGAS100) + .value("PICKUPMINERALS100", sc2::ABILITY_ID::PICKUPMINERALS100) + .value("PICKUPPALLETGAS", sc2::ABILITY_ID::PICKUPPALLETGAS) + .value("PICKUPPALLETMINERALS", sc2::ABILITY_ID::PICKUPPALLETMINERALS) + .value("PICKUPSCRAPLARGE", sc2::ABILITY_ID::PICKUPSCRAPLARGE) + .value("PICKUPSCRAPMEDIUM", sc2::ABILITY_ID::PICKUPSCRAPMEDIUM) + .value("PICKUPSCRAPSMALL", sc2::ABILITY_ID::PICKUPSCRAPSMALL) + .value("PORTCITY_BRIDGE_UNITE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE10OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITE10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE10_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE12OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITE12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE12_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE8OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITE8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE8_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITN10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN10OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITN10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN10_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITN12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN12OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITN12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN12_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITN8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN8OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITN8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN8_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITNE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE10OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITNE10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE10_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITNE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE12OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITNE12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE12_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITNE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE8OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITNE8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE8_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITNW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW10OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITNW10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW10_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITNW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW12OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITNW12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW12_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITNW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW8OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITNW8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW8_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITS10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS10OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITS10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS10_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITS12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS12OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITS12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS12_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITS8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS8OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITS8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS8_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITSE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE10OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITSE10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE10_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITSE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE12OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITSE12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE12_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITSE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE8OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITSE8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE8_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITSW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW10OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITSW10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW10_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITSW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW12OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITSW12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW12_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITSW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW8OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITSW8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW8_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW10OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITW10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW10_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW12OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITW12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW12_BRIDGERETRACT) + .value("PORTCITY_BRIDGE_UNITW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW8OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITW8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW8_BRIDGERETRACT) + .value("PROTOSSBUILDINGQUEUE_CANCELSLOT", sc2::ABILITY_ID::PROTOSSBUILDINGQUEUE_CANCELSLOT) + .value("PSIONICSHOCKWAVE", sc2::ABILITY_ID::PSIONICSHOCKWAVE) + .value("PSYTROUSOXIDE_PSYTROUSOXIDEOFF", sc2::ABILITY_ID::PSYTROUSOXIDE_PSYTROUSOXIDEOFF) + .value("PSYTROUSOXIDE_PSYTROUSOXIDEON", sc2::ABILITY_ID::PSYTROUSOXIDE_PSYTROUSOXIDEON) + .value("PULSARBEAM_RIPFIELD", sc2::ABILITY_ID::PULSARBEAM_RIPFIELD) + .value("PULSARCANNON", sc2::ABILITY_ID::PULSARCANNON) + .value("PURIFICATIONNOVA", sc2::ABILITY_ID::PURIFICATIONNOVA) + .value("PURIFICATIONNOVAMORPHBACK_PURIFICATIONNOVA", sc2::ABILITY_ID::PURIFICATIONNOVAMORPHBACK_PURIFICATIONNOVA) + .value("PURIFICATIONNOVAMORPH_PURIFICATIONNOVA", sc2::ABILITY_ID::PURIFICATIONNOVAMORPH_PURIFICATIONNOVA) + .value("PURIFIERPLANETCRACKER_PLANETCRACKER", sc2::ABILITY_ID::PURIFIERPLANETCRACKER_PLANETCRACKER) + .value("PURIFIERTOGGLEPOWER_PURIFIERPOWERDOWN", sc2::ABILITY_ID::PURIFIERTOGGLEPOWER_PURIFIERPOWERDOWN) + .value("PURIFIERTOGGLEPOWER_PURIFIERPOWERUP", sc2::ABILITY_ID::PURIFIERTOGGLEPOWER_PURIFIERPOWERUP) + .value("PURIFYMORPHPYLONBACK_MOTHERSHIPCOREWEAPON", sc2::ABILITY_ID::PURIFYMORPHPYLONBACK_MOTHERSHIPCOREWEAPON) + .value("PURIFYMORPHPYLON_MOTHERSHIPCOREWEAPON", sc2::ABILITY_ID::PURIFYMORPHPYLON_MOTHERSHIPCOREWEAPON) + .value("QUE5LONGBLEND_CANCEL", sc2::ABILITY_ID::QUE5LONGBLEND_CANCEL) + .value("QUE5LONGBLEND_CANCELSLOT", sc2::ABILITY_ID::QUE5LONGBLEND_CANCELSLOT) + .value("QUE8_CANCEL", sc2::ABILITY_ID::QUE8_CANCEL) + .value("QUE8_CANCELSLOT", sc2::ABILITY_ID::QUE8_CANCELSLOT) + .value("QUEENBUILD_CANCEL", sc2::ABILITY_ID::QUEENBUILD_CANCEL) + .value("QUEENFLY", sc2::ABILITY_ID::QUEENFLY) + .value("QUEENLAND", sc2::ABILITY_ID::QUEENLAND) + .value("QUEENMPENSNARE", sc2::ABILITY_ID::QUEENMPENSNARE) + .value("QUEENMPINFESTCOMMANDCENTER", sc2::ABILITY_ID::QUEENMPINFESTCOMMANDCENTER) + .value("QUEENMPSPAWNBROODLINGS", sc2::ABILITY_ID::QUEENMPSPAWNBROODLINGS) + .value("QUEENSHOCKWAVE", sc2::ABILITY_ID::QUEENSHOCKWAVE) + .value("RALLY_BUILDING", sc2::ABILITY_ID::RALLY_BUILDING) + .value("RALLY_COMMANDCENTER", sc2::ABILITY_ID::RALLY_COMMANDCENTER) + .value("RALLY_HATCHERY_UNITS", sc2::ABILITY_ID::RALLY_HATCHERY_UNITS) + .value("RALLY_HATCHERY_WORKERS", sc2::ABILITY_ID::RALLY_HATCHERY_WORKERS) + .value("RALLY_MORPHING_UNIT", sc2::ABILITY_ID::RALLY_MORPHING_UNIT) + .value("RALLY_NEXUS", sc2::ABILITY_ID::RALLY_NEXUS) + .value("RALLY_UNITS", sc2::ABILITY_ID::RALLY_UNITS) + .value("RALLY_WORKERS", sc2::ABILITY_ID::RALLY_WORKERS) + .value("RAVENBUILD_CANCEL", sc2::ABILITY_ID::RAVENBUILD_CANCEL) + .value("RAYNORC4_PLANTC4CHARGE", sc2::ABILITY_ID::RAYNORC4_PLANTC4CHARGE) + .value("RAYNORSNIPE", sc2::ABILITY_ID::RAYNORSNIPE) + .value("REDSTONELAVACRITTERBURROW_BURROWDOWN", sc2::ABILITY_ID::REDSTONELAVACRITTERBURROW_BURROWDOWN) + .value("REDSTONELAVACRITTERINJUREDBURROW_BURROWDOWN", sc2::ABILITY_ID::REDSTONELAVACRITTERINJUREDBURROW_BURROWDOWN) + .value("REDSTONELAVACRITTERINJUREDUNBURROW_BURROWUP", sc2::ABILITY_ID::REDSTONELAVACRITTERINJUREDUNBURROW_BURROWUP) + .value("REDSTONELAVACRITTERUNBURROW_BURROWUP", sc2::ABILITY_ID::REDSTONELAVACRITTERUNBURROW_BURROWUP) + .value("REFINERYTOAUTOMATEDREFINERY_RAISE", sc2::ABILITY_ID::REFINERYTOAUTOMATEDREFINERY_RAISE) + .value("RELEASEINTERCEPTORS", sc2::ABILITY_ID::RELEASEINTERCEPTORS) + .value("RELEASEMINION", sc2::ABILITY_ID::RELEASEMINION) + .value("RESEARCHLABTRANSPORT_HUTLOAD", sc2::ABILITY_ID::RESEARCHLABTRANSPORT_HUTLOAD) + .value("RESEARCHLABTRANSPORT_HUTUNLOADALL", sc2::ABILITY_ID::RESEARCHLABTRANSPORT_HUTUNLOADALL) + .value("RESEARCH_ADAPTIVETALONS", sc2::ABILITY_ID::RESEARCH_ADAPTIVETALONS) + .value("RESEARCH_ADEPTRESONATINGGLAIVES", sc2::ABILITY_ID::RESEARCH_ADEPTRESONATINGGLAIVES) + .value("RESEARCH_ADVANCEDBALLISTICS", sc2::ABILITY_ID::RESEARCH_ADVANCEDBALLISTICS) + .value("RESEARCH_AMPLIFIEDSHIELDING", sc2::ABILITY_ID::RESEARCH_AMPLIFIEDSHIELDING) + .value("RESEARCH_ANABOLICSYNTHESIS", sc2::ABILITY_ID::RESEARCH_ANABOLICSYNTHESIS) + .value("RESEARCH_ARMORPIERCINGROCKETS", sc2::ABILITY_ID::RESEARCH_ARMORPIERCINGROCKETS) + .value("RESEARCH_BALLISTICRANGE", sc2::ABILITY_ID::RESEARCH_BALLISTICRANGE) + .value("RESEARCH_BANSHEECLOAKINGFIELD", sc2::ABILITY_ID::RESEARCH_BANSHEECLOAKINGFIELD) + .value("RESEARCH_BANSHEEHYPERFLIGHTROTORS", sc2::ABILITY_ID::RESEARCH_BANSHEEHYPERFLIGHTROTORS) + .value("RESEARCH_BATTLECRUISERWEAPONREFIT", sc2::ABILITY_ID::RESEARCH_BATTLECRUISERWEAPONREFIT) + .value("RESEARCH_BLINK", sc2::ABILITY_ID::RESEARCH_BLINK) + .value("RESEARCH_BURROW", sc2::ABILITY_ID::RESEARCH_BURROW) + .value("RESEARCH_CENTRIFUGALHOOKS", sc2::ABILITY_ID::RESEARCH_CENTRIFUGALHOOKS) + .value("RESEARCH_CHARGE", sc2::ABILITY_ID::RESEARCH_CHARGE) + .value("RESEARCH_CHITINOUSPLATING", sc2::ABILITY_ID::RESEARCH_CHITINOUSPLATING) + .value("RESEARCH_COMBATSHIELD", sc2::ABILITY_ID::RESEARCH_COMBATSHIELD) + .value("RESEARCH_CONCUSSIVESHELLS", sc2::ABILITY_ID::RESEARCH_CONCUSSIVESHELLS) + .value("RESEARCH_CYCLONELOCKONDAMAGE", sc2::ABILITY_ID::RESEARCH_CYCLONELOCKONDAMAGE) + .value("RESEARCH_CYCLONERAPIDFIRELAUNCHERS", sc2::ABILITY_ID::RESEARCH_CYCLONERAPIDFIRELAUNCHERS) + .value("RESEARCH_DRILLINGCLAWS", sc2::ABILITY_ID::RESEARCH_DRILLINGCLAWS) + .value("RESEARCH_DURABLEMATERIALS", sc2::ABILITY_ID::RESEARCH_DURABLEMATERIALS) + .value("RESEARCH_ENHANCEDMUNITIONS", sc2::ABILITY_ID::RESEARCH_ENHANCEDMUNITIONS) + .value("RESEARCH_ENHANCEDSHOCKWAVES", sc2::ABILITY_ID::RESEARCH_ENHANCEDSHOCKWAVES) + .value("RESEARCH_EVOLVEAMORPHOUSARMORCLOUD", sc2::ABILITY_ID::RESEARCH_EVOLVEAMORPHOUSARMORCLOUD) + .value("RESEARCH_EVOLVEVENTRALSACKS", sc2::ABILITY_ID::RESEARCH_EVOLVEVENTRALSACKS) + .value("RESEARCH_EXTENDEDTHERMALLANCE", sc2::ABILITY_ID::RESEARCH_EXTENDEDTHERMALLANCE) + .value("RESEARCH_GHOSTENERGYUPGRADE", sc2::ABILITY_ID::RESEARCH_GHOSTENERGYUPGRADE) + .value("RESEARCH_GLIALREGENERATION", sc2::ABILITY_ID::RESEARCH_GLIALREGENERATION) + .value("RESEARCH_GRAVITICBOOSTER", sc2::ABILITY_ID::RESEARCH_GRAVITICBOOSTER) + .value("RESEARCH_GRAVITICDRIVE", sc2::ABILITY_ID::RESEARCH_GRAVITICDRIVE) + .value("RESEARCH_GROOVEDSPINES", sc2::ABILITY_ID::RESEARCH_GROOVEDSPINES) + .value("RESEARCH_HALLUCINATION", sc2::ABILITY_ID::RESEARCH_HALLUCINATION) + .value("RESEARCH_HIGHCAPACITYFUELTANKS", sc2::ABILITY_ID::RESEARCH_HIGHCAPACITYFUELTANKS) + .value("RESEARCH_HISECAUTOTRACKING", sc2::ABILITY_ID::RESEARCH_HISECAUTOTRACKING) + .value("RESEARCH_IMMORTALREVIVE", sc2::ABILITY_ID::RESEARCH_IMMORTALREVIVE) + .value("RESEARCH_INFERNALPREIGNITER", sc2::ABILITY_ID::RESEARCH_INFERNALPREIGNITER) + .value("RESEARCH_INTERCEPTORGRAVITONCATAPULT", sc2::ABILITY_ID::RESEARCH_INTERCEPTORGRAVITONCATAPULT) + .value("RESEARCH_INTERCEPTORLAUNCHSPEEDUPGRADE", sc2::ABILITY_ID::RESEARCH_INTERCEPTORLAUNCHSPEEDUPGRADE) + .value("RESEARCH_LIBERATORAGMODE", sc2::ABILITY_ID::RESEARCH_LIBERATORAGMODE) + .value("RESEARCH_LOCKONRANGEUPGRADE", sc2::ABILITY_ID::RESEARCH_LOCKONRANGEUPGRADE) + .value("RESEARCH_LOCUSTLIFETIMEINCREASE", sc2::ABILITY_ID::RESEARCH_LOCUSTLIFETIMEINCREASE) + .value("RESEARCH_LURKERRANGE", sc2::ABILITY_ID::RESEARCH_LURKERRANGE) + .value("RESEARCH_MEDIVACENERGYUPGRADE", sc2::ABILITY_ID::RESEARCH_MEDIVACENERGYUPGRADE) + .value("RESEARCH_MUSCULARAUGMENTS", sc2::ABILITY_ID::RESEARCH_MUSCULARAUGMENTS) + .value("RESEARCH_NEOSTEELFRAME", sc2::ABILITY_ID::RESEARCH_NEOSTEELFRAME) + .value("RESEARCH_NEURALPARASITE", sc2::ABILITY_ID::RESEARCH_NEURALPARASITE) + .value("RESEARCH_PATHOGENGLANDS", sc2::ABILITY_ID::RESEARCH_PATHOGENGLANDS) + .value("RESEARCH_PERSONALCLOAKING", sc2::ABILITY_ID::RESEARCH_PERSONALCLOAKING) + .value("RESEARCH_PHOENIXANIONPULSECRYSTALS", sc2::ABILITY_ID::RESEARCH_PHOENIXANIONPULSECRYSTALS) + .value("RESEARCH_PNEUMATIZEDCARAPACE", sc2::ABILITY_ID::RESEARCH_PNEUMATIZEDCARAPACE) + .value("RESEARCH_PROTOSSAIRARMOR", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMOR) + .value("RESEARCH_PROTOSSAIRARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL1) + .value("RESEARCH_PROTOSSAIRARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL2) + .value("RESEARCH_PROTOSSAIRARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL3) + .value("RESEARCH_PROTOSSAIRWEAPONS", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONS) + .value("RESEARCH_PROTOSSAIRWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL1) + .value("RESEARCH_PROTOSSAIRWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL2) + .value("RESEARCH_PROTOSSAIRWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL3) + .value("RESEARCH_PROTOSSGROUNDARMOR", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMOR) + .value("RESEARCH_PROTOSSGROUNDARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL1) + .value("RESEARCH_PROTOSSGROUNDARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL2) + .value("RESEARCH_PROTOSSGROUNDARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL3) + .value("RESEARCH_PROTOSSGROUNDWEAPONS", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONS) + .value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL1) + .value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL2) + .value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL3) + .value("RESEARCH_PROTOSSSHIELDS", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDS) + .value("RESEARCH_PROTOSSSHIELDSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL1) + .value("RESEARCH_PROTOSSSHIELDSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL2) + .value("RESEARCH_PROTOSSSHIELDSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL3) + .value("RESEARCH_PSIONICAMPLIFIERS", sc2::ABILITY_ID::RESEARCH_PSIONICAMPLIFIERS) + .value("RESEARCH_PSIONICSURGE", sc2::ABILITY_ID::RESEARCH_PSIONICSURGE) + .value("RESEARCH_PSISTORM", sc2::ABILITY_ID::RESEARCH_PSISTORM) + .value("RESEARCH_RAPIDDEPLOYMENT", sc2::ABILITY_ID::RESEARCH_RAPIDDEPLOYMENT) + .value("RESEARCH_RAPIDREIGNITIONSYSTEM", sc2::ABILITY_ID::RESEARCH_RAPIDREIGNITIONSYSTEM) + .value("RESEARCH_RAVENCORVIDREACTOR", sc2::ABILITY_ID::RESEARCH_RAVENCORVIDREACTOR) + .value("RESEARCH_RAVENRECALIBRATEDEXPLOSIVES", sc2::ABILITY_ID::RESEARCH_RAVENRECALIBRATEDEXPLOSIVES) + .value("RESEARCH_REAPERSPEED", sc2::ABILITY_ID::RESEARCH_REAPERSPEED) + .value("RESEARCH_ROACHSUPPLY", sc2::ABILITY_ID::RESEARCH_ROACHSUPPLY) + .value("RESEARCH_SEEKERMISSILE", sc2::ABILITY_ID::RESEARCH_SEEKERMISSILE) + .value("RESEARCH_SHADOWSTRIKE", sc2::ABILITY_ID::RESEARCH_SHADOWSTRIKE) + .value("RESEARCH_SMARTSERVOS", sc2::ABILITY_ID::RESEARCH_SMARTSERVOS) + .value("RESEARCH_STIMPACK", sc2::ABILITY_ID::RESEARCH_STIMPACK) + .value("RESEARCH_TEMPESTRANGEUPGRADE", sc2::ABILITY_ID::RESEARCH_TEMPESTRANGEUPGRADE) + .value("RESEARCH_TERRANINFANTRYARMOR", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMOR) + .value("RESEARCH_TERRANINFANTRYARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL1) + .value("RESEARCH_TERRANINFANTRYARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL2) + .value("RESEARCH_TERRANINFANTRYARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL3) + .value("RESEARCH_TERRANINFANTRYWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONS) + .value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL1) + .value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL2) + .value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL3) + .value("RESEARCH_TERRANSHIPPLATINGLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANSHIPPLATINGLEVEL1) + .value("RESEARCH_TERRANSHIPPLATINGLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANSHIPPLATINGLEVEL2) + .value("RESEARCH_TERRANSHIPPLATINGLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANSHIPPLATINGLEVEL3) + .value("RESEARCH_TERRANSHIPWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONS) + .value("RESEARCH_TERRANSHIPWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL1) + .value("RESEARCH_TERRANSHIPWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL2) + .value("RESEARCH_TERRANSHIPWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL3) + .value("RESEARCH_TERRANSTRUCTUREARMORUPGRADE", sc2::ABILITY_ID::RESEARCH_TERRANSTRUCTUREARMORUPGRADE) + .value("RESEARCH_TERRANVEHICLEANDSHIPPLATING", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATING) + .value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1) + .value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2) + .value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3) + .value("RESEARCH_TERRANVEHICLEPLATINGLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEPLATINGLEVEL1) + .value("RESEARCH_TERRANVEHICLEPLATINGLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEPLATINGLEVEL2) + .value("RESEARCH_TERRANVEHICLEPLATINGLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEPLATINGLEVEL3) + .value("RESEARCH_TERRANVEHICLEWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONS) + .value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL1) + .value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL2) + .value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL3) + .value("RESEARCH_TRANSFORMATIONSERVOS", sc2::ABILITY_ID::RESEARCH_TRANSFORMATIONSERVOS) + .value("RESEARCH_TUNNELINGCLAWS", sc2::ABILITY_ID::RESEARCH_TUNNELINGCLAWS) + .value("RESEARCH_VOIDRAYSPEEDUPGRADE", sc2::ABILITY_ID::RESEARCH_VOIDRAYSPEEDUPGRADE) + .value("RESEARCH_WARPGATE", sc2::ABILITY_ID::RESEARCH_WARPGATE) + .value("RESEARCH_ZERGFLYERARMOR", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMOR) + .value("RESEARCH_ZERGFLYERARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL1) + .value("RESEARCH_ZERGFLYERARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL2) + .value("RESEARCH_ZERGFLYERARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL3) + .value("RESEARCH_ZERGFLYERATTACK", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACK) + .value("RESEARCH_ZERGFLYERATTACKLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL1) + .value("RESEARCH_ZERGFLYERATTACKLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL2) + .value("RESEARCH_ZERGFLYERATTACKLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL3) + .value("RESEARCH_ZERGGROUNDARMOR", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMOR) + .value("RESEARCH_ZERGGROUNDARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL1) + .value("RESEARCH_ZERGGROUNDARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL2) + .value("RESEARCH_ZERGGROUNDARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL3) + .value("RESEARCH_ZERGLINGADRENALGLANDS", sc2::ABILITY_ID::RESEARCH_ZERGLINGADRENALGLANDS) + .value("RESEARCH_ZERGLINGMETABOLICBOOST", sc2::ABILITY_ID::RESEARCH_ZERGLINGMETABOLICBOOST) + .value("RESEARCH_ZERGMELEEWEAPONS", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONS) + .value("RESEARCH_ZERGMELEEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL1) + .value("RESEARCH_ZERGMELEEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL2) + .value("RESEARCH_ZERGMELEEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL3) + .value("RESEARCH_ZERGMISSILEWEAPONS", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONS) + .value("RESEARCH_ZERGMISSILEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL1) + .value("RESEARCH_ZERGMISSILEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL2) + .value("RESEARCH_ZERGMISSILEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL3) + .value("RESTORESHIELDS", sc2::ABILITY_ID::RESTORESHIELDS) + .value("ROGUEGHOSTCLOAK_CLOAKOFF", sc2::ABILITY_ID::ROGUEGHOSTCLOAK_CLOAKOFF) + .value("ROGUEGHOSTCLOAK_CLOAKONSPECTRE", sc2::ABILITY_ID::ROGUEGHOSTCLOAK_CLOAKONSPECTRE) + .value("SALVAGEBANELINGREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEBANELINGREFUND_SALVAGE) + .value("SALVAGEBANELING_SALVAGE", sc2::ABILITY_ID::SALVAGEBANELING_SALVAGE) + .value("SALVAGEBUNKERREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEBUNKERREFUND_SALVAGE) + .value("SALVAGEBUNKER_SALVAGE", sc2::ABILITY_ID::SALVAGEBUNKER_SALVAGE) + .value("SALVAGEDRONEREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEDRONEREFUND_SALVAGE) + .value("SALVAGEDRONE_SALVAGE", sc2::ABILITY_ID::SALVAGEDRONE_SALVAGE) + .value("SALVAGEHYDRALISKREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEHYDRALISKREFUND_SALVAGE) + .value("SALVAGEHYDRALISK_SALVAGE", sc2::ABILITY_ID::SALVAGEHYDRALISK_SALVAGE) + .value("SALVAGEINFESTORREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEINFESTORREFUND_SALVAGE) + .value("SALVAGEINFESTOR_SALVAGE", sc2::ABILITY_ID::SALVAGEINFESTOR_SALVAGE) + .value("SALVAGEQUEENREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEQUEENREFUND_SALVAGE) + .value("SALVAGEQUEEN_SALVAGE", sc2::ABILITY_ID::SALVAGEQUEEN_SALVAGE) + .value("SALVAGEROACHREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEROACHREFUND_SALVAGE) + .value("SALVAGEROACH_SALVAGE", sc2::ABILITY_ID::SALVAGEROACH_SALVAGE) + .value("SALVAGESWARMHOSTREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGESWARMHOSTREFUND_SALVAGE) + .value("SALVAGESWARMHOST_SALVAGE", sc2::ABILITY_ID::SALVAGESWARMHOST_SALVAGE) + .value("SALVAGEULTRALISKREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEULTRALISKREFUND_SALVAGE) + .value("SALVAGEULTRALISK_SALVAGE", sc2::ABILITY_ID::SALVAGEULTRALISK_SALVAGE) + .value("SALVAGEZERGLINGREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEZERGLINGREFUND_SALVAGE) + .value("SALVAGEZERGLING_SALVAGE", sc2::ABILITY_ID::SALVAGEZERGLING_SALVAGE) + .value("SAPSTRUCTURE", sc2::ABILITY_ID::SAPSTRUCTURE) + .value("SCRYER", sc2::ABILITY_ID::SCRYER) + .value("SECURITYGATEDIAGONALBLURLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATEDIAGONALBLURLOWERED_GATEOPEN) + .value("SECURITYGATEDIAGONALBLUR_GATECLOSE", sc2::ABILITY_ID::SECURITYGATEDIAGONALBLUR_GATECLOSE) + .value("SECURITYGATEDIAGONALULBRLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATEDIAGONALULBRLOWERED_GATEOPEN) + .value("SECURITYGATEDIAGONALULBR_GATECLOSE", sc2::ABILITY_ID::SECURITYGATEDIAGONALULBR_GATECLOSE) + .value("SECURITYGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN) + .value("SECURITYGATESTRAIGHTHORIZONTALBF_GATECLOSE", sc2::ABILITY_ID::SECURITYGATESTRAIGHTHORIZONTALBF_GATECLOSE) + .value("SECURITYGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN) + .value("SECURITYGATESTRAIGHTHORIZONTAL_GATECLOSE", sc2::ABILITY_ID::SECURITYGATESTRAIGHTHORIZONTAL_GATECLOSE) + .value("SECURITYGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN) + .value("SECURITYGATESTRAIGHTVERTICALLF_GATECLOSE", sc2::ABILITY_ID::SECURITYGATESTRAIGHTVERTICALLF_GATECLOSE) + .value("SECURITYGATESTRAIGHTVERTICALLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATESTRAIGHTVERTICALLOWERED_GATEOPEN) + .value("SECURITYGATESTRAIGHTVERTICAL_GATECLOSE", sc2::ABILITY_ID::SECURITYGATESTRAIGHTVERTICAL_GATECLOSE) + .value("SELENDISHANGAR_INTERCEPTOR", sc2::ABILITY_ID::SELENDISHANGAR_INTERCEPTOR) + .value("SELFREPAIR", sc2::ABILITY_ID::SELFREPAIR) + .value("SELFREPAIR_CANCEL", sc2::ABILITY_ID::SELFREPAIR_CANCEL) + .value("SENTRYGUNBURROW_BURROWTURRET", sc2::ABILITY_ID::SENTRYGUNBURROW_BURROWTURRET) + .value("SENTRYGUNUNBURROW_UNBURROWTURRET", sc2::ABILITY_ID::SENTRYGUNUNBURROW_UNBURROWTURRET) + .value("SHAKURASLIGHTBRIDGENE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE10OUT_BRIDGEEXTEND) + .value("SHAKURASLIGHTBRIDGENE10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW12OUT_BRIDGEEXTEND) + .value("PORTCITY_BRIDGE_UNITNW12_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE10_BRIDGERETRACT) + .value("SHAKURASLIGHTBRIDGENE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE12OUT_BRIDGEEXTEND) + .value("SHAKURASLIGHTBRIDGENE12_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE12_BRIDGERETRACT) + .value("SHAKURASLIGHTBRIDGENE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE8OUT_BRIDGEEXTEND) + .value("SHAKURASLIGHTBRIDGENE8_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE8_BRIDGERETRACT) + .value("SHAKURASLIGHTBRIDGENW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW10OUT_BRIDGEEXTEND) + .value("SHAKURASLIGHTBRIDGENW10_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW10_BRIDGERETRACT) + .value("SHAKURASLIGHTBRIDGENW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW12OUT_BRIDGEEXTEND) + .value("SHAKURASLIGHTBRIDGENW12_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW12_BRIDGERETRACT) + .value("SHAKURASLIGHTBRIDGENW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW8OUT_BRIDGEEXTEND) + .value("SHAKURASLIGHTBRIDGENW8_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW8_BRIDGERETRACT) + .value("SINGLERECALL", sc2::ABILITY_ID::SINGLERECALL) + .value("SIPHON", sc2::ABILITY_ID::SIPHON) + .value("SIPHON_CANCEL", sc2::ABILITY_ID::SIPHON_CANCEL) + .value("SLAYNELEMENTALGRAB", sc2::ABILITY_ID::SLAYNELEMENTALGRAB) + .value("SMART", sc2::ABILITY_ID::SMART) + .value("SNIPE", sc2::ABILITY_ID::SNIPE) + .value("SNIPEDOT", sc2::ABILITY_ID::SNIPEDOT) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT10OUT_BRIDGEEXTEND) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT10_BRIDGERETRACT", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT10_BRIDGERETRACT) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8OUT_BRIDGEEXTEND) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8_BRIDGERETRACT", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8_BRIDGERETRACT) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT10OUT_BRIDGEEXTEND) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT10_BRIDGERETRACT", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT10_BRIDGERETRACT) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8OUT_BRIDGEEXTEND) + .value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8_BRIDGERETRACT", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8_BRIDGERETRACT) + .value("SOULCHANNEL_CANCEL", sc2::ABILITY_ID::SOULCHANNEL_CANCEL) + .value("SPAWNINFESTEDTERRAN_LOCUSTMP", sc2::ABILITY_ID::SPAWNINFESTEDTERRAN_LOCUSTMP) + .value("SPECOPSDROPSHIPTRANSPORT_MEDIVACLOAD", sc2::ABILITY_ID::SPECOPSDROPSHIPTRANSPORT_MEDIVACLOAD) + .value("SPECOPSDROPSHIPTRANSPORT_MEDIVACUNLOADALL", sc2::ABILITY_ID::SPECOPSDROPSHIPTRANSPORT_MEDIVACUNLOADALL) + .value("SPECTREHOLDFIRE", sc2::ABILITY_ID::SPECTREHOLDFIRE) + .value("SPECTRENUKESILOARMMAGAZINE_SPECTRENUKEARM", sc2::ABILITY_ID::SPECTRENUKESILOARMMAGAZINE_SPECTRENUKEARM) + .value("SPECTRENUKE_CANCEL", sc2::ABILITY_ID::SPECTRENUKE_CANCEL) + .value("SPECTRENUKE_SPECTRENUKECALLDOWN", sc2::ABILITY_ID::SPECTRENUKE_SPECTRENUKECALLDOWN) + .value("SPECTRESHIELD", sc2::ABILITY_ID::SPECTRESHIELD) + .value("SPECTREWEAPONSFREE_WEAPONSFREE", sc2::ABILITY_ID::SPECTREWEAPONSFREE_WEAPONSFREE) + .value("SPINECRAWLERUPROOT_CANCEL", sc2::ABILITY_ID::SPINECRAWLERUPROOT_CANCEL) + .value("SPORECRAWLERUPROOT_CANCEL", sc2::ABILITY_ID::SPORECRAWLERUPROOT_CANCEL) + .value("SS_BATTLECRUISERHUNTERSEEKERATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_BATTLECRUISERHUNTERSEEKERATTACK_SS_SHOOTING) + .value("SS_BATTLECRUISERMISSILEATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_BATTLECRUISERMISSILEATTACK_SS_SHOOTING) + .value("SS_CARRIERBOSSATTACKLAUNCH_SS_SHOOTING", sc2::ABILITY_ID::SS_CARRIERBOSSATTACKLAUNCH_SS_SHOOTING) + .value("SS_CARRIERBOSSATTACKTARGET_SS_SHOOTING", sc2::ABILITY_ID::SS_CARRIERBOSSATTACKTARGET_SS_SHOOTING) + .value("SS_CARRIERSPAWNINTERCEPTOR", sc2::ABILITY_ID::SS_CARRIERSPAWNINTERCEPTOR) + .value("SS_CORRUPTORATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_CORRUPTORATTACK_SS_SHOOTING) + .value("SS_FIGHTERBOMB", sc2::ABILITY_ID::SS_FIGHTERBOMB) + .value("SS_FIGHTERSHOOTING_SS_SHOOTING", sc2::ABILITY_ID::SS_FIGHTERSHOOTING_SS_SHOOTING) + .value("SS_INTERCEPTORATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_INTERCEPTORATTACK_SS_SHOOTING) + .value("SS_LEVIATHANSPAWNBOMBS", sc2::ABILITY_ID::SS_LEVIATHANSPAWNBOMBS) + .value("SS_LEVIATHANTENTACLEATTACKL1", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKL1) + .value("SS_LEVIATHANTENTACLEATTACKL1NODELAY", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKL1NODELAY) + .value("SS_LEVIATHANTENTACLEATTACKL2", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKL2) + .value("SS_LEVIATHANTENTACLEATTACKL2NODELAY", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKL2NODELAY) + .value("SS_LEVIATHANTENTACLEATTACKR1", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKR1) + .value("SS_LEVIATHANTENTACLEATTACKR1NODELAY", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKR1NODELAY) + .value("SS_LEVIATHANTENTACLEATTACKR2", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKR2) + .value("SS_LEVIATHANTENTACLEATTACKR2NODELAY", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKR2NODELAY) + .value("SS_PHOENIXSHOOTING_SS_SHOOTING", sc2::ABILITY_ID::SS_PHOENIXSHOOTING_SS_SHOOTING) + .value("SS_SCIENCEVESSELATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_SCIENCEVESSELATTACK_SS_SHOOTING) + .value("SS_SCIENCEVESSELTELEPORT_ZERATULBLINK", sc2::ABILITY_ID::SS_SCIENCEVESSELTELEPORT_ZERATULBLINK) + .value("SS_SCOUTATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_SCOUTATTACK_SS_SHOOTING) + .value("SS_SWARMGUARDIANATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_SWARMGUARDIANATTACK_SS_SHOOTING) + .value("SS_TERRATRONBEAMATTACK", sc2::ABILITY_ID::SS_TERRATRONBEAMATTACK) + .value("SS_TERRATRONSAWATTACK", sc2::ABILITY_ID::SS_TERRATRONSAWATTACK) + .value("SS_WRAITHATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_WRAITHATTACK_SS_SHOOTING) + .value("STARPORTREACTORMORPH_REACTOR", sc2::ABILITY_ID::STARPORTREACTORMORPH_REACTOR) + .value("STARPORTTECHLABMORPH_TECHLABSTARPORT", sc2::ABILITY_ID::STARPORTTECHLABMORPH_TECHLABSTARPORT) + .value("STARPORTTECHREACTORMORPH_TECHLABSTARPORT", sc2::ABILITY_ID::STARPORTTECHREACTORMORPH_TECHLABSTARPORT) + .value("STARTCOLONISTVEHICLE", sc2::ABILITY_ID::STARTCOLONISTVEHICLE) + .value("STOP", sc2::ABILITY_ID::STOP) + .value("STOPPROTOSSBUILDING_CHEER", sc2::ABILITY_ID::STOPPROTOSSBUILDING_CHEER) + .value("STOPPROTOSSBUILDING_DANCE", sc2::ABILITY_ID::STOPPROTOSSBUILDING_DANCE) + .value("STOPPROTOSSBUILDING_HOLDFIRE", sc2::ABILITY_ID::STOPPROTOSSBUILDING_HOLDFIRE) + .value("STOP_BATTLECRUISER", sc2::ABILITY_ID::STOP_BATTLECRUISER) + .value("STOP_BUILDING", sc2::ABILITY_ID::STOP_BUILDING) + .value("STOP_CHEER", sc2::ABILITY_ID::STOP_CHEER) + .value("STOP_DANCE", sc2::ABILITY_ID::STOP_DANCE) + .value("STOP_HOLDFIRESPECIAL", sc2::ABILITY_ID::STOP_HOLDFIRESPECIAL) + .value("STOP_REDIRECT", sc2::ABILITY_ID::STOP_REDIRECT) + .value("STOP_STOP", sc2::ABILITY_ID::STOP_STOP) + .value("SUMMONMERCENARIESPH_HIREKELMORIANMINERSPH", sc2::ABILITY_ID::SUMMONMERCENARIESPH_HIREKELMORIANMINERSPH) + .value("SUMMONMERCENARIES_HIREDEVILDOGS", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREDEVILDOGS) + .value("SUMMONMERCENARIES_HIREDUKESREVENGE", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREDUKESREVENGE) + .value("SUMMONMERCENARIES_HIREDUSKWING", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREDUSKWING) + .value("SUMMONMERCENARIES_HIREHAMMERSECURITIES", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREHAMMERSECURITIES) + .value("SUMMONMERCENARIES_HIREHELSANGELS", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREHELSANGELS) + .value("SUMMONMERCENARIES_HIREKELMORIANMINERS", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREKELMORIANMINERS) + .value("SUMMONMERCENARIES_HIRESIEGEBREAKERS", sc2::ABILITY_ID::SUMMONMERCENARIES_HIRESIEGEBREAKERS) + .value("SUMMONMERCENARIES_HIRESPARTANCOMPANY", sc2::ABILITY_ID::SUMMONMERCENARIES_HIRESPARTANCOMPANY) + .value("SWARMHOSTSPAWNLOCUSTS_LOCUSTMP", sc2::ABILITY_ID::SWARMHOSTSPAWNLOCUSTS_LOCUSTMP) + .value("TALDARIMVORTEX_VORTEX", sc2::ABILITY_ID::TALDARIMVORTEX_VORTEX) + .value("TAUNT", sc2::ABILITY_ID::TAUNT) + .value("TAURENOUTHOUSELIFTOFF_TAURENOUTHOUSEFLY", sc2::ABILITY_ID::TAURENOUTHOUSELIFTOFF_TAURENOUTHOUSEFLY) + .value("TAURENOUTHOUSETRANSPORT_LOADTAURENOUTHOUSE", sc2::ABILITY_ID::TAURENOUTHOUSETRANSPORT_LOADTAURENOUTHOUSE) + .value("TAURENOUTHOUSETRANSPORT_UNLOADTAURENOUTHOUSE", sc2::ABILITY_ID::TAURENOUTHOUSETRANSPORT_UNLOADTAURENOUTHOUSE) + .value("TAURENSTIMPACK_STIM", sc2::ABILITY_ID::TAURENSTIMPACK_STIM) + .value("TEMPLEDOORDOWN", sc2::ABILITY_ID::TEMPLEDOORDOWN) + .value("TEMPLEDOORDOWNURDL", sc2::ABILITY_ID::TEMPLEDOORDOWNURDL) + .value("TEMPLEDOORUP", sc2::ABILITY_ID::TEMPLEDOORUP) + .value("TEMPLEDOORUPURDL", sc2::ABILITY_ID::TEMPLEDOORUPURDL) + .value("TEMPORALRIFT", sc2::ABILITY_ID::TEMPORALRIFT) + .value("TERRANBUILDDROP_CANCEL", sc2::ABILITY_ID::TERRANBUILDDROP_CANCEL) + .value("TERRANBUILDDROP_SUPPLYDEPOTDROP", sc2::ABILITY_ID::TERRANBUILDDROP_SUPPLYDEPOTDROP) + .value("TESTHERODEBUGMISSILEABILITY", sc2::ABILITY_ID::TESTHERODEBUGMISSILEABILITY) + .value("TESTHERODEBUGTRACKINGABILITY", sc2::ABILITY_ID::TESTHERODEBUGTRACKINGABILITY) + .value("TESTHERODEBUGTRACKINGABILITY_CANCEL", sc2::ABILITY_ID::TESTHERODEBUGTRACKINGABILITY_CANCEL) + .value("TESTHEROGRAB_GRABZERGLING", sc2::ABILITY_ID::TESTHEROGRAB_GRABZERGLING) + .value("TESTHEROTHROW_THROWZERGLING", sc2::ABILITY_ID::TESTHEROTHROW_THROWZERGLING) + .value("TESTINTERACT_DESIGNATE", sc2::ABILITY_ID::TESTINTERACT_DESIGNATE) + .value("TESTLEARN", sc2::ABILITY_ID::TESTLEARN) + .value("TESTREVIVE_SCV", sc2::ABILITY_ID::TESTREVIVE_SCV) + .value("TESTZERG_CANCEL", sc2::ABILITY_ID::TESTZERG_CANCEL) + .value("THEMOROSDEVICE", sc2::ABILITY_ID::THEMOROSDEVICE) + .value("THORAPMODE_CANCEL", sc2::ABILITY_ID::THORAPMODE_CANCEL) + .value("THORREBORN_CANCEL", sc2::ABILITY_ID::THORREBORN_CANCEL) + .value("THORREBORN_THOR", sc2::ABILITY_ID::THORREBORN_THOR) + .value("THORWRECKAGE_THOR", sc2::ABILITY_ID::THORWRECKAGE_THOR) + .value("TIMESTOP", sc2::ABILITY_ID::TIMESTOP) + .value("TIMESTOP_CANCEL", sc2::ABILITY_ID::TIMESTOP_CANCEL) + .value("TORNADOMISSILE", sc2::ABILITY_ID::TORNADOMISSILE) + .value("TOSSGRENADE", sc2::ABILITY_ID::TOSSGRENADE) + .value("TRAINWARP_ADEPT", sc2::ABILITY_ID::TRAINWARP_ADEPT) + .value("TRAINWARP_DARKTEMPLAR", sc2::ABILITY_ID::TRAINWARP_DARKTEMPLAR) + .value("TRAINWARP_HIGHTEMPLAR", sc2::ABILITY_ID::TRAINWARP_HIGHTEMPLAR) + .value("TRAINWARP_SENTRY", sc2::ABILITY_ID::TRAINWARP_SENTRY) + .value("TRAINWARP_STALKER", sc2::ABILITY_ID::TRAINWARP_STALKER) + .value("TRAINWARP_ZEALOT", sc2::ABILITY_ID::TRAINWARP_ZEALOT) + .value("TRAIN_ADEPT", sc2::ABILITY_ID::TRAIN_ADEPT) + .value("TRAIN_ARCHON", sc2::ABILITY_ID::TRAIN_ARCHON) + .value("TRAIN_BANSHEE", sc2::ABILITY_ID::TRAIN_BANSHEE) + .value("TRAIN_BATTLECRUISER", sc2::ABILITY_ID::TRAIN_BATTLECRUISER) + .value("TRAIN_CARRIER", sc2::ABILITY_ID::TRAIN_CARRIER) + .value("TRAIN_COLOSSUS", sc2::ABILITY_ID::TRAIN_COLOSSUS) + .value("TRAIN_CORRUPTOR", sc2::ABILITY_ID::TRAIN_CORRUPTOR) + .value("TRAIN_CYCLONE", sc2::ABILITY_ID::TRAIN_CYCLONE) + .value("TRAIN_DARKTEMPLAR", sc2::ABILITY_ID::TRAIN_DARKTEMPLAR) + .value("TRAIN_DISRUPTOR", sc2::ABILITY_ID::TRAIN_DISRUPTOR) + .value("TRAIN_DRONE", sc2::ABILITY_ID::TRAIN_DRONE) + .value("TRAIN_GHOST", sc2::ABILITY_ID::TRAIN_GHOST) + .value("TRAIN_HELLBAT", sc2::ABILITY_ID::TRAIN_HELLBAT) + .value("TRAIN_HELLION", sc2::ABILITY_ID::TRAIN_HELLION) + .value("TRAIN_HIGHTEMPLAR", sc2::ABILITY_ID::TRAIN_HIGHTEMPLAR) + .value("TRAIN_HYDRALISK", sc2::ABILITY_ID::TRAIN_HYDRALISK) + .value("TRAIN_IMMORTAL", sc2::ABILITY_ID::TRAIN_IMMORTAL) + .value("TRAIN_INFESTEDABOMINATION", sc2::ABILITY_ID::TRAIN_INFESTEDABOMINATION) + .value("TRAIN_INFESTEDCIVILIAN", sc2::ABILITY_ID::TRAIN_INFESTEDCIVILIAN) + .value("TRAIN_INFESTEDTERRANCAMPAIGN", sc2::ABILITY_ID::TRAIN_INFESTEDTERRANCAMPAIGN) + .value("TRAIN_INFESTOR", sc2::ABILITY_ID::TRAIN_INFESTOR) + .value("TRAIN_LIBERATOR", sc2::ABILITY_ID::TRAIN_LIBERATOR) + .value("TRAIN_MARAUDER", sc2::ABILITY_ID::TRAIN_MARAUDER) + .value("TRAIN_MARINE", sc2::ABILITY_ID::TRAIN_MARINE) + .value("TRAIN_MEDIVAC", sc2::ABILITY_ID::TRAIN_MEDIVAC) + .value("TRAIN_MOTHERSHIP", sc2::ABILITY_ID::TRAIN_MOTHERSHIP) + .value("TRAIN_MOTHERSHIPCORE", sc2::ABILITY_ID::TRAIN_MOTHERSHIPCORE) + .value("TRAIN_MUTALISK", sc2::ABILITY_ID::TRAIN_MUTALISK) + .value("TRAIN_OBSERVER", sc2::ABILITY_ID::TRAIN_OBSERVER) + .value("TRAIN_ORACLE", sc2::ABILITY_ID::TRAIN_ORACLE) + .value("TRAIN_OVERLORD", sc2::ABILITY_ID::TRAIN_OVERLORD) + .value("TRAIN_PHOENIX", sc2::ABILITY_ID::TRAIN_PHOENIX) + .value("TRAIN_PROBE", sc2::ABILITY_ID::TRAIN_PROBE) + .value("TRAIN_QUEEN", sc2::ABILITY_ID::TRAIN_QUEEN) + .value("SPECTREHOLDFIRE", sc2::ABILITY_ID::SPECTREHOLDFIRE) + .value("TRAIN_RAVEN", sc2::ABILITY_ID::TRAIN_RAVEN) + .value("TRAIN_REAPER", sc2::ABILITY_ID::TRAIN_REAPER) + .value("TRAIN_ROACH", sc2::ABILITY_ID::TRAIN_ROACH) + .value("TRAIN_SCV", sc2::ABILITY_ID::TRAIN_SCV) + .value("TRAIN_SENTRY", sc2::ABILITY_ID::TRAIN_SENTRY) + .value("TRAIN_SIEGETANK", sc2::ABILITY_ID::TRAIN_SIEGETANK) + .value("TRAIN_STALKER", sc2::ABILITY_ID::TRAIN_STALKER) + .value("TRAIN_SWARMHOST", sc2::ABILITY_ID::TRAIN_SWARMHOST) + .value("TRAIN_TEMPEST", sc2::ABILITY_ID::TRAIN_TEMPEST) + .value("TRAIN_THOR", sc2::ABILITY_ID::TRAIN_THOR) + .value("TRAIN_ULTRALISK", sc2::ABILITY_ID::TRAIN_ULTRALISK) + .value("TRAIN_VIKINGFIGHTER", sc2::ABILITY_ID::TRAIN_VIKINGFIGHTER) + .value("TRAIN_VIPER", sc2::ABILITY_ID::TRAIN_VIPER) + .value("TRAIN_VOIDRAY", sc2::ABILITY_ID::TRAIN_VOIDRAY) + .value("TRAIN_WARPINMOHANDAR", sc2::ABILITY_ID::TRAIN_WARPINMOHANDAR) + .value("TRAIN_WARPINSCOUT", sc2::ABILITY_ID::TRAIN_WARPINSCOUT) + .value("TRAIN_WARPINSELENDIS", sc2::ABILITY_ID::TRAIN_WARPINSELENDIS) + .value("TRAIN_WARPINURUN", sc2::ABILITY_ID::TRAIN_WARPINURUN) + .value("TRAIN_WARPINZERATUL", sc2::ABILITY_ID::TRAIN_WARPINZERATUL) + .value("TRAIN_WARPPRISM", sc2::ABILITY_ID::TRAIN_WARPPRISM) + .value("TRAIN_WIDOWMINE", sc2::ABILITY_ID::TRAIN_WIDOWMINE) + .value("TRAIN_ZEALOT", sc2::ABILITY_ID::TRAIN_ZEALOT) + .value("TRAIN_ZERGLING", sc2::ABILITY_ID::TRAIN_ZERGLING) + .value("TRANSPORTMODE_CANCEL", sc2::ABILITY_ID::TRANSPORTMODE_CANCEL) + .value("TRANSPORTTRUCKTRANSPORT_TRANSPORTTRUCKLOAD", sc2::ABILITY_ID::TRANSPORTTRUCKTRANSPORT_TRANSPORTTRUCKLOAD) + .value("TRANSPORTTRUCKTRANSPORT_TRANSPORTTRUCKUNLOADALL", sc2::ABILITY_ID::TRANSPORTTRUCKTRANSPORT_TRANSPORTTRUCKUNLOADALL) + .value("TYCHUS03OMEGASTORM_OMEGASTORM", sc2::ABILITY_ID::TYCHUS03OMEGASTORM_OMEGASTORM) + .value("ULTRALISKWEAPONCOOLDOWN", sc2::ABILITY_ID::ULTRALISKWEAPONCOOLDOWN) + .value("ULTRASONICPULSE", sc2::ABILITY_ID::ULTRASONICPULSE) + .value("UNLOADALL", sc2::ABILITY_ID::UNLOADALL) + .value("UNLOADALLAT", sc2::ABILITY_ID::UNLOADALLAT) + .value("UNLOADALLAT_MEDIVAC", sc2::ABILITY_ID::UNLOADALLAT_MEDIVAC) + .value("UNLOADALLAT_OVERLORD", sc2::ABILITY_ID::UNLOADALLAT_OVERLORD) + .value("UNLOADALLAT_WARPPRISM", sc2::ABILITY_ID::UNLOADALLAT_WARPPRISM) + .value("UNLOADALL_BUNKER", sc2::ABILITY_ID::UNLOADALL_BUNKER) + .value("UNLOADALL_COMMANDCENTER", sc2::ABILITY_ID::UNLOADALL_COMMANDCENTER) + .value("UNLOADALL_NYDASNETWORK", sc2::ABILITY_ID::UNLOADALL_NYDASNETWORK) + .value("UNLOADALL_NYDUSWORM", sc2::ABILITY_ID::UNLOADALL_NYDUSWORM) + .value("UNLOADALL_WARPPRISM", sc2::ABILITY_ID::UNLOADALL_WARPPRISM) + .value("UNLOADUNIT", sc2::ABILITY_ID::UNLOADUNIT) + .value("UNLOADUNIT_BUNKER", sc2::ABILITY_ID::UNLOADUNIT_BUNKER) + .value("UNLOADUNIT_COMMANDCENTER", sc2::ABILITY_ID::UNLOADUNIT_COMMANDCENTER) + .value("UNLOADUNIT_MEDIVAC", sc2::ABILITY_ID::UNLOADUNIT_MEDIVAC) + .value("UNLOADUNIT_NYDASNETWORK", sc2::ABILITY_ID::UNLOADUNIT_NYDASNETWORK) + .value("UNLOADUNIT_OVERLORD", sc2::ABILITY_ID::UNLOADUNIT_OVERLORD) + .value("UNLOADUNIT_WARPPRISM", sc2::ABILITY_ID::UNLOADUNIT_WARPPRISM) + .value("VAL03QUEENOFBLADESBURROW_BURROWDOWN", sc2::ABILITY_ID::VAL03QUEENOFBLADESBURROW_BURROWDOWN) + .value("VAL03QUEENOFBLADESDEEPTUNNEL_DEEPTUNNEL", sc2::ABILITY_ID::VAL03QUEENOFBLADESDEEPTUNNEL_DEEPTUNNEL) + .value("VAL03QUEENOFBLADESUNBURROW_BURROWUP", sc2::ABILITY_ID::VAL03QUEENOFBLADESUNBURROW_BURROWUP) + .value("VOIDMPIMMORTALREVIVEDEATH_IMMORTAL", sc2::ABILITY_ID::VOIDMPIMMORTALREVIVEDEATH_IMMORTAL) + .value("VOIDMPIMMORTALREVIVEREBUILD_IMMORTAL", sc2::ABILITY_ID::VOIDMPIMMORTALREVIVEREBUILD_IMMORTAL) + .value("VOIDSEEKERPHASEMINEBLAST_PHASEMINEBLAST", sc2::ABILITY_ID::VOIDSEEKERPHASEMINEBLAST_PHASEMINEBLAST) + .value("VOIDSEEKERTRANSPORT_MEDIVACLOAD", sc2::ABILITY_ID::VOIDSEEKERTRANSPORT_MEDIVACLOAD) + .value("VOIDSEEKERTRANSPORT_MEDIVACUNLOADALL", sc2::ABILITY_ID::VOIDSEEKERTRANSPORT_MEDIVACUNLOADALL) + .value("VOIDSIPHON", sc2::ABILITY_ID::VOIDSIPHON) + .value("VOIDSWARMHOSTSPAWNLOCUST", sc2::ABILITY_ID::VOIDSWARMHOSTSPAWNLOCUST) + .value("VOODOOSHIELD", sc2::ABILITY_ID::VOODOOSHIELD) + .value("VORTEX", sc2::ABILITY_ID::VORTEX) + .value("VORTEXPURIFIER_VORTEX", sc2::ABILITY_ID::VORTEXPURIFIER_VORTEX) + .value("VULTUREQUEUE3_CANCEL", sc2::ABILITY_ID::VULTUREQUEUE3_CANCEL) + .value("VULTUREQUEUE3_CANCELSLOT", sc2::ABILITY_ID::VULTUREQUEUE3_CANCELSLOT) + .value("VULTURESPIDERMINES_SPIDERMINE", sc2::ABILITY_ID::VULTURESPIDERMINES_SPIDERMINE) + .value("WARPABLE_CANCEL", sc2::ABILITY_ID::WARPABLE_CANCEL) + .value("WIDOWMINEBURROW_CANCEL", sc2::ABILITY_ID::WIDOWMINEBURROW_CANCEL) + .value("WORMHOLETRANSIT", sc2::ABILITY_ID::WORMHOLETRANSIT) + .value("WRAITHCLOAK_CLOAKOFF", sc2::ABILITY_ID::WRAITHCLOAK_CLOAKOFF) + .value("WRECKINGCREWASSAULTMODE_ASSAULTMODE", sc2::ABILITY_ID::WRECKINGCREWASSAULTMODE_ASSAULTMODE) + .value("WRECKINGCREWFIGHTERMODE_FIGHTERMODE", sc2::ABILITY_ID::WRECKINGCREWFIGHTERMODE_FIGHTERMODE) + .value("XELNAGAHEALINGSHRINE", sc2::ABILITY_ID::XELNAGAHEALINGSHRINE) + .value("XELNAGA_CAVERNS_DOOREOPENED_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOOREOPENED_XELNAGA_CAVERNS_DOORDEFAULTCLOSE) + .value("XELNAGA_CAVERNS_DOORE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE) + .value("XELNAGA_CAVERNS_DOORNEOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORNEOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN) + .value("XELNAGA_CAVERNS_DOORNE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORNE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE) + .value("XELNAGA_CAVERNS_DOORNOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORNWOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN) + .value("XELNAGA_CAVERNS_DOORNW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORNW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE) + .value("XELNAGA_CAVERNS_DOORN_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORN_XELNAGA_CAVERNS_DOORDEFAULTCLOSE) + .value("XELNAGA_CAVERNS_DOORSEOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORSEOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN) + .value("XELNAGA_CAVERNS_DOORSE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORSE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE) + .value("XELNAGA_CAVERNS_DOORSOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORSOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN) + .value("XELNAGA_CAVERNS_DOORSWOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORSWOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN) + .value("XELNAGA_CAVERNS_DOORSW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORSW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE) + .value("XELNAGA_CAVERNS_DOORS_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORS_XELNAGA_CAVERNS_DOORDEFAULTCLOSE) + .value("XELNAGA_CAVERNS_DOORWOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORWOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN) + .value("XELNAGA_CAVERNS_DOORW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH10OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH10_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH10_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH12OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH12_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH12_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH8OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEH8_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH8_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE10OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE10_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE10_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE12OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE12_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE12_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE8OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENE8_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE8_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW10OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW10_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW10_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW12OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW12_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW12_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW8OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGENW8_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW8_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV10OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV10_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV10_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV12OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV12_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV12_BRIDGERETRACT) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV8OUT_BRIDGEEXTEND) + .value("XELNAGA_CAVERNS_FLOATING_BRIDGEV8_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV8_BRIDGERETRACT) + .value("ZERATULBLINK", sc2::ABILITY_ID::ZERATULBLINK) + .value("ZERATULSTUN", sc2::ABILITY_ID::ZERATULSTUN) + .value("_250MMSTRIKECANNONS", sc2::ABILITY_ID::_250MMSTRIKECANNONS) + .value("_250MMSTRIKECANNONS_CANCEL", sc2::ABILITY_ID::_250MMSTRIKECANNONS_CANCEL) + .value("_330MMBARRAGECANNONS", sc2::ABILITY_ID::_330MMBARRAGECANNONS) + .value("_330MMBARRAGECANNONS_CANCEL", sc2::ABILITY_ID::_330MMBARRAGECANNONS_CANCEL); py::enum_<sc2::UPGRADE_ID>(m, "UPGRADE_ID") - .value("INVALID", sc2::UPGRADE_ID::INVALID) - .value("CARRIERLAUNCHSPEEDUPGRADE", sc2::UPGRADE_ID::CARRIERLAUNCHSPEEDUPGRADE) - .value("GLIALRECONSTITUTION", sc2::UPGRADE_ID::GLIALRECONSTITUTION) - .value("TUNNELINGCLAWS", sc2::UPGRADE_ID::TUNNELINGCLAWS) - .value("CHITINOUSPLATING", sc2::UPGRADE_ID::CHITINOUSPLATING) - .value("HISECAUTOTRACKING", sc2::UPGRADE_ID::HISECAUTOTRACKING) - .value("TERRANBUILDINGARMOR", sc2::UPGRADE_ID::TERRANBUILDINGARMOR) - .value("TERRANINFANTRYWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL1) - .value("TERRANINFANTRYWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL2) - .value("TERRANINFANTRYWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL3) - .value("NEOSTEELFRAME", sc2::UPGRADE_ID::NEOSTEELFRAME) - .value("TERRANINFANTRYARMORSLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL1) - .value("TERRANINFANTRYARMORSLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL2) - .value("TERRANINFANTRYARMORSLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL3) - .value("STIMPACK", sc2::UPGRADE_ID::STIMPACK) - .value("SHIELDWALL", sc2::UPGRADE_ID::SHIELDWALL) - .value("PUNISHERGRENADES", sc2::UPGRADE_ID::PUNISHERGRENADES) - .value("HIGHCAPACITYBARRELS", sc2::UPGRADE_ID::HIGHCAPACITYBARRELS) + .value("ABDOMINALFORTITUDE", sc2::UPGRADE_ID::ABDOMINALFORTITUDE) + .value("ADEPTKILLBOUNCE", sc2::UPGRADE_ID::ADEPTKILLBOUNCE) + .value("ADEPTPIERCINGATTACK", sc2::UPGRADE_ID::ADEPTPIERCINGATTACK) + .value("ADEPTSHIELDUPGRADE", sc2::UPGRADE_ID::ADEPTSHIELDUPGRADE) + .value("ADVANCEDCONSTRUCTION", sc2::UPGRADE_ID::ADVANCEDCONSTRUCTION) + .value("ADVANCEDHEALINGAI", sc2::UPGRADE_ID::ADVANCEDHEALINGAI) + .value("ADVANCEDMEDICTRAINING", sc2::UPGRADE_ID::ADVANCEDMEDICTRAINING) + .value("AMPLIFIEDSHIELDING", sc2::UPGRADE_ID::AMPLIFIEDSHIELDING) + .value("ANABOLICSYNTHESIS", sc2::UPGRADE_ID::ANABOLICSYNTHESIS) + .value("ANIONPULSECRYSTALS", sc2::UPGRADE_ID::ANIONPULSECRYSTALS) + .value("ARESCLASSWEAPONSSYSTEM", sc2::UPGRADE_ID::ARESCLASSWEAPONSSYSTEM) + .value("ARESCLASSWEAPONSSYSTEMVIKING", sc2::UPGRADE_ID::ARESCLASSWEAPONSSYSTEMVIKING) + .value("ARMORPIERCINGROCKETS", sc2::UPGRADE_ID::ARMORPIERCINGROCKETS) + .value("AUTOHARVESTER", sc2::UPGRADE_ID::AUTOHARVESTER) + .value("AUXILIARYMEDBOTS", sc2::UPGRADE_ID::AUXILIARYMEDBOTS) + .value("BANELINGBURROWMOVE", sc2::UPGRADE_ID::BANELINGBURROWMOVE) .value("BANSHEECLOAK", sc2::UPGRADE_ID::BANSHEECLOAK) - .value("RAVENCORVIDREACTOR", sc2::UPGRADE_ID::RAVENCORVIDREACTOR) - .value("PERSONALCLOAKING", sc2::UPGRADE_ID::PERSONALCLOAKING) - .value("TERRANVEHICLEWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL1) - .value("TERRANVEHICLEWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL2) - .value("TERRANVEHICLEWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL3) - .value("TERRANSHIPWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL1) - .value("TERRANSHIPWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL2) - .value("TERRANSHIPWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL3) - .value("PROTOSSGROUNDWEAPONSLEVEL1", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL1) - .value("PROTOSSGROUNDWEAPONSLEVEL2", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL2) - .value("PROTOSSGROUNDWEAPONSLEVEL3", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL3) - .value("PROTOSSGROUNDARMORSLEVEL1", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL1) - .value("PROTOSSGROUNDARMORSLEVEL2", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL2) - .value("PROTOSSGROUNDARMORSLEVEL3", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL3) - .value("PROTOSSSHIELDSLEVEL1", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL1) - .value("PROTOSSSHIELDSLEVEL2", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL2) - .value("PROTOSSSHIELDSLEVEL3", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL3) - .value("OBSERVERGRAVITICBOOSTER", sc2::UPGRADE_ID::OBSERVERGRAVITICBOOSTER) - .value("GRAVITICDRIVE", sc2::UPGRADE_ID::GRAVITICDRIVE) - .value("EXTENDEDTHERMALLANCE", sc2::UPGRADE_ID::EXTENDEDTHERMALLANCE) - .value("PSISTORMTECH", sc2::UPGRADE_ID::PSISTORMTECH) - .value("ZERGMELEEWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL1) - .value("ZERGMELEEWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL2) - .value("ZERGMELEEWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL3) - .value("ZERGGROUNDARMORSLEVEL1", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL1) - .value("ZERGGROUNDARMORSLEVEL2", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL2) - .value("ZERGGROUNDARMORSLEVEL3", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL3) - .value("ZERGMISSILEWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL1) - .value("ZERGMISSILEWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL2) - .value("ZERGMISSILEWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL3) - .value("OVERLORDSPEED", sc2::UPGRADE_ID::OVERLORDSPEED) + .value("BANSHEECLOAKEDDAMAGE", sc2::UPGRADE_ID::BANSHEECLOAKEDDAMAGE) + .value("BANSHEESPEED", sc2::UPGRADE_ID::BANSHEESPEED) + .value("BATTLECRUISERBEHEMOTHREACTOR", sc2::UPGRADE_ID::BATTLECRUISERBEHEMOTHREACTOR) + .value("BATTLECRUISERENABLESPECIALIZATIONS", sc2::UPGRADE_ID::BATTLECRUISERENABLESPECIALIZATIONS) + .value("BEARCLAWNOZZLES", sc2::UPGRADE_ID::BEARCLAWNOZZLES) + .value("BLINKTECH", sc2::UPGRADE_ID::BLINKTECH) .value("BURROW", sc2::UPGRADE_ID::BURROW) - .value("ZERGLINGATTACKSPEED", sc2::UPGRADE_ID::ZERGLINGATTACKSPEED) - .value("ZERGLINGMOVEMENTSPEED", sc2::UPGRADE_ID::ZERGLINGMOVEMENTSPEED) - .value("ZERGFLYERWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL1) - .value("ZERGFLYERWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL2) - .value("ZERGFLYERWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL3) - .value("ZERGFLYERARMORSLEVEL1", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL1) - .value("ZERGFLYERARMORSLEVEL2", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL2) - .value("ZERGFLYERARMORSLEVEL3", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL3) - .value("INFESTORENERGYUPGRADE", sc2::UPGRADE_ID::INFESTORENERGYUPGRADE) + .value("BURSTCAPACITORS", sc2::UPGRADE_ID::BURSTCAPACITORS) + .value("CAMPAIGNJOTUNBOOSTERS", sc2::UPGRADE_ID::CAMPAIGNJOTUNBOOSTERS) + .value("CARRIERCARRIERCAPACITY", sc2::UPGRADE_ID::CARRIERCARRIERCAPACITY) + .value("CARRIERLAUNCHSPEEDUPGRADE", sc2::UPGRADE_ID::CARRIERLAUNCHSPEEDUPGRADE) + .value("CARRIERLEASHRANGEUPGRADE", sc2::UPGRADE_ID::CARRIERLEASHRANGEUPGRADE) + .value("CELLULARREACTORS", sc2::UPGRADE_ID::CELLULARREACTORS) .value("CENTRIFICALHOOKS", sc2::UPGRADE_ID::CENTRIFICALHOOKS) - .value("BATTLECRUISERENABLESPECIALIZATIONS", sc2::UPGRADE_ID::BATTLECRUISERENABLESPECIALIZATIONS) - .value("PROTOSSAIRWEAPONSLEVEL1", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL1) - .value("PROTOSSAIRWEAPONSLEVEL2", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL2) - .value("PROTOSSAIRWEAPONSLEVEL3", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL3) - .value("PROTOSSAIRARMORSLEVEL1", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL1) - .value("PROTOSSAIRARMORSLEVEL2", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL2) - .value("PROTOSSAIRARMORSLEVEL3", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL3) - .value("WARPGATERESEARCH", sc2::UPGRADE_ID::WARPGATERESEARCH) + .value("CERBERUSMINES", sc2::UPGRADE_ID::CERBERUSMINES) .value("CHARGE", sc2::UPGRADE_ID::CHARGE) - .value("BLINKTECH", sc2::UPGRADE_ID::BLINKTECH) - .value("PHOENIXRANGEUPGRADE", sc2::UPGRADE_ID::PHOENIXRANGEUPGRADE) - .value("NEURALPARASITE", sc2::UPGRADE_ID::NEURALPARASITE) - .value("TERRANVEHICLEANDSHIPARMORSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL1) - .value("TERRANVEHICLEANDSHIPARMORSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL2) - .value("TERRANVEHICLEANDSHIPARMORSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL3) + .value("CHITINOUSPLATING", sc2::UPGRADE_ID::CHITINOUSPLATING) + .value("CINEMATICMODE", sc2::UPGRADE_ID::CINEMATICMODE) + .value("CLOAKDISTORTIONFIELD", sc2::UPGRADE_ID::CLOAKDISTORTIONFIELD) + .value("CLUSTERBOMB", sc2::UPGRADE_ID::CLUSTERBOMB) + .value("CLUSTERWARHEADS", sc2::UPGRADE_ID::CLUSTERWARHEADS) + .value("COMBATDRUGS", sc2::UPGRADE_ID::COMBATDRUGS) + .value("COMBATSHIELD", sc2::UPGRADE_ID::COMBATSHIELD) + .value("COMMANDCENTERREACTOR", sc2::UPGRADE_ID::COMMANDCENTERREACTOR) + .value("CROSSSPECTRUMDAMPENERS", sc2::UPGRADE_ID::CROSSSPECTRUMDAMPENERS) + .value("CURSORDEBUG", sc2::UPGRADE_ID::CURSORDEBUG) + .value("CYCLONEAIRUPGRADE", sc2::UPGRADE_ID::CYCLONEAIRUPGRADE) + .value("CYCLONELOCKONDAMAGEUPGRADE", sc2::UPGRADE_ID::CYCLONELOCKONDAMAGEUPGRADE) + .value("CYCLONELOCKONRANGEUPGRADE", sc2::UPGRADE_ID::CYCLONELOCKONRANGEUPGRADE) + .value("CYCLONERAPIDFIRELAUNCHERS", sc2::UPGRADE_ID::CYCLONERAPIDFIRELAUNCHERS) + .value("DARKPROTOSS", sc2::UPGRADE_ID::DARKPROTOSS) + .value("DARKTEMPLARBLINKUPGRADE", sc2::UPGRADE_ID::DARKTEMPLARBLINKUPGRADE) + .value("DARKTEMPLARTACTICS", sc2::UPGRADE_ID::DARKTEMPLARTACTICS) + .value("DEFENSIVEMATRIX", sc2::UPGRADE_ID::DEFENSIVEMATRIX) + .value("DEVASTATORMISSILES", sc2::UPGRADE_ID::DEVASTATORMISSILES) + .value("DIGGINGCLAWS", sc2::UPGRADE_ID::DIGGINGCLAWS) + .value("DISTORTIONBLASTERS", sc2::UPGRADE_ID::DISTORTIONBLASTERS) + .value("DISTORTIONSENSORS", sc2::UPGRADE_ID::DISTORTIONSENSORS) + .value("DISTORTIONTHRUSTERS", sc2::UPGRADE_ID::DISTORTIONTHRUSTERS) .value("DRILLCLAWS", sc2::UPGRADE_ID::DRILLCLAWS) - .value("ADEPTPIERCINGATTACK", sc2::UPGRADE_ID::ADEPTPIERCINGATTACK) - .value("MAGFIELDLAUNCHERS", sc2::UPGRADE_ID::MAGFIELDLAUNCHERS) + .value("DUALFUSIONWELDERS", sc2::UPGRADE_ID::DUALFUSIONWELDERS) + .value("DURABLEMATERIALS", sc2::UPGRADE_ID::DURABLEMATERIALS) + .value("DYNAMICPOWERROUTING", sc2::UPGRADE_ID::DYNAMICPOWERROUTING) + .value("EMPTOWER", sc2::UPGRADE_ID::EMPTOWER) + .value("ENERGYSTORAGE", sc2::UPGRADE_ID::ENERGYSTORAGE) + .value("ENHANCEDSHOCKWAVES", sc2::UPGRADE_ID::ENHANCEDSHOCKWAVES) .value("EVOLVEGROOVEDSPINES", sc2::UPGRADE_ID::EVOLVEGROOVEDSPINES) .value("EVOLVEMUSCULARAUGMENTS", sc2::UPGRADE_ID::EVOLVEMUSCULARAUGMENTS) - .value("BANSHEESPEED", sc2::UPGRADE_ID::BANSHEESPEED) - .value("RAVENRECALIBRATEDEXPLOSIVES", sc2::UPGRADE_ID::RAVENRECALIBRATEDEXPLOSIVES) - .value("MEDIVACINCREASESPEEDBOOST", sc2::UPGRADE_ID::MEDIVACINCREASESPEEDBOOST) - .value("LIBERATORAGRANGEUPGRADE", sc2::UPGRADE_ID::LIBERATORAGRANGEUPGRADE) - .value("DARKTEMPLARBLINKUPGRADE", sc2::UPGRADE_ID::DARKTEMPLARBLINKUPGRADE) - .value("SMARTSERVOS", sc2::UPGRADE_ID::SMARTSERVOS) - .value("RAPIDFIRELAUNCHERS", sc2::UPGRADE_ID::RAPIDFIRELAUNCHERS) - .value("ENHANCEDMUNITIONS", sc2::UPGRADE_ID::ENHANCEDMUNITIONS); - + .value("EXPANDEDHULL", sc2::UPGRADE_ID::EXPANDEDHULL) + .value("EXTENDEDTHERMALLANCE", sc2::UPGRADE_ID::EXTENDEDTHERMALLANCE) + .value("EXTRAMINES", sc2::UPGRADE_ID::EXTRAMINES) + .value("FIREBATJUGGERNAUTPLATING", sc2::UPGRADE_ID::FIREBATJUGGERNAUTPLATING) + .value("FIRESUPPRESSIONSYSTEMS", sc2::UPGRADE_ID::FIRESUPPRESSIONSYSTEMS) + .value("FLARERESEARCH", sc2::UPGRADE_ID::FLARERESEARCH) + .value("FLYINGLOCUSTS", sc2::UPGRADE_ID::FLYINGLOCUSTS) + .value("FORTIFIEDBUNKERCARAPACE", sc2::UPGRADE_ID::FORTIFIEDBUNKERCARAPACE) + .value("FULLBORECANISTERAMMO", sc2::UPGRADE_ID::FULLBORECANISTERAMMO) + .value("GHOSTMOEBIUSREACTOR", sc2::UPGRADE_ID::GHOSTMOEBIUSREACTOR) + .value("GLIALRECONSTITUTION", sc2::UPGRADE_ID::GLIALRECONSTITUTION) + .value("GRAVITICDRIVE", sc2::UPGRADE_ID::GRAVITICDRIVE) + .value("GRAVITICTHRUSTERS", sc2::UPGRADE_ID::GRAVITICTHRUSTERS) + .value("HAILSTORMMISSILEPODS", sc2::UPGRADE_ID::HAILSTORMMISSILEPODS) + .value("HALOROCKETS", sc2::UPGRADE_ID::HALOROCKETS) + .value("HALTECH", sc2::UPGRADE_ID::HALTECH) + .value("HELLIONCAMPAIGNINFERNALPREIGNITER", sc2::UPGRADE_ID::HELLIONCAMPAIGNINFERNALPREIGNITER) + .value("HIGHCAPACITYBARRELS", sc2::UPGRADE_ID::HIGHCAPACITYBARRELS) + .value("HIGHTEMPLARKHAYDARINAMULET", sc2::UPGRADE_ID::HIGHTEMPLARKHAYDARINAMULET) + .value("HIREDEVILDOGSPH", sc2::UPGRADE_ID::HIREDEVILDOGSPH) + .value("HIREDUKESREVENGE", sc2::UPGRADE_ID::HIREDUKESREVENGE) + .value("HIREDUSKWINGPH", sc2::UPGRADE_ID::HIREDUSKWINGPH) + .value("HIREHAMMERSECURITIESPH", sc2::UPGRADE_ID::HIREHAMMERSECURITIESPH) + .value("HIREHELSANGELSPH", sc2::UPGRADE_ID::HIREHELSANGELSPH) + .value("HIREKELMORIANMINERSPH", sc2::UPGRADE_ID::HIREKELMORIANMINERSPH) + .value("HIRESIEGEBREAKERSPH", sc2::UPGRADE_ID::HIRESIEGEBREAKERSPH) + .value("HIRESPARTANCOMPANYPH", sc2::UPGRADE_ID::HIRESPARTANCOMPANYPH) + .value("HISECAUTOTRACKING", sc2::UPGRADE_ID::HISECAUTOTRACKING) + .value("HIVEMINDEMULATOR", sc2::UPGRADE_ID::HIVEMINDEMULATOR) + .value("HUNTERSEEKER", sc2::UPGRADE_ID::HUNTERSEEKER) + .value("HURRICANEMISSILES", sc2::UPGRADE_ID::HURRICANEMISSILES) + .value("HYBRIDCPLASMAUPGRADEHARD", sc2::UPGRADE_ID::HYBRIDCPLASMAUPGRADEHARD) + .value("HYBRIDCPLASMAUPGRADEINSANE", sc2::UPGRADE_ID::HYBRIDCPLASMAUPGRADEINSANE) + .value("HYDRALISKSPEED", sc2::UPGRADE_ID::HYDRALISKSPEED) + .value("HYDRALISKSPEEDUPGRADE", sc2::UPGRADE_ID::HYDRALISKSPEEDUPGRADE) + .value("HYPERFLUXOR", sc2::UPGRADE_ID::HYPERFLUXOR) + .value("IMMORTALBARRIER", sc2::UPGRADE_ID::IMMORTALBARRIER) + .value("IMMORTALREVIVE", sc2::UPGRADE_ID::IMMORTALREVIVE) + .value("IMPALERROUNDS", sc2::UPGRADE_ID::IMPALERROUNDS) + .value("INCREASEDRANGE", sc2::UPGRADE_ID::INCREASEDRANGE) + .value("INFERNALPREIGNITERS", sc2::UPGRADE_ID::INFERNALPREIGNITERS) + .value("INFESTORENERGYUPGRADE", sc2::UPGRADE_ID::INFESTORENERGYUPGRADE) + .value("INFESTORPERISTALSIS", sc2::UPGRADE_ID::INFESTORPERISTALSIS) + .value("INTERCEPTORLIMIT4", sc2::UPGRADE_ID::INTERCEPTORLIMIT4) + .value("INTERCEPTORLIMIT6", sc2::UPGRADE_ID::INTERCEPTORLIMIT6) + .value("INVALID", sc2::UPGRADE_ID::INVALID) + .value("JACKHAMMERCONCUSSIONGRENADES", sc2::UPGRADE_ID::JACKHAMMERCONCUSSIONGRENADES) + .value("JUGGERNAUTPLATING", sc2::UPGRADE_ID::JUGGERNAUTPLATING) + .value("KINETICFIELDS", sc2::UPGRADE_ID::KINETICFIELDS) + .value("LIBERATORAGRANGEUPGRADE", sc2::UPGRADE_ID::LIBERATORAGRANGEUPGRADE) + .value("LIBERATORMORPH", sc2::UPGRADE_ID::LIBERATORMORPH) + .value("LOCUSTLIFETIMEINCREASE", sc2::UPGRADE_ID::LOCUSTLIFETIMEINCREASE) + .value("LURKERRANGE", sc2::UPGRADE_ID::LURKERRANGE) + .value("MAELSTROMROUNDS", sc2::UPGRADE_ID::MAELSTROMROUNDS) + .value("MAGFIELDLAUNCHERS", sc2::UPGRADE_ID::MAGFIELDLAUNCHERS) + .value("MARAUDERLIFEBOOST", sc2::UPGRADE_ID::MARAUDERLIFEBOOST) + .value("MARINESTIMPACK", sc2::UPGRADE_ID::MARINESTIMPACK) + .value("MECHANICALREBIRTH", sc2::UPGRADE_ID::MECHANICALREBIRTH) + .value("MEDIVACCADUCEUSREACTOR", sc2::UPGRADE_ID::MEDIVACCADUCEUSREACTOR) + .value("MEDIVACINCREASESPEEDBOOST", sc2::UPGRADE_ID::MEDIVACINCREASESPEEDBOOST) + .value("MEDIVACRAPIDDEPLOYMENT", sc2::UPGRADE_ID::MEDIVACRAPIDDEPLOYMENT) + .value("MICROBIALSHROUD", sc2::UPGRADE_ID::MICROBIALSHROUD) + .value("MICROFILTERING", sc2::UPGRADE_ID::MICROFILTERING) + .value("MICROFUSIONREACTORS", sc2::UPGRADE_ID::MICROFUSIONREACTORS) + .value("MODULARCONSTRUCTION", sc2::UPGRADE_ID::MODULARCONSTRUCTION) + .value("MULE", sc2::UPGRADE_ID::MULE) + .value("MULTILOCKTARGETINGSYSTEMS", sc2::UPGRADE_ID::MULTILOCKTARGETINGSYSTEMS) + .value("NANOBOTINJECTORS", sc2::UPGRADE_ID::NANOBOTINJECTORS) + .value("NANOCONSTRUCTOR", sc2::UPGRADE_ID::NANOCONSTRUCTOR) + .value("NAPALMFUELTANKS", sc2::UPGRADE_ID::NAPALMFUELTANKS) + .value("NEOSTEELANDSHRIKETURRETICONUPGRADE", sc2::UPGRADE_ID::NEOSTEELANDSHRIKETURRETICONUPGRADE) + .value("NEOSTEELFRAME", sc2::UPGRADE_ID::NEOSTEELFRAME) + .value("NEURALPARASITE", sc2::UPGRADE_ID::NEURALPARASITE) + .value("NOTPOSSIBLESIEGEMODE", sc2::UPGRADE_ID::NOTPOSSIBLESIEGEMODE) + .value("OBSERVERGRAVITICBOOSTER", sc2::UPGRADE_ID::OBSERVERGRAVITICBOOSTER) + .value("OBVERSEINCUBATION", sc2::UPGRADE_ID::OBVERSEINCUBATION) + .value("OCULARIMPLANTS", sc2::UPGRADE_ID::OCULARIMPLANTS) + .value("ORACLEENERGYUPGRADE", sc2::UPGRADE_ID::ORACLEENERGYUPGRADE) + .value("ORBITALRELAY", sc2::UPGRADE_ID::ORBITALRELAY) + .value("ORBITALSTRIKE", sc2::UPGRADE_ID::ORBITALSTRIKE) + .value("ORGANICCARAPACE", sc2::UPGRADE_ID::ORGANICCARAPACE) + .value("OVERLORDSPEED", sc2::UPGRADE_ID::OVERLORDSPEED) + .value("OVERLORDTRANSPORT", sc2::UPGRADE_ID::OVERLORDTRANSPORT) + .value("PARTICLECANNONAIR", sc2::UPGRADE_ID::PARTICLECANNONAIR) + .value("PERMANENTCLOAKGHOST", sc2::UPGRADE_ID::PERMANENTCLOAKGHOST) + .value("PERMANENTCLOAKSPECTRE", sc2::UPGRADE_ID::PERMANENTCLOAKSPECTRE) + .value("PERSONALCLOAKING", sc2::UPGRADE_ID::PERSONALCLOAKING) + .value("PHOENIXRANGEUPGRADE", sc2::UPGRADE_ID::PHOENIXRANGEUPGRADE) + .value("PREDATOR", sc2::UPGRADE_ID::PREDATOR) + .value("PROJECTILEACCELERATORS", sc2::UPGRADE_ID::PROJECTILEACCELERATORS) + .value("PROTOSSAIRARMORSLEVEL1", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL1) + .value("PROTOSSAIRARMORSLEVEL2", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL2) + .value("PROTOSSAIRARMORSLEVEL3", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL3) + .value("PROTOSSAIRWEAPONSLEVEL1", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL1) + .value("PROTOSSAIRWEAPONSLEVEL2", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL2) + .value("PROTOSSAIRWEAPONSLEVEL3", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL3) + .value("PROTOSSGROUNDARMORSLEVEL1", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL1) + .value("PROTOSSGROUNDARMORSLEVEL2", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL2) + .value("PROTOSSGROUNDARMORSLEVEL3", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL3) + .value("PROTOSSGROUNDWEAPONSLEVEL1", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL1) + .value("PROTOSSGROUNDWEAPONSLEVEL2", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL2) + .value("PROTOSSGROUNDWEAPONSLEVEL3", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL3) + .value("PROTOSSHEROSHIPDETECTOR", sc2::UPGRADE_ID::PROTOSSHEROSHIPDETECTOR) + .value("PROTOSSHEROSHIPSPELL", sc2::UPGRADE_ID::PROTOSSHEROSHIPSPELL) + .value("PROTOSSHEROSHIPWEAPON", sc2::UPGRADE_ID::PROTOSSHEROSHIPWEAPON) + .value("PROTOSSSHIELDSLEVEL1", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL1) + .value("PROTOSSSHIELDSLEVEL2", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL2) + .value("PROTOSSSHIELDSLEVEL3", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL3) + .value("PSIDISRUPTOR", sc2::UPGRADE_ID::PSIDISRUPTOR) + .value("PSIONICAMPLIFIERS", sc2::UPGRADE_ID::PSIONICAMPLIFIERS) + .value("PSISTORMTECH", sc2::UPGRADE_ID::PSISTORMTECH) + .value("PUNISHERGRENADES", sc2::UPGRADE_ID::PUNISHERGRENADES) + .value("RAPIDDEPLOYMENT", sc2::UPGRADE_ID::RAPIDDEPLOYMENT) + .value("RAVAGERRANGE", sc2::UPGRADE_ID::RAVAGERRANGE) + .value("RAVENCORVIDREACTOR", sc2::UPGRADE_ID::RAVENCORVIDREACTOR) + .value("RAVENDAMAGEUPGRADE", sc2::UPGRADE_ID::RAVENDAMAGEUPGRADE) + .value("RAVENENHANCEDMUNITIONS", sc2::UPGRADE_ID::RAVENENHANCEDMUNITIONS) + .value("RAVENRECALIBRATEDEXPLOSIVES", sc2::UPGRADE_ID::RAVENRECALIBRATEDEXPLOSIVES) + .value("RAZORWIRE", sc2::UPGRADE_ID::RAZORWIRE) + .value("REAPERD8CHARGE", sc2::UPGRADE_ID::REAPERD8CHARGE) + .value("REAPERJUMP", sc2::UPGRADE_ID::REAPERJUMP) + .value("REAPERSPEED", sc2::UPGRADE_ID::REAPERSPEED) + .value("REAPERSTIMPACK", sc2::UPGRADE_ID::REAPERSTIMPACK) + .value("REAPERU238ROUNDS", sc2::UPGRADE_ID::REAPERU238ROUNDS) + .value("REGENERATIVEBIOSTEEL", sc2::UPGRADE_ID::REGENERATIVEBIOSTEEL) + .value("REINFORCEDSUPERSTRUCTURE", sc2::UPGRADE_ID::REINFORCEDSUPERSTRUCTURE) + .value("RESTORESHIELDS", sc2::UPGRADE_ID::RESTORESHIELDS) + .value("ROACHSUPPLY", sc2::UPGRADE_ID::ROACHSUPPLY) + .value("SCAVENGINGSYSTEMS", sc2::UPGRADE_ID::SCAVENGINGSYSTEMS) + .value("SCIENCEVESSEL", sc2::UPGRADE_ID::SCIENCEVESSEL) + .value("SCIENCEVESSELENERGYMANIPULATION", sc2::UPGRADE_ID::SCIENCEVESSELENERGYMANIPULATION) + .value("SCIENCEVESSELPLASMAWEAPONRY", sc2::UPGRADE_ID::SCIENCEVESSELPLASMAWEAPONRY) + .value("SECRETEDCOATING", sc2::UPGRADE_ID::SECRETEDCOATING) + .value("SHAPEDHULL", sc2::UPGRADE_ID::SHAPEDHULL) + .value("SHIELDWALL", sc2::UPGRADE_ID::SHIELDWALL) + .value("SHOWGATLINGGUN", sc2::UPGRADE_ID::SHOWGATLINGGUN) + .value("SHRIKETURRET", sc2::UPGRADE_ID::SHRIKETURRET) + .value("SIEGETANKSHAPEDBLAST", sc2::UPGRADE_ID::SIEGETANKSHAPEDBLAST) + .value("SIEGETECH", sc2::UPGRADE_ID::SIEGETECH) + .value("SINGULARITYCHARGE", sc2::UPGRADE_ID::SINGULARITYCHARGE) + .value("SMARTSERVOS", sc2::UPGRADE_ID::SMARTSERVOS) + .value("SPECTRETOOLTIPUPGRADE", sc2::UPGRADE_ID::SPECTRETOOLTIPUPGRADE) + .value("STABILIZERMEDPACKS", sc2::UPGRADE_ID::STABILIZERMEDPACKS) + .value("STIMPACK", sc2::UPGRADE_ID::STIMPACK) + .value("STRIKECANNONS", sc2::UPGRADE_ID::STRIKECANNONS) + .value("SUNDERINGIMPACT", sc2::UPGRADE_ID::SUNDERINGIMPACT) + .value("SUPPLYDEPOTDROP", sc2::UPGRADE_ID::SUPPLYDEPOTDROP) + .value("SURVIVALPODS", sc2::UPGRADE_ID::SURVIVALPODS) + .value("TECHREACTOR", sc2::UPGRADE_ID::TECHREACTOR) + .value("TECHREACTORAI", sc2::UPGRADE_ID::TECHREACTORAI) + .value("TEMPESTRANGEUPGRADE", sc2::UPGRADE_ID::TEMPESTRANGEUPGRADE) + .value("TERRANBUILDINGARMOR", sc2::UPGRADE_ID::TERRANBUILDINGARMOR) + .value("TERRANDEFENSERANGEBONUS", sc2::UPGRADE_ID::TERRANDEFENSERANGEBONUS) + .value("TERRANINFANTRYARMORSLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL1) + .value("TERRANINFANTRYARMORSLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL2) + .value("TERRANINFANTRYARMORSLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL3) + .value("TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL1) + .value("TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL2) + .value("TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL3) + .value("TERRANINFANTRYWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL1) + .value("TERRANINFANTRYWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL2) + .value("TERRANINFANTRYWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL3) + .value("TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL1) + .value("TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL2) + .value("TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL3) + .value("TERRANSHIPARMORSLEVEL1", sc2::UPGRADE_ID::TERRANSHIPARMORSLEVEL1) + .value("TERRANSHIPARMORSLEVEL2", sc2::UPGRADE_ID::TERRANSHIPARMORSLEVEL2) + .value("TERRANSHIPARMORSLEVEL3", sc2::UPGRADE_ID::TERRANSHIPARMORSLEVEL3) + .value("TERRANSHIPARMORSVANADIUMPLATINGLEVEL1", sc2::UPGRADE_ID::TERRANSHIPARMORSVANADIUMPLATINGLEVEL1) + .value("TERRANSHIPARMORSVANADIUMPLATINGLEVEL2", sc2::UPGRADE_ID::TERRANSHIPARMORSVANADIUMPLATINGLEVEL2) + .value("TERRANSHIPARMORSVANADIUMPLATINGLEVEL3", sc2::UPGRADE_ID::TERRANSHIPARMORSVANADIUMPLATINGLEVEL3) + .value("TERRANSHIPWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL1) + .value("TERRANSHIPWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL2) + .value("TERRANSHIPWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL3) + .value("TERRANSHIPWEAPONSULTRACAPACITORSLEVEL1", sc2::UPGRADE_ID::TERRANSHIPWEAPONSULTRACAPACITORSLEVEL1) + .value("TERRANSHIPWEAPONSULTRACAPACITORSLEVEL2", sc2::UPGRADE_ID::TERRANSHIPWEAPONSULTRACAPACITORSLEVEL2) + .value("TERRANSHIPWEAPONSULTRACAPACITORSLEVEL3", sc2::UPGRADE_ID::TERRANSHIPWEAPONSULTRACAPACITORSLEVEL3) + .value("TERRANVEHICLEANDSHIPARMORSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL1) + .value("TERRANVEHICLEANDSHIPARMORSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL2) + .value("TERRANVEHICLEANDSHIPARMORSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL3) + .value("TERRANVEHICLEANDSHIPWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPWEAPONSLEVEL1) + .value("TERRANVEHICLEANDSHIPWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPWEAPONSLEVEL2) + .value("TERRANVEHICLEANDSHIPWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPWEAPONSLEVEL3) + .value("TERRANVEHICLEARMORSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEARMORSLEVEL1) + .value("TERRANVEHICLEARMORSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEARMORSLEVEL2) + .value("TERRANVEHICLEARMORSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEARMORSLEVEL3) + .value("TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL1) + .value("TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL2) + .value("TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL3) + .value("TERRANVEHICLEWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL1) + .value("TERRANVEHICLEWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL2) + .value("TERRANVEHICLEWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL3) + .value("TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL1) + .value("TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL2) + .value("TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL3) + .value("TOSHEASYMODE", sc2::UPGRADE_ID::TOSHEASYMODE) + .value("TRANSFORMATIONSERVOS", sc2::UPGRADE_ID::TRANSFORMATIONSERVOS) + .value("TRILITHIUMPOWERCELLS", sc2::UPGRADE_ID::TRILITHIUMPOWERCELLS) + .value("TUNGSTENSPIKES", sc2::UPGRADE_ID::TUNGSTENSPIKES) + .value("TUNNELINGCLAWS", sc2::UPGRADE_ID::TUNNELINGCLAWS) + .value("TURBOCHARGEDENGINES", sc2::UPGRADE_ID::TURBOCHARGEDENGINES) + .value("TWINLINKEDFLAMETHROWERS", sc2::UPGRADE_ID::TWINLINKEDFLAMETHROWERS) + .value("TYCHUS05BATTLECRUISERPENETRATION", sc2::UPGRADE_ID::TYCHUS05BATTLECRUISERPENETRATION) + .value("ULTRACAPACITORS", sc2::UPGRADE_ID::ULTRACAPACITORS) + .value("ULTRALISKBURROWCHARGEUPGRADE", sc2::UPGRADE_ID::ULTRALISKBURROWCHARGEUPGRADE) + .value("ULTRASONICPULSE", sc2::UPGRADE_ID::ULTRASONICPULSE) + .value("VANADIUMPLATING", sc2::UPGRADE_ID::VANADIUMPLATING) + .value("VIKINGJOTUNBOOSTERS", sc2::UPGRADE_ID::VIKINGJOTUNBOOSTERS) + .value("VIRALMUNITIONS", sc2::UPGRADE_ID::VIRALMUNITIONS) + .value("VIRALPLASMA", sc2::UPGRADE_ID::VIRALPLASMA) + .value("VOIDRAYSPEEDUPGRADE", sc2::UPGRADE_ID::VOIDRAYSPEEDUPGRADE) + .value("VULTUREAUTOREPAIR", sc2::UPGRADE_ID::VULTUREAUTOREPAIR) + .value("WARPGATERESEARCH", sc2::UPGRADE_ID::WARPGATERESEARCH) + .value("WHITENAPALM", sc2::UPGRADE_ID::WHITENAPALM) + .value("WRAITHCLOAK", sc2::UPGRADE_ID::WRAITHCLOAK) + .value("X88TNAPALMUPGRADE", sc2::UPGRADE_ID::X88TNAPALMUPGRADE) + .value("YAMATOCANNON", sc2::UPGRADE_ID::YAMATOCANNON) + .value("ZERGBURROWMOVE", sc2::UPGRADE_ID::ZERGBURROWMOVE) + .value("ZERGFLYERARMORSLEVEL1", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL1) + .value("ZERGFLYERARMORSLEVEL2", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL2) + .value("ZERGFLYERARMORSLEVEL3", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL3) + .value("ZERGFLYERWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL1) + .value("ZERGFLYERWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL2) + .value("ZERGFLYERWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL3) + .value("ZERGGROUNDARMORSLEVEL1", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL1) + .value("ZERGGROUNDARMORSLEVEL2", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL2) + .value("ZERGGROUNDARMORSLEVEL3", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL3) + .value("ZERGLINGATTACKSPEED", sc2::UPGRADE_ID::ZERGLINGATTACKSPEED) + .value("ZERGLINGMOVEMENTSPEED", sc2::UPGRADE_ID::ZERGLINGMOVEMENTSPEED) + .value("ZERGMELEEWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL1) + .value("ZERGMELEEWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL2) + .value("ZERGMELEEWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL3) + .value("ZERGMISSILEWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL1) + .value("ZERGMISSILEWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL2) + .value("ZERGMISSILEWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL3) + .value("_330MMBARRAGECANNONS", sc2::UPGRADE_ID::_330MMBARRAGECANNONS); + py::enum_<sc2::BUFF_ID>(m, "BUFF_ID") - .value("INVALID", sc2::BUFF_ID::INVALID) - .value("GRAVITONBEAM", sc2::BUFF_ID::GRAVITONBEAM) - .value("GHOSTCLOAK", sc2::BUFF_ID::GHOSTCLOAK) - .value("BANSHEECLOAK", sc2::BUFF_ID::BANSHEECLOAK) - .value("POWERUSERWARPABLE", sc2::BUFF_ID::POWERUSERWARPABLE) - .value("QUEENSPAWNLARVATIMER", sc2::BUFF_ID::QUEENSPAWNLARVATIMER) - .value("GHOSTHOLDFIRE", sc2::BUFF_ID::GHOSTHOLDFIRE) - .value("GHOSTHOLDFIREB", sc2::BUFF_ID::GHOSTHOLDFIREB) - .value("EMPDECLOAK", sc2::BUFF_ID::EMPDECLOAK) - .value("FUNGALGROWTH", sc2::BUFF_ID::FUNGALGROWTH) - .value("GUARDIANSHIELD", sc2::BUFF_ID::GUARDIANSHIELD) - .value("TIMEWARPPRODUCTION", sc2::BUFF_ID::TIMEWARPPRODUCTION) - .value("NEURALPARASITE", sc2::BUFF_ID::NEURALPARASITE) - .value("STIMPACKMARAUDER", sc2::BUFF_ID::STIMPACKMARAUDER) - .value("SUPPLYDROP", sc2::BUFF_ID::SUPPLYDROP) - .value("STIMPACK", sc2::BUFF_ID::STIMPACK) - .value("PSISTORM", sc2::BUFF_ID::PSISTORM) - .value("CLOAKFIELDEFFECT", sc2::BUFF_ID::CLOAKFIELDEFFECT) - .value("CHARGING", sc2::BUFF_ID::CHARGING) - .value("SLOW", sc2::BUFF_ID::SLOW) - .value("CONTAMINATED", sc2::BUFF_ID::CONTAMINATED) - .value("BLINDINGCLOUDSTRUCTURE", sc2::BUFF_ID::BLINDINGCLOUDSTRUCTURE) - .value("ORACLEREVELATION", sc2::BUFF_ID::ORACLEREVELATION) - .value("VIPERCONSUMESTRUCTURE", sc2::BUFF_ID::VIPERCONSUMESTRUCTURE) - .value("BLINDINGCLOUD", sc2::BUFF_ID::BLINDINGCLOUD) - .value("MEDIVACSPEEDBOOST", sc2::BUFF_ID::MEDIVACSPEEDBOOST) - .value("PURIFY", sc2::BUFF_ID::PURIFY) - .value("ORACLEWEAPON", sc2::BUFF_ID::ORACLEWEAPON) - .value("IMMORTALOVERLOAD", sc2::BUFF_ID::IMMORTALOVERLOAD) - .value("LOCKON", sc2::BUFF_ID::LOCKON) - .value("SEEKERMISSILE", sc2::BUFF_ID::SEEKERMISSILE) - .value("TEMPORALFIELD", sc2::BUFF_ID::TEMPORALFIELD) - .value("VOIDRAYSWARMDAMAGEBOOST", sc2::BUFF_ID::VOIDRAYSWARMDAMAGEBOOST) - .value("ORACLESTASISTRAPTARGET", sc2::BUFF_ID::ORACLESTASISTRAPTARGET) - .value("PARASITICBOMB", sc2::BUFF_ID::PARASITICBOMB) - .value("PARASITICBOMBUNITKU", sc2::BUFF_ID::PARASITICBOMBUNITKU) - .value("PARASITICBOMBSECONDARYUNITSEARCH", sc2::BUFF_ID::PARASITICBOMBSECONDARYUNITSEARCH) - .value("LURKERHOLDFIREB", sc2::BUFF_ID::LURKERHOLDFIREB) - .value("CHANNELSNIPECOMBAT", sc2::BUFF_ID::CHANNELSNIPECOMBAT) - .value("TEMPESTDISRUPTIONBLASTSTUNBEHAVIOR", sc2::BUFF_ID::TEMPESTDISRUPTIONBLASTSTUNBEHAVIOR) - .value("CARRYMINERALFIELDMINERALS", sc2::BUFF_ID::CARRYMINERALFIELDMINERALS) - .value("CARRYHIGHYIELDMINERALFIELDMINERALS", sc2::BUFF_ID::CARRYHIGHYIELDMINERALFIELDMINERALS) - .value("CARRYHARVESTABLEVESPENEGEYSERGAS", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGAS) - .value("CARRYHARVESTABLEVESPENEGEYSERGASPROTOSS", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGASPROTOSS) - .value("CARRYHARVESTABLEVESPENEGEYSERGASZERG", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGASZERG); + .value("ACCELERATIONZONEFLYINGTEMPORALFIELD", sc2::BUFF_ID::ACCELERATIONZONEFLYINGTEMPORALFIELD) + .value("ACCELERATIONZONETEMPORALFIELD", sc2::BUFF_ID::ACCELERATIONZONETEMPORALFIELD) + .value("ADEPTDEATHCHECK", sc2::BUFF_ID::ADEPTDEATHCHECK) + .value("AGGRESSIVEMUTATION", sc2::BUFF_ID::AIDANGERBUFF) + .value("AMORPHOUSARMORCLOUD", sc2::BUFF_ID::AMORPHOUSARMORCLOUD) + .value("ANTIAIRWEAPONSWITCHCOOLDOWN", sc2::BUFF_ID::ANTIAIRWEAPONSWITCHCOOLDOWN) + .value("ARBITERMPCLOAKFIELDEFFECT", sc2::BUFF_ID::ARBITERMPCLOAKFIELDEFFECT) + .value("ARBITERMPSTASISFIELD", sc2::BUFF_ID::ARBITERMPSTASISFIELD) + .value("ARTANISCLOAKINGFIELDEFFECT", sc2::BUFF_ID::ARTANISCLOAKINGFIELDEFFECT) + .value("ARTANISTEMPORALRIFTUNIT", sc2::BUFF_ID::ARTANISTEMPORALRIFTUNIT) + .value("ARTANISVORTEXBEHAVIOR", sc2::BUFF_ID::ARTANISVORTEXBEHAVIOR) + .value("AUTOMATEDREPAIR", sc2::BUFF_ID::AUTOMATEDREPAIR) + .value("BANSHEECLOAK", sc2::BUFF_ID::BANSHEECLOAK) + .value("BANSHEECLOAKCROSSSPECTRUMDAMPENERS", sc2::BUFF_ID::BANSHEECLOAKCROSSSPECTRUMDAMPENERS) + .value("BATTLECRUISERANTIAIRDISABLE", sc2::BUFF_ID::BATTLECRUISERANTIAIRDISABLE) + .value("BENIGN", sc2::BUFF_ID::BENIGN) + .value("BIOSTASIS", sc2::BUFF_ID::BIOSTASIS) + .value("BLINDINGCLOUD", sc2::BUFF_ID::BLINDINGCLOUD) + .value("BLINDINGCLOUDSTRUCTURE", sc2::BUFF_ID::BLINDINGCLOUDSTRUCTURE) + .value("BUILDINGSCARAB", sc2::BUFF_ID::BUILDINGSCARAB) + .value("BUILDINGSHIELD", sc2::BUFF_ID::BUILDINGSHIELD) + .value("BUILDINGSTASIS", sc2::BUFF_ID::BUILDINGSTASIS) + .value("BURROWCHARGE", sc2::BUFF_ID::BURROWCHARGE) + .value("BURSTCAPACITORSDAMAGEBUFF", sc2::BUFF_ID::BURSTCAPACITORSDAMAGEBUFF) + .value("BYPASSARMORDEBUFFONE", sc2::BUFF_ID::BYPASSARMORDEBUFFONE) + .value("BYPASSARMORDEBUFFTHREE", sc2::BUFF_ID::BYPASSARMORDEBUFFTHREE) + .value("BYPASSARMORDEBUFFTWO", sc2::BUFF_ID::BYPASSARMORDEBUFFTWO) + .value("CANNONRADAR", sc2::BUFF_ID::CANNONRADAR) + .value("CAPRESOURCE", sc2::BUFF_ID::CAPRESOURCE) + .value("CARRYHARVESTABLEVESPENEGEYSERGAS", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGAS) + .value("CARRYHARVESTABLEVESPENEGEYSERGASPROTOSS", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGASPROTOSS) + .value("CARRYHARVESTABLEVESPENEGEYSERGASZERG", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGASZERG) + .value("CARRYHIGHYIELDMINERALFIELDMINERALS", sc2::BUFF_ID::CARRYHIGHYIELDMINERALFIELDMINERALS) + .value("CARRYMINERALFIELDMINERALS", sc2::BUFF_ID::CARRYMINERALFIELDMINERALS) + .value("CHANNELSNIPECOMBAT", sc2::BUFF_ID::CHANNELSNIPECOMBAT) + .value("CHARGEUP", sc2::BUFF_ID::CHARGEUP) + .value("CHARGING", sc2::BUFF_ID::CHARGING) + .value("CHRONOBOOSTENERGYCOST", sc2::BUFF_ID::CHRONOBOOSTENERGYCOST) + .value("CLOAKFIELDEFFECT", sc2::BUFF_ID::CLOAKFIELDEFFECT) + .value("CLOAKINGFIELDTARGETED", sc2::BUFF_ID::CLOAKINGFIELDTARGETED) + .value("CLOAKUNIT", sc2::BUFF_ID::CLOAKUNIT) + .value("COLLAPSIBLEROCKTOWERCONJOINEDSEARCH", sc2::BUFF_ID::COLLAPSIBLEROCKTOWERCONJOINEDSEARCH) + .value("COLLAPSIBLEROCKTOWERRAMPDIAGONALCONJOINEDSEARCH", sc2::BUFF_ID::COLLAPSIBLEROCKTOWERRAMPDIAGONALCONJOINEDSEARCH) + .value("COLLAPSIBLETERRANTOWERCONJOINEDSEARCH", sc2::BUFF_ID::COLLAPSIBLETERRANTOWERCONJOINEDSEARCH) + .value("COLLAPSIBLETERRANTOWERRAMPDIAGONALCONJOINEDSEARCH", sc2::BUFF_ID::COLLAPSIBLETERRANTOWERRAMPDIAGONALCONJOINEDSEARCH) + .value("COLONYINFESTATION", sc2::BUFF_ID::COLONYINFESTATION) + .value("CONTAMINATED", sc2::BUFF_ID::CONTAMINATED) + .value("CORRUPTION", sc2::BUFF_ID::CORRUPTION) + .value("CORRUPTIONBOMBDAMAGE", sc2::BUFF_ID::CORRUPTIONBOMBDAMAGE) + .value("CORRUPTORGROUNDATTACKDEBUFF", sc2::BUFF_ID::CORRUPTORGROUNDATTACKDEBUFF) + .value("CORRUPTORINFESTING", sc2::BUFF_ID::CORRUPTORINFESTING) + .value("CORSAIRMPDISRUPTIONWEB", sc2::BUFF_ID::CORSAIRMPDISRUPTIONWEB) + .value("DEFENSIVEMATRIX", sc2::BUFF_ID::DEFENSIVEMATRIX) + .value("DEFILERMPCONSUME", sc2::BUFF_ID::DEFILERMPCONSUME) + .value("DEFILERMPDARKSWARM", sc2::BUFF_ID::DEFILERMPDARKSWARM) + .value("DEFILERMPPLAGUE", sc2::BUFF_ID::DEFILERMPPLAGUE) + .value("DEVOURERMPACIDSPORES", sc2::BUFF_ID::DEVOURERMPACIDSPORES) + .value("DIGESTERCREEPSPRAYVISION", sc2::BUFF_ID::DIGESTERCREEPSPRAYVISION) + .value("DISABLEABILS", sc2::BUFF_ID::DISABLEABILS) + .value("DISABLEINTERCEPTORS", sc2::BUFF_ID::DISABLEINTERCEPTORS) + .value("DISRUPTORPUSH", sc2::BUFF_ID::DISRUPTORPUSH) + .value("DOMINATION", sc2::BUFF_ID::DOMINATION) + .value("DOOMDAMAGEDELAY", sc2::BUFF_ID::DOOMDAMAGEDELAY) + .value("DUTCHMARAUDERSLOW", sc2::BUFF_ID::DUTCHMARAUDERSLOW) + .value("EMPBURST", sc2::BUFF_ID::EMPBURST) + .value("EMPDECLOAK", sc2::BUFF_ID::EMPDECLOAK) + .value("EMPDRAIN", sc2::BUFF_ID::EMPDRAIN) + .value("ENGAGE", sc2::BUFF_ID::ENGAGE) + .value("ETHEREAL", sc2::BUFF_ID::ETHEREAL) + .value("EXTENDBRIDGEEXTENDINGBRIDGENEWIDE10OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENEWIDE10OUT) + .value("EXTENDBRIDGEEXTENDINGBRIDGENEWIDE12OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENEWIDE12OUT) + .value("EXTENDBRIDGEEXTENDINGBRIDGENEWIDE8OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENEWIDE8OUT) + .value("EXTENDBRIDGEEXTENDINGBRIDGENWWIDE10OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENWWIDE10OUT) + .value("EXTENDBRIDGEEXTENDINGBRIDGENWWIDE12OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENWWIDE12OUT) + .value("EXTENDBRIDGEEXTENDINGBRIDGENWWIDE8OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENWWIDE8OUT) + .value("EYESTALK", sc2::BUFF_ID::EYESTALK) + .value("FUNGALGROWTH", sc2::BUFF_ID::FUNGALGROWTH) + .value("GHOSTBLAST", sc2::BUFF_ID::GHOSTBLAST) + .value("GHOSTCLOAK", sc2::BUFF_ID::GHOSTCLOAK) + .value("GHOSTHOLDFIRE", sc2::BUFF_ID::GHOSTHOLDFIRE) + .value("GHOSTHOLDFIREB", sc2::BUFF_ID::GHOSTHOLDFIREB) + .value("GHOSTSNIPEDOT", sc2::BUFF_ID::GHOSTSNIPEDOT) + .value("GRAVITONBEAM", sc2::BUFF_ID::GRAVITONBEAM) + .value("GRAVITONPRISON", sc2::BUFF_ID::GRAVITONPRISON) + .value("HEROICBUFF03", sc2::BUFF_ID::HEROICBUFF03) + .value("HIDDEN", sc2::BUFF_ID::HIDDEN) + .value("HYBRIDCZERGYROOTS", sc2::BUFF_ID::HYBRIDCZERGYROOTS) + .value("HYBRIDFZERGYROOTS", sc2::BUFF_ID::HYBRIDFZERGYROOTS) + .value("IMMORTALOVERLOAD", sc2::BUFF_ID::IMMORTALOVERLOAD) + .value("INCAPACITATED", sc2::BUFF_ID::INCAPACITATED) + .value("INFESTORDISEASE", sc2::BUFF_ID::INFESTORDISEASE) + .value("INFESTORENSNARE", sc2::BUFF_ID::INFESTORENSNARE) + .value("INFESTORENSNAREMAKEPRECURSORREHEIGHTSOURCE", sc2::BUFF_ID::INFESTORENSNAREMAKEPRECURSORREHEIGHTSOURCE) + .value("INHIBITORZONEFLYINGTEMPORALFIELD", sc2::BUFF_ID::INHIBITORZONEFLYINGTEMPORALFIELD) + .value("INHIBITORZONETEMPORALFIELD", sc2::BUFF_ID::INHIBITORZONETEMPORALFIELD) + .value("INVALID", sc2::BUFF_ID::INVALID) + .value("INVULNERABILITYSHIELD", sc2::BUFF_ID::INVULNERABILITYSHIELD) + .value("IRRADIATE", sc2::BUFF_ID::IRRADIATE) + .value("ITEMGRAVITYBOMBS", sc2::BUFF_ID::ITEMGRAVITYBOMBS) + .value("JUMPSTOMPFSTUN", sc2::BUFF_ID::JUMPSTOMPFSTUN) + .value("JUMPSTOMPSTUN", sc2::BUFF_ID::JUMPSTOMPSTUN) + .value("KARASSPSISTORM", sc2::BUFF_ID::KARASSPSISTORM) + .value("LASERSIGHT", sc2::BUFF_ID::LASERSIGHT) + .value("LASERTARGETING", sc2::BUFF_ID::LASERTARGETING) + .value("LEECH", sc2::BUFF_ID::LEECH) + .value("LEECHDISABLEABILITIES", sc2::BUFF_ID::LEECHDISABLEABILITIES) + .value("LIGHTNINGBOMB", sc2::BUFF_ID::LIGHTNINGBOMB) + .value("LIGHTOFAIUR", sc2::BUFF_ID::LIGHTOFAIUR) + .value("LOCKDOWNB", sc2::BUFF_ID::LOCKDOWNB) + .value("LOCKON", sc2::BUFF_ID::LOCKON) + .value("LURKERHOLDFIRE", sc2::BUFF_ID::LURKERHOLDFIRE) + .value("LURKERHOLDFIREB", sc2::BUFF_ID::LURKERHOLDFIREB) + .value("MAXIMUMTHRUST", sc2::BUFF_ID::MAXIMUMTHRUST) + .value("MEDIVACSPEEDBOOST", sc2::BUFF_ID::MEDIVACSPEEDBOOST) + .value("MERCAIRDROPDELAY", sc2::BUFF_ID::MERCAIRDROPDELAY) + .value("MERCENARYCYCLONEMISSILES", sc2::BUFF_ID::MERCENARYCYCLONEMISSILES) + .value("MERCENARYSENSORDISH", sc2::BUFF_ID::MERCENARYSENSORDISH) + .value("MERCENARYSHIELD", sc2::BUFF_ID::MERCENARYSHIELD) + .value("MERCGROUNDDROP", sc2::BUFF_ID::MERCGROUNDDROP) + .value("MERCGROUNDDROPDELAY", sc2::BUFF_ID::MERCGROUNDDROPDELAY) + .value("MINDBLASTSTUN", sc2::BUFF_ID::MINDBLASTSTUN) + .value("MINDCONTROL", sc2::BUFF_ID::MINDCONTROL) + .value("MINEDRONECOUNTDOWN", sc2::BUFF_ID::MINEDRONECOUNTDOWN) + .value("MINEDRONEDOT", sc2::BUFF_ID::MINEDRONEDOT) + .value("MOTHERSHIPCOREENERGIZEVISUAL", sc2::BUFF_ID::MOTHERSHIPCOREENERGIZEVISUAL) + .value("MOTHERSHIPSTASIS", sc2::BUFF_ID::MOTHERSHIPSTASIS) + .value("MOTHERSHIPSTASISCASTER", sc2::BUFF_ID::MOTHERSHIPSTASISCASTER) + .value("NAPALM", sc2::BUFF_ID::NAPALM) + .value("NEURALPARASITE", sc2::BUFF_ID::NEURALPARASITE) + .value("NEURALPARASITEWAIT", sc2::BUFF_ID::NEURALPARASITEWAIT) + .value("NEXUSINVULNERABILITY", sc2::BUFF_ID::NEXUSINVULNERABILITY) + .value("NEXUSPHASESHIFT", sc2::BUFF_ID::NEXUSPHASESHIFT) + .value("NEXUSSHIELDOVERCHARGE", sc2::BUFF_ID::NEXUSSHIELDOVERCHARGE) + .value("NEXUSSHIELDRECHARGEONPYLONBEHAVIOR", sc2::BUFF_ID::NEXUSSHIELDRECHARGEONPYLONBEHAVIOR) + .value("NEXUSSHIELDRECHARGEONPYLONBEHAVIORSECONDARYONTARGET", sc2::BUFF_ID::NEXUSSHIELDRECHARGEONPYLONBEHAVIORSECONDARYONTARGET) + .value("NULLFIELD", sc2::BUFF_ID::NULLFIELD) + .value("NYDUSWORMLAVAINSTANTDEATH", sc2::BUFF_ID::NYDUSWORMLAVAINSTANTDEATH) + .value("ORACLECLOAKFIELD", sc2::BUFF_ID::ORACLECLOAKFIELD) + .value("ORACLECLOAKFIELDEFFECT", sc2::BUFF_ID::ORACLECLOAKFIELDEFFECT) + .value("ORACLEPHASESHIFT", sc2::BUFF_ID::ORACLEPHASESHIFT) + .value("ORACLEREVELATION", sc2::BUFF_ID::ORACLEREVELATION) + .value("ORACLESTASISTRAPTARGET", sc2::BUFF_ID::ORACLESTASISTRAPTARGET) + .value("ORACLEWEAPON", sc2::BUFF_ID::ORACLEWEAPON) + .value("OVERCHARGE", sc2::BUFF_ID::OVERCHARGE) + .value("OVERCHARGEDAMAGE", sc2::BUFF_ID::OVERCHARGEDAMAGE) + .value("OVERCHARGESPEEDBOOST", sc2::BUFF_ID::OVERCHARGESPEEDBOOST) + .value("PARASITICBOMB", sc2::BUFF_ID::PARASITICBOMB) + .value("PARASITICBOMBDELAYTIMEDLIFE", sc2::BUFF_ID::PARASITICBOMBDELAYTIMEDLIFE) + .value("PARASITICBOMBSECONDARYUNITSEARCH", sc2::BUFF_ID::PARASITICBOMBSECONDARYUNITSEARCH) + .value("PARASITICBOMBUNITKU", sc2::BUFF_ID::PARASITICBOMBUNITKU) + .value("PERMANENTLYCLOAKED", sc2::BUFF_ID::PERMANENTLYCLOAKED) + .value("PERSONALCLOAKINGFREE", sc2::BUFF_ID::PERSONALCLOAKINGFREE) + .value("PHASESHIELD", sc2::BUFF_ID::PHASESHIELD) + .value("POWERUSERWARPABLE", sc2::BUFF_ID::POWERUSERWARPABLE) + .value("PREDATORCLOAKING", sc2::BUFF_ID::PREDATORCLOAKING) + .value("PROTECTIVEBARRIER", sc2::BUFF_ID::PROTECTIVEBARRIER) + .value("PSIDISRUPTION", sc2::BUFF_ID::PSIDISRUPTION) + .value("PSIONICSHOCKWAVEHEIGHTANDSTUN", sc2::BUFF_ID::PSIONICSHOCKWAVEHEIGHTANDSTUN) + .value("PSISTORM", sc2::BUFF_ID::PSISTORM) + .value("PSYTROUSOXIDE", sc2::BUFF_ID::PSYTROUSOXIDE) + .value("PURIFICATIONNOVA", sc2::BUFF_ID::PURIFICATIONNOVA) + .value("PURIFICATIONNOVAPOST", sc2::BUFF_ID::PURIFICATIONNOVAPOST) + .value("PURIFIERPLANETCRACKERCHARGE", sc2::BUFF_ID::PURIFIERPLANETCRACKERCHARGE) + .value("PURIFY", sc2::BUFF_ID::PURIFY) + .value("QUEENKNOCKDOWN", sc2::BUFF_ID::QUEENKNOCKDOWN) + .value("QUEENMPENSNARE", sc2::BUFF_ID::QUEENMPENSNARE) + .value("QUEENSPAWNLARVATIMER", sc2::BUFF_ID::QUEENSPAWNLARVATIMER) + .value("RADAR25", sc2::BUFF_ID::RADAR25) + .value("RAVENSCRAMBLERMISSILE", sc2::BUFF_ID::RAVENSCRAMBLERMISSILE) + .value("RAVENSHREDDERMISSILEARMORREDUCTION", sc2::BUFF_ID::RAVENSHREDDERMISSILEARMORREDUCTION) + .value("RAVENSHREDDERMISSILEARMORREDUCTIONUISUBTRUCT", sc2::BUFF_ID::RAVENSHREDDERMISSILEARMORREDUCTIONUISUBTRUCT) + .value("RAVENSHREDDERMISSILETIMEOUT", sc2::BUFF_ID::RAVENSHREDDERMISSILETIMEOUT) + .value("RAVENSHREDDERMISSILETINT", sc2::BUFF_ID::RAVENSHREDDERMISSILETINT) + .value("RAYNORMISSILETIMEDLIFE", sc2::BUFF_ID::RAYNORMISSILETIMEDLIFE) + .value("RAYNORTIMEBOMBMISSILE", sc2::BUFF_ID::RAYNORTIMEBOMBMISSILE) + .value("RAYNORTIMEBOMBUNIT", sc2::BUFF_ID::RAYNORTIMEBOMBUNIT) + .value("RELEASEINTERCEPTORSBEACON", sc2::BUFF_ID::RELEASEINTERCEPTORSBEACON) + .value("RELEASEINTERCEPTORSCOOLDOWN", sc2::BUFF_ID::RELEASEINTERCEPTORSCOOLDOWN) + .value("RELEASEINTERCEPTORSTIMEDLIFEWARNING", sc2::BUFF_ID::RELEASEINTERCEPTORSTIMEDLIFEWARNING) + .value("RELEASEINTERCEPTORSWANDERDELAY", sc2::BUFF_ID::RELEASEINTERCEPTORSWANDERDELAY) + .value("RESCUE", sc2::BUFF_ID::RESCUE) + .value("RESONATINGGLAIVESPHASESHIFT", sc2::BUFF_ID::RESONATINGGLAIVESPHASESHIFT) + .value("RESOURCESTUN", sc2::BUFF_ID::RESOURCESTUN) + .value("RESTORESHIELDS", sc2::BUFF_ID::RESTORESHIELDS) + .value("ROUGHTERRAINSEARCH", sc2::BUFF_ID::ROUGHTERRAINSEARCH) + .value("ROUGHTERRAINSLOW", sc2::BUFF_ID::ROUGHTERRAINSLOW) + .value("SCIENCEVESSELCLOAKFIELD", sc2::BUFF_ID::SCIENCEVESSELCLOAKFIELD) + .value("SCRYER", sc2::BUFF_ID::SCRYER) + .value("SCRYERFRIENDLY", sc2::BUFF_ID::SCRYERFRIENDLY) + .value("SEEKERMISSILE", sc2::BUFF_ID::SEEKERMISSILE) + .value("SEEKERMISSILETIMEOUT", sc2::BUFF_ID::SEEKERMISSILETIMEOUT) + .value("SELFREPAIR", sc2::BUFF_ID::SELFREPAIR) + .value("SHADOWCLONE", sc2::BUFF_ID::SHADOWCLONE) + .value("SHEEPBUSY", sc2::BUFF_ID::SHEEPBUSY) + .value("SHIFTDELAY", sc2::BUFF_ID::SHIFTDELAY) + .value("SHREDDERSWARMDAMAGEAPPLY", sc2::BUFF_ID::SHREDDERSWARMDAMAGEAPPLY) + .value("SLAYNELEMENTALGRABSTUN", sc2::BUFF_ID::SLAYNELEMENTALGRABSTUN) + .value("SLIMED", sc2::BUFF_ID::SLIMED) + .value("SLOW", sc2::BUFF_ID::SLOW) + .value("SPECTRECLOAKING", sc2::BUFF_ID::SPECTRECLOAKING) + .value("SPECTRECLOAKINGFREE", sc2::BUFF_ID::SPECTRECLOAKINGFREE) + .value("SPECTREHOLDFIRE", sc2::BUFF_ID::SPECTREHOLDFIRE) + .value("SPECTREHOLDFIREB", sc2::BUFF_ID::SPECTREHOLDFIREB) + .value("SPECTRELOCKDOWNB", sc2::BUFF_ID::SPECTRELOCKDOWNB) + .value("SPECTRESHIELD", sc2::BUFF_ID::SPECTRESHIELD) + .value("SPORECANNONMISSILE", sc2::BUFF_ID::SPORECANNONMISSILE) + .value("SS_BATTLECRUISERCOLLISIONCHECK", sc2::BUFF_ID::SS_BATTLECRUISERCOLLISIONCHECK) + .value("SS_BATTLECRUISERHUNTERSEEKERTIMEOUT", sc2::BUFF_ID::SS_BATTLECRUISERHUNTERSEEKERTIMEOUT) + .value("SS_BATTLECRUISERMISSILELAUNCHER", sc2::BUFF_ID::SS_BATTLECRUISERMISSILELAUNCHER) + .value("SS_CARRIERBOSSCOLLISIONCHECK", sc2::BUFF_ID::SS_CARRIERBOSSCOLLISIONCHECK) + .value("SS_CARRIERCOLLISIONCHECK", sc2::BUFF_ID::SS_CARRIERCOLLISIONCHECK) + .value("SS_CORRUPTORCOLLISIONCHECK", sc2::BUFF_ID::SS_CORRUPTORCOLLISIONCHECK) + .value("SS_CORRUPTORMISSILETARGETCHECK", sc2::BUFF_ID::SS_CORRUPTORMISSILETARGETCHECK) + .value("SS_FIGHTERBOMBMISSILEDEATH", sc2::BUFF_ID::SS_FIGHTERBOMBMISSILEDEATH) + .value("SS_FIGHTERDRONEDAMAGERESPONSE", sc2::BUFF_ID::SS_FIGHTERDRONEDAMAGERESPONSE) + .value("SS_INTERCEPTORCOLLISIONCHECK", sc2::BUFF_ID::SS_INTERCEPTORCOLLISIONCHECK) + .value("SS_INVULNERABLE", sc2::BUFF_ID::SS_INVULNERABLE) + .value("SS_LEVIATHANBOMBCOLLISIONCHECK", sc2::BUFF_ID::SS_LEVIATHANBOMBCOLLISIONCHECK) + .value("SS_LEVIATHANBOMBEXPLODETIMER", sc2::BUFF_ID::SS_LEVIATHANBOMBEXPLODETIMER) + .value("SS_LEVIATHANBOMBMISSILETARGETCHECK", sc2::BUFF_ID::SS_LEVIATHANBOMBMISSILETARGETCHECK) + .value("SS_LEVIATHANCOLLISIONCHECK", sc2::BUFF_ID::SS_LEVIATHANCOLLISIONCHECK) + .value("SS_LEVIATHANTENTACLEMISSILESCANSWAPDELAY", sc2::BUFF_ID::SS_LEVIATHANTENTACLEMISSILESCANSWAPDELAY) + .value("SS_LEVIATHANTENTACLEMISSILETARGETCHECK", sc2::BUFF_ID::SS_LEVIATHANTENTACLEMISSILETARGETCHECK) + .value("SS_LEVIATHANTENTACLEMISSILETARGETCHECKINVERTED", sc2::BUFF_ID::SS_LEVIATHANTENTACLEMISSILETARGETCHECKINVERTED) + .value("SS_LEVIATHANTENTACLETARGETDEATHDELAY", sc2::BUFF_ID::SS_LEVIATHANTENTACLETARGETDEATHDELAY) + .value("SS_LIGHTNINGPROJECTOR", sc2::BUFF_ID::SS_LIGHTNINGPROJECTOR) + .value("SS_LIGHTNINGPROJECTORCOLLISIONCHECK", sc2::BUFF_ID::SS_LIGHTNINGPROJECTORCOLLISIONCHECK) + .value("SS_MAXACCELERATION", sc2::BUFF_ID::SS_MAXACCELERATION) + .value("SS_MAXSPEED", sc2::BUFF_ID::SS_MAXSPEED) + .value("SS_MISSILETARGETCHECK", sc2::BUFF_ID::SS_MISSILETARGETCHECK) + .value("SS_MISSILETARGETCHECKVIKING", sc2::BUFF_ID::SS_MISSILETARGETCHECKVIKING) + .value("SS_MISSILETARGETCHECKVIKINGDRONE", sc2::BUFF_ID::SS_MISSILETARGETCHECKVIKINGDRONE) + .value("SS_MISSILETARGETCHECKVIKINGSTRONG1", sc2::BUFF_ID::SS_MISSILETARGETCHECKVIKINGSTRONG1) + .value("SS_MISSILETARGETCHECKVIKINGSTRONG2", sc2::BUFF_ID::SS_MISSILETARGETCHECKVIKINGSTRONG2) + .value("SS_MISSILETIMEOUT", sc2::BUFF_ID::SS_MISSILETIMEOUT) + .value("SS_PHOENIXCOLLISIONCHECK", sc2::BUFF_ID::SS_PHOENIXCOLLISIONCHECK) + .value("SS_POWERUPDIAGONAL1", sc2::BUFF_ID::SS_POWERUPDIAGONAL1) + .value("SS_POWERUPDIAGONAL2", sc2::BUFF_ID::SS_POWERUPDIAGONAL2) + .value("SS_POWERUPHEALTH1", sc2::BUFF_ID::SS_POWERUPHEALTH1) + .value("SS_POWERUPHEALTH2", sc2::BUFF_ID::SS_POWERUPHEALTH2) + .value("SS_POWERUPMORPHTOBOMB", sc2::BUFF_ID::SS_POWERUPMORPHTOBOMB) + .value("SS_POWERUPMORPHTOHEALTH", sc2::BUFF_ID::SS_POWERUPMORPHTOHEALTH) + .value("SS_POWERUPMORPHTOSIDEMISSILES", sc2::BUFF_ID::SS_POWERUPMORPHTOSIDEMISSILES) + .value("SS_POWERUPMORPHTOSTRONGERMISSILES", sc2::BUFF_ID::SS_POWERUPMORPHTOSTRONGERMISSILES) + .value("SS_POWERUPSTRONG", sc2::BUFF_ID::SS_POWERUPSTRONG) + .value("SS_SCIENCEVESSELCOLLISIONCHECK", sc2::BUFF_ID::SS_SCIENCEVESSELCOLLISIONCHECK) + .value("SS_SCOURGECOLLISIONCHECK", sc2::BUFF_ID::SS_SCOURGECOLLISIONCHECK) + .value("SS_SCOURGEDEATH", sc2::BUFF_ID::SS_SCOURGEDEATH) + .value("SS_SCOURGEMISSILETARGETCHECK", sc2::BUFF_ID::SS_SCOURGEMISSILETARGETCHECK) + .value("SS_SCOUTCOLLISIONCHECK", sc2::BUFF_ID::SS_SCOUTCOLLISIONCHECK) + .value("SS_STRONGERENEMYBUFF", sc2::BUFF_ID::SS_STRONGERENEMYBUFF) + .value("SS_SWARMGUARDIANCOLLISIONCHECK", sc2::BUFF_ID::SS_SWARMGUARDIANCOLLISIONCHECK) + .value("SS_TERRATRONARMMISSILETARGETCHECK", sc2::BUFF_ID::SS_TERRATRONARMMISSILETARGETCHECK) + .value("SS_TERRATRONCOLLISIONCHECK", sc2::BUFF_ID::SS_TERRATRONCOLLISIONCHECK) + .value("SS_TERRATRONMISSILELAUNCHER", sc2::BUFF_ID::SS_TERRATRONMISSILELAUNCHER) + .value("SS_TERRATRONMISSILESPINNERCOLLISIONCHECK", sc2::BUFF_ID::SS_TERRATRONMISSILESPINNERCOLLISIONCHECK) + .value("SS_TERRATRONMISSILESPINNERMISSILELAUNCHER", sc2::BUFF_ID::SS_TERRATRONMISSILESPINNERMISSILELAUNCHER) + .value("SS_TERRATRONSAWCOLLISIONCHECK", sc2::BUFF_ID::SS_TERRATRONSAWCOLLISIONCHECK) + .value("SS_TERRATRONSTUN", sc2::BUFF_ID::SS_TERRATRONSTUN) + .value("SS_VIKINGRESPAWN", sc2::BUFF_ID::SS_VIKINGRESPAWN) + .value("SS_WRAITHCOLLISIONCHECK", sc2::BUFF_ID::SS_WRAITHCOLLISIONCHECK) + .value("STASIS", sc2::BUFF_ID::STASIS) + .value("STIMPACK", sc2::BUFF_ID::STIMPACK) + .value("STIMPACKMARAUDER", sc2::BUFF_ID::STIMPACKMARAUDER) + .value("STUNROUNDINITIALBEHAVIOR", sc2::BUFF_ID::STUNROUNDINITIALBEHAVIOR) + .value("SUPPLYDROP", sc2::BUFF_ID::SUPPLYDROP) + .value("TAUNTB", sc2::BUFF_ID::TAUNTB) + .value("TEMPESTDISRUPTIONBLASTSTUNBEHAVIOR", sc2::BUFF_ID::TEMPESTDISRUPTIONBLASTSTUNBEHAVIOR) + .value("TEMPORALFIELD", sc2::BUFF_ID::TEMPORALFIELD) + .value("TEMPORALRIFTUNIT", sc2::BUFF_ID::TEMPORALRIFTUNIT) + .value("TESTATTRIBUTE", sc2::BUFF_ID::TESTATTRIBUTE) + .value("TESTVETERANCY", sc2::BUFF_ID::TESTVETERANCY) + .value("TIMESCALECONVERSIONBEHAVIOR", sc2::BUFF_ID::TIMESCALECONVERSIONBEHAVIOR) + .value("TIMESTOPSTUN", sc2::BUFF_ID::TIMESTOPSTUN) + .value("TIMEWARPPRODUCTION", sc2::BUFF_ID::TIMEWARPPRODUCTION) + .value("TRANSFUSION", sc2::BUFF_ID::TRANSFUSION) + .value("TRANSIENTMORPH", sc2::BUFF_ID::TRANSIENTMORPH) + .value("TYCHUSCOMMANDOSTIMPACK", sc2::BUFF_ID::TYCHUSCOMMANDOSTIMPACK) + .value("ULTRASONICPULSESTUN", sc2::BUFF_ID::ULTRASONICPULSESTUN) + .value("VIPERCONSUMESTRUCTURE", sc2::BUFF_ID::VIPERCONSUMESTRUCTURE) + .value("VIRALPLASMA", sc2::BUFF_ID::VIRALPLASMA) + .value("VOIDMPIMMORTALREVIVESUPRESSED", sc2::BUFF_ID::VOIDMPIMMORTALREVIVESUPRESSED) + .value("VOIDRAYSWARMDAMAGEBOOST", sc2::BUFF_ID::VOIDRAYSWARMDAMAGEBOOST) + .value("VOIDSIPHON", sc2::BUFF_ID::VOIDSIPHON) + .value("VOODOOLOCKDOWN", sc2::BUFF_ID::VOODOOLOCKDOWN) + .value("VOODOOSHIELD", sc2::BUFF_ID::VOODOOSHIELD) + .value("VORTEXBEHAVIOR", sc2::BUFF_ID::VORTEXBEHAVIOR) + .value("VORTEXBEHAVIORENEMY", sc2::BUFF_ID::VORTEXBEHAVIORENEMY) + .value("VORTEXBEHAVIORERADICATOR", sc2::BUFF_ID::VORTEXBEHAVIORERADICATOR) + .value("WATER", sc2::BUFF_ID::WATER) + .value("WRAITHCLOAK", sc2::BUFF_ID::WRAITHCLOAK) + .value("ZERATULSTUN", sc2::BUFF_ID::ZERATULSTUN) + .value("_250MMSTRIKECANNONS", sc2::BUFF_ID::_250MMSTRIKECANNONS) + .value("_330MMBARRAGECANNONS", sc2::BUFF_ID::_330MMBARRAGECANNONS); + + py::enum_<sc2::EFFECT_ID>(m, "EFFECT_ID") + .value("BLINDINGCLOUD", sc2::EFFECT_ID::BLINDINGCLOUD) + .value("CORROSIVEBILE", sc2::EFFECT_ID::CORROSIVEBILE) + .value("GUARDIANSHIELD", sc2::EFFECT_ID::GUARDIANSHIELD) + .value("INVALID", sc2::EFFECT_ID::INVALID) + .value("LIBERATORDEFENDERZONE", sc2::EFFECT_ID::LIBERATORDEFENDERZONE) + .value("LIBERATORDEFENDERZONESETUP", sc2::EFFECT_ID::LIBERATORDEFENDERZONESETUP) + .value("LURKERSPINES", sc2::EFFECT_ID::LURKERSPINES) + .value("NUKEDOT", sc2::EFFECT_ID::NUKEDOT) + .value("PSISTORM", sc2::EFFECT_ID::PSISTORM) + .value("SCANNERSWEEP", sc2::EFFECT_ID::SCANNERSWEEP) + .value("TEMPORALFIELD", sc2::EFFECT_ID::TEMPORALFIELD) + .value("TEMPORALFIELDGROWING", sc2::EFFECT_ID::TEMPORALFIELDGROWING) + .value("THERMALLANCE", sc2::EFFECT_ID::THERMALLANCE); + }; diff --git a/python-api-src/lib_tech_tree.cpp b/python-api-src/lib_tech_tree.cpp index 69b4e27752e05c58c45a5f81dc7d7ed22977a7c5..44012c40d5833fb2530e2c3c156786885473b442 100644 --- a/python-api-src/lib_tech_tree.cpp +++ b/python-api-src/lib_tech_tree.cpp @@ -20,9 +20,9 @@ void define_tech_tree(py::module & m) .def_readonly("build_ability", &TypeData::buildAbility, "the ability that creates this item") .def_readonly("warp_ability", &TypeData::warpAbility, "the ability that creates this item via warp-in") .def_readonly("what_builds", &TypeData::whatBuilds, "any of these units can build the item") - .def_readonly("required_units", &TypeData::requiredUnits, "owning ONE of these is required to make") - .def_readonly("required_upgrades", &TypeData::requiredUpgrades, "having ALL of these is required to make") - .def_readonly("required_addons", &TypeData::requiredAddons, "a unit of this type must be present next to the producer"); + .def_readonly("required_units", &TypeData::requiredUnits, "owning ONE of these is required to make -> List[UnitType]") + .def_readonly("required_upgrades", &TypeData::requiredUpgrades, "having ALL of these is required to make -> List[UPGRADE_ID]") + .def_readonly("required_addons", &TypeData::requiredAddons, "a unit of this type must be present next to the producer -> List[UnitType]"); py::class_<TechTree>(m, "TechTree") .def("get_data", py::overload_cast<const UnitType &>(&TechTree::getData, py::const_)) diff --git a/python-api-src/lib_unit.cpp b/python-api-src/lib_unit.cpp index 83b3166272f4303cabb444eec4da2b6bda75d084..de09cc58769e8068353ffaab5d94be400208919c 100644 --- a/python-api-src/lib_unit.cpp +++ b/python-api-src/lib_unit.cpp @@ -35,6 +35,12 @@ void define_unit(py::module & m) .def_property_readonly("facing", &Unit::getFacing) .def_property_readonly("radius", &Unit::getRadius) .def_property_readonly("is_carrying_minerals", &Unit::isCarryingMinerals) + .def_property_readonly("is_carrying_gas", &Unit::isCarryingGas) + .def_property_readonly("gas_left_in_refinery", &Unit::gasLeftInGeyser) + .def_property_readonly("minerals_left_in_mineralfield", &Unit::mineralsLeftInMineralfield) + .def_property_readonly("owner", &Unit::getOwner) + .def_property_readonly("max_shields", &Unit::maxShields) + .def_property_readonly("max_energy", &Unit::maxEnergy) .def("hold_position", &Unit::holdPosition) .def("patrol", py::overload_cast<const CCPosition &>(&Unit::patrol, py::const_)) .def("stop_dance", &Unit::stopDance) diff --git a/python-api-src/lib_unittype.cpp b/python-api-src/lib_unittype.cpp index a5dcc01544e89c9ff41d95e27ab9193a7ee0837a..723f5e1f170076ff82ea437b25c77a14bf593ffd 100644 --- a/python-api-src/lib_unittype.cpp +++ b/python-api-src/lib_unittype.cpp @@ -40,6 +40,9 @@ void define_unittype(py::module & m) .def_property_readonly("is_egg", &UnitType::isEgg) .def_property_readonly("is_queen", &UnitType::isQueen) .def_property_readonly("is_tank", &UnitType::isTank) + .def_property_readonly("get_equivalent_units", &UnitType::getEquivalentUnits) + .def_property_readonly("required_attached", &UnitType::requiredAttached) + .def_property_readonly("build_time", &UnitType::getBuildTime) .def("__hash__", [](const UnitType & unit_type) { return std::hash<CCUnitID>{}(unit_type.getAPIUnitType()); }) .def(py::self == py::self) .def("__repr__", [](const UnitType & unit_type) { return "<UnitType: '" + unit_type.getName() + "'>"; }); diff --git a/python-api-src/library.cpp b/python-api-src/library.cpp index 29d5c965330768fc54193ac2ec1fc4378315a1bd..0206f191b3998d9a31e31c8924e9bd72fe9623c1 100644 --- a/python-api-src/library.cpp +++ b/python-api-src/library.cpp @@ -58,6 +58,11 @@ PYBIND11_MODULE(library, m) py::implicitly_convertible<sc2::UPGRADE_ID, sc2::UpgradeID>(); + py::class_<sc2::EffectID>(m, "EffectID") + .def(py::init<sc2::EFFECT_ID>()); + + py::implicitly_convertible<sc2::EFFECT_ID, sc2::EffectID>(); + py::class_<sc2::AbilityID>(m, "AbilityID") .def(py::init<sc2::ABILITY_ID>()); @@ -69,24 +74,55 @@ PYBIND11_MODULE(library, m) // IDABot is a specialization of Agent py::class_<IDABot, PyIDABot, sc2::Agent>(m, "IDABot") - .def(py::init()) - .def("on_game_start", &IDABot::OnGameStart) - .def("on_step", &IDABot::OnStep) - .def("send_chat", &IDABot::SendChat, "Send a message to the game chat", "message"_a) - .def("get_all_units", &IDABot::GetAllUnits, "Returns a list of all units") - .def("get_my_units", &IDABot::GetMyUnits, "Returns a list of all units beloning to the player") - .def("get_player_race", &IDABot::GetPlayerRace) - .def_property_readonly("base_location_manager", &IDABot::Bases) - .def_property_readonly("tech_tree", &IDABot::GetTechTree) - .def_property_readonly("map_tools", &IDABot::Map) - .def_property_readonly("building_placer", &IDABot::GetBuildingPlacer) - .def_property_readonly("start_location", &IDABot::GetStartLocation, "CCPosition representing the start location") - .def_property_readonly("start_locations", &IDABot::GetStartLocations, "CCPosition representing the start locations") - .def_property_readonly("minerals", &IDABot::GetMinerals, "How much minerals we currently have") - .def_property_readonly("current_supply", &IDABot::GetCurrentSupply, "How much supply we are currently using") - .def_property_readonly("max_supply", &IDABot::GetMaxSupply, "How much supply we can currently use") - .def_property_readonly("gas", &IDABot::GetGas, "How much gas we currently have") - .def_property_readonly("current_frame", &IDABot::GetCurrentFrame, "Which frame we are currently on"); + .def(py::init()) + .def("on_game_start", &IDABot::OnGameStart) + .def("on_step", &IDABot::OnStep) + .def("send_chat", &IDABot::SendChat, "Send a message to the game chat", "message"_a) + .def("get_all_units", &IDABot::GetAllUnits, "Returns a list of all units") + .def("get_my_units", &IDABot::GetMyUnits, "Returns a list of all units beloning to the player") + .def("get_player_race", &IDABot::GetPlayerRace) + .def("debug_create_unit", &IDABot::DebugCreateUnit, "unit_type"_a, "p"_a, "player_id"_a = 1, "count"_a = 1) + .def("debug_kill_unit", &IDABot::DebugKillUnit, "Kill unit from debug mode") + .def("debug_show_map", &IDABot::DebugShowMap, "Show the entire map through debug mode") + .def("debug_fast_build", &IDABot::DebugFastBuild, "Set build time to 1 through debug mode") + .def("debug_enemy_control", &IDABot::DebugEnemyControl, "Control the enemy through debug mode") + .def("debug_ignore_food", &IDABot::DebugIgnoreFood, "Ignore the food through debug mode") + .def("debug_ignore_resource_cost", &IDABot::DebugIgnoreResourceCost, "Ignore the resource cost through debug mode") + .def("debug_give_all_resources", &IDABot::DebugGiveAllResources, "Give all the resources through debug mode") + .def("debug_god_mode", &IDABot::DebugGodMode, "Give the player god mode") + .def("debug_ignore_mineral", &IDABot::DebugIgnoreMineral, "Ignore the mineral cost through debug mode") + .def("debug_no_cooldowns", &IDABot::DebugNoCooldowns, "Deactive cooldowns through debug mode") + .def("debug_give_all_tech", &IDABot::DebugGiveAllTech, "Give all the tech to the player through debug mode") + .def("debug_give_all_upgrades", &IDABot::DebugGiveAllUpgrades, "Give all the upgrades to the player trough debug mode") + .def("debug_set_score", &IDABot::DebugSetScore, "Set the Players score through debug mode") + .def("debug_end_game", &IDABot::DebugEndGame, "End the game through debug mode") + .def("debug_set_energy", &IDABot::DebugSetEnergy, "Set the energy on a unit through debug mode") + .def("debug_set_life", &IDABot::DebugSetLife, "Set the life on a unit through debug mode") + .def("debug_set_shields", &IDABot::DebugSetShields, "Set the shields on a unit through debug mode") + .def("get_enemy_base_location", &IDABot::GetEnemyBaseLocations, "Return the CCpostion of the enemy base") + .def("move_camera", &IDABot::CameraMove, "Move the camera to p postion", "p"_a) + .def("has_creep", &IDABot::HasCreep, "Returns true if there is creep at position p", "p"_a) + .def("ability_for_upgrade", &IDABot::abilityForUpgrade, "Ability that researches this upgrade", "upgrade"_a) + .def("upgrade_mineral_cost", &IDABot::UpgradeMineralCost, "Mineral cost of researching the upgrade", "upgrade"_a) + .def("upgrade_gas_cost", &IDABot::UpgradeGasCost, "Vespene/gas cost of researching the upgrade", "upgrade"_a) + .def("upgrade_research_time", &IDABot::UpgradeResearchTime, "Time in GameLoops to research this upgrade", "upgrade"_a) + .def("effect_radius", &IDABot::RadiusEffect, "Size of the circle the effect impacts", "effect"_a) + .def_property_readonly("base_location_manager", &IDABot::Bases) + .def_property_readonly("tech_tree", &IDABot::GetTechTree) + .def_property_readonly("map_tools", &IDABot::Map) + .def_property_readonly("building_placer", &IDABot::GetBuildingPlacer) + .def_property_readonly("start_location", &IDABot::GetStartLocation, "CCPosition representing the start location") + .def_property_readonly("start_locations", &IDABot::GetStartLocations, "CCPosition representing the start locations") + .def_property_readonly("minerals", &IDABot::GetMinerals, "How much minerals we currently have") + .def_property_readonly("current_supply", &IDABot::GetCurrentSupply, "How much supply we are currently using") + .def_property_readonly("max_supply", &IDABot::GetMaxSupply, "How much supply we can currently use") + .def_property_readonly("gas", &IDABot::GetGas, "How much gas we currently have") + .def_property_readonly("current_frame", &IDABot::GetCurrentFrame, "Which frame we are currently on"); + + + + + // API extended summer 2020 @@ -116,8 +152,17 @@ PYBIND11_MODULE(library, m) .value("CheatMoney", sc2::Difficulty::CheatMoney) .value("CheatInsane", sc2::Difficulty::CheatInsane); - m.def("create_participants", &sc2::CreateParticipant, "Create participant from bot", "race"_a, "bot"_a); - m.def("create_computer", &sc2::CreateComputer, "Create participant from built-in Starcraft computer", "race"_a, "difficulty"_a); + py::enum_<sc2::AIBuild>(m, "AIBuild") + .value("RandomBuild", sc2::AIBuild::RandomBuild) + .value("Rush", sc2::AIBuild::Rush) + .value("Timing", sc2::AIBuild::Timing) + .value("Power", sc2::AIBuild::Power) + .value("Macro", sc2::AIBuild::Macro) + .value("Air", sc2::AIBuild::Air); + + + m.def("create_participants", &sc2::CreateParticipant, "Create participant from bot", "race"_a, "bot"_a, "player_name"_a = ""); + m.def("create_computer", &sc2::CreateComputer, "Create participant from built-in Starcraft computer", "race"_a, "difficulty"_a, "ai_build"_a = sc2::AIBuild::RandomBuild, "player_name"_a = ""); /* py::class_<BuildDescription>(m, "BuildDescription") diff --git a/src/BaseLocation.cpp b/src/BaseLocation.cpp index d5f89e36834216d2a396286eb852fc1522f0e19c..b74c4b8e6199e32452bcbec83e793b684316f888 100644 --- a/src/BaseLocation.cpp +++ b/src/BaseLocation.cpp @@ -202,7 +202,9 @@ void BaseLocation::draw() { CCPositionType radius = Util::TileToPosition(1.0f); - m_bot.Map().drawCircle(m_centerOfResources, radius, CCColor(255, 255, 0)); + // Take first mineral for the Z-pos. + sc2::Point3D center_pos = sc2::Point3D(m_centerOfResources.x, m_centerOfResources.y, m_minerals[0].getUnitPtr()->pos.z); + m_bot.Map().drawResourceSphere(center_pos, radius, CCColor(255, 255, 0)); std::stringstream ss; ss << "BaseLocation: " << m_baseID << "\n"; @@ -237,14 +239,14 @@ void BaseLocation::draw() //m_bot.Map().drawLine(m_left, y, m_right, y, CCColor(160, 160, 160)); } - for (auto & mineralPos : m_mineralPositions) + for (auto & mineral : m_minerals) { - m_bot.Map().drawCircle(mineralPos, radius, CCColor(0, 128, 128)); + m_bot.Map().drawResourceSphere(mineral.getUnitPtr()->pos, radius, CCColor(0, 128, 128)); } - for (auto & geyserPos : m_geyserPositions) + for (auto & geyser : m_geysers) { - m_bot.Map().drawCircle(geyserPos, radius, CCColor(0, 255, 0)); + m_bot.Map().drawResourceSphere(geyser.getUnitPtr()->pos, radius, CCColor(0, 255, 0)); } if (m_isStartLocation) diff --git a/src/BaseLocationManager.cpp b/src/BaseLocationManager.cpp index 0e44fc4448b348c2cbb53c9319e56418dc068f0b..848c23fcb7d25a7e86ab1ffdb0108206eff39d3d 100644 --- a/src/BaseLocationManager.cpp +++ b/src/BaseLocationManager.cpp @@ -269,7 +269,7 @@ void BaseLocationManager::drawBaseLocations() const BaseLocation * next_expansion = getNextExpansion(Players::Self); CCTilePosition nextExpansionPosition = next_expansion->getDepotPosition(); - m_bot.Map().drawCircle(Util::GetPosition(nextExpansionPosition), 1, CCColor(255, 0, 255)); + m_bot.Map().drawResourceSphere(sc2::Point3D(Util::GetPosition(nextExpansionPosition).x, Util::GetPosition(nextExpansionPosition).y, next_expansion->getMinerals()[0].getUnitPtr()->pos.z), 1, CCColor(255, 0, 255)); m_bot.Map().drawText(Util::GetPosition(nextExpansionPosition), "Next Expansion Location", CCColor(255, 0, 255)); } diff --git a/src/BuildingPlacer.cpp b/src/BuildingPlacer.cpp index 4b048ed71de265e42b17041faa17ba528559855a..9638349f5ee62fe63449ac8bf44e4af5c644bf91 100644 --- a/src/BuildingPlacer.cpp +++ b/src/BuildingPlacer.cpp @@ -27,10 +27,15 @@ bool BuildingPlacer::canBuildHere(int bx, int by, const UnitType & type) const return false; } + int width = type.tileWidth(); + int height = type.tileHeight(); + int xdelta = (int)std::ceil((width - 1.0) / 2); + int ydelta = (int)std::ceil((height - 1.0) / 2); + // check the reserve map - for (int x = bx; x < bx + type.tileWidth(); x++) + for (int x = bx - xdelta; x < bx + width - xdelta; x++) { - for (int y = by; y < by + type.tileHeight(); y++) + for (int y = by - ydelta; y < by + height - ydelta; y++) { if (!m_bot.Map().isValidTile(x, y) || m_reserveMap[x][y]) { @@ -60,23 +65,31 @@ bool BuildingPlacer::canBuildHereWithSpace(int bx, int by, const UnitType & type // height and width of the building int width = type.tileWidth(); int height = type.tileHeight(); + int xdelta = (int)std::ceil((width - 1.0) / 2); + int ydelta = (int)std::ceil((height - 1.0) / 2); // TODO: make sure we leave space for add-ons. These types of units can have addons: // define the rectangle of the building spot - int startx = bx - buildDist; - int starty = by - buildDist; - int endx = bx + width + buildDist; - int endy = by + height + buildDist; + int startx = bx - buildDist - xdelta; + int starty = by - buildDist - ydelta; + int endx = bx + width + buildDist - xdelta; + int endy = by + height + buildDist - ydelta; // TODO: recalculate start and end positions for addons // if this rectangle doesn't fit on the map we can't build here - if (startx < 0 || starty < 0 || endx > m_bot.Map().width() || endx < bx + width || endy > m_bot.Map().height()) + if (startx < 0 || starty < 0 || endx > m_bot.Map().width() || endx < bx + width - xdelta || endy > m_bot.Map().height() || endy < by + height - ydelta) { return false; } + if (!m_bot.Map().canBuildTypeAtPosition(bx, by, type)) + { + return false; + } + + // if we can't build here, or space is reserved, or it's in the resource box, we can't build here for (int x = startx; x < endx; x++) { @@ -95,6 +108,8 @@ bool BuildingPlacer::canBuildHereWithSpace(int bx, int by, const UnitType & type return true; } +// BuildDist is the distance from the position where the building is gonna be placed. + CCTilePosition BuildingPlacer::getBuildLocationNear(const CCTilePosition & p, const UnitType & t, int buildDist, size_t search_count) const { //Timer t; @@ -135,10 +150,14 @@ bool BuildingPlacer::tileOverlapsBaseLocation(int x, int y, UnitType type) const } // dimensions of the proposed location - int tx1 = x; - int ty1 = y; - int tx2 = tx1 + type.tileWidth(); - int ty2 = ty1 + type.tileHeight(); + + int xdelta = (int)std::ceil((type.tileWidth() - 1.0) / 2); + int ydelta = (int)std::ceil((type.tileHeight() - 1.0) / 2); + + int tx1 = x - xdelta; + int ty1 = y - ydelta; + int tx2 = tx1 + type.tileWidth() - xdelta; + int ty2 = ty1 + type.tileHeight() - ydelta; // for each base location for (const BaseLocation * base : m_bot.Bases().getBaseLocations()) @@ -166,7 +185,7 @@ bool BuildingPlacer::tileOverlapsBaseLocation(int x, int y, UnitType type) const bool BuildingPlacer::buildable(const UnitType & type, int x, int y) const { // TODO: does this take units on the map into account? - if (!m_bot.Map().isValidTile(x, y) || !m_bot.Map().canBuildTypeAtPosition(x, y, type)) + if (!m_bot.Map().isValidTile(x, y)) { return false; } @@ -180,9 +199,13 @@ void BuildingPlacer::reserveTiles(int bx, int by, int width, int height) { int rwidth = (int)m_reserveMap.size(); int rheight = (int)m_reserveMap[0].size(); - for (int x = bx; x < bx + width && x < rwidth; x++) + + int xdelta = (int)std::ceil((width - 1.0) / 2); + int ydelta = (int)std::ceil((height - 1.0) / 2); + + for (int x = bx - xdelta; x < bx + width - xdelta && x < rwidth; x++) { - for (int y = by; y < by + height && y < rheight; y++) + for (int y = by - ydelta; y < by + height - ydelta && y < rheight; y++) { m_reserveMap[x][y] = true; } @@ -191,6 +214,7 @@ void BuildingPlacer::reserveTiles(int bx, int by, int width, int height) void BuildingPlacer::drawReservedTiles() { + // Why is there a return here? Should we not use the function? /Hannes Jämtner return; int rwidth = (int)m_reserveMap.size(); int rheight = (int)m_reserveMap[0].size(); @@ -212,9 +236,12 @@ void BuildingPlacer::freeTiles(int bx, int by, int width, int height) int rwidth = (int)m_reserveMap.size(); int rheight = (int)m_reserveMap[0].size(); - for (int x = bx; x < bx + width && x < rwidth; x++) + int xdelta = (int)std::ceil((width - 1.0) / 2); + int ydelta = (int)std::ceil((height - 1.0) / 2); + + for (int x = bx - xdelta; x < bx + width - xdelta && x < rwidth; x++) { - for (int y = by; y < by + height && y < rheight; y++) + for (int y = by - ydelta; y < by + height - ydelta && y < rheight; y++) { m_reserveMap[x][y] = false; } @@ -227,8 +254,12 @@ CCTilePosition BuildingPlacer::getRefineryPosition() double minGeyserDistanceFromHome = std::numeric_limits<double>::max(); CCPosition homePosition = m_bot.GetStartLocation(); + for (auto & unit : m_bot.GetAllUnits()) { + UnitType refinery = Util::GetRefinery(m_bot.GetPlayerRace(Players::Self), m_bot); + + if (!unit.getType().isGeyser()) { continue; @@ -236,6 +267,13 @@ CCTilePosition BuildingPlacer::getRefineryPosition() CCPosition geyserPos(unit.getPosition()); + + // can't build a refinery on top of another + if (!m_bot.Map().canBuildTypeAtPosition((int)geyserPos.x, (int)geyserPos.y, refinery)) + { + continue; + } + // check to see if it's next to one of our depots bool nearDepot = false; for (auto & unit : m_bot.UnitInfo().getUnits(Players::Self)) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3c540390a0c1d6d73f9486fb28f6c7480e6c4b57..31e2f6846a2291f4013d8d13ce062b35ab13e6a6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,13 +2,13 @@ file(GLOB BOT_SOURCES "*.cpp" "*.h" "*.hpp") include_directories(SYSTEM - ${PROJECT_SOURCE_DIR}/lib/s2client-api/include - ${PROJECT_SOURCE_DIR}/lib/s2client-api/contrib/protobuf/src - ${PROJECT_BINARY_DIR}/lib/s2client-api/generated + ${PROJECT_SOURCE_DIR}/lib/cpp-sc2/include + ${PROJECT_SOURCE_DIR}/lib/cpp-sc2/contrib/protobuf/src + ${PROJECT_BINARY_DIR}/lib/cpp-sc2/generated ${PROJECT_SOURCE_DIR}/lib/json/include ) -link_directories(${PROJECT_BINARY_DIR}/s2client-api/bin) +link_directories(${PROJECT_BINARY_DIR}/cpp-sc2/bin) # Enable compilation of the SC2 version of the bot. add_definitions(-DSC2API) diff --git a/src/IDABot.cpp b/src/IDABot.cpp index d0908f789cb42ab5675a0028889085a4918d79bd..cda0ce75922c415a037b86161fb74089a09cede9 100644 --- a/src/IDABot.cpp +++ b/src/IDABot.cpp @@ -1,6 +1,7 @@ #include "IDABot.h" #include "Util.h" + IDABot::IDABot() : m_map(*this) , m_bases(*this) @@ -224,3 +225,141 @@ const TypeData & IDABot::Data(const MetaType & type) const { return m_techTree.getData(type); } + +/* + API extended summer 2020 +*/ + +void IDABot::DebugCreateUnit(UnitTypeID unit_type, const CCPosition& p, uint32_t player_id, uint32_t count) +{ + Debug()->DebugCreateUnit(unit_type, p, player_id, count); +} + +void IDABot::DebugKillUnit(const Unit unit) +{ + Debug()->DebugKillUnit(unit.getUnitPtr()); +} + +void IDABot::DebugShowMap() +{ + Debug()->DebugShowMap(); +} + +void IDABot::DebugFastBuild() +{ + Debug()->DebugFastBuild(); +} + +void IDABot::DebugEnemyControl() +{ + Debug()->DebugEnemyControl(); +} + +void IDABot::DebugIgnoreFood() +{ + Debug()->DebugIgnoreFood(); +} + +void IDABot::DebugIgnoreResourceCost() +{ + Debug()->DebugIgnoreResourceCost(); +} + +void IDABot::DebugGiveAllResources() +{ + Debug()->DebugGiveAllResources(); +} + +void IDABot::DebugGodMode() +{ + Debug()->DebugGodMode(); +} + +void IDABot::DebugIgnoreMineral() +{ + Debug()->DebugIgnoreMineral(); +} + +void IDABot::DebugNoCooldowns() +{ + Debug()->DebugIgnoreMineral(); +} + +void IDABot::DebugGiveAllTech() +{ + Debug()->DebugGiveAllTech(); +} + +void IDABot::DebugGiveAllUpgrades() +{ + Debug()->DebugGiveAllUpgrades(); +} + +void IDABot::DebugSetScore(float score) +{ + Debug()->DebugSetScore(score); +} + +void IDABot::DebugEndGame(bool victory) +{ + Debug()->DebugEndGame(victory); +} + +void IDABot::DebugSetEnergy(float value, const Unit unit) +{ + Debug()->DebugSetEnergy(value, unit.getUnitPtr()); +} + +void IDABot::DebugSetLife(float value, const Unit unit) +{ + Debug()->DebugSetLife(value, unit.getUnitPtr()); +} + +void IDABot::DebugSetShields(float value, const Unit unit) +{ + Debug()->DebugSetShields(value, unit.getUnitPtr()); +} + +// There is a bug in the latest SC2 (if using Blizzard API with game >=4.10) +// This a function to get the enemy base instead of using build location manager +// Switched over to other API where this is solved +// Leaving function incase of it breaking +const std::vector<Point2D> IDABot::GetEnemyBaseLocations() +{ + return Observation()->GetGameInfo().enemy_start_locations; +} + +bool IDABot::HasCreep(Point2D p) const +{ + return Observation()->HasCreep(p); +} + +void IDABot::CameraMove(Point2DI p) +{ + ActionsFeatureLayer()->CameraMove(p); +} + +sc2::ABILITY_ID IDABot::abilityForUpgrade(sc2::UpgradeID upgrade_id) const +{ + return (sc2::ABILITY_ID)Observation()->GetUpgradeData()[upgrade_id].ability_id; +} + +uint32_t IDABot::UpgradeMineralCost(sc2::UpgradeID upgrade_id) const +{ + return Observation()->GetUpgradeData()[upgrade_id].mineral_cost; +} + +uint32_t IDABot::UpgradeGasCost(sc2::UpgradeID upgrade_id) const +{ + return Observation()->GetUpgradeData()[upgrade_id].vespene_cost; +} + +float IDABot::UpgradeResearchTime(sc2::UpgradeID upgrade_id) const +{ + return Observation()->GetUpgradeData()[upgrade_id].research_time; +} + +float IDABot::RadiusEffect(sc2::EffectID effect_id) const +{ + return Observation()->GetEffectData()[effect_id].radius; +} \ No newline at end of file diff --git a/src/IDABot.h b/src/IDABot.h index a1567ac9f75b75b6d5268cb3c4f3e372e8eac23e..84e38978f0c93f1328d5a6506b4f8495e0b7d5d8 100644 --- a/src/IDABot.h +++ b/src/IDABot.h @@ -14,6 +14,10 @@ #include "MetaType.h" #include "Unit.h" +using sc2::UnitTypeID; +using sc2::Point2D; +using sc2::Point2DI; + class IDABot : public sc2::Agent { MapTools m_map; @@ -59,6 +63,38 @@ public: const std::vector<Unit> GetUnits(const UnitType & type, int player = Players::Self) const; const std::vector<CCPosition> & GetStartLocations() const; + /* + API extended summer 2020 + */ + void DebugCreateUnit(UnitTypeID unit_type, const CCPosition& p, uint32_t player_id = 1, uint32_t count = 1); + void DebugKillUnit(const Unit unit); + void DebugShowMap(); + void DebugFastBuild(); + void DebugEnemyControl(); + void DebugIgnoreFood(); + void DebugIgnoreResourceCost(); + void DebugGiveAllResources(); + void DebugGodMode(); + void DebugIgnoreMineral(); + void DebugNoCooldowns(); + void DebugGiveAllTech(); + void DebugGiveAllUpgrades(); + void DebugSetScore(float score); + void DebugEndGame(bool victory); + void DebugSetEnergy(float value, const Unit unit); + void DebugSetLife(float value, const Unit unit); + void DebugSetShields(float value, const Unit unit); + const std::vector<Point2D> GetEnemyBaseLocations(); + bool HasCreep(Point2D p) const; + void CameraMove(Point2DI p); + sc2::ABILITY_ID abilityForUpgrade(sc2::UpgradeID upgrade_id) const; + uint32_t UpgradeMineralCost(sc2::UpgradeID upgrade_id) const; + uint32_t UpgradeGasCost(sc2::UpgradeID upgrade_id) const; + float UpgradeResearchTime(sc2::UpgradeID upgrade_id) const; + float RadiusEffect(sc2::EffectID effect_id) const; + + + // Not needed, just convenience functions const TypeData & Data(const UnitType & type) const; const TypeData & Data(const CCUpgrade & type) const; diff --git a/src/MapTools.cpp b/src/MapTools.cpp index 9adad0de01b7c3736c7cbfdc5e1be8765dd7adb4..74363174179090016da9be8037b70bf90f09b0fd 100644 --- a/src/MapTools.cpp +++ b/src/MapTools.cpp @@ -7,6 +7,23 @@ #include <fstream> #include <array> +namespace { + bool getBit(const sc2::ImageData& grid, int tileX, int tileY) { + assert(grid.bits_per_pixel == 1); + + sc2::Point2DI pointI(tileX, tileY); + if (pointI.x < 0 || pointI.x >= grid.width || pointI.y < 0 || pointI.y >= grid.height) + { + return false; + } + + div_t idx = div(pointI.x + pointI.y * grid.width, 8); + return (grid.data[idx.quot] >> (7 - idx.rem)) & 1; + } + +} // namespace + + const size_t LegalActions = 4; const int actionX[LegalActions] ={1, -1, 0, 0}; const int actionY[LegalActions] ={0, 0, 1, -1}; @@ -384,6 +401,15 @@ void MapTools::drawCircle(const CCPosition & pos, CCPositionType radius, const C #endif } +void MapTools::drawResourceSphere(const sc2::Point3D & pos, CCPositionType radius, const CCColor & color) const +{ +#ifdef SC2API + m_bot.Debug()->DebugSphereOut(pos, radius, color); +#else + BWAPI::Broodwar->drawCircleMap(pos, radius, color); +#endif +} + void MapTools::drawCircle(CCPositionType x, CCPositionType y, CCPositionType radius, const CCColor & color) const { #ifdef SC2API @@ -541,17 +567,7 @@ CCTilePosition MapTools::getLeastRecentlySeenTile() const bool MapTools::canWalk(int tileX, int tileY) { #ifdef SC2API - auto & info = m_bot.Observation()->GetGameInfo(); - sc2::Point2DI pointI(tileX, tileY); - if (pointI.x < 0 || pointI.x >= info.width || pointI.y < 0 || pointI.y >= info.width) - { - return false; - } - - assert(info.pathing_grid.data.size() == info.width * info.height); - unsigned char encodedPlacement = info.pathing_grid.data[pointI.x + ((info.height - 1) - pointI.y) * info.width]; - bool decodedPlacement = encodedPlacement == 255 ? false : true; - return decodedPlacement; + return getBit(m_bot.Observation()->GetGameInfo().pathing_grid, tileX, tileY); #else for (int i=0; i<4; ++i) { @@ -571,17 +587,7 @@ bool MapTools::canWalk(int tileX, int tileY) bool MapTools::canBuild(int tileX, int tileY) { #ifdef SC2API - auto & info = m_bot.Observation()->GetGameInfo(); - sc2::Point2DI pointI(tileX, tileY); - if (pointI.x < 0 || pointI.x >= info.width || pointI.y < 0 || pointI.y >= info.width) - { - return false; - } - - assert(info.placement_grid.data.size() == info.width * info.height); - unsigned char encodedPlacement = info.placement_grid.data[pointI.x + ((info.height - 1) - pointI.y) * info.width]; - bool decodedPlacement = encodedPlacement == 255 ? true : false; - return decodedPlacement; + return getBit(m_bot.Observation()->GetGameInfo().placement_grid, tileX, tileY); #else return BWAPI::Broodwar->isBuildable(BWAPI::TilePosition(tileX, tileY)); #endif @@ -604,4 +610,5 @@ float MapTools::terrainHeight(const CCPosition & point) const #else return 0; #endif -} \ No newline at end of file +} + diff --git a/src/MapTools.h b/src/MapTools.h index 51f0533986cfb7a0c4b791d8c20178d346ab94c2..870052aaa453330c54037fd70ba4f2027022743e 100644 --- a/src/MapTools.h +++ b/src/MapTools.h @@ -42,6 +42,7 @@ public: void onStart(); void onFrame(); + int width() const; int height() const; float terrainHeight(float x, float y) const; @@ -53,6 +54,7 @@ public: void drawBox(const CCPosition & tl, const CCPosition & br, const CCColor & color = CCColor(255, 255, 255)) const; void drawCircle(CCPositionType x1, CCPositionType x2, CCPositionType radius, const CCColor & color = CCColor(255, 255, 255)) const; void drawCircle(const CCPosition & pos, CCPositionType radius, const CCColor & color = CCColor(255, 255, 255)) const; + void drawResourceSphere(const sc2::Point3D & pos, CCPositionType radius, const CCColor & color = CCColor(255, 255, 255)) const; void drawText(const CCPosition & pos, const std::string & str, const CCColor & color = CCColor(255, 255, 255)) const; void drawTextScreen(float xPerc, float yPerc, const std::string & str, const CCColor & color = CCColor(255, 255, 255)) const; diff --git a/src/TechTree.cpp b/src/TechTree.cpp index 89d511f7a0d7a0fb8fc752c0c009474cab4d50a8..aca2be4e7d6614d41de6714f8523e2cbbc634b5d 100644 --- a/src/TechTree.cpp +++ b/src/TechTree.cpp @@ -216,7 +216,7 @@ void TechTree::initUnitTypeData() // Zerg Units m g s t unit bld wrk rfn sup hall add m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_OVERLORD, m_bot)] = { sc2::Race::Zerg, 0, 0, 0, 0, true, false, false, false, true, false, false, sc2::ABILITY_ID::TRAIN_OVERLORD, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, {}, {} }; - m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_BANELING, m_bot)] = { sc2::Race::Zerg, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_BANELING, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, { UnitType(sc2::UNIT_TYPEID::ZERG_BANELINGNEST, m_bot) }, {} }; + m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_BANELING, m_bot)] = { sc2::Race::Zerg, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::MORPH_BANELING, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, { UnitType(sc2::UNIT_TYPEID::ZERG_BANELINGNEST, m_bot) }, {} }; m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_CORRUPTOR, m_bot)] = { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_CORRUPTOR, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, { UnitType(sc2::UNIT_TYPEID::ZERG_SPIRE, m_bot), UnitType(sc2::UNIT_TYPEID::ZERG_GREATERSPIRE, m_bot) }, {} }; m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_DRONE, m_bot)] = { sc2::Race::Zerg, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_DRONE, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, {}, {} }; m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_HYDRALISK, m_bot)] = { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_HYDRALISK, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, { UnitType(sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN, m_bot), UnitType(sc2::UNIT_TYPEID::ZERG_LURKERDENMP, m_bot) }, {} }; @@ -263,7 +263,7 @@ void TechTree::initUpgradeData() m_upgradeData[sc2::UPGRADE_ID::HIGHCAPACITYBARRELS] = { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_INFERNALPREIGNITER, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_SCV, m_bot) }, {}, {} }; m_upgradeData[sc2::UPGRADE_ID::HISECAUTOTRACKING] = { sc2::Race::Terran, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_HISECAUTOTRACKING, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY, m_bot) }, {}, {} }; m_upgradeData[sc2::UPGRADE_ID::LIBERATORAGRANGEUPGRADE] = { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ADVANCEDBALLISTICS, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB, m_bot) }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::MAGFIELDLAUNCHERS] = { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_MAGFIELDLAUNCHERS, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_SCV, m_bot) }, {}, {} }; + m_upgradeData[sc2::UPGRADE_ID::MAGFIELDLAUNCHERS] = { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_CYCLONELOCKONDAMAGE, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_SCV, m_bot) }, {}, {} }; m_upgradeData[sc2::UPGRADE_ID::MEDIVACINCREASESPEEDBOOST] = { sc2::Race::Terran, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_HIGHCAPACITYFUELTANKS, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_SCV, m_bot) }, {}, {} }; m_upgradeData[sc2::UPGRADE_ID::NEOSTEELFRAME] = { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_NEOSTEELFRAME, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY, m_bot) }, {}, {} }; m_upgradeData[sc2::UPGRADE_ID::PERSONALCLOAKING] = { sc2::Race::Terran, 150, 150, 0, 1920, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PERSONALCLOAKING, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY, m_bot) }, {}, {} }; diff --git a/src/TechTree.json b/src/TechTree.json deleted file mode 100644 index 4e48786c391c367027fe97e2ed33083366f07dcf..0000000000000000000000000000000000000000 --- a/src/TechTree.json +++ /dev/null @@ -1,296 +0,0 @@ -#include "TechTree.h" -#include "Util.h" -#include "CCBot.h" -#include "BuildType.h" -#include "Timer.hpp" - -TechTree::TechTree(CCBot & bot) - : m_bot(bot) -{ - -} - -void TechTree::onStart() -{ - initUnitTypeData(); - initUpgradeData(); -} - -void TechTree::initUnitTypeData() -{ - m_upgradeData[0] = TypeData(); - - // Protoss Buildings unit bld wrk rfn sup hall add - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_PYLON] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, true, false, false, sc2::ABILITY_ID::BUILD_PYLON, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_NEXUS] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, true, false, sc2::ABILITY_ID::BUILD_NEXUS, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ASSIMILATOR] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, true, false, false, false, sc2::ABILITY_ID::BUILD_ASSIMILATOR, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_CYBERNETICSCORE, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY, sc2::UNIT_TYPEID::PROTOSS_WARPGATE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_DARKSHRINE, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_FLEETBEACON, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_FORGE] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_FORGE, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_NEXUS }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_GATEWAY] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_GATEWAY, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_NEXUS }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_STARGATE] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_STARGATE, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_PHOTONCANNON] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_PHOTONCANNON, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ROBOTICSBAY, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ROBOTICSFACILITY, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_TEMPLARARCHIVE, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_TWILIGHTCOUNCIL, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_WARPGATE] = { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::MORPH_WARPGATE, 0, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, {}, { sc2::UPGRADE_ID::WARPGATERESEARCH } }; - - // Protoss Units unit bld wrk rfn sup hall add - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_PROBE] = { sc2::Race::Protoss, 0, 0, 1, 0, true, false, true, false, false, false, false, sc2::ABILITY_ID::TRAIN_PROBE, 0, { sc2::UNIT_TYPEID::PROTOSS_NEXUS }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIPCORE] = { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_MOTHERSHIPCORE, 0, { sc2::UNIT_TYPEID::PROTOSS_NEXUS }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ZEALOT] = { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ZEALOT, sc2::ABILITY_ID::TRAINWARP_ZEALOT, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_SENTRY] = { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_SENTRY, sc2::ABILITY_ID::TRAINWARP_SENTRY, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_STALKER] = { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_STALKER, sc2::ABILITY_ID::TRAINWARP_STALKER, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_HIGHTEMPLAR] = { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_HIGHTEMPLAR, sc2::ABILITY_ID::TRAINWARP_HIGHTEMPLAR, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, { sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_DARKTEMPLAR] = { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_DARKTEMPLAR, sc2::ABILITY_ID::TRAINWARP_DARKTEMPLAR, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, { sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ADEPT] = { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ADEPT, sc2::ABILITY_ID::TRAINWARP_ADEPT, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_COLOSSUS] = { sc2::Race::Protoss, 0, 0, 6, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_COLOSSUS, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_DISRUPTOR] = { sc2::Race::Protoss, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_DISRUPTOR, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_WARPPRISM] = { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_WARPPRISM, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_OBSERVER] = { sc2::Race::Protoss, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_OBSERVER, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_IMMORTAL] = { sc2::Race::Protoss, 0, 0, 4, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_IMMORTAL, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_CARRIER] = { sc2::Race::Protoss, 0, 0, 6, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_CARRIER, 0, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ORACLE] = { sc2::Race::Protoss, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ORACLE, 0, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_PHOENIX] = { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_PHOENIX, 0, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_VOIDRAY] = { sc2::Race::Protoss, 0, 0, 4, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_VOIDRAY, 0, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_TEMPEST] = { sc2::Race::Protoss, 0, 0, 4, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_TEMPEST, 0, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_INTERCEPTOR] = { sc2::Race::Protoss, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::BUILD_INTERCEPTORS, 0, { sc2::UNIT_TYPEID::PROTOSS_CARRIER }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ORACLESTASISTRAP] = { sc2::Race::Protoss, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::BUILD_STASISTRAP, 0, { sc2::UNIT_TYPEID::PROTOSS_ORACLE }, {}, {} }; - - // Terran Buildings m g s t unit bld wrk rfn sup hall add - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, true, false, sc2::ABILITY_ID::BUILD_COMMANDCENTER, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, true, false, false, sc2::ABILITY_ID::BUILD_SUPPLYDEPOT, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_REFINERY] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, true, false, false, false, sc2::ABILITY_ID::BUILD_REFINERY, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_ARMORY] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ARMORY, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_FACTORY, sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BARRACKS] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_BARRACKS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT, sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOTLOWERED }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SENSORTOWER] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_SENSORTOWER, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FACTORY] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_FACTORY, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_BARRACKS, sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FUSIONCORE] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_FUSIONCORE, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_STARPORT, sc2::UNIT_TYPEID::TERRAN_STARPORTFLYING }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_STARPORT] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_STARPORT, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_FACTORY, sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_GHOSTACADEMY, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_BARRACKS, sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BUNKER] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_BUNKER, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_BARRACKS, sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ENGINEERINGBAY, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER, sc2::UNIT_TYPEID::TERRAN_COMMANDCENTERFLYING, sc2::UNIT_TYPEID::TERRAN_PLANETARYFORTRESS, sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND, sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMANDFLYING }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_MISSILETURRET] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_MISSILETURRET, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::MORPH_ORBITALCOMMAND, 0, { sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_PLANETARYFORTRESS] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::MORPH_PLANETARYFORTRESS, 0, { sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER }, {}, {} }; - - // Terran Addons m g s t unit bld wrk rfn sup hall add - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BARRACKSREACTOR] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_REACTOR_BARRACKS, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_TECHLAB_BARRACKS, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FACTORYREACTOR] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_REACTOR_FACTORY, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_TECHLAB_FACTORY, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_STARPORTREACTOR] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_REACTOR_STARPORT, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB] = { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_TECHLAB_STARPORT, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} }; - - // Terran Equivalent Buildings - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOTLOWERED] = m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT]; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING] = m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BARRACKS]; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_COMMANDCENTERFLYING] = m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER]; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING] = m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FACTORY]; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMANDFLYING] = m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND]; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_STARPORTFLYING] = m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_STARPORT]; - - // Terran Units m g s t unit bld wrk rfn sup hall add - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SCV] = { sc2::Race::Terran, 0, 0, 1, 0, true, false, true, false, false, false, false, sc2::ABILITY_ID::TRAIN_SCV, 0, { sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_GHOST] = { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_GHOST, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_MARAUDER] = { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_MARAUDER, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, { sc2::UNIT_TYPEID::TERRAN_TECHLAB, sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB, sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB, sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_MARINE] = { sc2::Race::Terran, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_MARINE, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_REAPER] = { sc2::Race::Terran, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_REAPER, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_HELLION] = { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_HELLION, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_CYCLONE] = { sc2::Race::Terran, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_CYCLONE, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SIEGETANK] = { sc2::Race::Terran, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_SIEGETANK, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, { sc2::UNIT_TYPEID::TERRAN_TECHLAB, sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB, sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB, sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_THOR] = { sc2::Race::Terran, 0, 0, 6, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_THOR, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_WIDOWMINE] = { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_WIDOWMINE, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_NUKE] = { sc2::Race::Terran, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::BUILD_NUKE, 0, { sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BANSHEE] = { sc2::Race::Terran, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_BANSHEE, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, { sc2::UNIT_TYPEID::TERRAN_TECHLAB, sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB, sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB, sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BATTLECRUISER] = { sc2::Race::Terran, 0, 0, 6, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_BATTLECRUISER, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_LIBERATOR] = { sc2::Race::Terran, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_LIBERATOR, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_VIKINGFIGHTER] = { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_VIKINGFIGHTER, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_RAVEN] = { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_RAVEN, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, { sc2::UNIT_TYPEID::TERRAN_TECHLAB, sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB, sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB, sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_MEDIVAC] = { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_MEDIVAC, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_MULE] = { sc2::Race::Terran, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::EFFECT_CALLDOWNMULE, 0, { sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND }, {}, {} }; - - // Zerg Buildings m g s t unit bld wrk rfn sup hall add - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_HATCHERY] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, true, false, sc2::ABILITY_ID::BUILD_HATCHERY, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_EXTRACTOR] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, true, false, false, false, sc2::ABILITY_ID::BUILD_EXTRACTOR, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_SPAWNINGPOOL, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_HATCHERY, sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_EVOLUTIONCHAMBER, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_HATCHERY, sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_BANELINGNEST] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_BANELINGNEST, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_HYDRALISKDEN, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_INFESTATIONPIT, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_NYDUSCANAL] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_NYDUSWORM, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_NYDUSNETWORK }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_NYDUSNETWORK] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_NYDUSNETWORK, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_ROACHWARREN] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ROACHWARREN, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_SPINECRAWLER] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_SPINECRAWLER, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_SPIRE] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_SPIRE, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_GREATERSPIRE] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::MORPH_GREATERSPIRE, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_SPORECRAWLER] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_SPORECRAWLER, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ULTRALISKCAVERN, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_LAIR] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, true, false, sc2::ABILITY_ID::MORPH_LAIR, 0, { sc2::UNIT_TYPEID::ZERG_HATCHERY }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_HIVE] = { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, true, false, sc2::ABILITY_ID::MORPH_HIVE, 0, { sc2::UNIT_TYPEID::ZERG_LAIR }, {}, {} }; - - // Zerg Units m g s t unit bld wrk rfn sup hall add - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_OVERLORD] = { sc2::Race::Zerg, 0, 0, 0, 0, true, false, false, false, true, false, false, sc2::ABILITY_ID::TRAIN_OVERLORD, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_BANELING] = { sc2::Race::Zerg, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_BANELING, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_BANELINGNEST }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_CORRUPTOR] = { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_CORRUPTOR, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_DRONE] = { sc2::Race::Zerg, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_DRONE, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, {}, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_HYDRALISK] = { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_HYDRALISK, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN, sc2::UNIT_TYPEID::ZERG_LURKERDENMP }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_INFESTOR] = { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_INFESTOR, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_MUTALISK] = { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_MUTALISK, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_ROACH] = { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ROACH, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_ROACHWARREN }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_SWARMHOSTMP] = { sc2::Race::Zerg, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_SWARMHOST, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_ULTRALISK] = { sc2::Race::Zerg, 0, 0, 6, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ULTRALISK, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_VIPER] = { sc2::Race::Zerg, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_VIPER, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_ZERGLING] = { sc2::Race::Zerg, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ZERGLING, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_QUEEN] = { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_QUEEN, 0, { sc2::UNIT_TYPEID::ZERG_HATCHERY }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_LARVA] = { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, 0, 0, { 0 }, { 0 }, {} }; - m_unitTypeData[sc2::UNIT_TYPEID::ZERG_EGG] = { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, 0, 0, { 0 }, { 0 }, {} }; - - // Set the Mineral / Gas cost of each unit - for (auto & kv : m_unitTypeData) - { - if (kv.first == 0) { continue; } - - auto & data = m_bot.Observation()->GetUnitTypeData(); - - kv.second.mineralCost = m_bot.Observation()->GetUnitTypeData()[kv.first].mineral_cost; - kv.second.gasCost = m_bot.Observation()->GetUnitTypeData()[kv.first].vespene_cost; - } -} - -void TechTree::initUpgradeData() -{ - // 0 data for null / error return - m_upgradeData[0] = TypeData(); - - // Terran Upgrades - m_upgradeData[sc2::UPGRADE_ID::BANSHEECLOAK] = { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_BANSHEECLOAKINGFIELD, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::BANSHEESPEED] = { sc2::Race::Terran, 200, 200, 0, 2720, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_BANSHEEHYPERFLIGHTROTORS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::BATTLECRUISERENABLESPECIALIZATIONS]= { sc2::Race::Terran, 150, 150, 0, 960, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_BATTLECRUISERWEAPONREFIT, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::DRILLCLAWS] = { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_DRILLINGCLAWS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::HIGHCAPACITYBARRELS] = { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_INFERNALPREIGNITER, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::HISECAUTOTRACKING] = { sc2::Race::Terran, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_HISECAUTOTRACKING, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::LIBERATORAGRANGEUPGRADE] = { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ADVANCEDBALLISTICS, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::MAGFIELDLAUNCHERS] = { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_MAGFIELDLAUNCHERS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::MEDIVACINCREASESPEEDBOOST] = { sc2::Race::Terran, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_HIGHCAPACITYFUELTANKS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::NEOSTEELFRAME] = { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_NEOSTEELFRAME, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::PERSONALCLOAKING] = { sc2::Race::Terran, 150, 150, 0, 1920, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PERSONALCLOAKING, 0, { sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::PUNISHERGRENADES] = { sc2::Race::Terran, 50, 50, 0, 960, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_CONCUSSIVESHELLS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::RAVENCORVIDREACTOR] = { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_RAVENCORVIDREACTOR, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::RAVENRECALIBRATEDEXPLOSIVES] = { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_RAVENRECALIBRATEDEXPLOSIVES, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::SHIELDWALL] = { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_COMBATSHIELD, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::STIMPACK] = { sc2::Race::Terran, 100, 100, 0, 2720, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_STIMPACK, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANBUILDINGARMOR] = { sc2::Race::Terran, 150, 150, 0, 2240, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANSTRUCTUREARMORUPGRADE, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL1] = { sc2::Race::Terran, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL1, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL2] = { sc2::Race::Terran, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL2, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL1} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL3] = { sc2::Race::Terran, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL3, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL2} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL1] = { sc2::Race::Terran, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL2] = { sc2::Race::Terran, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL1} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL3] = { sc2::Race::Terran, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL2} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL1] = { sc2::Race::Terran, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL2] = { sc2::Race::Terran, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL1} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL3] = { sc2::Race::Terran, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL2} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL1] = { sc2::Race::Terran, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL2] = { sc2::Race::Terran, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL1} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL3] = { sc2::Race::Terran, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL2} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL1] = { sc2::Race::Terran, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL2] = { sc2::Race::Terran, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL1} }; - m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL3] = { sc2::Race::Terran, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL2} }; - - // Protoss Upgrades - m_upgradeData[sc2::UPGRADE_ID::ADEPTPIERCINGATTACK] = { sc2::Race::Protoss, 100, 100, 0, 2240, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ADEPTRESONATINGGLAIVES, 0, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::BLINKTECH] = { sc2::Race::Protoss, 150, 150, 0, 2720, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_BLINK, 0, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::CARRIERLAUNCHSPEEDUPGRADE] = { sc2::Race::Protoss, 150, 150, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_INTERCEPTORGRAVITONCATAPULT, 0, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::CHARGE] = { sc2::Race::Protoss, 100, 100, 0, 2240, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_CHARGE, 0, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::DARKTEMPLARBLINKUPGRADE] = { sc2::Race::Protoss, 100, 100, 0, 2720, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_SHADOWSTRIKE, 0, { sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::EXTENDEDTHERMALLANCE] = { sc2::Race::Protoss, 200, 200, 0, 2240, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_EXTENDEDTHERMALLANCE, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::GRAVITICDRIVE] = { sc2::Race::Protoss, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_GRAVITICDRIVE, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::OBSERVERGRAVITICBOOSTER] = { sc2::Race::Protoss, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_GRAVITICBOOSTER, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::PHOENIXRANGEUPGRADE] = { sc2::Race::Protoss, 150, 150, 0, 1440, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PHOENIXANIONPULSECRYSTALS, 0, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL1] = { sc2::Race::Protoss, 150, 150, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL1, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL2] = { sc2::Race::Protoss, 225, 225, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL2, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL1} }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL3] = { sc2::Race::Protoss, 300, 300, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL3, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL2} }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL1] = { sc2::Race::Protoss, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL2] = { sc2::Race::Protoss, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL1} }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL3] = { sc2::Race::Protoss, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL3} }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL1] = { sc2::Race::Protoss, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL1, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL2] = { sc2::Race::Protoss, 150, 150, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL2, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL1 } }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL3] = { sc2::Race::Protoss, 200, 200, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL3, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL2 } }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL1] = { sc2::Race::Protoss, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL2] = { sc2::Race::Protoss, 150, 150, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL1 } }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL3] = { sc2::Race::Protoss, 200, 200, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL2 } }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL1] = { sc2::Race::Protoss, 150, 150, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL1, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL2] = { sc2::Race::Protoss, 225, 225, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL2, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL1 } }; - m_upgradeData[sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL3] = { sc2::Race::Protoss, 300, 300, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL3, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL2} }; - m_upgradeData[sc2::UPGRADE_ID::PSISTORMTECH] = { sc2::Race::Protoss, 200, 200, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PSISTORM, 0, { sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::WARPGATERESEARCH] = { sc2::Race::Protoss, 50, 50, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_WARPGATE, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {}, {} }; - - // Zerg Upgrades - m_upgradeData[sc2::UPGRADE_ID::BURROW] = { sc2::Race::Zerg, 100, 100, 0, 1600, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_BURROW, 0, { sc2::UNIT_TYPEID::ZERG_HATCHERY, sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::CENTRIFICALHOOKS] = { sc2::Race::Zerg, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_CENTRIFUGALHOOKS, 0, { sc2::UNIT_TYPEID::ZERG_BANELINGNEST }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::CHITINOUSPLATING] = { sc2::Race::Zerg, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_CHITINOUSPLATING, 0, { sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::EVOLVEGROOVEDSPINES] = { sc2::Race::Zerg, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_GROOVEDSPINES, 0, { sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::EVOLVEMUSCULARAUGMENTS] = { sc2::Race::Zerg, 150, 150, 0, 1600, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_MUSCULARAUGMENTS, 0, { sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::GLIALRECONSTITUTION] = { sc2::Race::Zerg, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_GLIALREGENERATION, 0, { sc2::UNIT_TYPEID::ZERG_ROACHWARREN }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_upgradeData[sc2::UPGRADE_ID::INFESTORENERGYUPGRADE] = { sc2::Race::Zerg, 150, 150, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PATHOGENGLANDS, 0, { sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::NEURALPARASITE] = { sc2::Race::Zerg, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_NEURALPARASITE, 0, { sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::OVERLORDSPEED] = { sc2::Race::Zerg, 100, 100, 0, 960, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PNEUMATIZEDCARAPACE, 0, { sc2::UNIT_TYPEID::ZERG_HATCHERY, sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::TUNNELINGCLAWS] = { sc2::Race::Zerg, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TUNNELINGCLAWS, 0, { sc2::UNIT_TYPEID::ZERG_ROACHWARREN }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL1] = { sc2::Race::Zerg, 150, 150, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL1, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL2] = { sc2::Race::Zerg, 225, 225, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL2, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, { sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL1 } }; - m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL3] = { sc2::Race::Zerg, 300, 300, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL3, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, { sc2::UNIT_TYPEID::ZERG_HIVE }, { sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL2 } }; - m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL1] = { sc2::Race::Zerg, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL1, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL2] = { sc2::Race::Zerg, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL2, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, { sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL1 } }; - m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL3] = { sc2::Race::Zerg, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL3, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, { sc2::UNIT_TYPEID::ZERG_HIVE }, { sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL2 } }; - m_upgradeData[sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL1] = { sc2::Race::Zerg, 150, 150, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL1, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL2] = { sc2::Race::Zerg, 225, 225, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL2, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL1} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL3] = { sc2::Race::Zerg, 300, 300, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL3, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL2} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGLINGATTACKSPEED] = { sc2::Race::Zerg, 200, 200, 0, 2080, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGLINGADRENALGLANDS, 0, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGLINGMOVEMENTSPEED] = { sc2::Race::Zerg, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGLINGMETABOLICBOOST, 0, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL1] = { sc2::Race::Zerg, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL2] = { sc2::Race::Zerg, 150, 150, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL1} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL3] = { sc2::Race::Zerg, 200, 200, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL2} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL1] = { sc2::Race::Zerg, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, {}, {} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL2] = { sc2::Race::Zerg, 150, 150, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL1} }; - m_upgradeData[sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL3] = { sc2::Race::Zerg, 200, 200, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL2} }; -} - -const TypeData & TechTree::getData(const sc2::UnitTypeID & type) const -{ - if (m_unitTypeData.find(type) == m_unitTypeData.end()) - { - //std::cout << "WARNING: Unit type not found: " << sc2::UnitTypeToName(type) << "\n"; - return m_unitTypeData.at(0); - } - - return m_unitTypeData.at(type); -} - -const TypeData & TechTree::getData(const sc2::UpgradeID & type) const -{ - if (m_upgradeData.find(type) == m_upgradeData.end()) - { - //std::cout << "WARNING: Upgrade not found: " << sc2::UpgradeIDToName(type) << "\n"; - return m_unitTypeData.at(0); - } - - return m_upgradeData.at(type); -} - -const TypeData & TechTree::getData(const BuildType & type) const -{ - if (type.getBuildType() == BuildTypes::Unit) - { - return getData(type.getUnitTypeID()); - } - else if (type.getBuildType() == BuildTypes::Upgrade) - { - return getData(type.getUpgradeID()); - } - - BOT_ASSERT(false, "Can't getData this type: %s", type.getName().c_str()); - - return m_unitTypeData.at(0); -} diff --git a/src/Unit.cpp b/src/Unit.cpp index 3ca5c6ca465100368d06a14b0a05a4e8ee94a19a..d3db2c69ea5a3036a5ae192443f9601747af3a41 100644 --- a/src/Unit.cpp +++ b/src/Unit.cpp @@ -243,7 +243,7 @@ void Unit::move(const CCPosition & targetPosition) const { BOT_ASSERT(isValid(), "Unit is not valid"); #ifdef SC2API - m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::MOVE, targetPosition); + m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::GENERAL_MOVE, targetPosition); #else m_unit->move(targetPosition); #endif @@ -253,7 +253,7 @@ void Unit::move(const CCTilePosition & targetPosition) const { BOT_ASSERT(isValid(), "Unit is not valid"); #ifdef SC2API - m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::MOVE, CCPosition((float)targetPosition.x, (float)targetPosition.y)); + m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::GENERAL_MOVE, CCPosition((float)targetPosition.x, (float)targetPosition.y)); #else m_unit->move(CCPosition(targetPosition)); #endif @@ -418,13 +418,13 @@ sc2::AbilityID Unit::getCurrentAbilityID() const void Unit::holdPosition() const { BOT_ASSERT(isValid(), "Unit is not valid"); - m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::HOLDPOSITION); + m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::GENERAL_HOLDPOSITION); } void Unit::patrol(const CCPosition & targetPosition) const { BOT_ASSERT(isValid(), "Unit is not valid"); - m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::PATROL, targetPosition); + m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::GENERAL_PATROL, targetPosition); } void Unit::stopDance() const @@ -433,6 +433,8 @@ void Unit::stopDance() const m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::STOP_DANCE); } +/* +// Implementation by Dawid Abucewicz bool Unit::isCarryingMinerals() const { BOT_ASSERT(isValid(), "Unit is not valid"); @@ -446,3 +448,43 @@ bool Unit::isCarryingMinerals() const } return false; } +*/ + +int Unit::gasLeftInGeyser() const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + return m_unit->vespene_contents; +} + +int Unit::mineralsLeftInMineralfield() const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + return m_unit->mineral_contents; +} + +int Unit::getOwner() const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + return m_unit->owner; +} + +// Implemented with Blizzard SC2 API +bool Unit::isCarryingGas() const +{ + return sc2::IsCarryingVespene(*m_unit); +} + +bool Unit::isCarryingMinerals() const +{ + return sc2::IsCarryingMinerals(*m_unit); +} + +float Unit::maxShields() const +{ + return m_unit->shield_max; +} + +float Unit::maxEnergy() const +{ + return m_unit->energy_max; +} \ No newline at end of file diff --git a/src/Unit.h b/src/Unit.h index 24a3d631624e4eaf1001431f85665b85396b9513..f68a09bf1b3e4dd4fad4043265e52cf85a0a49e9 100644 --- a/src/Unit.h +++ b/src/Unit.h @@ -62,6 +62,17 @@ public: void stopDance() const; float getFacing() const; float getRadius() const; + + /* + API extended summer 2020 + */ + int gasLeftInGeyser() const; + int mineralsLeftInMineralfield() const; + int getOwner() const; + bool isCarryingGas() const; + float maxShields() const; + float maxEnergy() const; + void stop () const; void attackUnit (const Unit & target) const; diff --git a/src/UnitType.cpp b/src/UnitType.cpp index 9fcad4336a89816dd923588b151013d6bb0de22d..dd564f7e0b74ee97125b95faff718bd3becde1c5 100644 --- a/src/UnitType.cpp +++ b/src/UnitType.cpp @@ -164,6 +164,8 @@ bool UnitType::isMineral() const case sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD750 : return true; case sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD : return true; case sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD750 : return true; + case sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD : return true; + case sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD750 : return true; default: return false; } #else @@ -383,7 +385,22 @@ int UnitType::getSightRange() const return m_bot->Observation()->GetUnitTypeData()[m_type].sight_range; } -sc2::UnitTypeID UnitType::getRequiredStructure() const +UnitTypeID UnitType::getRequiredStructure() const { return m_bot->Observation()->GetUnitTypeData()[m_type].tech_requirement; } + +std::vector<sc2::UnitTypeID> UnitType::getEquivalentUnits() const +{ + return m_bot->Observation()->GetUnitTypeData()[m_type].tech_alias; +} + +bool UnitType::requiredAttached() const +{ + return m_bot->Observation()->GetUnitTypeData()[m_type].require_attached; +} + +float UnitType::getBuildTime() const +{ + return m_bot->Observation()->GetUnitTypeData()[m_type].build_time; +} \ No newline at end of file diff --git a/src/UnitType.h b/src/UnitType.h index 72ea02820e92dca208e52e3b72cb0dd087962474..7f3bbbe530ffc6859f7ceb8cff1c691af42afb31 100644 --- a/src/UnitType.h +++ b/src/UnitType.h @@ -2,6 +2,7 @@ #include "Common.h" + class IDABot; class UnitType @@ -25,7 +26,7 @@ public: int getMovementSpeed() const; int getSightRange() const; - sc2::UnitTypeID getRequiredStructure() const; + sc2::UnitTypeID getRequiredStructure() const; bool isValid() const; bool isBuilding() const; @@ -50,6 +51,9 @@ public: int gasPrice() const; const std::vector<UnitType> & whatBuilds() const; + std::vector<sc2::UnitTypeID> getEquivalentUnits() const; + bool requiredAttached() const; + float getBuildTime() const; static UnitType GetUnitTypeFromName(const std::string & name, IDABot & bot);