From 7dbb4d494fbe0c098c471c44ba2a5fd6e1683c7f Mon Sep 17 00:00:00 2001 From: BuRny Date: Sat, 17 Oct 2020 22:34:35 +0200 Subject: [PATCH] Fix asset_path --- .github/workflows/pythonpackage.yml | 2 +- poetry.lock | 28 +- pyproject.toml | 1 + sc2reader/__init__.py | 111 -- sc2reader/constants.py | 181 -- sc2reader/data/HOWTO.md | 16 - sc2reader/data/HotS/23925_abilities.csv | 386 ----- sc2reader/data/HotS/23925_units.csv | 510 ------ sc2reader/data/HotS/24247_abilities.csv | 397 ----- sc2reader/data/HotS/24247_units.csv | 520 ------ sc2reader/data/HotS/24764_abilities.csv | 397 ----- sc2reader/data/HotS/24764_units.csv | 521 ------ sc2reader/data/HotS/base_abilities.csv | 370 ---- sc2reader/data/HotS/base_units.csv | 493 ------ sc2reader/data/LotV/44401_abilities.csv | 338 ---- sc2reader/data/LotV/44401_units.csv | 830 --------- sc2reader/data/LotV/47185_abilities.csv | 389 ----- sc2reader/data/LotV/47185_units.csv | 887 ---------- sc2reader/data/LotV/48258_abilities.csv | 542 ------ sc2reader/data/LotV/48258_units.csv | 897 ---------- sc2reader/data/LotV/53644_abilities.csv | 399 ----- sc2reader/data/LotV/53644_units.csv | 934 ---------- sc2reader/data/LotV/54724_abilities.csv | 399 ----- sc2reader/data/LotV/54724_units.csv | 935 ---------- sc2reader/data/LotV/59587_abilities.csv | 406 ----- sc2reader/data/LotV/59587_units.csv | 976 ----------- sc2reader/data/LotV/70154_abilities.csv | 408 ----- sc2reader/data/LotV/70154_units.csv | 996 ----------- sc2reader/data/LotV/base_abilities.csv | 519 ------ sc2reader/data/LotV/base_units.csv | 654 ------- sc2reader/data/WoL/16117_abilities.csv | 258 --- sc2reader/data/WoL/16117_units.csv | 350 ---- sc2reader/data/WoL/17326_abilities.csv | 259 --- sc2reader/data/WoL/17326_units.csv | 353 ---- sc2reader/data/WoL/18092_abilities.csv | 259 --- sc2reader/data/WoL/18092_units.csv | 360 ---- sc2reader/data/WoL/19458_abilities.csv | 261 --- sc2reader/data/WoL/19458_units.csv | 362 ---- sc2reader/data/WoL/22612_abilities.csv | 268 --- sc2reader/data/WoL/22612_units.csv | 364 ---- sc2reader/data/WoL/24944_abilities.csv | 269 --- sc2reader/data/WoL/24944_units.csv | 375 ---- sc2reader/data/__init__.py | 417 ----- sc2reader/data/ability_lookup.csv | 863 ---------- sc2reader/data/attributes.json | 1574 ----------------- sc2reader/data/command_lookup.csv | 268 --- sc2reader/data/create_lookup.py | 14 - sc2reader/data/train_commands.json | 478 ------ sc2reader/data/unit_info.json | 866 ---------- sc2reader/data/unit_lookup.csv | 1022 ----------- sc2reader/decoders.py | 379 ----- sc2reader/engine/__init__.py | 21 - sc2reader/engine/engine.py | 216 --- sc2reader/engine/events.py | 19 - sc2reader/engine/plugins/__init__.py | 10 - sc2reader/engine/plugins/apm.py | 46 - sc2reader/engine/plugins/context.py | 306 ---- sc2reader/engine/plugins/creeptracker.py | 307 ---- sc2reader/engine/plugins/gameheart.py | 117 -- sc2reader/engine/plugins/selection.py | 90 - sc2reader/engine/plugins/supply.py | 109 -- sc2reader/engine/utils.py | 45 - sc2reader/events/__init__.py | 9 - sc2reader/events/base.py | 6 - sc2reader/events/game.py | 648 ------- sc2reader/events/message.py | 97 -- sc2reader/events/tracker.py | 568 ------- sc2reader/exceptions.py | 47 - sc2reader/factories/__init__.py | 6 - sc2reader/factories/plugins/__init__.py | 0 sc2reader/factories/plugins/replay.py | 181 -- sc2reader/factories/plugins/utils.py | 130 -- sc2reader/factories/sc2factory.py | 341 ---- sc2reader/log_utils.py | 84 - sc2reader/objects.py | 731 -------- sc2reader/readers.py | 1978 ---------------------- sc2reader/resources.py | 1222 ------------- sc2reader/scripts/__init__.py | 5 - sc2reader/scripts/sc2attributes.py | 123 -- sc2reader/scripts/sc2json.py | 23 - sc2reader/scripts/sc2parse.py | 99 -- sc2reader/scripts/sc2printer.py | 133 -- sc2reader/scripts/sc2replayer.py | 93 - sc2reader/scripts/utils.py | 63 - sc2reader/utils.py | 304 ---- 85 files changed, 29 insertions(+), 32209 deletions(-) delete mode 100644 sc2reader/__init__.py delete mode 100644 sc2reader/constants.py delete mode 100644 sc2reader/data/HOWTO.md delete mode 100644 sc2reader/data/HotS/23925_abilities.csv delete mode 100644 sc2reader/data/HotS/23925_units.csv delete mode 100644 sc2reader/data/HotS/24247_abilities.csv delete mode 100644 sc2reader/data/HotS/24247_units.csv delete mode 100644 sc2reader/data/HotS/24764_abilities.csv delete mode 100644 sc2reader/data/HotS/24764_units.csv delete mode 100644 sc2reader/data/HotS/base_abilities.csv delete mode 100644 sc2reader/data/HotS/base_units.csv delete mode 100644 sc2reader/data/LotV/44401_abilities.csv delete mode 100644 sc2reader/data/LotV/44401_units.csv delete mode 100644 sc2reader/data/LotV/47185_abilities.csv delete mode 100644 sc2reader/data/LotV/47185_units.csv delete mode 100644 sc2reader/data/LotV/48258_abilities.csv delete mode 100644 sc2reader/data/LotV/48258_units.csv delete mode 100644 sc2reader/data/LotV/53644_abilities.csv delete mode 100644 sc2reader/data/LotV/53644_units.csv delete mode 100644 sc2reader/data/LotV/54724_abilities.csv delete mode 100644 sc2reader/data/LotV/54724_units.csv delete mode 100644 sc2reader/data/LotV/59587_abilities.csv delete mode 100644 sc2reader/data/LotV/59587_units.csv delete mode 100644 sc2reader/data/LotV/70154_abilities.csv delete mode 100644 sc2reader/data/LotV/70154_units.csv delete mode 100644 sc2reader/data/LotV/base_abilities.csv delete mode 100644 sc2reader/data/LotV/base_units.csv delete mode 100644 sc2reader/data/WoL/16117_abilities.csv delete mode 100644 sc2reader/data/WoL/16117_units.csv delete mode 100644 sc2reader/data/WoL/17326_abilities.csv delete mode 100644 sc2reader/data/WoL/17326_units.csv delete mode 100644 sc2reader/data/WoL/18092_abilities.csv delete mode 100644 sc2reader/data/WoL/18092_units.csv delete mode 100644 sc2reader/data/WoL/19458_abilities.csv delete mode 100644 sc2reader/data/WoL/19458_units.csv delete mode 100644 sc2reader/data/WoL/22612_abilities.csv delete mode 100644 sc2reader/data/WoL/22612_units.csv delete mode 100644 sc2reader/data/WoL/24944_abilities.csv delete mode 100644 sc2reader/data/WoL/24944_units.csv delete mode 100644 sc2reader/data/__init__.py delete mode 100644 sc2reader/data/ability_lookup.csv delete mode 100644 sc2reader/data/attributes.json delete mode 100644 sc2reader/data/command_lookup.csv delete mode 100644 sc2reader/data/create_lookup.py delete mode 100644 sc2reader/data/train_commands.json delete mode 100644 sc2reader/data/unit_info.json delete mode 100644 sc2reader/data/unit_lookup.csv delete mode 100644 sc2reader/decoders.py delete mode 100644 sc2reader/engine/__init__.py delete mode 100644 sc2reader/engine/engine.py delete mode 100644 sc2reader/engine/events.py delete mode 100644 sc2reader/engine/plugins/__init__.py delete mode 100644 sc2reader/engine/plugins/apm.py delete mode 100644 sc2reader/engine/plugins/context.py delete mode 100644 sc2reader/engine/plugins/creeptracker.py delete mode 100644 sc2reader/engine/plugins/gameheart.py delete mode 100644 sc2reader/engine/plugins/selection.py delete mode 100644 sc2reader/engine/plugins/supply.py delete mode 100644 sc2reader/engine/utils.py delete mode 100644 sc2reader/events/__init__.py delete mode 100644 sc2reader/events/base.py delete mode 100644 sc2reader/events/game.py delete mode 100644 sc2reader/events/message.py delete mode 100644 sc2reader/events/tracker.py delete mode 100644 sc2reader/exceptions.py delete mode 100644 sc2reader/factories/__init__.py delete mode 100644 sc2reader/factories/plugins/__init__.py delete mode 100644 sc2reader/factories/plugins/replay.py delete mode 100644 sc2reader/factories/plugins/utils.py delete mode 100644 sc2reader/factories/sc2factory.py delete mode 100644 sc2reader/log_utils.py delete mode 100644 sc2reader/objects.py delete mode 100644 sc2reader/readers.py delete mode 100644 sc2reader/resources.py delete mode 100644 sc2reader/scripts/__init__.py delete mode 100644 sc2reader/scripts/sc2attributes.py delete mode 100644 sc2reader/scripts/sc2json.py delete mode 100644 sc2reader/scripts/sc2parse.py delete mode 100644 sc2reader/scripts/sc2printer.py delete mode 100644 sc2reader/scripts/sc2replayer.py delete mode 100644 sc2reader/scripts/utils.py delete mode 100644 sc2reader/utils.py diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index eb3c38a..32f7a6b 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -67,7 +67,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./ReplayRenamer.exe + asset_path: ./dist/ReplayRenamer.exe asset_name: ReplayRenamer.exe asset_content_type: application/zip if: matrix.os == 'windows-latest' && matrix.python-version == '3.7' diff --git a/poetry.lock b/poetry.lock index b4a0407..4b935ba 100644 --- a/poetry.lock +++ b/poetry.lock @@ -92,6 +92,14 @@ six = "*" [package.extras] restructuredText = ["rst2ansi"] +[[package]] +name = "mpyq" +version = "0.2.5" +description = "A Python library for extracting MPQ (MoPaQ) files." +category = "main" +optional = false +python-versions = "*" + [[package]] name = "packaging" version = "20.4" @@ -227,6 +235,17 @@ mando = ">=0.6,<0.7" [package.extras] flake8 = ["flake8-polyfill"] +[[package]] +name = "sc2reader" +version = "1.6.0" +description = "Utility for parsing Starcraft II replay files" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +mpyq = ">=0.2.4" + [[package]] name = "six" version = "1.15.0" @@ -258,7 +277,7 @@ testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pyt [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "4488e2ba92e7346663ac227043c17831175ebfddad122ee632bf4d67be7e6ef6" +content-hash = "bb28e498824d2149abd7e8b2f2035b4fc4c3cfbc50db2ecd7daabd8b4dca79c1" [metadata.files] altgraph = [ @@ -296,6 +315,9 @@ mando = [ {file = "mando-0.6.4-py2.py3-none-any.whl", hash = "sha256:4ce09faec7e5192ffc3c57830e26acba0fd6cd11e1ee81af0d4df0657463bd1c"}, {file = "mando-0.6.4.tar.gz", hash = "sha256:79feb19dc0f097daa64a1243db578e7674909b75f88ac2220f1c065c10a0d960"}, ] +mpyq = [ + {file = "mpyq-0.2.5.tar.gz", hash = "sha256:30aaf5962be569f3f2b53978060cd047434ee4f5a215925dd6ff0fef04ec0007"}, +] packaging = [ {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, @@ -338,6 +360,10 @@ radon = [ {file = "radon-4.3.2-py2.py3-none-any.whl", hash = "sha256:b991de491eb2edbc2aac8f5f7ebf02b799852f076fa5a73fedf79d144d85e37e"}, {file = "radon-4.3.2.tar.gz", hash = "sha256:758b3ab345aa86e95f642713612a57da7c7da6d552c4dbfbe397a67601ace7dd"}, ] +sc2reader = [ + {file = "sc2reader-1.6.0-py3-none-any.whl", hash = "sha256:b1d7f9d05d0d5d89d0bbd98fce028fd94339910e5eb3f6cb6512681664932aee"}, + {file = "sc2reader-1.6.0.tar.gz", hash = "sha256:312f8674ef8bd2bcc03127fd28747768ecf9ec4ccfb0c888953041eda29baf44"}, +] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, diff --git a/pyproject.toml b/pyproject.toml index 18d2ab2..2842663 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,7 @@ authors = ["BuRny "] [tool.poetry.dependencies] python = "^3.7" PySimpleGUI = "^4.30.0" +sc2reader = "^1.6.0" [tool.poetry.dev-dependencies] pytest = "^6.1.1" diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py deleted file mode 100644 index 0bcf512..0000000 --- a/sc2reader/__init__.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -""" - sc2reader - ~~~~~~~~~~~ - - A library for loading data from Starcraft II game resources. - - SC2Factory methods called on the package will be delegated to the default - SC2Factory. To default to a cached factory set one or more of the following - variables in your environment: - - SC2READER_CACHE_DIR = '/absolute/path/to/existing/cache/directory/' - SC2READER_CACHE_MAX_SIZE = MAXIMUM_CACHE_ENTRIES_TO_HOLD_IN_MEMORY - - You can also set the default factory via setFactory, useFileCache, useDictCache, - or useDoubleCache functions. - - :copyright: (c) 2011 by Graylin Kim. - :license: MIT, see LICENSE for more details. -""" -from __future__ import absolute_import, print_function, unicode_literals, division - -__version__ = "0.8.0" - -import os -import sys - -# import submodules -from sc2reader import engine -from sc2reader import factories, log_utils - -# setup the library logging -log_utils.setup() - -# For backwards compatibility, goes away in 0.7 -SC2Reader = factories.SC2Factory - - -def setFactory(factory): - """ - :param factory: The new default factory for the package. - - Links the following sc2reader global methods to the specified factory:: - - * sc2reader.load_replay(s) - * sc2reader.load_map(s) - * sc2reader.load_game_summar(y|ies) - * sc2reader.configure - * sc2reader.reset - * sc2reader.register_plugin - - These methods when called will delegate to the factory for execution. - """ - module = sys.modules[__name__] - module.load_replays = factory.load_replays - module.load_replay = factory.load_replay - module.load_maps = factory.load_maps - module.load_map = factory.load_map - module.load_game_summaries = factory.load_game_summaries - module.load_game_summary = factory.load_game_summary - - module.configure = factory.configure - module.reset = factory.reset - - module.register_plugin = factory.register_plugin - module._defaultFactory = factory - - -def useFileCache(cache_dir, **options): - """ - :param cache_dir: Absolute path to the existing cache directory - - Set the default factory to a new FileCachedSC2Factory with the given cache_dir. - All remote resources are saved to the file system for faster access times. - """ - setFactory(factories.FileCachedSC2Factory(cache_dir, **options)) - - -def useDictCache(cache_max_size=0, **options): - """ - :param cache_max_size: The maximum number of cache entries to hold in memory - - Set the default factory to a new DictCachedSC2Factory with the given cache_dir. - A limited number of remote resources are cached in memory for faster access times. - """ - setFactory(factories.DictCachedSC2Factory(cache_max_size, **options)) - - -def useDoubleCache(cache_dir, cache_max_size=0, **options): - """ - :param cache_dir: Absolute path to the existing cache directory - :param cache_max_size: The maximum number of cache entries to hold in memory - - Set the default factory to a new DoubleCachedSC2Factory with the given cache_dir. - A limited number of remote resources are cached in memory for faster access times. - All remote resources are saved to the file system for faster access times. - """ - setFactory(factories.DoubleCachedSC2Factory(cache_dir, cache_max_size, **options)) - - -# Allow environment variables to activate caching -cache_dir = os.getenv('SC2READER_CACHE_DIR') -cache_max_size = os.getenv('SC2READER_CACHE_MAX_SIZE') -if cache_dir and cache_max_size: - useDoubleCache(cache_dir, cache_max_size) -elif cache_dir: - useFileCache(cache_dir) -elif cache_max_size: - useDictCache(cache_max_size) -else: - setFactory(factories.SC2Factory()) diff --git a/sc2reader/constants.py b/sc2reader/constants.py deleted file mode 100644 index aa3e0ad..0000000 --- a/sc2reader/constants.py +++ /dev/null @@ -1,181 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -# These are found in Repack-MPQ/fileset.{locale}#Mods#Core.SC2Mod#{locale}.SC2Data/LocalizedData/Editor/EditorCategoryStrings.txt -# EDSTR_CATEGORY_Race -# EDSTR_PLAYERPROPS_RACE -# The ??? means that I don't know what language it is. -# If multiple languages use the same set they should be comma separated -LOCALIZED_RACES = { - - # enUS - 'Terran': 'Terran', - 'Protoss': 'Protoss', - 'Zerg': 'Zerg', - - # ruRU - 'Терран': 'Terran', - 'Протосс': 'Protoss', - 'Зерг': 'Zerg', - - # koKR - '테란': 'Terran', - '프로토스': 'Protoss', - '저그': 'Zerg', - - # plPL - 'Terranie': 'Terran', - 'Protosi': 'Protoss', - 'Zergi': 'Zerg', - - # zhCH - '人类': 'Terran', - '星灵': 'Protoss', - '异虫': 'Zerg', - - # zhTW - '人類': 'Terran', - '神族': 'Protoss', - '蟲族': 'Zerg', - - # ??? - 'Terrano': 'Terran', - - # deDE - 'Terraner': 'Terran', - - # esES - Spanish - # esMX - Latin American - # frFR - French - France - # plPL - Polish Polish - # ptBR - Brazilian Portuguese -} - -MESSAGE_CODES = { - '0': 'All', - '2': 'Allies', - '128': 'Header', - '125': 'Ping', -} - - -GAME_SPEED_FACTOR = { - 'WoL': { - 'Slower': 0.6, - 'Slow': 0.8, - 'Normal': 1.0, - 'Fast': 1.2, - 'Faster': 1.4 - }, - 'HotS': { - 'Slower': 0.6, - 'Slow': 0.8, - 'Normal': 1.0, - 'Fast': 1.2, - 'Faster': 1.4 - }, - 'LotV': { - 'Slower': 0.2, - 'Slow': 0.4, - 'Normal': 0.6, - 'Fast': 0.8, - 'Faster': 1.0 - }, -} - -GATEWAY_CODES = { - 'US': 'Americas', - 'KR': 'Asia', - 'EU': 'Europe', - 'SG': 'South East Asia', - 'XX': 'Public Test', -} - - -GATEWAY_LOOKUP = { - 0: '', - 1: 'us', - 2: 'eu', - 3: 'kr', - 5: 'cn', - 6: 'sea', - 98: 'xx', -} - -COLOR_CODES = { - 'B4141E': 'Red', - '0042FF': 'Blue', - '1CA7EA': 'Teal', - 'EBE129': 'Yellow', - '540081': 'Purple', - 'FE8A0E': 'Orange', - '168000': 'Green', - 'CCA6FC': 'Light Pink', - '1F01C9': 'Violet', - '525494': 'Light Grey', - '106246': 'Dark Green', - '4E2A04': 'Brown', - '96FF91': 'Light Green', - '232323': 'Dark Grey', - 'E55BB0': 'Pink', - 'FFFFFF': 'White', - '000000': 'Black', -} - -COLOR_CODES_INV = dict(zip(COLOR_CODES.values(), COLOR_CODES.keys())) - -SUBREGIONS = { - # United States - 'us': { - 1: 'us', - 2: 'la', - }, - - # Europe - 'eu': { - 1: 'eu', - 2: 'ru', - }, - - # Korea - appear to both map to same place - 'kr': { - 1: 'kr', - 2: 'tw', - }, - - # Taiwan - appear to both map to same place - 'tw': { - 1: 'kr', - 2: 'tw', - }, - - # China - different url scheme (www.battlenet.com.cn)? - 'cn': { - 1: 'cn', - }, - - # South East Asia - 'sea': { - 1: 'sea', - }, - - # Singapore - 'sg': { - 1: 'sg', - }, - - # Public Test - 'xx': { - 1: 'xx', - }, -} - - -import json -import pkgutil - -attributes_json = pkgutil.get_data('sc2reader.data', 'attributes.json').decode('utf8') -attributes_dict = json.loads(attributes_json) -LOBBY_PROPERTIES = dict() -for key, value in attributes_dict.get('attributes', dict()).items(): - LOBBY_PROPERTIES[int(key)] = value diff --git a/sc2reader/data/HOWTO.md b/sc2reader/data/HOWTO.md deleted file mode 100644 index ab67031..0000000 --- a/sc2reader/data/HOWTO.md +++ /dev/null @@ -1,16 +0,0 @@ -Supporting a new StarCraft II build version with updated balance data -===================================================================== - -Sometimes when a new version comes out, such as (3.4.0) 44401, Blizzard will update the ids used to identify units and abilities. - -See dsjoerg's commits on Jul 13, 2016 for context on what needs to be modified to support these changes: https://github.com/ggtracker/sc2reader/commits/upstream - -Here are some detailed steps on how to add support for these new ids. - -1. Install and open the StarCraft II Editor, then navigate to `File` -> `Export Balance Data...` and select the expansion level for the balance data you wish to add, then select the directory which you wish to export the balance data to. -2. Find out the build version this balance data correlates to. One method of doing this is to navigate to the s2protocol repo (https://github.com/Blizzard/s2protocol) and looking at the version of the latest protocol. -At the time of writing, the latest build version is 53644. -3. Execute `sc2reader/generate_build_data.py`, passing the expansion level selected in step 1, the build version determined in step 2, the directory the balance data was exported to in step 1, and the sc2reader project root directory as parameters. -e.g. `python3 sc2reader/generate_build_data.py LotV 53644 balance_data/ sc2reader/` -This will generate the necessary data files to support the new build version (namely, `53644_abilities.csv`, `53644_units.csv`, and updated versions of `ability_lookup.csv` and `unit_lookup.csv`). -4. Finally, modify `sc2reader/data/__init__.py` and `sc2reader/resources.py` to register support for the new build version. diff --git a/sc2reader/data/HotS/23925_abilities.csv b/sc2reader/data/HotS/23925_abilities.csv deleted file mode 100644 index 4489bdb..0000000 --- a/sc2reader/data/HotS/23925_abilities.csv +++ /dev/null @@ -1,386 +0,0 @@ -0,CAbil -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -40,ReviveSelf -41,ReviveSelfAtTarget -42,ReviveSelfReplaceTarget -43,ReviveSelfOnCreep -45,attack -47,MetalGateDefaultLower -48,MetalGateDefaultRaise -49,TerranAddOns -50,TerranBuildingLiftOff -51,TerranBuildingLand -52,Refund -53,Salvage -54,DisguiseChangeling -55,SalvageShared -56,Corruption -57,GhostHoldFire -58,GhostWeaponsFree -59,MorphToInfestedTerran -60,Explode -61,FleetBeaconResearch -62,FungalGrowth -63,GuardianShield -64,MULERepair -65,MorphZerglingToBaneling -66,NexusTrainMothership -67,Feedback -68,MassRecall -69,PlacePointDefenseDrone -70,HallucinationArchon -71,HallucinationColossus -72,HallucinationHighTemplar -73,HallucinationImmortal -74,HallucinationPhoenix -75,HallucinationProbe -76,HallucinationStalker -77,HallucinationVoidRay -78,HallucinationWarpPrism -79,HallucinationZealot -80,MULEGather -81,SeekerMissile -82,CalldownMULE -83,GravitonBeam -84,BuildinProgressNydusCanal -85,Siphon -86,Leech -87,SpawnChangeling -88,DisguiseAsZealot -89,DisguiseAsMarineWithShield -90,DisguiseAsMarineWithoutShield -91,DisguiseAsZerglingWithWings -92,DisguiseAsZerglingWithoutWings -93,PhaseShift -94,Rally -95,ProgressRally -96,RallyCommand -97,RallyNexus -98,RallyHatchery -99,RoachWarrenResearch -100,SapStructure -101,InfestedTerrans -102,NeuralParasite -103,SpawnLarva -104,StimpackMarauder -105,SupplyDrop -106,250mmStrikeCannons -107,TemporalRift -108,TimeWarp -109,UltraliskCavernResearch -110,WormholeTransit -111,SCVHarvest -112,ProbeHarvest -113,AttackWarpPrism -114,que1 -115,que5 -116,que5CancelToSelection -117,que5LongBlend -118,que5Addon -119,BuildInProgress -120,Repair -121,TerranBuild -122,RavenBuild -123,Stimpack -124,GhostCloak -125,Snipe -126,MedivacHeal -127,SiegeMode -128,Unsiege -129,BansheeCloak -130,MedivacTransport -131,ScannerSweep -132,Yamato -133,AssaultMode -134,FighterMode -135,BunkerTransport -136,CommandCenterTransport -137,CommandCenterLiftOff -138,CommandCenterLand -139,BarracksAddOns -140,BarracksLiftOff -141,FactoryAddOns -142,FactoryLiftOff -143,StarportAddOns -144,StarportLiftOff -145,FactoryLand -146,StarportLand -147,CommandCenterTrain -148,BarracksLand -149,SupplyDepotLower -150,SupplyDepotRaise -151,BarracksTrain -152,FactoryTrain -153,StarportTrain -154,EngineeringBayResearch -155,MercCompoundResearch -156,ArmSiloWithNuke -157,BarracksTechLabResearch -158,FactoryTechLabResearch -159,StarportTechLabResearch -160,GhostAcademyResearch -161,ArmoryResearch -162,ProtossBuild -163,WarpPrismTransport -164,GatewayTrain -165,StargateTrain -166,RoboticsFacilityTrain -167,NexusTrain -168,PsiStorm -169,HangarQueue5 -170,BroodLordQueue2 -171,CarrierHangar -172,ForgeResearch -173,RoboticsBayResearch -174,TemplarArchivesResearch -175,ZergBuild -176,DroneHarvest -177,evolutionchamberresearch -178,UpgradeToLair -179,UpgradeToHive -180,UpgradeToGreaterSpire -181,LairResearch -182,SpawningPoolResearch -183,HydraliskDenResearch -184,SpireResearch -185,LarvaTrain -186,MorphToBroodLord -187,BurrowBanelingDown -188,BurrowBanelingUp -189,BurrowDroneDown -190,BurrowDroneUp -191,BurrowHydraliskDown -192,BurrowHydraliskUp -193,BurrowRoachDown -194,BurrowRoachUp -195,BurrowZerglingDown -196,BurrowZerglingUp -197,BurrowInfestorTerranDown -198,BurrowInfestorTerranUp -199,RedstoneLavaCritterBurrow -200,RedstoneLavaCritterInjuredBurrow -201,RedstoneLavaCritterUnburrow -202,RedstoneLavaCritterInjuredUnburrow -203,OverlordTransport -204,Mergeable -205,Warpable -206,WarpGateTrain -207,BurrowQueenDown -208,BurrowQueenUp -209,NydusCanalTransport -210,Blink -211,BurrowInfestorDown -212,BurrowInfestorUp -213,MorphToOverseer -214,UpgradeToPlanetaryFortress -215,InfestationPitResearch -216,BanelingNestResearch -217,BurrowUltraliskDown -218,BurrowUltraliskUp -219,UpgradeToOrbital -220,UpgradeToWarpGate -221,MorphBackToGateway -222,OrbitalLiftOff -223,OrbitalCommandLand -224,ForceField -225,PhasingMode -226,TransportMode -227,FusionCoreResearch -228,CyberneticsCoreResearch -229,TwilightCouncilResearch -230,TacNukeStrike -231,SalvageBunkerRefund -232,SalvageBunker -233,EMP -234,Vortex -235,TrainQueen -236,BurrowCreepTumorDown -237,Transfusion -238,TechLabMorph -239,BarracksTechLabMorph -240,FactoryTechLabMorph -241,StarportTechLabMorph -242,ReactorMorph -243,BarracksReactorMorph -244,FactoryReactorMorph -245,StarportReactorMorph -246,AttackRedirect -247,StimpackRedirect -248,StimpackMarauderRedirect -249,burrowedStop -250,StopRedirect -251,GenerateCreep -252,QueenBuild -253,SpineCrawlerUproot -254,SporeCrawlerUproot -255,SpineCrawlerRoot -256,SporeCrawlerRoot -257,CreepTumorBuild -258,BuildAutoTurret -259,ArchonWarp -260,BuildNydusCanal -261,BroodLordHangar -262,Charge -263,TowerCapture -264,HerdInteract -265,Frenzy -266,Contaminate -267,Shatter -268,InfestedTerransLayEgg -269,que5Passive -270,que5PassiveCancelToSelection -294,BridgeExtend -295,BridgeRetract -296,DigesterCreepSpray -297,MorphToMothership -298,MothershipStasis -299,MothershipCoreWeapon -300,NexusTrainMothershipCore -301,MothershipCoreTeleport -302,SalvageDroneRefund -303,SalvageDrone -304,SalvageZerglingRefund -305,SalvageZergling -306,SalvageQueenRefund -307,SalvageQueen -308,SalvageRoachRefund -309,SalvageRoach -310,SalvageBanelingRefund -311,SalvageBaneling -312,SalvageHydraliskRefund -313,SalvageHydralisk -314,SalvageInfestorRefund -315,SalvageInfestor -316,SalvageSwarmHostRefund -317,SalvageSwarmHost -318,SalvageUltraliskRefund -319,SalvageUltralisk -320,DigesterTransport -321,SpectreShield -322,XelNagaHealingShrine -323,NexusInvulnerability -324,NexusPhaseShift -325,SpawnChangelingTarget -326,QueenLand -327,QueenFly -328,OracleCloakField -329,FlyerShield -330,LocustTrain -331,MothershipCoreMassRecall -332,SingleRecall -333,MorphToHellion -334,RestoreShields -335,Scryer -336,BurrowChargeTrial -337,LeechResources -338,SnipeDoT -339,SwarmHostSpawnLocusts -340,Clone -341,BuildingShield -342,MorphToCollapsibleRockTowerDebris -343,MorphToHellionTank -344,BuildingStasis -345,ResourceBlocker -346,ResourceStun -347,MaxiumThrust -348,Sacrifice -349,BurrowChargeMP -350,BurrowChargeRevD -351,MorphToSwarmHostBurrowedMP -352,MorphToSwarmHostMP -353,SpawnInfestedTerran -354,attackProtossBuilding -355,burrowedBanelingStop -356,stopProtossBuilding -357,BurrowProtector -358,EyeStalk -359,Yoink -360,ViperConsume -361,ViperConsumeMinerals -362,ViperConsumeStructure -363,ProtossBuildingQueue -364,que8 -365,TestZerg -366,VolatileBurstBuilding -367,PickupScrapSmall -368,PickupScrapMedium -369,PickupScrapLarge -370,PickupPalletGas -371,PickupPalletMinerals -372,MassiveKnockover -373,WidowMineBurrow -374,WidowMineUnburrow -375,WidowMineAttack -376,TornadoMissile -377,MothershipCoreEnergize -378,LurkerAspectMPFromHydraliskBurrowed -379,LurkerAspectMP -380,BurrowLurkerMPDown -381,BurrowLurkerMPUp -382,UpgradeToLurkerDenMP -383,HallucinationOracle -384,MedivacSpeedBoost -385,ExtendingBridgeNEWide8Out -386,ExtendingBridgeNEWide8 -387,ExtendingBridgeNWWide8Out -388,ExtendingBridgeNWWide8 -389,ExtendingBridgeNEWide10Out -390,ExtendingBridgeNEWide10 -391,ExtendingBridgeNWWide10Out -392,ExtendingBridgeNWWide10 -393,ExtendingBridgeNEWide12Out -394,ExtendingBridgeNEWide12 -395,ExtendingBridgeNWWide12Out -396,ExtendingBridgeNWWide12 -397,InvulnerabilityShield -398,CritterFlee -399,OracleRevelation -400,OracleRevelationMode -401,OracleNormalMode -402,MorphToCollapsibleRockTowerDebrisRampRight -403,MorphToCollapsibleRockTowerDebrisRampLeft -404,VoidSiphon -405,UltraliskWeaponCooldown -406,MothershipCorePurifyNexusCancel -407,MothershipCorePurifyNexus -427,LightofAiur -428,PulsarBeam -429,TemporalField diff --git a/sc2reader/data/HotS/23925_units.csv b/sc2reader/data/HotS/23925_units.csv deleted file mode 100644 index 89f27d7..0000000 --- a/sc2reader/data/HotS/23925_units.csv +++ /dev/null @@ -1,510 +0,0 @@ -1,System_Snapshot_Dummy -5,BeaconRally -6,BeaconArmy -7,BeaconAttack -8,BeaconDefend -9,BeaconHarass -10,BeaconIdle -11,BeaconAuto -12,BeaconDetect -13,BeaconScout -14,BeaconClaim -15,BeaconExpand -16,BeaconCustom1 -17,BeaconCustom2 -18,BeaconCustom3 -19,BeaconCustom4 -22,DESTRUCTIBLE -23,ITEM -24,POWERUP -25,SMCAMERA -26,SMCHARACTER -27,STARMAP -28,SMSET -29,MISSILE -30,MISSILE_INVULNERABLE -31,MISSILE_HALFLIFE -32,PLACEHOLDER -33,PLACEHOLDER_AIR -34,PATHINGBLOCKER -35,BEACON -36,Ball -37,StereoscopicOptionsUnit -38,Colossus -39,TechLab -40,Reactor -42,InfestorTerran -43,BanelingCocoon -44,Baneling -45,Mothership -46,PointDefenseDrone -47,Changeling -48,ChangelingZealot -49,ChangelingMarineShield -50,ChangelingMarine -51,ChangelingZerglingWings -52,ChangelingZergling -54,CommandCenter -55,SupplyDepot -56,Refinery -57,Barracks -58,EngineeringBay -59,MissileTurret -60,Bunker -61,SensorTower -62,GhostAcademy -63,Factory -64,Starport -66,Armory -67,FusionCore -68,AutoTurret -69,SiegeTankSieged -70,SiegeTank -71,VikingAssault -72,VikingFighter -73,CommandCenterFlying -74,BarracksTechLab -75,BarracksReactor -76,FactoryTechLab -77,FactoryReactor -78,StarportTechLab -79,StarportReactor -80,FactoryFlying -81,StarportFlying -82,SCV -83,BarracksFlying -84,SupplyDepotLowered -85,Marine -86,Reaper -87,Ghost -88,Marauder -89,Thor -90,Hellion -91,Medivac -92,Banshee -93,Raven -94,Battlecruiser -95,Nuke -96,Nexus -97,Pylon -98,Assimilator -99,Gateway -100,Forge -101,FleetBeacon -102,TwilightCouncil -103,PhotonCannon -104,Stargate -105,TemplarArchive -106,DarkShrine -107,RoboticsBay -108,RoboticsFacility -109,CyberneticsCore -110,Zealot -111,Stalker -112,HighTemplar -113,DarkTemplar -114,Sentry -115,Phoenix -116,Carrier -117,VoidRay -118,WarpPrism -119,Observer -120,Immortal -121,Probe -122,Interceptor -123,Hatchery -124,CreepTumor -125,Extractor -126,SpawningPool -127,EvolutionChamber -128,HydraliskDen -129,Spire -130,UltraliskCavern -131,InfestationPit -132,NydusNetwork -133,BanelingNest -134,RoachWarren -135,SpineCrawler -136,SporeCrawler -137,Lair -138,Hive -139,GreaterSpire -140,Egg -141,Drone -142,Zergling -143,Overlord -144,Hydralisk -145,Mutalisk -146,Ultralisk -147,Roach -148,Infestor -149,Corruptor -150,BroodLordCocoon -151,BroodLord -152,BanelingBurrowed -153,DroneBurrowed -154,HydraliskBurrowed -155,RoachBurrowed -156,ZerglingBurrowed -157,InfestorTerranBurrowed -158,RedstoneLavaCritterBurrowed -159,RedstoneLavaCritterInjuredBurrowed -160,RedstoneLavaCritter -161,RedstoneLavaCritterInjured -162,QueenBurrowed -163,Queen -164,InfestorBurrowed -165,OverlordCocoon -166,Overseer -167,PlanetaryFortress -168,UltraliskBurrowed -169,OrbitalCommand -170,WarpGate -171,OrbitalCommandFlying -172,ForceField -173,WarpPrismPhasing -174,CreepTumorBurrowed -175,CreepTumorQueen -176,SpineCrawlerUprooted -177,SporeCrawlerUprooted -178,Archon -179,NydusCanal -180,BroodlingEscort -181,RichMineralField -183,XelNagaTower -187,InfestedTerransEgg -188,Larva -189,ReaperPlaceholder -190,NeedleSpinesWeapon -191,CorruptionWeapon -192,InfestedTerransWeapon -193,NeuralParasiteWeapon -194,PointDefenseDroneReleaseWeapon -195,HunterSeekerWeapon -196,MULE -198,ThorAAWeapon -199,PunisherGrenadesLMWeapon -200,VikingFighterWeapon -201,ATALaserBatteryLMWeapon -202,ATSLaserBatteryLMWeapon -203,LongboltMissileWeapon -204,D8ChargeWeapon -205,YamatoWeapon -206,IonCannonsWeapon -207,AcidSalivaWeapon -208,SpineCrawlerWeapon -209,SporeCrawlerWeapon -210,GlaiveWurmWeapon -211,GlaiveWurmM2Weapon -212,GlaiveWurmM3Weapon -213,StalkerWeapon -214,EMP2Weapon -215,BacklashRocketsLMWeapon -216,PhotonCannonWeapon -217,ParasiteSporeWeapon -219,Broodling -220,BroodLordBWeapon -223,AutoTurretReleaseWeapon -224,LarvaReleaseMissile -225,AcidSpinesWeapon -226,FrenzyWeapon -227,ContaminateWeapon -228,BroodlingDefault -229,Critter -230,CritterStationary -231,Shape -232,FungalGrowthMissile -233,NeuralParasiteTentacleMissile -234,Beacon_Protoss -235,Beacon_ProtossSmall -236,Beacon_Terran -237,Beacon_TerranSmall -238,Beacon_Zerg -239,Beacon_ZergSmall -240,Lyote -241,CarrionBird -242,KarakMale -243,KarakFemale -244,UrsadakFemaleExotic -245,UrsadakMale -246,UrsadakFemale -247,UrsadakCalf -248,UrsadakMaleExotic -249,UtilityBot -250,CommentatorBot1 -251,CommentatorBot2 -252,CommentatorBot3 -253,CommentatorBot4 -254,Scantipede -255,Dog -256,Sheep -257,Cow -258,InfestedTerransEggPlacement -259,InfestorTerransWeapon -260,MineralField -261,VespeneGeyser -262,SpacePlatformGeyser -263,RichVespeneGeyser -264,DestructibleSearchlight -265,DestructibleBullhornLights -266,DestructibleStreetlight -267,DestructibleSpacePlatformSign -268,DestructibleStoreFrontCityProps -269,DestructibleBillboardTall -270,DestructibleBillboardScrollingText -271,DestructibleSpacePlatformBarrier -272,DestructibleSignsDirectional -273,DestructibleSignsConstruction -274,DestructibleSignsFunny -275,DestructibleSignsIcons -276,DestructibleSignsWarning -277,DestructibleGarage -278,DestructibleGarageLarge -279,DestructibleTrafficSignal -280,TrafficSignal -281,BraxisAlphaDestructible1x1 -282,BraxisAlphaDestructible2x2 -283,DestructibleDebris4x4 -284,DestructibleDebris6x6 -285,DestructibleRock2x4Vertical -286,DestructibleRock2x4Horizontal -287,DestructibleRock2x6Vertical -288,DestructibleRock2x6Horizontal -289,DestructibleRock4x4 -290,DestructibleRock6x6 -291,DestructibleRampDiagonalHugeULBR -292,DestructibleRampDiagonalHugeBLUR -293,DestructibleRampVerticalHuge -294,DestructibleRampHorizontalHuge -295,DestructibleDebrisRampDiagonalHugeULBR -296,DestructibleDebrisRampDiagonalHugeBLUR -297,MengskStatueAlone -298,MengskStatue -299,WolfStatue -300,GlobeStatue -301,Weapon -302,GlaiveWurmBounceWeapon -303,BroodLordWeapon -304,BroodLordAWeapon -305,CreepBlocker1x1 -306,PathingBlocker1x1 -307,PathingBlocker2x2 -308,AutoTestAttackTargetGround -309,AutoTestAttackTargetAir -310,AutoTestAttacker -311,HelperEmitterSelectionArrow -312,MultiKillObject -313,ShapeGolfball -314,ShapeCone -315,ShapeCube -316,ShapeCylinder -317,ShapeDodecahedron -318,ShapeIcosahedron -319,ShapeOctahedron -320,ShapePyramid -321,ShapeRoundedCube -322,ShapeSphere -323,ShapeTetrahedron -324,ShapeThickTorus -325,ShapeThinTorus -326,ShapeTorus -327,Shape4PointStar -328,Shape5PointStar -329,Shape6PointStar -330,Shape8PointStar -331,ShapeArrowPointer -332,ShapeBowl -333,ShapeBox -334,ShapeCapsule -335,ShapeCrescentMoon -336,ShapeDecahedron -337,ShapeDiamond -338,ShapeFootball -339,ShapeGemstone -340,ShapeHeart -341,ShapeJack -342,ShapePlusSign -343,ShapeShamrock -344,ShapeSpade -345,ShapeTube -346,ShapeEgg -347,ShapeYenSign -348,ShapeX -349,ShapeWatermelon -350,ShapeWonSign -351,ShapeTennisball -352,ShapeStrawberry -353,ShapeSmileyFace -354,ShapeSoccerball -355,ShapeRainbow -356,ShapeSadFace -357,ShapePoundSign -358,ShapePear -359,ShapePineapple -360,ShapeOrange -361,ShapePeanut -362,ShapeO -363,ShapeLemon -364,ShapeMoneyBag -365,ShapeHorseshoe -366,ShapeHockeyStick -367,ShapeHockeyPuck -368,ShapeHand -369,ShapeGolfClub -370,ShapeGrape -371,ShapeEuroSign -372,ShapeDollarSign -373,ShapeBasketball -374,ShapeCarrot -375,ShapeCherry -376,ShapeBaseball -377,ShapeBaseballBat -378,ShapeBanana -379,ShapeApple -380,ShapeCashLarge -381,ShapeCashMedium -382,ShapeCashSmall -383,ShapeFootballColored -384,ShapeLemonSmall -385,ShapeOrangeSmall -386,ShapeTreasureChestOpen -387,ShapeTreasureChestClosed -388,ShapeWatermelonSmall -404,MothershipCore -408,LocustMP -409,CollapsibleRockTowerDebris -410,HellionTank -411,NydusCanalAttacker -412,NydusCanalCreeper -413,SwarmHostBurrowedMP -414,SwarmHostMP -415,Oracle -416,Tempest -417,WarHound -418,WidowMine -419,Viper -420,WidowMineBurrowed -421,LurkerMPEgg -422,LurkerMP -423,LurkerMPBurrowed -424,LurkerDenMP -425,ExtendingBridgeNEWide8Out -426,ExtendingBridgeNEWide8 -427,ExtendingBridgeNWWide8Out -428,ExtendingBridgeNWWide8 -429,ExtendingBridgeNEWide10Out -430,ExtendingBridgeNEWide10 -431,ExtendingBridgeNWWide10Out -432,ExtendingBridgeNWWide10 -433,ExtendingBridgeNEWide12Out -434,ExtendingBridgeNEWide12 -435,ExtendingBridgeNWWide12Out -436,ExtendingBridgeNWWide12 -438,CollapsibleRockTowerDebrisRampRight -439,CollapsibleRockTowerDebrisRampLeft -443,CollapsibleRockTowerPushUnit -444,CollapsibleTerranTowerPushUnit -445,CollapsibleTerranTowerDebris -446,CollapsibleRockTowerPushUnitRampRight -447,CollapsibleRockTowerPushUnitRampLeft -448,DigesterCreepSprayTargetUnit -449,DigesterCreepSprayUnit -450,NydusCanalAttackerWeapon -451,ViperConsumeStructureWeapon -453,ResourceBlocker -454,TempestWeapon -455,YoinkMissile -457,YoinkVikingAirMissile -459,YoinkVikingGroundMissile -461,WarHoundWeapon -463,EyeStalkWeapon -466,WidowMineWeapon -467,WidowMineAirWeapon -468,MothershipCoreWeaponWeapon -469,TornadoMissileWeapon -470,TornadoMissileDummyWeapon -471,TalonsMissileWeapon -472,CreepTumorMissile -473,LocustMPEggAMissileWeapon -474,LocustMPEggBMissileWeapon -475,LocustMPWeapon -477,RepulsorCannonWeapon -478,ExtendingBridge -479,PhysicsPrimitiveParent -480,IceProtossCrates -481,ProtossCrates -482,TowerMine -483,PickupPalletGas -484,PickupPalletMinerals -485,PickupScrapSalvage1x1 -486,PickupScrapSalvage2x2 -487,PickupScrapSalvage3x3 -488,RoughTerrain -489,UnbuildableBricksSmallUnit -490,UnbuildablePlatesSmallUnit -491,UnbuildablePlatesUnit -492,UnbuildableRocksSmallUnit -493,XelNagaHealingShrine -494,InvisibleTargetDummy -495,CollapsibleRockTowerDoubleWide -496,CollapsibleRockTower -497,CollapsibleRockTowerDiagonal -498,CollapsibleTerranTower -499,CollapsibleTerranTowerDiagonal -500,ThornLizard -501,CleaningBot -502,DestructibleRock6x6Weak -503,ProtossSnakeSegmentDemo -504,PhysicsCapsule -505,PhysicsCube -506,PhysicsCylinder -507,PhysicsKnot -508,PhysicsL -509,PhysicsPrimitives -510,PhysicsSphere -511,PhysicsStar -512,CreepBlocker4x4 -513,DestructibleCityDebris2x4Vertical -514,DestructibleCityDebris2x4Horizontal -515,DestructibleCityDebris2x6Vertical -516,DestructibleCityDebris2x6Horizontal -517,DestructibleCityDebris4x4 -518,DestructibleCityDebris6x6 -519,DestructibleCityDebrisHugeDiagonalBLUR -520,DestructibleCityDebrisHugeDiagonalULBR -521,TestZerg -522,PathingBlockerRadius1 -523,DestructibleRockEx12x4Vertical -524,DestructibleRockEx12x4Horizontal -525,DestructibleRockEx12x6Vertical -526,DestructibleRockEx12x6Horizontal -527,DestructibleRockEx14x4 -528,DestructibleRockEx16x6 -529,DestructibleRockEx1DiagonalHugeULBR -530,DestructibleRockEx1DiagonalHugeBLUR -531,DestructibleRockEx1VerticalHuge -532,DestructibleRockEx1HorizontalHuge -533,DestructibleIce2x4Vertical -534,DestructibleIce2x4Horizontal -535,DestructibleIce2x6Vertical -536,DestructibleIce2x6Horizontal -537,DestructibleIce4x4 -538,DestructibleIce6x6 -539,DestructibleIceDiagonalHugeULBR -540,DestructibleIceDiagonalHugeBLUR -541,DestructibleIceVerticalHuge -542,DestructibleIceHorizontalHuge -543,DesertPlanetSearchlight -544,DesertPlanetStreetlight -545,UnbuildableBricksUnit -546,UnbuildableRocksUnit -547,ZerusDestructibleArch -548,Artosilope -549,Anteplott -550,LabBot -551,Crabeetle -552,CollapsibleRockTowerRampRight -553,CollapsibleRockTowerRampLeft -554,UnbuildableRocksDestructible -555,UnbuildableBricksDestructible -556,UnbuildablePlatesDestructible diff --git a/sc2reader/data/HotS/24247_abilities.csv b/sc2reader/data/HotS/24247_abilities.csv deleted file mode 100644 index 1f48492..0000000 --- a/sc2reader/data/HotS/24247_abilities.csv +++ /dev/null @@ -1,397 +0,0 @@ -0,CAbil -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -40,ReviveSelf -41,ReviveSelfAtTarget -42,ReviveSelfReplaceTarget -43,ReviveSelfOnCreep -45,attack -47,MetalGateDefaultLower -48,MetalGateDefaultRaise -49,TerranAddOns -50,TerranBuildingLiftOff -51,TerranBuildingLand -52,Refund -53,Salvage -54,DisguiseChangeling -55,SalvageShared -56,Corruption -57,GhostHoldFire -58,GhostWeaponsFree -59,MorphToInfestedTerran -60,Explode -61,FleetBeaconResearch -62,FungalGrowth -63,GuardianShield -64,MULERepair -65,MorphZerglingToBaneling -66,NexusTrainMothership -67,Feedback -68,MassRecall -69,PlacePointDefenseDrone -70,HallucinationArchon -71,HallucinationColossus -72,HallucinationHighTemplar -73,HallucinationImmortal -74,HallucinationPhoenix -75,HallucinationProbe -76,HallucinationStalker -77,HallucinationVoidRay -78,HallucinationWarpPrism -79,HallucinationZealot -80,MULEGather -81,SeekerMissile -82,CalldownMULE -83,GravitonBeam -84,BuildinProgressNydusCanal -85,Siphon -86,Leech -87,SpawnChangeling -88,DisguiseAsZealot -89,DisguiseAsMarineWithShield -90,DisguiseAsMarineWithoutShield -91,DisguiseAsZerglingWithWings -92,DisguiseAsZerglingWithoutWings -93,PhaseShift -94,Rally -95,ProgressRally -96,RallyCommand -97,RallyNexus -98,RallyHatchery -99,RoachWarrenResearch -100,SapStructure -101,InfestedTerrans -102,NeuralParasite -103,SpawnLarva -104,StimpackMarauder -105,SupplyDrop -106,250mmStrikeCannons -107,TemporalRift -108,TimeWarp -109,UltraliskCavernResearch -110,WormholeTransit -111,SCVHarvest -112,ProbeHarvest -113,AttackWarpPrism -114,que1 -115,que5 -116,que5CancelToSelection -117,que5LongBlend -118,que5Addon -119,BuildInProgress -120,Repair -121,TerranBuild -122,RavenBuild -123,Stimpack -124,GhostCloak -125,Snipe -126,MedivacHeal -127,SiegeMode -128,Unsiege -129,BansheeCloak -130,MedivacTransport -131,ScannerSweep -132,Yamato -133,AssaultMode -134,FighterMode -135,BunkerTransport -136,CommandCenterTransport -137,CommandCenterLiftOff -138,CommandCenterLand -139,BarracksAddOns -140,BarracksLiftOff -141,FactoryAddOns -142,FactoryLiftOff -143,StarportAddOns -144,StarportLiftOff -145,FactoryLand -146,StarportLand -147,CommandCenterTrain -148,BarracksLand -149,SupplyDepotLower -150,SupplyDepotRaise -151,BarracksTrain -152,FactoryTrain -153,StarportTrain -154,EngineeringBayResearch -155,MercCompoundResearch -156,ArmSiloWithNuke -157,BarracksTechLabResearch -158,FactoryTechLabResearch -159,StarportTechLabResearch -160,GhostAcademyResearch -161,ArmoryResearch -162,ProtossBuild -163,WarpPrismTransport -164,GatewayTrain -165,StargateTrain -166,RoboticsFacilityTrain -167,NexusTrain -168,PsiStorm -169,HangarQueue5 -170,BroodLordQueue2 -171,CarrierHangar -172,ForgeResearch -173,RoboticsBayResearch -174,TemplarArchivesResearch -175,ZergBuild -176,DroneHarvest -177,evolutionchamberresearch -178,UpgradeToLair -179,UpgradeToHive -180,UpgradeToGreaterSpire -181,LairResearch -182,SpawningPoolResearch -183,HydraliskDenResearch -184,SpireResearch -185,LarvaTrain -186,MorphToBroodLord -187,BurrowBanelingDown -188,BurrowBanelingUp -189,BurrowDroneDown -190,BurrowDroneUp -191,BurrowHydraliskDown -192,BurrowHydraliskUp -193,BurrowRoachDown -194,BurrowRoachUp -195,BurrowZerglingDown -196,BurrowZerglingUp -197,BurrowInfestorTerranDown -198,BurrowInfestorTerranUp -199,RedstoneLavaCritterBurrow -200,RedstoneLavaCritterInjuredBurrow -201,RedstoneLavaCritterUnburrow -202,RedstoneLavaCritterInjuredUnburrow -203,OverlordTransport -204,Mergeable -205,Warpable -206,WarpGateTrain -207,BurrowQueenDown -208,BurrowQueenUp -209,NydusCanalTransport -210,Blink -211,BurrowInfestorDown -212,BurrowInfestorUp -213,MorphToOverseer -214,UpgradeToPlanetaryFortress -215,InfestationPitResearch -216,BanelingNestResearch -217,BurrowUltraliskDown -218,BurrowUltraliskUp -219,UpgradeToOrbital -220,UpgradeToWarpGate -221,MorphBackToGateway -222,OrbitalLiftOff -223,OrbitalCommandLand -224,ForceField -225,PhasingMode -226,TransportMode -227,FusionCoreResearch -228,CyberneticsCoreResearch -229,TwilightCouncilResearch -230,TacNukeStrike -231,SalvageBunkerRefund -232,SalvageBunker -233,EMP -234,Vortex -235,TrainQueen -236,BurrowCreepTumorDown -237,Transfusion -238,TechLabMorph -239,BarracksTechLabMorph -240,FactoryTechLabMorph -241,StarportTechLabMorph -242,ReactorMorph -243,BarracksReactorMorph -244,FactoryReactorMorph -245,StarportReactorMorph -246,AttackRedirect -247,StimpackRedirect -248,StimpackMarauderRedirect -249,burrowedStop -250,StopRedirect -251,GenerateCreep -252,QueenBuild -253,SpineCrawlerUproot -254,SporeCrawlerUproot -255,SpineCrawlerRoot -256,SporeCrawlerRoot -257,CreepTumorBuild -258,BuildAutoTurret -259,ArchonWarp -260,BuildNydusCanal -261,BroodLordHangar -262,Charge -263,TowerCapture -264,HerdInteract -265,Frenzy -266,Contaminate -267,Shatter -268,InfestedTerransLayEgg -269,que5Passive -270,que5PassiveCancelToSelection -292,BridgeExtend -293,BridgeRetract -294,DigesterCreepSpray -295,MorphToCollapsibleTerranTowerDebris -296,MorphToCollapsibleTerranTowerDebrisRampLeft -297,MorphToCollapsibleTerranTowerDebrisRampRight -298,MorphToMothership -299,MothershipStasis -300,MothershipCoreWeapon -301,NexusTrainMothershipCore -302,MothershipCoreTeleport -303,SalvageDroneRefund -304,SalvageDrone -305,SalvageZerglingRefund -306,SalvageZergling -307,SalvageQueenRefund -308,SalvageQueen -309,SalvageRoachRefund -310,SalvageRoach -311,SalvageBanelingRefund -312,SalvageBaneling -313,SalvageHydraliskRefund -314,SalvageHydralisk -315,SalvageInfestorRefund -316,SalvageInfestor -317,SalvageSwarmHostRefund -318,SalvageSwarmHost -319,SalvageUltraliskRefund -320,SalvageUltralisk -321,DigesterTransport -322,SpectreShield -323,XelNagaHealingShrine -324,NexusInvulnerability -325,NexusPhaseShift -326,SpawnChangelingTarget -327,QueenLand -328,QueenFly -329,OracleCloakField -330,FlyerShield -331,LocustTrain -332,MothershipCoreMassRecall -333,SingleRecall -334,MorphToHellion -335,RestoreShields -336,Scryer -337,BurrowChargeTrial -338,LeechResources -339,SnipeDoT -340,SwarmHostSpawnLocusts -341,Clone -342,BuildingShield -343,MorphToCollapsibleRockTowerDebris -344,MorphToHellionTank -345,BuildingStasis -346,ResourceBlocker -347,ResourceStun -348,MaxiumThrust -349,Sacrifice -350,BurrowChargeMP -351,BurrowChargeRevD -352,MorphToSwarmHostBurrowedMP -353,MorphToSwarmHostMP -354,SpawnInfestedTerran -355,attackProtossBuilding -356,burrowedBanelingStop -357,stopProtossBuilding -358,BlindingCloud -359,EyeStalk -360,Yoink -361,ViperConsume -362,ViperConsumeMinerals -363,ViperConsumeStructure -364,ProtossBuildingQueue -365,que8 -366,TestZerg -367,VolatileBurstBuilding -368,PickupScrapSmall -369,PickupScrapMedium -370,PickupScrapLarge -371,PickupPalletGas -372,PickupPalletMinerals -373,MassiveKnockover -374,WidowMineBurrow -375,WidowMineUnburrow -376,WidowMineAttack -377,TornadoMissile -378,MothershipCoreEnergize -379,LurkerAspectMPFromHydraliskBurrowed -380,LurkerAspectMP -381,BurrowLurkerMPDown -382,BurrowLurkerMPUp -383,UpgradeToLurkerDenMP -384,HallucinationOracle -385,MedivacSpeedBoost -386,ExtendingBridgeNEWide8Out -387,ExtendingBridgeNEWide8 -388,ExtendingBridgeNWWide8Out -389,ExtendingBridgeNWWide8 -390,ExtendingBridgeNEWide10Out -391,ExtendingBridgeNEWide10 -392,ExtendingBridgeNWWide10Out -393,ExtendingBridgeNWWide10 -394,ExtendingBridgeNEWide12Out -395,ExtendingBridgeNEWide12 -396,ExtendingBridgeNWWide12Out -397,ExtendingBridgeNWWide12 -398,InvulnerabilityShield -399,CritterFlee -400,OracleRevelation -401,OracleRevelationMode -402,OracleNormalMode -403,MorphToCollapsibleRockTowerDebrisRampRight -404,MorphToCollapsibleRockTowerDebrisRampLeft -405,VoidSiphon -406,UltraliskWeaponCooldown -407,MothershipCorePurifyNexusCancel -408,MothershipCorePurifyNexus -409,TemporalField -431,ArmoryResearchSwarm -432,ArmorpiercingMissiles -433,ExplosiveMissiles -434,LightofAiur -435,MothershipMassRecall -436,OracleWeapon -437,PulsarBeam -438,PulsarCannon -439,VoidRaySwarmDamageBoost -440,SeekerDummyChannel diff --git a/sc2reader/data/HotS/24247_units.csv b/sc2reader/data/HotS/24247_units.csv deleted file mode 100644 index d2e08df..0000000 --- a/sc2reader/data/HotS/24247_units.csv +++ /dev/null @@ -1,520 +0,0 @@ -1,System_Snapshot_Dummy -5,BeaconRally -6,BeaconArmy -7,BeaconAttack -8,BeaconDefend -9,BeaconHarass -10,BeaconIdle -11,BeaconAuto -12,BeaconDetect -13,BeaconScout -14,BeaconClaim -15,BeaconExpand -16,BeaconCustom1 -17,BeaconCustom2 -18,BeaconCustom3 -19,BeaconCustom4 -22,DESTRUCTIBLE -23,ITEM -24,POWERUP -25,SMCAMERA -26,SMCHARACTER -27,STARMAP -28,SMSET -29,MISSILE -30,MISSILE_INVULNERABLE -31,MISSILE_HALFLIFE -32,PLACEHOLDER -33,PLACEHOLDER_AIR -34,PATHINGBLOCKER -35,BEACON -36,Ball -37,StereoscopicOptionsUnit -38,Colossus -39,TechLab -40,Reactor -42,InfestorTerran -43,BanelingCocoon -44,Baneling -45,Mothership -46,PointDefenseDrone -47,Changeling -48,ChangelingZealot -49,ChangelingMarineShield -50,ChangelingMarine -51,ChangelingZerglingWings -52,ChangelingZergling -54,CommandCenter -55,SupplyDepot -56,Refinery -57,Barracks -58,EngineeringBay -59,MissileTurret -60,Bunker -61,SensorTower -62,GhostAcademy -63,Factory -64,Starport -66,Armory -67,FusionCore -68,AutoTurret -69,SiegeTankSieged -70,SiegeTank -71,VikingAssault -72,VikingFighter -73,CommandCenterFlying -74,BarracksTechLab -75,BarracksReactor -76,FactoryTechLab -77,FactoryReactor -78,StarportTechLab -79,StarportReactor -80,FactoryFlying -81,StarportFlying -82,SCV -83,BarracksFlying -84,SupplyDepotLowered -85,Marine -86,Reaper -87,Ghost -88,Marauder -89,Thor -90,Hellion -91,Medivac -92,Banshee -93,Raven -94,Battlecruiser -95,Nuke -96,Nexus -97,Pylon -98,Assimilator -99,Gateway -100,Forge -101,FleetBeacon -102,TwilightCouncil -103,PhotonCannon -104,Stargate -105,TemplarArchive -106,DarkShrine -107,RoboticsBay -108,RoboticsFacility -109,CyberneticsCore -110,Zealot -111,Stalker -112,HighTemplar -113,DarkTemplar -114,Sentry -115,Phoenix -116,Carrier -117,VoidRay -118,WarpPrism -119,Observer -120,Immortal -121,Probe -122,Interceptor -123,Hatchery -124,CreepTumor -125,Extractor -126,SpawningPool -127,EvolutionChamber -128,HydraliskDen -129,Spire -130,UltraliskCavern -131,InfestationPit -132,NydusNetwork -133,BanelingNest -134,RoachWarren -135,SpineCrawler -136,SporeCrawler -137,Lair -138,Hive -139,GreaterSpire -140,Egg -141,Drone -142,Zergling -143,Overlord -144,Hydralisk -145,Mutalisk -146,Ultralisk -147,Roach -148,Infestor -149,Corruptor -150,BroodLordCocoon -151,BroodLord -152,BanelingBurrowed -153,DroneBurrowed -154,HydraliskBurrowed -155,RoachBurrowed -156,ZerglingBurrowed -157,InfestorTerranBurrowed -158,RedstoneLavaCritterBurrowed -159,RedstoneLavaCritterInjuredBurrowed -160,RedstoneLavaCritter -161,RedstoneLavaCritterInjured -162,QueenBurrowed -163,Queen -164,InfestorBurrowed -165,OverlordCocoon -166,Overseer -167,PlanetaryFortress -168,UltraliskBurrowed -169,OrbitalCommand -170,WarpGate -171,OrbitalCommandFlying -172,ForceField -173,WarpPrismPhasing -174,CreepTumorBurrowed -175,CreepTumorQueen -176,SpineCrawlerUprooted -177,SporeCrawlerUprooted -178,Archon -179,NydusCanal -180,BroodlingEscort -181,RichMineralField -183,XelNagaTower -187,InfestedTerransEgg -188,Larva -189,ReaperPlaceholder -190,NeedleSpinesWeapon -191,CorruptionWeapon -192,InfestedTerransWeapon -193,NeuralParasiteWeapon -194,PointDefenseDroneReleaseWeapon -195,HunterSeekerWeapon -196,MULE -198,ThorAAWeapon -199,PunisherGrenadesLMWeapon -200,VikingFighterWeapon -201,ATALaserBatteryLMWeapon -202,ATSLaserBatteryLMWeapon -203,LongboltMissileWeapon -204,D8ChargeWeapon -205,YamatoWeapon -206,IonCannonsWeapon -207,AcidSalivaWeapon -208,SpineCrawlerWeapon -209,SporeCrawlerWeapon -210,GlaiveWurmWeapon -211,GlaiveWurmM2Weapon -212,GlaiveWurmM3Weapon -213,StalkerWeapon -214,EMP2Weapon -215,BacklashRocketsLMWeapon -216,PhotonCannonWeapon -217,ParasiteSporeWeapon -219,Broodling -220,BroodLordBWeapon -223,AutoTurretReleaseWeapon -224,LarvaReleaseMissile -225,AcidSpinesWeapon -226,FrenzyWeapon -227,ContaminateWeapon -228,BroodlingDefault -229,Critter -230,CritterStationary -231,Shape -232,FungalGrowthMissile -233,NeuralParasiteTentacleMissile -234,Beacon_Protoss -235,Beacon_ProtossSmall -236,Beacon_Terran -237,Beacon_TerranSmall -238,Beacon_Zerg -239,Beacon_ZergSmall -240,Lyote -241,CarrionBird -242,KarakMale -243,KarakFemale -244,UrsadakFemaleExotic -245,UrsadakMale -246,UrsadakFemale -247,UrsadakCalf -248,UrsadakMaleExotic -249,UtilityBot -250,CommentatorBot1 -251,CommentatorBot2 -252,CommentatorBot3 -253,CommentatorBot4 -254,Scantipede -255,Dog -256,Sheep -257,Cow -258,InfestedTerransEggPlacement -259,InfestorTerransWeapon -260,MineralField -261,VespeneGeyser -262,SpacePlatformGeyser -263,RichVespeneGeyser -264,DestructibleSearchlight -265,DestructibleBullhornLights -266,DestructibleStreetlight -267,DestructibleSpacePlatformSign -268,DestructibleStoreFrontCityProps -269,DestructibleBillboardTall -270,DestructibleBillboardScrollingText -271,DestructibleSpacePlatformBarrier -272,DestructibleSignsDirectional -273,DestructibleSignsConstruction -274,DestructibleSignsFunny -275,DestructibleSignsIcons -276,DestructibleSignsWarning -277,DestructibleGarage -278,DestructibleGarageLarge -279,DestructibleTrafficSignal -280,TrafficSignal -281,BraxisAlphaDestructible1x1 -282,BraxisAlphaDestructible2x2 -283,DestructibleDebris4x4 -284,DestructibleDebris6x6 -285,DestructibleRock2x4Vertical -286,DestructibleRock2x4Horizontal -287,DestructibleRock2x6Vertical -288,DestructibleRock2x6Horizontal -289,DestructibleRock4x4 -290,DestructibleRock6x6 -291,DestructibleRampDiagonalHugeULBR -292,DestructibleRampDiagonalHugeBLUR -293,DestructibleRampVerticalHuge -294,DestructibleRampHorizontalHuge -295,DestructibleDebrisRampDiagonalHugeULBR -296,DestructibleDebrisRampDiagonalHugeBLUR -297,MengskStatueAlone -298,MengskStatue -299,WolfStatue -300,GlobeStatue -301,Weapon -302,GlaiveWurmBounceWeapon -303,BroodLordWeapon -304,BroodLordAWeapon -305,CreepBlocker1x1 -306,PathingBlocker1x1 -307,PathingBlocker2x2 -308,AutoTestAttackTargetGround -309,AutoTestAttackTargetAir -310,AutoTestAttacker -311,HelperEmitterSelectionArrow -312,MultiKillObject -313,ShapeGolfball -314,ShapeCone -315,ShapeCube -316,ShapeCylinder -317,ShapeDodecahedron -318,ShapeIcosahedron -319,ShapeOctahedron -320,ShapePyramid -321,ShapeRoundedCube -322,ShapeSphere -323,ShapeTetrahedron -324,ShapeThickTorus -325,ShapeThinTorus -326,ShapeTorus -327,Shape4PointStar -328,Shape5PointStar -329,Shape6PointStar -330,Shape8PointStar -331,ShapeArrowPointer -332,ShapeBowl -333,ShapeBox -334,ShapeCapsule -335,ShapeCrescentMoon -336,ShapeDecahedron -337,ShapeDiamond -338,ShapeFootball -339,ShapeGemstone -340,ShapeHeart -341,ShapeJack -342,ShapePlusSign -343,ShapeShamrock -344,ShapeSpade -345,ShapeTube -346,ShapeEgg -347,ShapeYenSign -348,ShapeX -349,ShapeWatermelon -350,ShapeWonSign -351,ShapeTennisball -352,ShapeStrawberry -353,ShapeSmileyFace -354,ShapeSoccerball -355,ShapeRainbow -356,ShapeSadFace -357,ShapePoundSign -358,ShapePear -359,ShapePineapple -360,ShapeOrange -361,ShapePeanut -362,ShapeO -363,ShapeLemon -364,ShapeMoneyBag -365,ShapeHorseshoe -366,ShapeHockeyStick -367,ShapeHockeyPuck -368,ShapeHand -369,ShapeGolfClub -370,ShapeGrape -371,ShapeEuroSign -372,ShapeDollarSign -373,ShapeBasketball -374,ShapeCarrot -375,ShapeCherry -376,ShapeBaseball -377,ShapeBaseballBat -378,ShapeBanana -379,ShapeApple -380,ShapeCashLarge -381,ShapeCashMedium -382,ShapeCashSmall -383,ShapeFootballColored -384,ShapeLemonSmall -385,ShapeOrangeSmall -386,ShapeTreasureChestOpen -387,ShapeTreasureChestClosed -388,ShapeWatermelonSmall -404,HellionTank -405,CollapsibleTerranTowerDebris -406,DebrisRampLeft -407,DebrisRampRight -408,MothershipCore -412,LocustMP -413,CollapsibleRockTowerDebris -414,NydusCanalAttacker -415,NydusCanalCreeper -416,SwarmHostBurrowedMP -417,SwarmHostMP -418,Oracle -419,Tempest -420,WarHound -421,WidowMine -422,Viper -423,WidowMineBurrowed -424,LurkerMPEgg -425,LurkerMP -426,LurkerMPBurrowed -427,LurkerDenMP -428,ExtendingBridgeNEWide8Out -429,ExtendingBridgeNEWide8 -430,ExtendingBridgeNWWide8Out -431,ExtendingBridgeNWWide8 -432,ExtendingBridgeNEWide10Out -433,ExtendingBridgeNEWide10 -434,ExtendingBridgeNWWide10Out -435,ExtendingBridgeNWWide10 -436,ExtendingBridgeNEWide12Out -437,ExtendingBridgeNEWide12 -438,ExtendingBridgeNWWide12Out -439,ExtendingBridgeNWWide12 -441,CollapsibleRockTowerDebrisRampRight -442,CollapsibleRockTowerDebrisRampLeft -444,CollapsibleTerranTowerPushUnitRampLeft -445,CollapsibleTerranTowerPushUnitRampRight -448,CollapsibleRockTowerPushUnit -449,CollapsibleTerranTowerPushUnit -450,CollapsibleRockTowerPushUnitRampRight -451,CollapsibleRockTowerPushUnitRampLeft -452,DigesterCreepSprayTargetUnit -453,DigesterCreepSprayUnit -454,NydusCanalAttackerWeapon -455,ViperConsumeStructureWeapon -458,ResourceBlocker -459,TempestWeapon -460,YoinkMissile -462,YoinkVikingAirMissile -464,YoinkVikingGroundMissile -466,WarHoundWeapon -468,EyeStalkWeapon -471,WidowMineWeapon -472,WidowMineAirWeapon -473,MothershipCoreWeaponWeapon -474,TornadoMissileWeapon -475,TornadoMissileDummyWeapon -476,TalonsMissileWeapon -477,CreepTumorMissile -478,LocustMPEggAMissileWeapon -479,LocustMPEggBMissileWeapon -480,LocustMPWeapon -482,RepulsorCannonWeapon -483,ExtendingBridge -484,PhysicsPrimitiveParent -485,CollapsibleRockTowerDiagonal -486,CollapsibleTerranTowerDiagonal -487,CollapsibleTerranTowerRampLeft -488,CollapsibleTerranTowerRampRight -489,IceProtossCrates -490,ProtossCrates -491,TowerMine -492,PickupPalletGas -493,PickupPalletMinerals -494,PickupScrapSalvage1x1 -495,PickupScrapSalvage2x2 -496,PickupScrapSalvage3x3 -497,RoughTerrain -498,UnbuildableBricksSmallUnit -499,UnbuildablePlatesSmallUnit -500,UnbuildablePlatesUnit -501,UnbuildableRocksSmallUnit -502,XelNagaHealingShrine -503,InvisibleTargetDummy -504,CollapsibleRockTower -505,CollapsibleTerranTower -506,ThornLizard -507,CleaningBot -508,DestructibleRock6x6Weak -509,ProtossSnakeSegmentDemo -510,PhysicsCapsule -511,PhysicsCube -512,PhysicsCylinder -513,PhysicsKnot -514,PhysicsL -515,PhysicsPrimitives -516,PhysicsSphere -517,PhysicsStar -518,CreepBlocker4x4 -519,DestructibleCityDebris2x4Vertical -520,DestructibleCityDebris2x4Horizontal -521,DestructibleCityDebris2x6Vertical -522,DestructibleCityDebris2x6Horizontal -523,DestructibleCityDebris4x4 -524,DestructibleCityDebris6x6 -525,DestructibleCityDebrisHugeDiagonalBLUR -526,DestructibleCityDebrisHugeDiagonalULBR -527,TestZerg -528,PathingBlockerRadius1 -529,DestructibleRockEx12x4Vertical -530,DestructibleRockEx12x4Horizontal -531,DestructibleRockEx12x6Vertical -532,DestructibleRockEx12x6Horizontal -533,DestructibleRockEx14x4 -534,DestructibleRockEx16x6 -535,DestructibleRockEx1DiagonalHugeULBR -536,DestructibleRockEx1DiagonalHugeBLUR -537,DestructibleRockEx1VerticalHuge -538,DestructibleRockEx1HorizontalHuge -539,DestructibleIce2x4Vertical -540,DestructibleIce2x4Horizontal -541,DestructibleIce2x6Vertical -542,DestructibleIce2x6Horizontal -543,DestructibleIce4x4 -544,DestructibleIce6x6 -545,DestructibleIceDiagonalHugeULBR -546,DestructibleIceDiagonalHugeBLUR -547,DestructibleIceVerticalHuge -548,DestructibleIceHorizontalHuge -549,DesertPlanetSearchlight -550,DesertPlanetStreetlight -551,UnbuildableBricksUnit -552,UnbuildableRocksUnit -553,ZerusDestructibleArch -554,Artosilope -555,Anteplott -556,LabBot -557,Crabeetle -558,CollapsibleRockTowerRampRight -559,CollapsibleRockTowerRampLeft -560,UnbuildableRocksDestructible -561,UnbuildableBricksDestructible -562,UnbuildablePlatesDestructible -563,LabMineralField -579,ThorAALance -580,OracleWeapon -581,TempestWeaponGround -582,SeekerMissile diff --git a/sc2reader/data/HotS/24764_abilities.csv b/sc2reader/data/HotS/24764_abilities.csv deleted file mode 100644 index 1f48492..0000000 --- a/sc2reader/data/HotS/24764_abilities.csv +++ /dev/null @@ -1,397 +0,0 @@ -0,CAbil -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -40,ReviveSelf -41,ReviveSelfAtTarget -42,ReviveSelfReplaceTarget -43,ReviveSelfOnCreep -45,attack -47,MetalGateDefaultLower -48,MetalGateDefaultRaise -49,TerranAddOns -50,TerranBuildingLiftOff -51,TerranBuildingLand -52,Refund -53,Salvage -54,DisguiseChangeling -55,SalvageShared -56,Corruption -57,GhostHoldFire -58,GhostWeaponsFree -59,MorphToInfestedTerran -60,Explode -61,FleetBeaconResearch -62,FungalGrowth -63,GuardianShield -64,MULERepair -65,MorphZerglingToBaneling -66,NexusTrainMothership -67,Feedback -68,MassRecall -69,PlacePointDefenseDrone -70,HallucinationArchon -71,HallucinationColossus -72,HallucinationHighTemplar -73,HallucinationImmortal -74,HallucinationPhoenix -75,HallucinationProbe -76,HallucinationStalker -77,HallucinationVoidRay -78,HallucinationWarpPrism -79,HallucinationZealot -80,MULEGather -81,SeekerMissile -82,CalldownMULE -83,GravitonBeam -84,BuildinProgressNydusCanal -85,Siphon -86,Leech -87,SpawnChangeling -88,DisguiseAsZealot -89,DisguiseAsMarineWithShield -90,DisguiseAsMarineWithoutShield -91,DisguiseAsZerglingWithWings -92,DisguiseAsZerglingWithoutWings -93,PhaseShift -94,Rally -95,ProgressRally -96,RallyCommand -97,RallyNexus -98,RallyHatchery -99,RoachWarrenResearch -100,SapStructure -101,InfestedTerrans -102,NeuralParasite -103,SpawnLarva -104,StimpackMarauder -105,SupplyDrop -106,250mmStrikeCannons -107,TemporalRift -108,TimeWarp -109,UltraliskCavernResearch -110,WormholeTransit -111,SCVHarvest -112,ProbeHarvest -113,AttackWarpPrism -114,que1 -115,que5 -116,que5CancelToSelection -117,que5LongBlend -118,que5Addon -119,BuildInProgress -120,Repair -121,TerranBuild -122,RavenBuild -123,Stimpack -124,GhostCloak -125,Snipe -126,MedivacHeal -127,SiegeMode -128,Unsiege -129,BansheeCloak -130,MedivacTransport -131,ScannerSweep -132,Yamato -133,AssaultMode -134,FighterMode -135,BunkerTransport -136,CommandCenterTransport -137,CommandCenterLiftOff -138,CommandCenterLand -139,BarracksAddOns -140,BarracksLiftOff -141,FactoryAddOns -142,FactoryLiftOff -143,StarportAddOns -144,StarportLiftOff -145,FactoryLand -146,StarportLand -147,CommandCenterTrain -148,BarracksLand -149,SupplyDepotLower -150,SupplyDepotRaise -151,BarracksTrain -152,FactoryTrain -153,StarportTrain -154,EngineeringBayResearch -155,MercCompoundResearch -156,ArmSiloWithNuke -157,BarracksTechLabResearch -158,FactoryTechLabResearch -159,StarportTechLabResearch -160,GhostAcademyResearch -161,ArmoryResearch -162,ProtossBuild -163,WarpPrismTransport -164,GatewayTrain -165,StargateTrain -166,RoboticsFacilityTrain -167,NexusTrain -168,PsiStorm -169,HangarQueue5 -170,BroodLordQueue2 -171,CarrierHangar -172,ForgeResearch -173,RoboticsBayResearch -174,TemplarArchivesResearch -175,ZergBuild -176,DroneHarvest -177,evolutionchamberresearch -178,UpgradeToLair -179,UpgradeToHive -180,UpgradeToGreaterSpire -181,LairResearch -182,SpawningPoolResearch -183,HydraliskDenResearch -184,SpireResearch -185,LarvaTrain -186,MorphToBroodLord -187,BurrowBanelingDown -188,BurrowBanelingUp -189,BurrowDroneDown -190,BurrowDroneUp -191,BurrowHydraliskDown -192,BurrowHydraliskUp -193,BurrowRoachDown -194,BurrowRoachUp -195,BurrowZerglingDown -196,BurrowZerglingUp -197,BurrowInfestorTerranDown -198,BurrowInfestorTerranUp -199,RedstoneLavaCritterBurrow -200,RedstoneLavaCritterInjuredBurrow -201,RedstoneLavaCritterUnburrow -202,RedstoneLavaCritterInjuredUnburrow -203,OverlordTransport -204,Mergeable -205,Warpable -206,WarpGateTrain -207,BurrowQueenDown -208,BurrowQueenUp -209,NydusCanalTransport -210,Blink -211,BurrowInfestorDown -212,BurrowInfestorUp -213,MorphToOverseer -214,UpgradeToPlanetaryFortress -215,InfestationPitResearch -216,BanelingNestResearch -217,BurrowUltraliskDown -218,BurrowUltraliskUp -219,UpgradeToOrbital -220,UpgradeToWarpGate -221,MorphBackToGateway -222,OrbitalLiftOff -223,OrbitalCommandLand -224,ForceField -225,PhasingMode -226,TransportMode -227,FusionCoreResearch -228,CyberneticsCoreResearch -229,TwilightCouncilResearch -230,TacNukeStrike -231,SalvageBunkerRefund -232,SalvageBunker -233,EMP -234,Vortex -235,TrainQueen -236,BurrowCreepTumorDown -237,Transfusion -238,TechLabMorph -239,BarracksTechLabMorph -240,FactoryTechLabMorph -241,StarportTechLabMorph -242,ReactorMorph -243,BarracksReactorMorph -244,FactoryReactorMorph -245,StarportReactorMorph -246,AttackRedirect -247,StimpackRedirect -248,StimpackMarauderRedirect -249,burrowedStop -250,StopRedirect -251,GenerateCreep -252,QueenBuild -253,SpineCrawlerUproot -254,SporeCrawlerUproot -255,SpineCrawlerRoot -256,SporeCrawlerRoot -257,CreepTumorBuild -258,BuildAutoTurret -259,ArchonWarp -260,BuildNydusCanal -261,BroodLordHangar -262,Charge -263,TowerCapture -264,HerdInteract -265,Frenzy -266,Contaminate -267,Shatter -268,InfestedTerransLayEgg -269,que5Passive -270,que5PassiveCancelToSelection -292,BridgeExtend -293,BridgeRetract -294,DigesterCreepSpray -295,MorphToCollapsibleTerranTowerDebris -296,MorphToCollapsibleTerranTowerDebrisRampLeft -297,MorphToCollapsibleTerranTowerDebrisRampRight -298,MorphToMothership -299,MothershipStasis -300,MothershipCoreWeapon -301,NexusTrainMothershipCore -302,MothershipCoreTeleport -303,SalvageDroneRefund -304,SalvageDrone -305,SalvageZerglingRefund -306,SalvageZergling -307,SalvageQueenRefund -308,SalvageQueen -309,SalvageRoachRefund -310,SalvageRoach -311,SalvageBanelingRefund -312,SalvageBaneling -313,SalvageHydraliskRefund -314,SalvageHydralisk -315,SalvageInfestorRefund -316,SalvageInfestor -317,SalvageSwarmHostRefund -318,SalvageSwarmHost -319,SalvageUltraliskRefund -320,SalvageUltralisk -321,DigesterTransport -322,SpectreShield -323,XelNagaHealingShrine -324,NexusInvulnerability -325,NexusPhaseShift -326,SpawnChangelingTarget -327,QueenLand -328,QueenFly -329,OracleCloakField -330,FlyerShield -331,LocustTrain -332,MothershipCoreMassRecall -333,SingleRecall -334,MorphToHellion -335,RestoreShields -336,Scryer -337,BurrowChargeTrial -338,LeechResources -339,SnipeDoT -340,SwarmHostSpawnLocusts -341,Clone -342,BuildingShield -343,MorphToCollapsibleRockTowerDebris -344,MorphToHellionTank -345,BuildingStasis -346,ResourceBlocker -347,ResourceStun -348,MaxiumThrust -349,Sacrifice -350,BurrowChargeMP -351,BurrowChargeRevD -352,MorphToSwarmHostBurrowedMP -353,MorphToSwarmHostMP -354,SpawnInfestedTerran -355,attackProtossBuilding -356,burrowedBanelingStop -357,stopProtossBuilding -358,BlindingCloud -359,EyeStalk -360,Yoink -361,ViperConsume -362,ViperConsumeMinerals -363,ViperConsumeStructure -364,ProtossBuildingQueue -365,que8 -366,TestZerg -367,VolatileBurstBuilding -368,PickupScrapSmall -369,PickupScrapMedium -370,PickupScrapLarge -371,PickupPalletGas -372,PickupPalletMinerals -373,MassiveKnockover -374,WidowMineBurrow -375,WidowMineUnburrow -376,WidowMineAttack -377,TornadoMissile -378,MothershipCoreEnergize -379,LurkerAspectMPFromHydraliskBurrowed -380,LurkerAspectMP -381,BurrowLurkerMPDown -382,BurrowLurkerMPUp -383,UpgradeToLurkerDenMP -384,HallucinationOracle -385,MedivacSpeedBoost -386,ExtendingBridgeNEWide8Out -387,ExtendingBridgeNEWide8 -388,ExtendingBridgeNWWide8Out -389,ExtendingBridgeNWWide8 -390,ExtendingBridgeNEWide10Out -391,ExtendingBridgeNEWide10 -392,ExtendingBridgeNWWide10Out -393,ExtendingBridgeNWWide10 -394,ExtendingBridgeNEWide12Out -395,ExtendingBridgeNEWide12 -396,ExtendingBridgeNWWide12Out -397,ExtendingBridgeNWWide12 -398,InvulnerabilityShield -399,CritterFlee -400,OracleRevelation -401,OracleRevelationMode -402,OracleNormalMode -403,MorphToCollapsibleRockTowerDebrisRampRight -404,MorphToCollapsibleRockTowerDebrisRampLeft -405,VoidSiphon -406,UltraliskWeaponCooldown -407,MothershipCorePurifyNexusCancel -408,MothershipCorePurifyNexus -409,TemporalField -431,ArmoryResearchSwarm -432,ArmorpiercingMissiles -433,ExplosiveMissiles -434,LightofAiur -435,MothershipMassRecall -436,OracleWeapon -437,PulsarBeam -438,PulsarCannon -439,VoidRaySwarmDamageBoost -440,SeekerDummyChannel diff --git a/sc2reader/data/HotS/24764_units.csv b/sc2reader/data/HotS/24764_units.csv deleted file mode 100644 index 228001e..0000000 --- a/sc2reader/data/HotS/24764_units.csv +++ /dev/null @@ -1,521 +0,0 @@ -1,System_Snapshot_Dummy -5,BeaconRally -6,BeaconArmy -7,BeaconAttack -8,BeaconDefend -9,BeaconHarass -10,BeaconIdle -11,BeaconAuto -12,BeaconDetect -13,BeaconScout -14,BeaconClaim -15,BeaconExpand -16,BeaconCustom1 -17,BeaconCustom2 -18,BeaconCustom3 -19,BeaconCustom4 -22,DESTRUCTIBLE -23,ITEM -24,POWERUP -25,SMCAMERA -26,SMCHARACTER -27,STARMAP -28,SMSET -29,MISSILE -30,MISSILE_INVULNERABLE -31,MISSILE_HALFLIFE -32,PLACEHOLDER -33,PLACEHOLDER_AIR -34,PATHINGBLOCKER -35,BEACON -36,Ball -37,StereoscopicOptionsUnit -38,Colossus -39,TechLab -40,Reactor -42,InfestorTerran -43,BanelingCocoon -44,Baneling -45,Mothership -46,PointDefenseDrone -47,Changeling -48,ChangelingZealot -49,ChangelingMarineShield -50,ChangelingMarine -51,ChangelingZerglingWings -52,ChangelingZergling -54,CommandCenter -55,SupplyDepot -56,Refinery -57,Barracks -58,EngineeringBay -59,MissileTurret -60,Bunker -61,SensorTower -62,GhostAcademy -63,Factory -64,Starport -66,Armory -67,FusionCore -68,AutoTurret -69,SiegeTankSieged -70,SiegeTank -71,VikingAssault -72,VikingFighter -73,CommandCenterFlying -74,BarracksTechLab -75,BarracksReactor -76,FactoryTechLab -77,FactoryReactor -78,StarportTechLab -79,StarportReactor -80,FactoryFlying -81,StarportFlying -82,SCV -83,BarracksFlying -84,SupplyDepotLowered -85,Marine -86,Reaper -87,Ghost -88,Marauder -89,Thor -90,Hellion -91,Medivac -92,Banshee -93,Raven -94,Battlecruiser -95,Nuke -96,Nexus -97,Pylon -98,Assimilator -99,Gateway -100,Forge -101,FleetBeacon -102,TwilightCouncil -103,PhotonCannon -104,Stargate -105,TemplarArchive -106,DarkShrine -107,RoboticsBay -108,RoboticsFacility -109,CyberneticsCore -110,Zealot -111,Stalker -112,HighTemplar -113,DarkTemplar -114,Sentry -115,Phoenix -116,Carrier -117,VoidRay -118,WarpPrism -119,Observer -120,Immortal -121,Probe -122,Interceptor -123,Hatchery -124,CreepTumor -125,Extractor -126,SpawningPool -127,EvolutionChamber -128,HydraliskDen -129,Spire -130,UltraliskCavern -131,InfestationPit -132,NydusNetwork -133,BanelingNest -134,RoachWarren -135,SpineCrawler -136,SporeCrawler -137,Lair -138,Hive -139,GreaterSpire -140,Egg -141,Drone -142,Zergling -143,Overlord -144,Hydralisk -145,Mutalisk -146,Ultralisk -147,Roach -148,Infestor -149,Corruptor -150,BroodLordCocoon -151,BroodLord -152,BanelingBurrowed -153,DroneBurrowed -154,HydraliskBurrowed -155,RoachBurrowed -156,ZerglingBurrowed -157,InfestorTerranBurrowed -158,RedstoneLavaCritterBurrowed -159,RedstoneLavaCritterInjuredBurrowed -160,RedstoneLavaCritter -161,RedstoneLavaCritterInjured -162,QueenBurrowed -163,Queen -164,InfestorBurrowed -165,OverlordCocoon -166,Overseer -167,PlanetaryFortress -168,UltraliskBurrowed -169,OrbitalCommand -170,WarpGate -171,OrbitalCommandFlying -172,ForceField -173,WarpPrismPhasing -174,CreepTumorBurrowed -175,CreepTumorQueen -176,SpineCrawlerUprooted -177,SporeCrawlerUprooted -178,Archon -179,NydusCanal -180,BroodlingEscort -181,RichMineralField -183,XelNagaTower -187,InfestedTerransEgg -188,Larva -189,ReaperPlaceholder -190,NeedleSpinesWeapon -191,CorruptionWeapon -192,InfestedTerransWeapon -193,NeuralParasiteWeapon -194,PointDefenseDroneReleaseWeapon -195,HunterSeekerWeapon -196,MULE -198,ThorAAWeapon -199,PunisherGrenadesLMWeapon -200,VikingFighterWeapon -201,ATALaserBatteryLMWeapon -202,ATSLaserBatteryLMWeapon -203,LongboltMissileWeapon -204,D8ChargeWeapon -205,YamatoWeapon -206,IonCannonsWeapon -207,AcidSalivaWeapon -208,SpineCrawlerWeapon -209,SporeCrawlerWeapon -210,GlaiveWurmWeapon -211,GlaiveWurmM2Weapon -212,GlaiveWurmM3Weapon -213,StalkerWeapon -214,EMP2Weapon -215,BacklashRocketsLMWeapon -216,PhotonCannonWeapon -217,ParasiteSporeWeapon -219,Broodling -220,BroodLordBWeapon -223,AutoTurretReleaseWeapon -224,LarvaReleaseMissile -225,AcidSpinesWeapon -226,FrenzyWeapon -227,ContaminateWeapon -228,BroodlingDefault -229,Critter -230,CritterStationary -231,Shape -232,FungalGrowthMissile -233,NeuralParasiteTentacleMissile -234,Beacon_Protoss -235,Beacon_ProtossSmall -236,Beacon_Terran -237,Beacon_TerranSmall -238,Beacon_Zerg -239,Beacon_ZergSmall -240,Lyote -241,CarrionBird -242,KarakMale -243,KarakFemale -244,UrsadakFemaleExotic -245,UrsadakMale -246,UrsadakFemale -247,UrsadakCalf -248,UrsadakMaleExotic -249,UtilityBot -250,CommentatorBot1 -251,CommentatorBot2 -252,CommentatorBot3 -253,CommentatorBot4 -254,Scantipede -255,Dog -256,Sheep -257,Cow -258,InfestedTerransEggPlacement -259,InfestorTerransWeapon -260,MineralField -261,VespeneGeyser -262,SpacePlatformGeyser -263,RichVespeneGeyser -264,DestructibleSearchlight -265,DestructibleBullhornLights -266,DestructibleStreetlight -267,DestructibleSpacePlatformSign -268,DestructibleStoreFrontCityProps -269,DestructibleBillboardTall -270,DestructibleBillboardScrollingText -271,DestructibleSpacePlatformBarrier -272,DestructibleSignsDirectional -273,DestructibleSignsConstruction -274,DestructibleSignsFunny -275,DestructibleSignsIcons -276,DestructibleSignsWarning -277,DestructibleGarage -278,DestructibleGarageLarge -279,DestructibleTrafficSignal -280,TrafficSignal -281,BraxisAlphaDestructible1x1 -282,BraxisAlphaDestructible2x2 -283,DestructibleDebris4x4 -284,DestructibleDebris6x6 -285,DestructibleRock2x4Vertical -286,DestructibleRock2x4Horizontal -287,DestructibleRock2x6Vertical -288,DestructibleRock2x6Horizontal -289,DestructibleRock4x4 -290,DestructibleRock6x6 -291,DestructibleRampDiagonalHugeULBR -292,DestructibleRampDiagonalHugeBLUR -293,DestructibleRampVerticalHuge -294,DestructibleRampHorizontalHuge -295,DestructibleDebrisRampDiagonalHugeULBR -296,DestructibleDebrisRampDiagonalHugeBLUR -297,MengskStatueAlone -298,MengskStatue -299,WolfStatue -300,GlobeStatue -301,Weapon -302,GlaiveWurmBounceWeapon -303,BroodLordWeapon -304,BroodLordAWeapon -305,CreepBlocker1x1 -306,PathingBlocker1x1 -307,PathingBlocker2x2 -308,AutoTestAttackTargetGround -309,AutoTestAttackTargetAir -310,AutoTestAttacker -311,HelperEmitterSelectionArrow -312,MultiKillObject -313,ShapeGolfball -314,ShapeCone -315,ShapeCube -316,ShapeCylinder -317,ShapeDodecahedron -318,ShapeIcosahedron -319,ShapeOctahedron -320,ShapePyramid -321,ShapeRoundedCube -322,ShapeSphere -323,ShapeTetrahedron -324,ShapeThickTorus -325,ShapeThinTorus -326,ShapeTorus -327,Shape4PointStar -328,Shape5PointStar -329,Shape6PointStar -330,Shape8PointStar -331,ShapeArrowPointer -332,ShapeBowl -333,ShapeBox -334,ShapeCapsule -335,ShapeCrescentMoon -336,ShapeDecahedron -337,ShapeDiamond -338,ShapeFootball -339,ShapeGemstone -340,ShapeHeart -341,ShapeJack -342,ShapePlusSign -343,ShapeShamrock -344,ShapeSpade -345,ShapeTube -346,ShapeEgg -347,ShapeYenSign -348,ShapeX -349,ShapeWatermelon -350,ShapeWonSign -351,ShapeTennisball -352,ShapeStrawberry -353,ShapeSmileyFace -354,ShapeSoccerball -355,ShapeRainbow -356,ShapeSadFace -357,ShapePoundSign -358,ShapePear -359,ShapePineapple -360,ShapeOrange -361,ShapePeanut -362,ShapeO -363,ShapeLemon -364,ShapeMoneyBag -365,ShapeHorseshoe -366,ShapeHockeyStick -367,ShapeHockeyPuck -368,ShapeHand -369,ShapeGolfClub -370,ShapeGrape -371,ShapeEuroSign -372,ShapeDollarSign -373,ShapeBasketball -374,ShapeCarrot -375,ShapeCherry -376,ShapeBaseball -377,ShapeBaseballBat -378,ShapeBanana -379,ShapeApple -380,ShapeCashLarge -381,ShapeCashMedium -382,ShapeCashSmall -383,ShapeFootballColored -384,ShapeLemonSmall -385,ShapeOrangeSmall -386,ShapeTreasureChestOpen -387,ShapeTreasureChestClosed -388,ShapeWatermelonSmall -389,UnbuildableRocksDestructible -390,UnbuildableBricksDestructible -391,UnbuildablePlatesDestructible -407,HellionTank -408,CollapsibleTerranTowerDebris -409,DebrisRampLeft -410,DebrisRampRight -411,MothershipCore -415,LocustMP -416,CollapsibleRockTowerDebris -417,NydusCanalAttacker -418,NydusCanalCreeper -419,SwarmHostBurrowedMP -420,SwarmHostMP -421,Oracle -422,Tempest -423,WarHound -424,WidowMine -425,Viper -426,WidowMineBurrowed -427,LurkerMPEgg -428,LurkerMP -429,LurkerMPBurrowed -430,LurkerDenMP -431,ExtendingBridgeNEWide8Out -432,ExtendingBridgeNEWide8 -433,ExtendingBridgeNWWide8Out -434,ExtendingBridgeNWWide8 -435,ExtendingBridgeNEWide10Out -436,ExtendingBridgeNEWide10 -437,ExtendingBridgeNWWide10Out -438,ExtendingBridgeNWWide10 -439,ExtendingBridgeNEWide12Out -440,ExtendingBridgeNEWide12 -441,ExtendingBridgeNWWide12Out -442,ExtendingBridgeNWWide12 -444,CollapsibleRockTowerDebrisRampRight -445,CollapsibleRockTowerDebrisRampLeft -447,CollapsibleTerranTowerPushUnitRampLeft -448,CollapsibleTerranTowerPushUnitRampRight -451,CollapsibleRockTowerPushUnit -452,CollapsibleTerranTowerPushUnit -453,CollapsibleRockTowerPushUnitRampRight -454,CollapsibleRockTowerPushUnitRampLeft -455,DigesterCreepSprayTargetUnit -456,DigesterCreepSprayUnit -457,NydusCanalAttackerWeapon -458,ViperConsumeStructureWeapon -461,ResourceBlocker -462,TempestWeapon -463,YoinkMissile -465,YoinkVikingAirMissile -467,YoinkVikingGroundMissile -469,WarHoundWeapon -471,EyeStalkWeapon -474,WidowMineWeapon -475,WidowMineAirWeapon -476,MothershipCoreWeaponWeapon -477,TornadoMissileWeapon -478,TornadoMissileDummyWeapon -479,TalonsMissileWeapon -480,CreepTumorMissile -481,LocustMPEggAMissileWeapon -482,LocustMPEggBMissileWeapon -483,LocustMPWeapon -485,RepulsorCannonWeapon -486,ExtendingBridge -487,PhysicsPrimitiveParent -488,CollapsibleRockTowerDiagonal -489,CollapsibleTerranTowerDiagonal -490,CollapsibleTerranTowerRampLeft -491,CollapsibleTerranTowerRampRight -492,IceProtossCrates -493,ProtossCrates -494,TowerMine -495,PickupPalletGas -496,PickupPalletMinerals -497,PickupScrapSalvage1x1 -498,PickupScrapSalvage2x2 -499,PickupScrapSalvage3x3 -500,RoughTerrain -501,UnbuildableBricksSmallUnit -502,UnbuildablePlatesSmallUnit -503,UnbuildablePlatesUnit -504,UnbuildableRocksSmallUnit -505,XelNagaHealingShrine -506,InvisibleTargetDummy -507,ProtossVespeneGeyser -508,CollapsibleRockTower -509,CollapsibleTerranTower -510,ThornLizard -511,CleaningBot -512,DestructibleRock6x6Weak -513,ProtossSnakeSegmentDemo -514,PhysicsCapsule -515,PhysicsCube -516,PhysicsCylinder -517,PhysicsKnot -518,PhysicsL -519,PhysicsPrimitives -520,PhysicsSphere -521,PhysicsStar -522,CreepBlocker4x4 -523,DestructibleCityDebris2x4Vertical -524,DestructibleCityDebris2x4Horizontal -525,DestructibleCityDebris2x6Vertical -526,DestructibleCityDebris2x6Horizontal -527,DestructibleCityDebris4x4 -528,DestructibleCityDebris6x6 -529,DestructibleCityDebrisHugeDiagonalBLUR -530,DestructibleCityDebrisHugeDiagonalULBR -531,TestZerg -532,PathingBlockerRadius1 -533,DestructibleRockEx12x4Vertical -534,DestructibleRockEx12x4Horizontal -535,DestructibleRockEx12x6Vertical -536,DestructibleRockEx12x6Horizontal -537,DestructibleRockEx14x4 -538,DestructibleRockEx16x6 -539,DestructibleRockEx1DiagonalHugeULBR -540,DestructibleRockEx1DiagonalHugeBLUR -541,DestructibleRockEx1VerticalHuge -542,DestructibleRockEx1HorizontalHuge -543,DestructibleIce2x4Vertical -544,DestructibleIce2x4Horizontal -545,DestructibleIce2x6Vertical -546,DestructibleIce2x6Horizontal -547,DestructibleIce4x4 -548,DestructibleIce6x6 -549,DestructibleIceDiagonalHugeULBR -550,DestructibleIceDiagonalHugeBLUR -551,DestructibleIceVerticalHuge -552,DestructibleIceHorizontalHuge -553,DesertPlanetSearchlight -554,DesertPlanetStreetlight -555,UnbuildableBricksUnit -556,UnbuildableRocksUnit -557,ZerusDestructibleArch -558,Artosilope -559,Anteplott -560,LabBot -561,Crabeetle -562,CollapsibleRockTowerRampRight -563,CollapsibleRockTowerRampLeft -564,LabMineralField -580,ThorAALance -581,OracleWeapon -582,TempestWeaponGround -583,SeekerMissile diff --git a/sc2reader/data/HotS/base_abilities.csv b/sc2reader/data/HotS/base_abilities.csv deleted file mode 100644 index 8f6e91f..0000000 --- a/sc2reader/data/HotS/base_abilities.csv +++ /dev/null @@ -1,370 +0,0 @@ -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -40,ReviveSelf -41,ReviveSelfAtTarget -42,ReviveSelfReplaceTarget -43,ReviveSelfOnCreep -45,attack -47,MetalGateDefaultLower -48,MetalGateDefaultRaise -49,TerranAddOns -50,TerranBuildingLiftOff -51,TerranBuildingLand -52,Refund -53,Salvage -54,DisguiseChangeling -55,SalvageShared -56,Corruption -57,GhostHoldFire -58,GhostWeaponsFree -59,MorphToInfestedTerran -60,Explode -61,FleetBeaconResearch -62,FungalGrowth -63,GuardianShield -64,MULERepair -65,MorphZerglingToBaneling -66,NexusTrainMothership -67,Feedback -68,MassRecall -69,PlacePointDefenseDrone -70,HallucinationArchon -71,HallucinationColossus -72,HallucinationHighTemplar -73,HallucinationImmortal -74,HallucinationPhoenix -75,HallucinationProbe -76,HallucinationStalker -77,HallucinationVoidRay -78,HallucinationWarpPrism -79,HallucinationZealot -80,MULEGather -81,SeekerMissile -82,CalldownMULE -83,GravitonBeam -84,BuildinProgressNydusCanal -85,Siphon -86,Leech -87,SpawnChangeling -88,DisguiseAsZealot -89,DisguiseAsMarineWithShield -90,DisguiseAsMarineWithoutShield -91,DisguiseAsZerglingWithWings -92,DisguiseAsZerglingWithoutWings -93,PhaseShift -94,Rally -95,ProgressRally -96,RallyCommand -97,RallyNexus -98,RallyHatchery -99,RoachWarrenResearch -100,SapStructure -101,InfestedTerrans -102,NeuralParasite -103,SpawnLarva -104,StimpackMarauder -105,SupplyDrop -106,250mmStrikeCannons -107,TemporalRift -108,TimeWarp -109,UltraliskCavernResearch -110,WormholeTransit -111,SCVHarvest -112,ProbeHarvest -113,AttackWarpPrism -114,que1 -115,que5 -116,que5CancelToSelection -117,que5LongBlend -118,que5Addon -119,BuildInProgress -120,Repair -121,TerranBuild -122,RavenBuild -123,Stimpack -124,GhostCloak -125,Snipe -126,MedivacHeal -127,SiegeMode -128,Unsiege -129,BansheeCloak -130,MedivacTransport -131,ScannerSweep -132,Yamato -133,AssaultMode -134,FighterMode -135,BunkerTransport -136,CommandCenterTransport -137,CommandCenterLiftOff -138,CommandCenterLand -139,BarracksAddOns -140,BarracksLiftOff -141,FactoryAddOns -142,FactoryLiftOff -143,StarportAddOns -144,StarportLiftOff -145,FactoryLand -146,StarportLand -147,CommandCenterTrain -148,BarracksLand -149,SupplyDepotLower -150,SupplyDepotRaise -151,BarracksTrain -152,FactoryTrain -153,StarportTrain -154,EngineeringBayResearch -155,MercCompoundResearch -156,ArmSiloWithNuke -157,BarracksTechLabResearch -158,FactoryTechLabResearch -159,StarportTechLabResearch -160,GhostAcademyResearch -161,ArmoryResearch -162,ProtossBuild -163,WarpPrismTransport -164,GatewayTrain -165,StargateTrain -166,RoboticsFacilityTrain -167,NexusTrain -168,PsiStorm -169,HangarQueue5 -170,BroodLordQueue2 -171,CarrierHangar -172,ForgeResearch -173,RoboticsBayResearch -174,TemplarArchivesResearch -175,ZergBuild -176,DroneHarvest -177,evolutionchamberresearch -178,UpgradeToLair -179,UpgradeToHive -180,UpgradeToGreaterSpire -181,LairResearch -182,SpawningPoolResearch -183,HydraliskDenResearch -184,SpireResearch -185,LarvaTrain -186,MorphToBroodLord -187,BurrowBanelingDown -188,BurrowBanelingUp -189,BurrowDroneDown -190,BurrowDroneUp -191,BurrowHydraliskDown -192,BurrowHydraliskUp -193,BurrowRoachDown -194,BurrowRoachUp -195,BurrowZerglingDown -196,BurrowZerglingUp -197,BurrowInfestorTerranDown -198,BurrowInfestorTerranUp -199,RedstoneLavaCritterBurrow -200,RedstoneLavaCritterInjuredBurrow -201,RedstoneLavaCritterUnburrow -202,RedstoneLavaCritterInjuredUnburrow -203,OverlordTransport -204,Mergeable -205,Warpable -206,WarpGateTrain -207,BurrowQueenDown -208,BurrowQueenUp -209,NydusCanalTransport -210,Blink -211,BurrowInfestorDown -212,BurrowInfestorUp -213,MorphToOverseer -214,UpgradeToPlanetaryFortress -215,InfestationPitResearch -216,BanelingNestResearch -217,BurrowUltraliskDown -218,BurrowUltraliskUp -219,UpgradeToOrbital -220,UpgradeToWarpGate -221,MorphBackToGateway -222,OrbitalLiftOff -223,OrbitalCommandLand -224,ForceField -225,PhasingMode -226,TransportMode -227,FusionCoreResearch -228,CyberneticsCoreResearch -229,TwilightCouncilResearch -230,TacNukeStrike -231,SalvageBunkerRefund -232,SalvageBunker -233,EMP -234,Vortex -235,TrainQueen -236,BurrowCreepTumorDown -237,Transfusion -238,TechLabMorph -239,BarracksTechLabMorph -240,FactoryTechLabMorph -241,StarportTechLabMorph -242,ReactorMorph -243,BarracksReactorMorph -244,FactoryReactorMorph -245,StarportReactorMorph -246,AttackRedirect -247,StimpackRedirect -248,StimpackMarauderRedirect -249,burrowedStop -250,StopRedirect -251,GenerateCreep -252,QueenBuild -253,SpineCrawlerUproot -254,SporeCrawlerUproot -255,SpineCrawlerRoot -256,SporeCrawlerRoot -257,CreepTumorBuild -258,BuildAutoTurret -259,ArchonWarp -260,BuildNydusCanal -261,BroodLordHangar -262,Charge -263,TowerCapture -264,HerdInteract -265,Frenzy -266,Contaminate -267,Shatter -268,InfestedTerransLayEgg -269,que5Passive -270,que5PassiveCancelToSelection -294,BridgeExtend -295,BridgeRetract -296,DigesterCreepSpray -297,MorphToMothership -298,MothershipStasis -299,MothershipCoreWeapon -300,NexusTrainMothershipCore -301,MothershipCoreTeleport -302,SalvageDroneRefund -303,SalvageDrone -304,SalvageZerglingRefund -305,SalvageZergling -306,SalvageQueenRefund -307,SalvageQueen -308,SalvageRoachRefund -309,SalvageRoach -310,SalvageBanelingRefund -311,SalvageBaneling -312,SalvageHydraliskRefund -313,SalvageHydralisk -314,SalvageInfestorRefund -315,SalvageInfestor -316,SalvageSwarmHostRefund -317,SalvageSwarmHost -318,SalvageUltraliskRefund -319,SalvageUltralisk -320,DigesterTransport -321,SpectreShield -322,XelNagaHealingShrine -323,NexusInvulnerability -324,NexusPhaseShift -325,SpawnChangelingTarget -326,QueenLand -327,QueenFly -328,OracleCloakField -329,FlyerShield -330,LocustTrain -331,MothershipCoreMassRecall -332,SingleRecall -333,MorphToHellion -334,RestoreShields -335,Scryer -336,BurrowChargeTrial -337,SnipeDoT -338,SwarmHostSpawnLocusts -339,Clone -340,BuildingShield -341,MorphToCollapsibleRockTowerDebris -342,MorphToHellionTank -343,BuildingStasis -344,ResourceBlocker -345,ResourceStun -346,MaxiumThrust -347,Sacrifice -348,BurrowChargeMP -349,BurrowChargeRevD -350,MorphToSwarmHostBurrowedMP -351,MorphToSwarmHostMP -352,SpawnInfestedTerran -353,attackProtossBuilding -354,burrowedBanelingStop -355,stopProtossBuilding -356,BurrowProtector -357,EyeStalk -358,Yoink -359,ViperConsumeStructure -360,ProtossBuildingQueue -361,que8 -362,TestZerg -363,VolatileBurstBuilding -364,PickupScrapSmall -365,PickupScrapMedium -366,PickupScrapLarge -367,PickupPalletGas -368,PickupPalletMinerals -369,MassiveKnockover -370,WidowMineBurrow -371,WidowMineUnburrow -372,WidowMineAttack -373,TornadoMissile -374,MothershipCoreEnergize -375,HallucinationOracle -376,MedivacSpeedBoost -377,ExtendingBridgeNEWide8Out -378,ExtendingBridgeNEWide8 -379,ExtendingBridgeNWWide8Out -380,ExtendingBridgeNWWide8 -381,ExtendingBridgeNEWide10Out -382,ExtendingBridgeNEWide10 -383,ExtendingBridgeNWWide10Out -384,ExtendingBridgeNWWide10 -385,ExtendingBridgeNEWide12Out -386,ExtendingBridgeNEWide12 -387,ExtendingBridgeNWWide12Out -388,ExtendingBridgeNWWide12 -389,InvulnerabilityShield -390,CritterFlee -391,OracleRevelation -392,OracleRevelationMode -393,OracleNormalMode -413,PhaseShield -414,UltraliskWeaponCooldown diff --git a/sc2reader/data/HotS/base_units.csv b/sc2reader/data/HotS/base_units.csv deleted file mode 100644 index 5dcc77e..0000000 --- a/sc2reader/data/HotS/base_units.csv +++ /dev/null @@ -1,493 +0,0 @@ -1,System_Snapshot_Dummy -5,BeaconRally -6,BeaconAttack -7,BeaconDefend -8,BeaconHarass -9,BeaconIdle -10,BeaconAuto -11,BeaconDetect -12,BeaconScout -13,BeaconClaim -14,BeaconExpand -15,BeaconCustom1 -16,BeaconCustom2 -17,BeaconCustom3 -18,BeaconCustom4 -21,DESTRUCTIBLE -22,ITEM -23,POWERUP -24,SMCAMERA -25,SMCHARACTER -26,STARMAP -27,SMSET -28,MISSILE -29,MISSILE_INVULNERABLE -30,MISSILE_HALFLIFE -31,PLACEHOLDER -32,PLACEHOLDER_AIR -33,PATHINGBLOCKER -34,BEACON -35,Ball -36,StereoscopicOptionsUnit -37,Colossus -38,TechLab -39,Reactor -41,InfestorTerran -42,BanelingCocoon -43,Baneling -44,Mothership -45,PointDefenseDrone -46,Changeling -47,ChangelingZealot -48,ChangelingMarineShield -49,ChangelingMarine -50,ChangelingZerglingWings -51,ChangelingZergling -53,CommandCenter -54,SupplyDepot -55,Refinery -56,Barracks -57,EngineeringBay -58,MissileTurret -59,Bunker -60,SensorTower -61,GhostAcademy -62,Factory -63,Starport -65,Armory -66,FusionCore -67,AutoTurret -68,SiegeTankSieged -69,SiegeTank -70,VikingFighter -71,VikingAssault -72,CommandCenterFlying -73,BarracksTechLab -74,BarracksReactor -75,FactoryTechLab -76,FactoryReactor -77,StarportTechLab -78,StarportReactor -79,FactoryFlying -80,StarportFlying -81,SCV -82,BarracksFlying -83,SupplyDepotLowered -84,Marine -85,Reaper -86,Ghost -87,Marauder -88,Thor -89,Hellion -90,Medivac -91,Banshee -92,Raven -93,Battlecruiser -94,Nuke -95,Nexus -96,Pylon -97,Assimilator -98,Gateway -99,Forge -100,FleetBeacon -101,TwilightCouncil -102,PhotonCannon -103,Stargate -104,TemplarArchive -105,DarkShrine -106,RoboticsBay -107,RoboticsFacility -108,CyberneticsCore -109,Zealot -110,Stalker -111,HighTemplar -112,DarkTemplar -113,Sentry -114,Phoenix -115,Carrier -116,VoidRay -117,WarpPrism -118,Observer -119,Immortal -120,Probe -121,Interceptor -122,Hatchery -123,CreepTumor -124,Extractor -125,SpawningPool -126,EvolutionChamber -127,HydraliskDen -128,Spire -129,UltraliskCavern -130,InfestationPit -131,NydusNetwork -132,BanelingNest -133,RoachWarren -134,SpineCrawler -135,SporeCrawler -136,Lair -137,Hive -138,GreaterSpire -139,Egg -140,Drone -141,Zergling -142,Overlord -143,Hydralisk -144,Mutalisk -145,Ultralisk -146,Roach -147,Infestor -148,Corruptor -149,BroodLordCocoon -150,BroodLord -151,BanelingBurrowed -152,DroneBurrowed -153,HydraliskBurrowed -154,RoachBurrowed -155,ZerglingBurrowed -156,InfestorTerranBurrowed -157,RedstoneLavaCritterBurrowed -158,RedstoneLavaCritterInjuredBurrowed -159,RedstoneLavaCritter -160,RedstoneLavaCritterInjured -161,QueenBurrowed -162,Queen -163,InfestorBurrowed -164,OverlordCocoon -165,Overseer -166,PlanetaryFortress -167,UltraliskBurrowed -168,OrbitalCommand -169,WarpGate -170,OrbitalCommandFlying -171,ForceField -172,WarpPrismPhasing -173,CreepTumorBurrowed -174,CreepTumorQueen -175,SpineCrawlerUprooted -176,SporeCrawlerUprooted -177,Archon -178,NydusCanal -179,BroodlingEscort -180,RichMineralField -182,XelNagaTower -186,InfestedTerransEgg -187,Larva -188,ReaperPlaceholder -189,NeedleSpinesWeapon -190,CorruptionWeapon -191,InfestedTerransWeapon -192,NeuralParasiteWeapon -193,PointDefenseDroneReleaseWeapon -194,HunterSeekerWeapon -195,MULE -197,ThorAAWeapon -198,PunisherGrenadesLMWeapon -199,VikingFighterWeapon -200,ATALaserBatteryLMWeapon -201,ATSLaserBatteryLMWeapon -202,LongboltMissileWeapon -203,D8ChargeWeapon -204,YamatoWeapon -205,IonCannonsWeapon -206,AcidSalivaWeapon -207,SpineCrawlerWeapon -208,SporeCrawlerWeapon -209,GlaiveWurmWeapon -210,GlaiveWurmM2Weapon -211,GlaiveWurmM3Weapon -212,StalkerWeapon -213,EMP2Weapon -214,BacklashRocketsLMWeapon -215,PhotonCannonWeapon -216,ParasiteSporeWeapon -218,Broodling -219,BroodLordBWeapon -222,AutoTurretReleaseWeapon -223,LarvaReleaseMissile -224,AcidSpinesWeapon -225,FrenzyWeapon -226,ContaminateWeapon -227,BroodlingDefault -228,Critter -229,CritterStationary -230,Shape -231,FungalGrowthMissile -232,NeuralParasiteTentacleMissile -233,Beacon_Protoss -234,Beacon_ProtossSmall -235,Beacon_Terran -236,Beacon_TerranSmall -237,Beacon_Zerg -238,Beacon_ZergSmall -239,Lyote -240,CarrionBird -241,KarakMale -242,KarakFemale -243,UrsadakMale -244,UrsadakFemale -245,UrsadakCalf -246,UrsadakMaleExotic -247,UrsadakFemaleExotic -248,UtilityBot -249,CommentatorBot1 -250,CommentatorBot2 -251,CommentatorBot3 -252,CommentatorBot4 -253,Scantipede -254,Dog -255,Sheep -256,Cow -257,InfestedTerransEggPlacement -258,InfestorTerransWeapon -259,MineralField -260,VespeneGeyser -261,SpacePlatformGeyser -262,RichVespeneGeyser -263,DestructibleSearchlight -264,DestructibleBullhornLights -265,DestructibleStreetlight -266,DestructibleSpacePlatformSign -267,DestructibleStoreFrontCityProps -268,DestructibleBillboardTall -269,DestructibleBillboardScrollingText -270,DestructibleSpacePlatformBarrier -271,DestructibleSignsDirectional -272,DestructibleSignsConstruction -273,DestructibleSignsFunny -274,DestructibleSignsIcons -275,DestructibleSignsWarning -276,DestructibleGarage -277,DestructibleGarageLarge -278,DestructibleTrafficSignal -279,TrafficSignal -280,BraxisAlphaDestructible1x1 -281,BraxisAlphaDestructible2x2 -282,DestructibleDebris4x4 -283,DestructibleDebris6x6 -284,DestructibleRock2x4Vertical -285,DestructibleRock2x4Horizontal -286,DestructibleRock2x6Vertical -287,DestructibleRock2x6Horizontal -288,DestructibleRock4x4 -289,DestructibleRock6x6 -290,DestructibleRampDiagonalHugeULBR -291,DestructibleRampDiagonalHugeBLUR -292,DestructibleRampVerticalHuge -293,DestructibleRampHorizontalHuge -294,DestructibleDebrisRampDiagonalHugeULBR -295,DestructibleDebrisRampDiagonalHugeBLUR -296,MengskStatueAlone -297,MengskStatue -298,WolfStatue -299,GlobeStatue -300,Weapon -301,GlaiveWurmBounceWeapon -302,BroodLordWeapon -303,BroodLordAWeapon -304,CreepBlocker1x1 -305,PathingBlocker1x1 -306,PathingBlocker2x2 -307,AutoTestAttackTargetGround -308,AutoTestAttackTargetAir -309,AutoTestAttacker -310,HelperEmitterSelectionArrow -311,MultiKillObject -312,ShapeGolfball -313,ShapeCone -314,ShapeCube -315,ShapeCylinder -316,ShapeDodecahedron -317,ShapeIcosahedron -318,ShapeOctahedron -319,ShapePyramid -320,ShapeRoundedCube -321,ShapeSphere -322,ShapeTetrahedron -323,ShapeThickTorus -324,ShapeThinTorus -325,ShapeTorus -326,Shape4PointStar -327,Shape5PointStar -328,Shape6PointStar -329,Shape8PointStar -330,ShapeArrowPointer -331,ShapeBowl -332,ShapeBox -333,ShapeCapsule -334,ShapeCrescentMoon -335,ShapeDecahedron -336,ShapeDiamond -337,ShapeFootball -338,ShapeGemstone -339,ShapeHeart -340,ShapeJack -341,ShapePlusSign -342,ShapeShamrock -343,ShapeSpade -344,ShapeTube -345,ShapeEgg -346,ShapeYenSign -347,ShapeX -348,ShapeWatermelon -349,ShapeWonSign -350,ShapeTennisball -351,ShapeStrawberry -352,ShapeSmileyFace -353,ShapeSoccerball -354,ShapeRainbow -355,ShapeSadFace -356,ShapePoundSign -357,ShapePear -358,ShapePineapple -359,ShapeOrange -360,ShapePeanut -361,ShapeO -362,ShapeLemon -363,ShapeMoneyBag -364,ShapeHorseshoe -365,ShapeHockeyStick -366,ShapeHockeyPuck -367,ShapeHand -368,ShapeGolfClub -369,ShapeGrape -370,ShapeEuroSign -371,ShapeDollarSign -372,ShapeBasketball -373,ShapeCarrot -374,ShapeCherry -375,ShapeBaseball -376,ShapeBaseballBat -377,ShapeBanana -378,ShapeApple -379,ShapeCashLarge -380,ShapeCashMedium -381,ShapeCashSmall -382,ShapeFootballColored -383,ShapeLemonSmall -384,ShapeOrangeSmall -385,ShapeTreasureChestOpen -386,ShapeTreasureChestClosed -387,ShapeWatermelonSmall -401,MothershipCore -405,LocustMP -406,CollapsibleRockTowerDebris -407,HellionTank -408,NydusCanalAttacker -409,NydusCanalCreeper -410,SwarmHostBurrowedMP -411,SwarmHostMP -412,Oracle -413,Tempest -414,WarHound -415,WidowMine -416,Viper -417,WidowMineBurrowed -418,ExtendingBridgeNEWide8Out -419,ExtendingBridgeNEWide8 -420,ExtendingBridgeNWWide8Out -421,ExtendingBridgeNWWide8 -422,ExtendingBridgeNEWide10Out -423,ExtendingBridgeNEWide10 -424,ExtendingBridgeNWWide10Out -425,ExtendingBridgeNWWide10 -426,ExtendingBridgeNEWide12Out -427,ExtendingBridgeNEWide12 -428,ExtendingBridgeNWWide12Out -429,ExtendingBridgeNWWide12 -441,CollapsibleRockTowerPushUnit -442,CollapsibleTerranTowerPushUnit -443,CollapsibleTerranTowerDebris -444,DigesterCreepSprayTargetUnit -445,DigesterCreepSprayUnit -446,NydusCanalAttackerWeapon -447,ViperConsumeStructureWeapon -449,ResourceBlocker -450,TempestWeapon -451,YoinkMissile -453,WarHoundWeapon -455,EyeStalkWeapon -458,WidowMineWeapon -459,WidowMineAirWeapon -460,MothershipCoreWeaponWeapon -461,TornadoMissileWeapon -462,TornadoMissileDummyWeapon -463,TalonsMissileWeapon -464,CreepTumorMissile -465,LocustMPEggAMissileWeapon -466,LocustMPEggBMissileWeapon -467,LocustMPWeapon -468,ExtendingBridge -469,PhysicsPrimitiveParent -470,IceProtossCrates -471,ProtossCrates -472,TowerMine -473,PickupPalletGas -474,PickupPalletMinerals -475,PickupScrapSalvage1x1 -476,PickupScrapSalvage2x2 -477,PickupScrapSalvage3x3 -478,RoughTerrain -479,UnbuildableBricksSmallUnit -480,UnbuildablePlatesSmallUnit -481,UnbuildablePlatesUnit -482,UnbuildableRocksSmallUnit -483,XelNagaHealingShrine -484,InvisibleTargetDummy -485,CollapsibleRockTowerDoubleWide -486,CollapsibleRockTower -487,CollapsibleRockTowerDiagonal -488,CollapsibleTerranTower -489,CollapsibleTerranTowerDiagonal -490,ZerglingFly -491,ThornLizard -492,CleaningBot -493,DestructibleRock6x6Weak -494,ProtossSnakeSegmentDemo -495,PhysicsPrimitives -496,PhysicsCube -497,PhysicsSphere -498,PhysicsCylinder -499,PhysicsCapsule -500,PhysicsStar -501,PhysicsKnot -502,PhysicsL -503,CreepBlocker4x4 -504,DestructibleCityDebris2x4Vertical -505,DestructibleCityDebris2x4Horizontal -506,DestructibleCityDebris2x6Vertical -507,DestructibleCityDebris2x6Horizontal -508,DestructibleCityDebris4x4 -509,DestructibleCityDebris6x6 -510,DestructibleCityDebrisHugeDiagonalBLUR -511,DestructibleCityDebrisHugeDiagonalULBR -512,TestZerg -513,PathingBlockerRadius1 -514,DestructibleRockEx12x4Vertical -515,DestructibleRockEx12x4Horizontal -516,DestructibleRockEx12x6Vertical -517,DestructibleRockEx12x6Horizontal -518,DestructibleRockEx14x4 -519,DestructibleRockEx16x6 -520,DestructibleRockEx1DiagonalHugeULBR -521,DestructibleRockEx1DiagonalHugeBLUR -522,DestructibleRockEx1VerticalHuge -523,DestructibleRockEx1HorizontalHuge -524,DestructibleIce2x4Vertical -525,DestructibleIce2x4Horizontal -526,DestructibleIce2x6Vertical -527,DestructibleIce2x6Horizontal -528,DestructibleIce4x4 -529,DestructibleIce6x6 -530,DestructibleIceDiagonalHugeULBR -531,DestructibleIceDiagonalHugeBLUR -532,DestructibleIceVerticalHuge -533,DestructibleIceHorizontalHuge -534,DesertPlanetSearchlight -535,DesertPlanetStreetlight -536,UnbuildableBricksUnit -537,UnbuildableRocksUnit -538,Artosilope -539,Anteplott -540,LabBot -541,Crabeetle diff --git a/sc2reader/data/LotV/44401_abilities.csv b/sc2reader/data/LotV/44401_abilities.csv deleted file mode 100644 index 871448f..0000000 --- a/sc2reader/data/LotV/44401_abilities.csv +++ /dev/null @@ -1,338 +0,0 @@ -0,CAbil -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -38,move -45,attack -58,SalvageShared -60,GhostHoldFire -61,GhostWeaponsFree -63,Explode -65,FungalGrowth -66,GuardianShield -67,MULERepair -70,Feedback -72,PlacePointDefenseDrone -73,HallucinationArchon -74,HallucinationColossus -75,HallucinationHighTemplar -76,HallucinationImmortal -77,HallucinationPhoenix -78,HallucinationProbe -79,HallucinationStalker -80,HallucinationVoidRay -81,HallucinationWarpPrism -82,HallucinationZealot -83,MULEGather -84,SeekerMissile -85,CalldownMULE -86,GravitonBeam -90,SpawnChangeling -97,Rally -98,ProgressRally -99,RallyCommand -100,RallyNexus -101,RallyHatchery -104,InfestedTerrans -105,NeuralParasite -106,SpawnLarva -107,StimpackMarauder -108,SupplyDrop -111,TimeWarp -114,SCVHarvest -115,ProbeHarvest -117,que1 -118,que5 -119,que5CancelToSelection -121,que5Addon -122,BuildInProgress -123,Repair -126,Stimpack -127,GhostCloak -129,MedivacHeal -130,SiegeMode -131,Unsiege -132,BansheeCloak -133,MedivacTransport -134,ScannerSweep -135,Yamato -136,AssaultMode -137,FighterMode -138,BunkerTransport -139,CommandCenterTransport -140,CommandCenterLiftOff -141,CommandCenterLand -143,BarracksLiftOff -145,FactoryLiftOff -147,StarportLiftOff -148,FactoryLand -149,StarportLand -151,BarracksLand -152,SupplyDepotLower -153,SupplyDepotRaise -166,WarpPrismTransport -171,PsiStorm -172,HangarQueue5 -179,DroneHarvest -181,UpgradeToLair -182,UpgradeToHive -183,UpgradeToGreaterSpire -189,MorphToBroodLord -190,BurrowBanelingDown -191,BurrowBanelingUp -192,BurrowDroneDown -193,BurrowDroneUp -194,BurrowHydraliskDown -195,BurrowHydraliskUp -196,BurrowRoachDown -197,BurrowRoachUp -198,BurrowZerglingDown -199,BurrowZerglingUp -200,BurrowInfestorTerranDown -201,BurrowInfestorTerranUp -202,RedstoneLavaCritterBurrow -203,RedstoneLavaCritterInjuredBurrow -204,RedstoneLavaCritterUnburrow -205,RedstoneLavaCritterInjuredUnburrow -206,OverlordTransport -210,BurrowQueenDown -211,BurrowQueenUp -212,NydusCanalTransport -213,Blink -214,BurrowInfestorDown -215,BurrowInfestorUp -216,MorphToOverseer -217,UpgradeToPlanetaryFortress -220,BurrowUltraliskDown -221,BurrowUltraliskUp -222,UpgradeToOrbital -223,UpgradeToWarpGate -224,MorphBackToGateway -225,OrbitalLiftOff -226,OrbitalCommandLand -227,ForceField -228,PhasingMode -229,TransportMode -233,TacNukeStrike -236,EMP -240,Transfusion -249,AttackRedirect -250,StimpackRedirect -251,StimpackMarauderRedirect -253,StopRedirect -254,GenerateCreep -256,SpineCrawlerUproot -257,SporeCrawlerUproot -258,SpineCrawlerRoot -259,SporeCrawlerRoot -261,BuildAutoTurret -262,ArchonWarp -265,Charge -269,Contaminate -272,que5Passive -273,que5PassiveCancelToSelection -301,DigesterCreepSpray -305,MorphToMothership -330,XelNagaHealingShrine -339,MothershipCoreMassRecall -341,MorphToHellion -351,MorphToHellionTank -359,MorphToSwarmHostBurrowedMP -360,MorphToSwarmHostMP -362,attackProtossBuilding -364,stopProtossBuilding -365,BlindingCloud -367,Yoink -370,ViperConsumeStructure -373,TestZerg -374,VolatileBurstBuilding -381,WidowMineBurrow -382,WidowMineUnburrow -383,WidowMineAttack -384,TornadoMissile -388,BurrowLurkerMPDown -389,BurrowLurkerMPUp -390,UpgradeToLurkerDenMP -391,HallucinationOracle -392,MedivacSpeedBoost -393,ExtendingBridgeNEWide8Out -394,ExtendingBridgeNEWide8 -395,ExtendingBridgeNWWide8Out -396,ExtendingBridgeNWWide8 -397,ExtendingBridgeNEWide10Out -398,ExtendingBridgeNEWide10 -399,ExtendingBridgeNWWide10Out -400,ExtendingBridgeNWWide10 -401,ExtendingBridgeNEWide12Out -402,ExtendingBridgeNEWide12 -403,ExtendingBridgeNWWide12Out -404,ExtendingBridgeNWWide12 -406,CritterFlee -407,OracleRevelation -415,MothershipCorePurifyNexus -416,XelNaga_Caverns_DoorE -417,XelNaga_Caverns_DoorEOpened -418,XelNaga_Caverns_DoorN -419,XelNaga_Caverns_DoorNE -420,XelNaga_Caverns_DoorNEOpened -421,XelNaga_Caverns_DoorNOpened -422,XelNaga_Caverns_DoorNW -423,XelNaga_Caverns_DoorNWOpened -424,XelNaga_Caverns_DoorS -425,XelNaga_Caverns_DoorSE -426,XelNaga_Caverns_DoorSEOpened -427,XelNaga_Caverns_DoorSOpened -428,XelNaga_Caverns_DoorSW -429,XelNaga_Caverns_DoorSWOpened -430,XelNaga_Caverns_DoorW -431,XelNaga_Caverns_DoorWOpened -432,XelNaga_Caverns_Floating_BridgeNE8Out -433,XelNaga_Caverns_Floating_BridgeNE8 -434,XelNaga_Caverns_Floating_BridgeNW8Out -435,XelNaga_Caverns_Floating_BridgeNW8 -436,XelNaga_Caverns_Floating_BridgeNE10Out -437,XelNaga_Caverns_Floating_BridgeNE10 -438,XelNaga_Caverns_Floating_BridgeNW10Out -439,XelNaga_Caverns_Floating_BridgeNW10 -440,XelNaga_Caverns_Floating_BridgeNE12Out -441,XelNaga_Caverns_Floating_BridgeNE12 -442,XelNaga_Caverns_Floating_BridgeNW12Out -443,XelNaga_Caverns_Floating_BridgeNW12 -444,XelNaga_Caverns_Floating_BridgeH8Out -445,XelNaga_Caverns_Floating_BridgeH8 -446,XelNaga_Caverns_Floating_BridgeV8Out -447,XelNaga_Caverns_Floating_BridgeV8 -448,XelNaga_Caverns_Floating_BridgeH10Out -449,XelNaga_Caverns_Floating_BridgeH10 -450,XelNaga_Caverns_Floating_BridgeV10Out -451,XelNaga_Caverns_Floating_BridgeV10 -452,XelNaga_Caverns_Floating_BridgeH12Out -453,XelNaga_Caverns_Floating_BridgeH12 -454,XelNaga_Caverns_Floating_BridgeV12Out -455,XelNaga_Caverns_Floating_BridgeV12 -456,TemporalField -480,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -481,SnowRefinery_Terran_ExtendingBridgeNEShort8 -482,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -483,SnowRefinery_Terran_ExtendingBridgeNWShort8 -497,CausticSpray -499,ImmortalOverload -500,MorphToRavager -501,MorphToLurker -503,ReleaseInterceptors -504,RavagerCorrosiveBile -505,BurrowRavagerDown -506,BurrowRavagerUp -508,PurificationNovaTargeted -510,LockOn -512,LockOnCancel -514,Hyperjump -516,ThorAPMode -517,ThorNormalMode -519,MothershipMassRecall -520,NydusWormTransport -521,OracleWeapon -527,LocustMPFlyingSwoop -528,HallucinationDisruptor -529,HallucinationAdept -530,VoidRaySwarmDamageBoost -531,SeekerDummyChannel -532,AiurLightBridgeNE8Out -533,AiurLightBridgeNE8 -534,AiurLightBridgeNE10Out -535,AiurLightBridgeNE10 -536,AiurLightBridgeNE12Out -537,AiurLightBridgeNE12 -538,AiurLightBridgeNW8Out -539,AiurLightBridgeNW8 -540,AiurLightBridgeNW10Out -541,AiurLightBridgeNW10 -542,AiurLightBridgeNW12Out -543,AiurLightBridgeNW12 -556,ShakurasLightBridgeNE8Out -557,ShakurasLightBridgeNE8 -558,ShakurasLightBridgeNE10Out -559,ShakurasLightBridgeNE10 -560,ShakurasLightBridgeNE12Out -561,ShakurasLightBridgeNE12 -562,ShakurasLightBridgeNW8Out -563,ShakurasLightBridgeNW8 -564,ShakurasLightBridgeNW10Out -565,ShakurasLightBridgeNW10 -566,ShakurasLightBridgeNW12Out -567,ShakurasLightBridgeNW12 -568,VoidMPImmortalReviveRebuild -570,ArbiterMPStasisField -571,ArbiterMPRecall -572,CorsairMPDisruptionWeb -573,MorphToGuardianMP -574,MorphToDevourerMP -575,DefilerMPConsume -576,DefilerMPDarkSwarm -577,DefilerMPPlague -578,DefilerMPBurrow -579,DefilerMPUnburrow -580,QueenMPEnsnare -581,QueenMPSpawnBroodlings -582,QueenMPInfestCommandCenter -590,ParasiticBomb -591,AdeptPhaseShift -594,LurkerHoldFire -595,LurkerRemoveHoldFire -598,LiberatorAGTarget -599,LiberatorAATarget -601,AiurLightBridgeAbandonedNE8Out -602,AiurLightBridgeAbandonedNE8 -603,AiurLightBridgeAbandonedNE10Out -604,AiurLightBridgeAbandonedNE10 -605,AiurLightBridgeAbandonedNE12Out -606,AiurLightBridgeAbandonedNE12 -607,AiurLightBridgeAbandonedNW8Out -608,AiurLightBridgeAbandonedNW8 -609,AiurLightBridgeAbandonedNW10Out -610,AiurLightBridgeAbandonedNW10 -611,AiurLightBridgeAbandonedNW12Out -612,AiurLightBridgeAbandonedNW12 -613,KD8Charge -616,AdeptPhaseShiftCancel -617,AdeptShadePhaseShiftCancel -618,SlaynElementalGrab -623,SpawnLocustsTargeted -625,MorphToTransportOverlord -628,ChannelSnipe -650,PowerSourceFast -1795,WidowMineArmed -2280,IsTransportOverlord diff --git a/sc2reader/data/LotV/44401_units.csv b/sc2reader/data/LotV/44401_units.csv deleted file mode 100644 index e8faed1..0000000 --- a/sc2reader/data/LotV/44401_units.csv +++ /dev/null @@ -1,830 +0,0 @@ -1,System_Snapshot_Dummy -7,DESTRUCTIBLE -8,ITEM -9,POWERUP -10,SMCAMERA -11,SMCHARACTER -12,STARMAP -13,SMSET -14,MISSILE -15,MISSILE_INVULNERABLE -16,MISSILE_HALFLIFE -17,PLACEHOLDER -18,PLACEHOLDER_AIR -19,PATHINGBLOCKER -20,BEACON -21,Ball -22,StereoscopicOptionsUnit -23,Colossus -24,TechLab -25,Reactor -27,InfestorTerran -28,BanelingCocoon -29,Baneling -30,Mothership -31,PointDefenseDrone -32,Changeling -33,ChangelingZealot -34,ChangelingMarineShield -35,ChangelingMarine -36,ChangelingZerglingWings -37,ChangelingZergling -39,CommandCenter -40,SupplyDepot -41,Refinery -42,Barracks -43,EngineeringBay -44,MissileTurret -45,Bunker -46,SensorTower -47,GhostAcademy -48,Factory -49,Starport -51,Armory -52,FusionCore -53,AutoTurret -54,SiegeTankSieged -55,SiegeTank -56,VikingAssault -57,VikingFighter -58,CommandCenterFlying -59,BarracksTechLab -60,BarracksReactor -61,FactoryTechLab -62,FactoryReactor -63,StarportTechLab -64,StarportReactor -65,FactoryFlying -66,StarportFlying -67,SCV -68,BarracksFlying -69,SupplyDepotLowered -70,Marine -71,Reaper -72,Ghost -73,Marauder -74,Thor -75,Hellion -76,Medivac -77,Banshee -78,Raven -79,Battlecruiser -80,Nuke -81,Nexus -82,Pylon -83,Assimilator -84,Gateway -85,Forge -86,FleetBeacon -87,TwilightCouncil -88,PhotonCannon -89,Stargate -90,TemplarArchive -91,DarkShrine -92,RoboticsBay -93,RoboticsFacility -94,CyberneticsCore -95,Zealot -96,Stalker -97,HighTemplar -98,DarkTemplar -99,Sentry -100,Phoenix -101,Carrier -102,VoidRay -103,WarpPrism -104,Observer -105,Immortal -106,Probe -107,Interceptor -108,Hatchery -109,CreepTumor -110,Extractor -111,SpawningPool -112,EvolutionChamber -113,HydraliskDen -114,Spire -115,UltraliskCavern -116,InfestationPit -117,NydusNetwork -118,BanelingNest -119,RoachWarren -120,SpineCrawler -121,SporeCrawler -122,Lair -123,Hive -124,GreaterSpire -125,Egg -126,Drone -127,Zergling -128,Overlord -129,Hydralisk -130,Mutalisk -131,Ultralisk -132,Roach -133,Infestor -134,Corruptor -135,BroodLordCocoon -136,BroodLord -137,BanelingBurrowed -138,DroneBurrowed -139,HydraliskBurrowed -140,RoachBurrowed -141,ZerglingBurrowed -142,InfestorTerranBurrowed -143,RedstoneLavaCritterBurrowed -144,RedstoneLavaCritterInjuredBurrowed -145,RedstoneLavaCritter -146,RedstoneLavaCritterInjured -147,QueenBurrowed -148,Queen -149,InfestorBurrowed -150,OverlordCocoon -151,Overseer -152,PlanetaryFortress -153,UltraliskBurrowed -154,OrbitalCommand -155,WarpGate -156,OrbitalCommandFlying -157,ForceField -158,WarpPrismPhasing -159,CreepTumorBurrowed -160,CreepTumorQueen -161,SpineCrawlerUprooted -162,SporeCrawlerUprooted -163,Archon -164,NydusCanal -165,BroodlingEscort -166,GhostAlternate -167,GhostNova -168,RichMineralField -169,RichMineralField750 -171,XelNagaTower -175,InfestedTerransEgg -176,Larva -177,ReaperPlaceholder -178,MarineACGluescreenDummy -179,FirebatACGluescreenDummy -180,MedicACGluescreenDummy -181,MarauderACGluescreenDummy -182,VultureACGluescreenDummy -183,SiegeTankACGluescreenDummy -184,VikingACGluescreenDummy -185,BansheeACGluescreenDummy -186,BattlecruiserACGluescreenDummy -187,OrbitalCommandACGluescreenDummy -188,BunkerACGluescreenDummy -189,MissileTurretACGluescreenDummy -190,HellbatACGluescreenDummy -191,GoliathACGluescreenDummy -192,CycloneACGluescreenDummy -193,WraithACGluescreenDummy -194,ScienceVesselACGluescreenDummy -195,HerculesACGluescreenDummy -196,ThorACGluescreenDummy -197,PerditionTurretACGluescreenDummy -198,FlamingBettyACGluescreenDummy -199,DevastationTurretACGluescreenDummy -200,BlasterBillyACGluescreenDummy -201,SpinningDizzyACGluescreenDummy -202,ZerglingKerriganACGluescreenDummy -203,RaptorACGluescreenDummy -204,QueenCoopACGluescreenDummy -205,HydraliskACGluescreenDummy -206,HydraliskLurkerACGluescreenDummy -207,MutaliskBroodlordACGluescreenDummy -208,BroodLordACGluescreenDummy -209,UltraliskACGluescreenDummy -210,TorrasqueACGluescreenDummy -211,OverseerACGluescreenDummy -212,LurkerACGluescreenDummy -213,SpineCrawlerACGluescreenDummy -214,SporeCrawlerACGluescreenDummy -215,NydusNetworkACGluescreenDummy -216,OmegaNetworkACGluescreenDummy -217,ZerglingZagaraACGluescreenDummy -218,SwarmlingACGluescreenDummy -219,BanelingACGluescreenDummy -220,SplitterlingACGluescreenDummy -221,AberrationACGluescreenDummy -222,ScourgeACGluescreenDummy -223,CorruptorACGluescreenDummy -224,BileLauncherACGluescreenDummy -225,SwarmQueenACGluescreenDummy -226,RoachACGluescreenDummy -227,RoachVileACGluescreenDummy -228,RavagerACGluescreenDummy -229,SwarmHostACGluescreenDummy -230,MutaliskACGluescreenDummy -231,GuardianACGluescreenDummy -232,DevourerACGluescreenDummy -233,ViperACGluescreenDummy -234,BrutaliskACGluescreenDummy -235,LeviathanACGluescreenDummy -236,ZealotACGluescreenDummy -237,ZealotAiurACGluescreenDummy -238,DragoonACGluescreenDummy -239,HighTemplarACGluescreenDummy -240,ArchonACGluescreenDummy -241,ImmortalACGluescreenDummy -242,ObserverACGluescreenDummy -243,PhoenixAiurACGluescreenDummy -244,ReaverACGluescreenDummy -245,TempestACGluescreenDummy -246,PhotonCannonACGluescreenDummy -247,ZealotVorazunACGluescreenDummy -248,ZealotShakurasACGluescreenDummy -249,StalkerShakurasACGluescreenDummy -250,DarkTemplarShakurasACGluescreenDummy -251,CorsairACGluescreenDummy -252,VoidRayACGluescreenDummy -253,VoidRayShakurasACGluescreenDummy -254,OracleACGluescreenDummy -255,DarkArchonACGluescreenDummy -256,DarkPylonACGluescreenDummy -257,ZealotPurifierACGluescreenDummy -258,SentryPurifierACGluescreenDummy -259,ImmortalKaraxACGluescreenDummy -260,ColossusACGluescreenDummy -261,ColossusPurifierACGluescreenDummy -262,PhoenixPurifierACGluescreenDummy -263,CarrierACGluescreenDummy -264,CarrierAiurACGluescreenDummy -265,KhaydarinMonolithACGluescreenDummy -266,ShieldBatteryACGluescreenDummy -271,NeedleSpinesWeapon -272,CorruptionWeapon -273,InfestedTerransWeapon -274,NeuralParasiteWeapon -275,PointDefenseDroneReleaseWeapon -276,HunterSeekerWeapon -277,MULE -279,ThorAAWeapon -280,PunisherGrenadesLMWeapon -281,VikingFighterWeapon -282,ATALaserBatteryLMWeapon -283,ATSLaserBatteryLMWeapon -284,LongboltMissileWeapon -285,D8ChargeWeapon -286,YamatoWeapon -287,IonCannonsWeapon -288,AcidSalivaWeapon -289,SpineCrawlerWeapon -290,SporeCrawlerWeapon -291,GlaiveWurmWeapon -292,GlaiveWurmM2Weapon -293,GlaiveWurmM3Weapon -294,StalkerWeapon -295,EMP2Weapon -296,BacklashRocketsLMWeapon -297,PhotonCannonWeapon -298,ParasiteSporeWeapon -300,Broodling -301,BroodLordBWeapon -304,AutoTurretReleaseWeapon -305,LarvaReleaseMissile -306,AcidSpinesWeapon -307,FrenzyWeapon -308,ContaminateWeapon -320,BeaconRally -321,BeaconArmy -322,BeaconAttack -323,BeaconDefend -324,BeaconHarass -325,BeaconIdle -326,BeaconAuto -327,BeaconDetect -328,BeaconScout -329,BeaconClaim -330,BeaconExpand -331,BeaconCustom1 -332,BeaconCustom2 -333,BeaconCustom3 -334,BeaconCustom4 -340,Rocks2x2NonConjoined -341,FungalGrowthMissile -342,NeuralParasiteTentacleMissile -343,Beacon_Protoss -344,Beacon_ProtossSmall -345,Beacon_Terran -346,Beacon_TerranSmall -347,Beacon_Zerg -348,Beacon_ZergSmall -349,Lyote -350,CarrionBird -351,KarakMale -352,KarakFemale -353,UrsadakFemaleExotic -354,UrsadakMale -355,UrsadakFemale -356,UrsadakCalf -357,UrsadakMaleExotic -358,UtilityBot -359,CommentatorBot1 -360,CommentatorBot2 -361,CommentatorBot3 -362,CommentatorBot4 -363,Scantipede -364,Dog -365,Sheep -366,Cow -367,InfestedTerransEggPlacement -368,InfestorTerransWeapon -369,MineralField -370,VespeneGeyser -371,SpacePlatformGeyser -372,RichVespeneGeyser -373,DestructibleSearchlight -374,DestructibleBullhornLights -375,DestructibleStreetlight -376,DestructibleSpacePlatformSign -377,DestructibleStoreFrontCityProps -378,DestructibleBillboardTall -379,DestructibleBillboardScrollingText -380,DestructibleSpacePlatformBarrier -381,DestructibleSignsDirectional -382,DestructibleSignsConstruction -383,DestructibleSignsFunny -384,DestructibleSignsIcons -385,DestructibleSignsWarning -386,DestructibleGarage -387,DestructibleGarageLarge -388,DestructibleTrafficSignal -389,TrafficSignal -390,BraxisAlphaDestructible1x1 -391,BraxisAlphaDestructible2x2 -392,DestructibleDebris4x4 -393,DestructibleDebris6x6 -394,DestructibleRock2x4Vertical -395,DestructibleRock2x4Horizontal -396,DestructibleRock2x6Vertical -397,DestructibleRock2x6Horizontal -398,DestructibleRock4x4 -399,DestructibleRock6x6 -400,DestructibleRampDiagonalHugeULBR -401,DestructibleRampDiagonalHugeBLUR -402,DestructibleRampVerticalHuge -403,DestructibleRampHorizontalHuge -404,DestructibleDebrisRampDiagonalHugeULBR -405,DestructibleDebrisRampDiagonalHugeBLUR -406,OverlordGenerateCreepKeybind -407,MengskStatueAlone -408,MengskStatue -409,WolfStatue -410,GlobeStatue -411,Weapon -412,GlaiveWurmBounceWeapon -413,BroodLordWeapon -414,BroodLordAWeapon -415,CreepBlocker1x1 -416,PermanentCreepBlocker1x1 -417,PathingBlocker1x1 -418,PathingBlocker2x2 -419,AutoTestAttackTargetGround -420,AutoTestAttackTargetAir -421,AutoTestAttacker -422,HelperEmitterSelectionArrow -423,MultiKillObject -424,ShapeGolfball -425,ShapeCone -426,ShapeCube -427,ShapeCylinder -428,ShapeDodecahedron -429,ShapeIcosahedron -430,ShapeOctahedron -431,ShapePyramid -432,ShapeRoundedCube -433,ShapeSphere -434,ShapeTetrahedron -435,ShapeThickTorus -436,ShapeThinTorus -437,ShapeTorus -438,Shape4PointStar -439,Shape5PointStar -440,Shape6PointStar -441,Shape8PointStar -442,ShapeArrowPointer -443,ShapeBowl -444,ShapeBox -445,ShapeCapsule -446,ShapeCrescentMoon -447,ShapeDecahedron -448,ShapeDiamond -449,ShapeFootball -450,ShapeGemstone -451,ShapeHeart -452,ShapeJack -453,ShapePlusSign -454,ShapeShamrock -455,ShapeSpade -456,ShapeTube -457,ShapeEgg -458,ShapeYenSign -459,ShapeX -460,ShapeWatermelon -461,ShapeWonSign -462,ShapeTennisball -463,ShapeStrawberry -464,ShapeSmileyFace -465,ShapeSoccerball -466,ShapeRainbow -467,ShapeSadFace -468,ShapePoundSign -469,ShapePear -470,ShapePineapple -471,ShapeOrange -472,ShapePeanut -473,ShapeO -474,ShapeLemon -475,ShapeMoneyBag -476,ShapeHorseshoe -477,ShapeHockeyStick -478,ShapeHockeyPuck -479,ShapeHand -480,ShapeGolfClub -481,ShapeGrape -482,ShapeEuroSign -483,ShapeDollarSign -484,ShapeBasketball -485,ShapeCarrot -486,ShapeCherry -487,ShapeBaseball -488,ShapeBaseballBat -489,ShapeBanana -490,ShapeApple -491,ShapeCashLarge -492,ShapeCashMedium -493,ShapeCashSmall -494,ShapeFootballColored -495,ShapeLemonSmall -496,ShapeOrangeSmall -497,ShapeTreasureChestOpen -498,ShapeTreasureChestClosed -499,ShapeWatermelonSmall -500,UnbuildableRocksDestructible -501,UnbuildableBricksDestructible -502,UnbuildablePlatesDestructible -503,Debris2x2NonConjoined -504,EnemyPathingBlocker1x1 -505,EnemyPathingBlocker2x2 -506,EnemyPathingBlocker4x4 -507,EnemyPathingBlocker8x8 -508,EnemyPathingBlocker16x16 -509,ScopeTest -510,SentryACGluescreenDummy -511,MineralField750 -527,HellionTank -528,CollapsibleTerranTowerDebris -529,DebrisRampLeft -530,DebrisRampRight -531,MothershipCore -535,LocustMP -536,CollapsibleRockTowerDebris -537,NydusCanalAttacker -538,NydusCanalCreeper -539,SwarmHostBurrowedMP -540,SwarmHostMP -541,Oracle -542,Tempest -543,WarHound -544,WidowMine -545,Viper -546,WidowMineBurrowed -547,LurkerMPEgg -548,LurkerMP -549,LurkerMPBurrowed -550,LurkerDenMP -551,ExtendingBridgeNEWide8Out -552,ExtendingBridgeNEWide8 -553,ExtendingBridgeNWWide8Out -554,ExtendingBridgeNWWide8 -555,ExtendingBridgeNEWide10Out -556,ExtendingBridgeNEWide10 -557,ExtendingBridgeNWWide10Out -558,ExtendingBridgeNWWide10 -559,ExtendingBridgeNEWide12Out -560,ExtendingBridgeNEWide12 -561,ExtendingBridgeNWWide12Out -562,ExtendingBridgeNWWide12 -564,CollapsibleRockTowerDebrisRampRight -565,CollapsibleRockTowerDebrisRampLeft -566,XelNaga_Caverns_DoorE -567,XelNaga_Caverns_DoorEOpened -568,XelNaga_Caverns_DoorN -569,XelNaga_Caverns_DoorNE -570,XelNaga_Caverns_DoorNEOpened -571,XelNaga_Caverns_DoorNOpened -572,XelNaga_Caverns_DoorNW -573,XelNaga_Caverns_DoorNWOpened -574,XelNaga_Caverns_DoorS -575,XelNaga_Caverns_DoorSE -576,XelNaga_Caverns_DoorSEOpened -577,XelNaga_Caverns_DoorSOpened -578,XelNaga_Caverns_DoorSW -579,XelNaga_Caverns_DoorSWOpened -580,XelNaga_Caverns_DoorW -581,XelNaga_Caverns_DoorWOpened -582,XelNaga_Caverns_Floating_BridgeNE8Out -583,XelNaga_Caverns_Floating_BridgeNE8 -584,XelNaga_Caverns_Floating_BridgeNW8Out -585,XelNaga_Caverns_Floating_BridgeNW8 -586,XelNaga_Caverns_Floating_BridgeNE10Out -587,XelNaga_Caverns_Floating_BridgeNE10 -588,XelNaga_Caverns_Floating_BridgeNW10Out -589,XelNaga_Caverns_Floating_BridgeNW10 -590,XelNaga_Caverns_Floating_BridgeNE12Out -591,XelNaga_Caverns_Floating_BridgeNE12 -592,XelNaga_Caverns_Floating_BridgeNW12Out -593,XelNaga_Caverns_Floating_BridgeNW12 -594,XelNaga_Caverns_Floating_BridgeH8Out -595,XelNaga_Caverns_Floating_BridgeH8 -596,XelNaga_Caverns_Floating_BridgeV8Out -597,XelNaga_Caverns_Floating_BridgeV8 -598,XelNaga_Caverns_Floating_BridgeH10Out -599,XelNaga_Caverns_Floating_BridgeH10 -600,XelNaga_Caverns_Floating_BridgeV10Out -601,XelNaga_Caverns_Floating_BridgeV10 -602,XelNaga_Caverns_Floating_BridgeH12Out -603,XelNaga_Caverns_Floating_BridgeH12 -604,XelNaga_Caverns_Floating_BridgeV12Out -605,XelNaga_Caverns_Floating_BridgeV12 -608,CollapsibleTerranTowerPushUnitRampLeft -609,CollapsibleTerranTowerPushUnitRampRight -612,CollapsibleRockTowerPushUnit -613,CollapsibleTerranTowerPushUnit -614,CollapsibleRockTowerPushUnitRampRight -615,CollapsibleRockTowerPushUnitRampLeft -616,DigesterCreepSprayTargetUnit -617,DigesterCreepSprayUnit -618,NydusCanalAttackerWeapon -619,ViperConsumeStructureWeapon -622,ResourceBlocker -623,TempestWeapon -624,YoinkMissile -628,YoinkVikingAirMissile -630,YoinkVikingGroundMissile -632,YoinkSiegeTankMissile -634,WarHoundWeapon -636,EyeStalkWeapon -639,WidowMineWeapon -640,WidowMineAirWeapon -641,MothershipCoreWeaponWeapon -642,TornadoMissileWeapon -643,TornadoMissileDummyWeapon -644,TalonsMissileWeapon -645,CreepTumorMissile -646,LocustMPEggAMissileWeapon -647,LocustMPEggBMissileWeapon -648,LocustMPWeapon -650,RepulsorCannonWeapon -654,CollapsibleRockTowerDiagonal -655,CollapsibleTerranTowerDiagonal -656,CollapsibleTerranTowerRampLeft -657,CollapsibleTerranTowerRampRight -658,Ice2x2NonConjoined -659,IceProtossCrates -660,ProtossCrates -661,TowerMine -662,PickupPalletGas -663,PickupPalletMinerals -664,PickupScrapSalvage1x1 -665,PickupScrapSalvage2x2 -666,PickupScrapSalvage3x3 -667,RoughTerrain -668,UnbuildableBricksSmallUnit -669,UnbuildablePlatesSmallUnit -670,UnbuildablePlatesUnit -671,UnbuildableRocksSmallUnit -672,XelNagaHealingShrine -673,InvisibleTargetDummy -674,ProtossVespeneGeyser -675,CollapsibleRockTower -676,CollapsibleTerranTower -677,ThornLizard -678,CleaningBot -679,DestructibleRock6x6Weak -680,ProtossSnakeSegmentDemo -681,PhysicsCapsule -682,PhysicsCube -683,PhysicsCylinder -684,PhysicsKnot -685,PhysicsL -686,PhysicsPrimitives -687,PhysicsSphere -688,PhysicsStar -689,CreepBlocker4x4 -690,DestructibleCityDebris2x4Vertical -691,DestructibleCityDebris2x4Horizontal -692,DestructibleCityDebris2x6Vertical -693,DestructibleCityDebris2x6Horizontal -694,DestructibleCityDebris4x4 -695,DestructibleCityDebris6x6 -696,DestructibleCityDebrisHugeDiagonalBLUR -697,DestructibleCityDebrisHugeDiagonalULBR -698,TestZerg -699,PathingBlockerRadius1 -700,DestructibleRockEx12x4Vertical -701,DestructibleRockEx12x4Horizontal -702,DestructibleRockEx12x6Vertical -703,DestructibleRockEx12x6Horizontal -704,DestructibleRockEx14x4 -705,DestructibleRockEx16x6 -706,DestructibleRockEx1DiagonalHugeULBR -707,DestructibleRockEx1DiagonalHugeBLUR -708,DestructibleRockEx1VerticalHuge -709,DestructibleRockEx1HorizontalHuge -710,DestructibleIce2x4Vertical -711,DestructibleIce2x4Horizontal -712,DestructibleIce2x6Vertical -713,DestructibleIce2x6Horizontal -714,DestructibleIce4x4 -715,DestructibleIce6x6 -716,DestructibleIceDiagonalHugeULBR -717,DestructibleIceDiagonalHugeBLUR -718,DestructibleIceVerticalHuge -719,DestructibleIceHorizontalHuge -720,DesertPlanetSearchlight -721,DesertPlanetStreetlight -722,UnbuildableBricksUnit -723,UnbuildableRocksUnit -724,ZerusDestructibleArch -725,Artosilope -726,Anteplott -727,LabBot -728,Crabeetle -729,CollapsibleRockTowerRampRight -730,CollapsibleRockTowerRampLeft -731,LabMineralField -732,LabMineralField750 -748,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -749,SnowRefinery_Terran_ExtendingBridgeNEShort8 -750,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -751,SnowRefinery_Terran_ExtendingBridgeNWShort8 -756,Tarsonis_DoorN -757,Tarsonis_DoorNLowered -758,Tarsonis_DoorNE -759,Tarsonis_DoorNELowered -760,Tarsonis_DoorE -761,Tarsonis_DoorELowered -762,Tarsonis_DoorNW -763,Tarsonis_DoorNWLowered -764,RavagerCocoon -765,Ravager -766,Liberator -767,RavagerBurrowed -769,ThorAP -770,Cyclone -771,LocustMPFlying -772,Disruptor -773,Adept -774,AiurLightBridgeNE8Out -775,AiurLightBridgeNE8 -776,AiurLightBridgeNE10Out -777,AiurLightBridgeNE10 -778,AiurLightBridgeNE12Out -779,AiurLightBridgeNE12 -780,AiurLightBridgeNW8Out -781,AiurLightBridgeNW8 -782,AiurLightBridgeNW10Out -783,AiurLightBridgeNW10 -784,AiurLightBridgeNW12Out -785,AiurLightBridgeNW12 -786,AiurTempleBridgeNE8Out -788,AiurTempleBridgeNE10Out -790,AiurTempleBridgeNE12Out -792,AiurTempleBridgeNW8Out -794,AiurTempleBridgeNW10Out -796,AiurTempleBridgeNW12Out -798,ShakurasLightBridgeNE8Out -799,ShakurasLightBridgeNE8 -800,ShakurasLightBridgeNE10Out -801,ShakurasLightBridgeNE10 -802,ShakurasLightBridgeNE12Out -803,ShakurasLightBridgeNE12 -804,ShakurasLightBridgeNW8Out -805,ShakurasLightBridgeNW8 -806,ShakurasLightBridgeNW10Out -807,ShakurasLightBridgeNW10 -808,ShakurasLightBridgeNW12Out -809,ShakurasLightBridgeNW12 -810,VoidMPImmortalReviveCorpse -811,GuardianCocoonMP -812,GuardianMP -813,DevourerCocoonMP -814,DevourerMP -815,DefilerMPBurrowed -816,DefilerMP -817,OracleStasisTrap -818,DisruptorPhased -819,LiberatorAG -820,AiurLightBridgeAbandonedNE8Out -821,AiurLightBridgeAbandonedNE8 -822,AiurLightBridgeAbandonedNE10Out -823,AiurLightBridgeAbandonedNE10 -824,AiurLightBridgeAbandonedNE12Out -825,AiurLightBridgeAbandonedNE12 -826,AiurLightBridgeAbandonedNW8Out -827,AiurLightBridgeAbandonedNW8 -828,AiurLightBridgeAbandonedNW10Out -829,AiurLightBridgeAbandonedNW10 -830,AiurLightBridgeAbandonedNW12Out -831,AiurLightBridgeAbandonedNW12 -832,CollapsiblePurifierTowerDebris -833,PurifierRichMineralField -834,PurifierRichMineralField750 -849,CollapsiblePurifierTowerPushUnit -851,LocustMPPrecursor -852,ReleaseInterceptorsBeacon -853,AdeptPhaseShift -854,RavagerCorrosiveBileMissile -855,HydraliskImpaleMissile -856,CycloneMissileLargeAir -857,CycloneMissile -858,CycloneMissileLarge -859,ThorAALance -860,OracleWeapon -861,TempestWeaponGround -862,RavagerWeaponMissile -863,ScoutMPAirWeaponLeft -864,ScoutMPAirWeaponRight -865,ArbiterMPWeaponMissile -866,GuardianMPWeapon -867,DevourerMPWeaponMissile -868,DefilerMPDarkSwarmWeapon -869,QueenMPEnsnareMissile -870,QueenMPSpawnBroodlingsMissile -871,LightningBombWeapon -872,HERCPlacement -873,GrappleWeapon -876,CausticSprayMissile -877,ParasiticBombMissile -878,ParasiticBombDummy -879,AdeptWeapon -880,AdeptUpgradeWeapon -881,LiberatorMissile -882,LiberatorDamageMissile -883,LiberatorAGMissile -884,KD8Charge -885,KD8ChargeWeapon -887,SlaynElementalGrabWeapon -888,SlaynElementalGrabAirUnit -889,SlaynElementalGrabGroundUnit -890,SlaynElementalWeapon -894,HERC -895,Moopy -896,Replicant -897,SeekerMissile -898,AiurTempleBridgeDestructibleNE8Out -899,AiurTempleBridgeDestructibleNE10Out -900,AiurTempleBridgeDestructibleNE12Out -901,AiurTempleBridgeDestructibleNW8Out -902,AiurTempleBridgeDestructibleNW10Out -903,AiurTempleBridgeDestructibleNW12Out -904,AiurTempleBridgeDestructibleSW8Out -905,AiurTempleBridgeDestructibleSW10Out -906,AiurTempleBridgeDestructibleSW12Out -907,AiurTempleBridgeDestructibleSE8Out -908,AiurTempleBridgeDestructibleSE10Out -909,AiurTempleBridgeDestructibleSE12Out -911,FlyoverUnit -912,CorsairMP -913,ScoutMP -915,ArbiterMP -916,ScourgeMP -917,DefilerMPPlagueWeapon -918,QueenMP -919,XelNagaDestructibleRampBlocker6S -920,XelNagaDestructibleRampBlocker6SE -921,XelNagaDestructibleRampBlocker6E -922,XelNagaDestructibleRampBlocker6NE -923,XelNagaDestructibleRampBlocker6N -924,XelNagaDestructibleRampBlocker6NW -925,XelNagaDestructibleRampBlocker6W -926,XelNagaDestructibleRampBlocker6SW -927,XelNagaDestructibleRampBlocker8S -928,XelNagaDestructibleRampBlocker8SE -929,XelNagaDestructibleRampBlocker8E -930,XelNagaDestructibleRampBlocker8NE -931,XelNagaDestructibleRampBlocker8N -932,XelNagaDestructibleRampBlocker8NW -933,XelNagaDestructibleRampBlocker8W -934,XelNagaDestructibleRampBlocker8SW -935,ReptileCrate -936,SlaynSwarmHostSpawnFlyer -937,SlaynElemental -938,PurifierVespeneGeyser -939,ShakurasVespeneGeyser -940,CollapsiblePurifierTowerDiagonal -941,CreepOnlyBlocker4x4 -942,PurifierMineralField -943,PurifierMineralField750 -944,Beacon_Nova -945,Beacon_NovaSmall -946,Ursadon -947,Ursula -948,TransportOverlordCocoon -949,OverlordTransport -950,PylonOvercharged -951,BypassArmorDrone -952,AdeptPiercingWeapon -953,CorrosiveParasiteWeapon diff --git a/sc2reader/data/LotV/47185_abilities.csv b/sc2reader/data/LotV/47185_abilities.csv deleted file mode 100644 index 3c36694..0000000 --- a/sc2reader/data/LotV/47185_abilities.csv +++ /dev/null @@ -1,389 +0,0 @@ -0,CAbil -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -38,move -45,attack -59,SprayTerran -60,SprayZerg -61,SprayProtoss -62,SalvageShared -64,GhostHoldFire -65,GhostWeaponsFree -67,Explode -69,FungalGrowth -70,GuardianShield -71,MULERepair -74,Feedback -76,PlacePointDefenseDrone -77,HallucinationArchon -78,HallucinationColossus -79,HallucinationHighTemplar -80,HallucinationImmortal -81,HallucinationPhoenix -82,HallucinationProbe -83,HallucinationStalker -84,HallucinationVoidRay -85,HallucinationWarpPrism -86,HallucinationZealot -87,MULEGather -88,SeekerMissile -89,CalldownMULE -90,GravitonBeam -94,SpawnChangeling -101,Rally -102,ProgressRally -103,RallyCommand -104,RallyNexus -105,RallyHatchery -108,InfestedTerrans -109,NeuralParasite -110,SpawnLarva -111,StimpackMarauder -112,SupplyDrop -115,TimeWarp -118,SCVHarvest -119,ProbeHarvest -121,que1 -122,que5 -123,que5CancelToSelection -125,que5Addon -126,BuildInProgress -127,Repair -130,Stimpack -131,GhostCloak -133,MedivacHeal -134,SiegeMode -135,Unsiege -136,BansheeCloak -137,MedivacTransport -138,ScannerSweep -139,Yamato -140,AssaultMode -141,FighterMode -142,BunkerTransport -143,CommandCenterTransport -144,CommandCenterLiftOff -145,CommandCenterLand -147,BarracksLiftOff -149,FactoryLiftOff -151,StarportLiftOff -152,FactoryLand -153,StarportLand -155,BarracksLand -156,SupplyDepotLower -157,SupplyDepotRaise -170,WarpPrismTransport -175,PsiStorm -176,HangarQueue5 -183,DroneHarvest -185,UpgradeToLair -186,UpgradeToHive -187,UpgradeToGreaterSpire -193,MorphToBroodLord -194,BurrowBanelingDown -195,BurrowBanelingUp -196,BurrowDroneDown -197,BurrowDroneUp -198,BurrowHydraliskDown -199,BurrowHydraliskUp -200,BurrowRoachDown -201,BurrowRoachUp -202,BurrowZerglingDown -203,BurrowZerglingUp -204,BurrowInfestorTerranDown -205,BurrowInfestorTerranUp -206,RedstoneLavaCritterBurrow -207,RedstoneLavaCritterInjuredBurrow -208,RedstoneLavaCritterUnburrow -209,RedstoneLavaCritterInjuredUnburrow -210,OverlordTransport -214,BurrowQueenDown -215,BurrowQueenUp -216,NydusCanalTransport -217,Blink -218,BurrowInfestorDown -219,BurrowInfestorUp -220,MorphToOverseer -221,UpgradeToPlanetaryFortress -224,BurrowUltraliskDown -225,BurrowUltraliskUp -226,UpgradeToOrbital -227,UpgradeToWarpGate -228,MorphBackToGateway -229,OrbitalLiftOff -230,OrbitalCommandLand -231,ForceField -232,PhasingMode -233,TransportMode -237,TacNukeStrike -240,EMP -244,Transfusion -253,AttackRedirect -254,StimpackRedirect -255,StimpackMarauderRedirect -257,StopRedirect -258,GenerateCreep -260,SpineCrawlerUproot -261,SporeCrawlerUproot -262,SpineCrawlerRoot -263,SporeCrawlerRoot -265,BuildAutoTurret -266,ArchonWarp -269,Charge -273,Contaminate -276,que5Passive -277,que5PassiveCancelToSelection -305,DigesterCreepSpray -309,MorphToMothership -334,XelNagaHealingShrine -343,MothershipCoreMassRecall -345,MorphToHellion -355,MorphToHellionTank -363,MorphToSwarmHostBurrowedMP -364,MorphToSwarmHostMP -366,attackProtossBuilding -368,stopProtossBuilding -369,BlindingCloud -371,Yoink -374,ViperConsumeStructure -377,TestZerg -378,VolatileBurstBuilding -385,WidowMineBurrow -386,WidowMineUnburrow -387,WidowMineAttack -388,TornadoMissile -392,BurrowLurkerMPDown -393,BurrowLurkerMPUp -394,UpgradeToLurkerDenMP -395,HallucinationOracle -396,MedivacSpeedBoost -397,ExtendingBridgeNEWide8Out -398,ExtendingBridgeNEWide8 -399,ExtendingBridgeNWWide8Out -400,ExtendingBridgeNWWide8 -401,ExtendingBridgeNEWide10Out -402,ExtendingBridgeNEWide10 -403,ExtendingBridgeNWWide10Out -404,ExtendingBridgeNWWide10 -405,ExtendingBridgeNEWide12Out -406,ExtendingBridgeNEWide12 -407,ExtendingBridgeNWWide12Out -408,ExtendingBridgeNWWide12 -410,CritterFlee -411,OracleRevelation -419,MothershipCorePurifyNexus -420,XelNaga_Caverns_DoorE -421,XelNaga_Caverns_DoorEOpened -422,XelNaga_Caverns_DoorN -423,XelNaga_Caverns_DoorNE -424,XelNaga_Caverns_DoorNEOpened -425,XelNaga_Caverns_DoorNOpened -426,XelNaga_Caverns_DoorNW -427,XelNaga_Caverns_DoorNWOpened -428,XelNaga_Caverns_DoorS -429,XelNaga_Caverns_DoorSE -430,XelNaga_Caverns_DoorSEOpened -431,XelNaga_Caverns_DoorSOpened -432,XelNaga_Caverns_DoorSW -433,XelNaga_Caverns_DoorSWOpened -434,XelNaga_Caverns_DoorW -435,XelNaga_Caverns_DoorWOpened -436,XelNaga_Caverns_Floating_BridgeNE8Out -437,XelNaga_Caverns_Floating_BridgeNE8 -438,XelNaga_Caverns_Floating_BridgeNW8Out -439,XelNaga_Caverns_Floating_BridgeNW8 -440,XelNaga_Caverns_Floating_BridgeNE10Out -441,XelNaga_Caverns_Floating_BridgeNE10 -442,XelNaga_Caverns_Floating_BridgeNW10Out -443,XelNaga_Caverns_Floating_BridgeNW10 -444,XelNaga_Caverns_Floating_BridgeNE12Out -445,XelNaga_Caverns_Floating_BridgeNE12 -446,XelNaga_Caverns_Floating_BridgeNW12Out -447,XelNaga_Caverns_Floating_BridgeNW12 -448,XelNaga_Caverns_Floating_BridgeH8Out -449,XelNaga_Caverns_Floating_BridgeH8 -450,XelNaga_Caverns_Floating_BridgeV8Out -451,XelNaga_Caverns_Floating_BridgeV8 -452,XelNaga_Caverns_Floating_BridgeH10Out -453,XelNaga_Caverns_Floating_BridgeH10 -454,XelNaga_Caverns_Floating_BridgeV10Out -455,XelNaga_Caverns_Floating_BridgeV10 -456,XelNaga_Caverns_Floating_BridgeH12Out -457,XelNaga_Caverns_Floating_BridgeH12 -458,XelNaga_Caverns_Floating_BridgeV12Out -459,XelNaga_Caverns_Floating_BridgeV12 -460,TemporalField -484,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -485,SnowRefinery_Terran_ExtendingBridgeNEShort8 -486,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -487,SnowRefinery_Terran_ExtendingBridgeNWShort8 -501,CausticSpray -503,ImmortalOverload -504,MorphToRavager -505,MorphToLurker -507,ReleaseInterceptors -508,RavagerCorrosiveBile -509,BurrowRavagerDown -510,BurrowRavagerUp -512,PurificationNovaTargeted -514,LockOn -516,LockOnCancel -518,Hyperjump -520,ThorAPMode -521,ThorNormalMode -523,MothershipMassRecall -524,NydusWormTransport -525,OracleWeapon -531,LocustMPFlyingSwoop -532,HallucinationDisruptor -533,HallucinationAdept -534,VoidRaySwarmDamageBoost -535,SeekerDummyChannel -536,AiurLightBridgeNE8Out -537,AiurLightBridgeNE8 -538,AiurLightBridgeNE10Out -539,AiurLightBridgeNE10 -540,AiurLightBridgeNE12Out -541,AiurLightBridgeNE12 -542,AiurLightBridgeNW8Out -543,AiurLightBridgeNW8 -544,AiurLightBridgeNW10Out -545,AiurLightBridgeNW10 -546,AiurLightBridgeNW12Out -547,AiurLightBridgeNW12 -560,ShakurasLightBridgeNE8Out -561,ShakurasLightBridgeNE8 -562,ShakurasLightBridgeNE10Out -563,ShakurasLightBridgeNE10 -564,ShakurasLightBridgeNE12Out -565,ShakurasLightBridgeNE12 -566,ShakurasLightBridgeNW8Out -567,ShakurasLightBridgeNW8 -568,ShakurasLightBridgeNW10Out -569,ShakurasLightBridgeNW10 -570,ShakurasLightBridgeNW12Out -571,ShakurasLightBridgeNW12 -572,VoidMPImmortalReviveRebuild -574,ArbiterMPStasisField -575,ArbiterMPRecall -576,CorsairMPDisruptionWeb -577,MorphToGuardianMP -578,MorphToDevourerMP -579,DefilerMPConsume -580,DefilerMPDarkSwarm -581,DefilerMPPlague -582,DefilerMPBurrow -583,DefilerMPUnburrow -584,QueenMPEnsnare -585,QueenMPSpawnBroodlings -586,QueenMPInfestCommandCenter -594,ParasiticBomb -595,AdeptPhaseShift -598,LurkerHoldFire -599,LurkerRemoveHoldFire -602,LiberatorAGTarget -603,LiberatorAATarget -605,AiurLightBridgeAbandonedNE8Out -606,AiurLightBridgeAbandonedNE8 -607,AiurLightBridgeAbandonedNE10Out -608,AiurLightBridgeAbandonedNE10 -609,AiurLightBridgeAbandonedNE12Out -610,AiurLightBridgeAbandonedNE12 -611,AiurLightBridgeAbandonedNW8Out -612,AiurLightBridgeAbandonedNW8 -613,AiurLightBridgeAbandonedNW10Out -614,AiurLightBridgeAbandonedNW10 -615,AiurLightBridgeAbandonedNW12Out -616,AiurLightBridgeAbandonedNW12 -617,KD8Charge -620,AdeptPhaseShiftCancel -621,AdeptShadePhaseShiftCancel -622,SlaynElementalGrab -624,PortCity_Bridge_UnitNE8Out -625,PortCity_Bridge_UnitNE8 -626,PortCity_Bridge_UnitSE8Out -627,PortCity_Bridge_UnitSE8 -628,PortCity_Bridge_UnitNW8Out -629,PortCity_Bridge_UnitNW8 -630,PortCity_Bridge_UnitSW8Out -631,PortCity_Bridge_UnitSW8 -632,PortCity_Bridge_UnitNE10Out -633,PortCity_Bridge_UnitNE10 -634,PortCity_Bridge_UnitSE10Out -635,PortCity_Bridge_UnitSE10 -636,PortCity_Bridge_UnitNW10Out -637,PortCity_Bridge_UnitNW10 -638,PortCity_Bridge_UnitSW10Out -639,PortCity_Bridge_UnitSW10 -640,PortCity_Bridge_UnitNE12Out -641,PortCity_Bridge_UnitNE12 -642,PortCity_Bridge_UnitSE12Out -643,PortCity_Bridge_UnitSE12 -644,PortCity_Bridge_UnitNW12Out -645,PortCity_Bridge_UnitNW12 -646,PortCity_Bridge_UnitSW12Out -647,PortCity_Bridge_UnitSW12 -648,PortCity_Bridge_UnitN8Out -649,PortCity_Bridge_UnitN8 -650,PortCity_Bridge_UnitS8Out -651,PortCity_Bridge_UnitS8 -652,PortCity_Bridge_UnitE8Out -653,PortCity_Bridge_UnitE8 -653,PowerSourceFast -654,PortCity_Bridge_UnitW8Out -655,PortCity_Bridge_UnitW8 -656,PortCity_Bridge_UnitN10Out -657,PortCity_Bridge_UnitN10 -658,PortCity_Bridge_UnitS10Out -659,PortCity_Bridge_UnitS10 -660,PortCity_Bridge_UnitE10Out -661,PortCity_Bridge_UnitE10 -662,PortCity_Bridge_UnitW10Out -663,PortCity_Bridge_UnitW10 -664,PortCity_Bridge_UnitN12Out -665,PortCity_Bridge_UnitN12 -666,PortCity_Bridge_UnitS12Out -667,PortCity_Bridge_UnitS12 -668,PortCity_Bridge_UnitE12Out -669,PortCity_Bridge_UnitE12 -670,PortCity_Bridge_UnitW12Out -671,PortCity_Bridge_UnitW12 -676,SpawnLocustsTargeted -678,MorphToTransportOverlord -681,ChannelSnipe -1847,WidowMineArmed -2375,IsTransportOverlord diff --git a/sc2reader/data/LotV/47185_units.csv b/sc2reader/data/LotV/47185_units.csv deleted file mode 100644 index 4acb67b..0000000 --- a/sc2reader/data/LotV/47185_units.csv +++ /dev/null @@ -1,887 +0,0 @@ -1,System_Snapshot_Dummy -21,Ball -22,StereoscopicOptionsUnit -23,Colossus -24,TechLab -25,Reactor -27,InfestorTerran -28,BanelingCocoon -29,Baneling -30,Mothership -31,PointDefenseDrone -32,Changeling -33,ChangelingZealot -34,ChangelingMarineShield -35,ChangelingMarine -36,ChangelingZerglingWings -37,ChangelingZergling -39,CommandCenter -40,SupplyDepot -41,Refinery -42,Barracks -43,EngineeringBay -44,MissileTurret -45,Bunker -46,SensorTower -47,GhostAcademy -48,Factory -49,Starport -51,Armory -52,FusionCore -53,AutoTurret -54,SiegeTankSieged -55,SiegeTank -56,VikingAssault -57,VikingFighter -58,CommandCenterFlying -59,BarracksTechLab -60,BarracksReactor -61,FactoryTechLab -62,FactoryReactor -63,StarportTechLab -64,StarportReactor -65,FactoryFlying -66,StarportFlying -67,SCV -68,BarracksFlying -69,SupplyDepotLowered -70,Marine -71,Reaper -72,Ghost -73,Marauder -74,Thor -75,Hellion -76,Medivac -77,Banshee -78,Raven -79,Battlecruiser -80,Nuke -81,Nexus -82,Pylon -83,Assimilator -84,Gateway -85,Forge -86,FleetBeacon -87,TwilightCouncil -88,PhotonCannon -89,Stargate -90,TemplarArchive -91,DarkShrine -92,RoboticsBay -93,RoboticsFacility -94,CyberneticsCore -95,Zealot -96,Stalker -97,HighTemplar -98,DarkTemplar -99,Sentry -100,Phoenix -101,Carrier -102,VoidRay -103,WarpPrism -104,Observer -105,Immortal -106,Probe -107,Interceptor -108,Hatchery -109,CreepTumor -110,Extractor -111,SpawningPool -112,EvolutionChamber -113,HydraliskDen -114,Spire -115,UltraliskCavern -116,InfestationPit -117,NydusNetwork -118,BanelingNest -119,RoachWarren -120,SpineCrawler -121,SporeCrawler -122,Lair -123,Hive -124,GreaterSpire -125,Egg -126,Drone -127,Zergling -128,Overlord -129,Hydralisk -130,Mutalisk -131,Ultralisk -132,Roach -133,Infestor -134,Corruptor -135,BroodLordCocoon -136,BroodLord -137,BanelingBurrowed -138,DroneBurrowed -139,HydraliskBurrowed -140,RoachBurrowed -141,ZerglingBurrowed -142,InfestorTerranBurrowed -143,RedstoneLavaCritterBurrowed -144,RedstoneLavaCritterInjuredBurrowed -145,RedstoneLavaCritter -146,RedstoneLavaCritterInjured -147,QueenBurrowed -148,Queen -149,InfestorBurrowed -150,OverlordCocoon -151,Overseer -152,PlanetaryFortress -153,UltraliskBurrowed -154,OrbitalCommand -155,WarpGate -156,OrbitalCommandFlying -157,ForceField -158,WarpPrismPhasing -159,CreepTumorBurrowed -160,CreepTumorQueen -161,SpineCrawlerUprooted -162,SporeCrawlerUprooted -163,Archon -164,NydusCanal -165,BroodlingEscort -166,GhostAlternate -167,GhostNova -168,RichMineralField -169,RichMineralField750 -170,Ursadon -172,XelNagaTower -176,InfestedTerransEgg -177,Larva -178,ReaperPlaceholder -179,MarineACGluescreenDummy -180,FirebatACGluescreenDummy -181,MedicACGluescreenDummy -182,MarauderACGluescreenDummy -183,VultureACGluescreenDummy -184,SiegeTankACGluescreenDummy -185,VikingACGluescreenDummy -186,BansheeACGluescreenDummy -187,BattlecruiserACGluescreenDummy -188,OrbitalCommandACGluescreenDummy -189,BunkerACGluescreenDummy -190,BunkerUpgradedACGluescreenDummy -191,MissileTurretACGluescreenDummy -192,HellbatACGluescreenDummy -193,GoliathACGluescreenDummy -194,CycloneACGluescreenDummy -195,WraithACGluescreenDummy -196,ScienceVesselACGluescreenDummy -197,HerculesACGluescreenDummy -198,ThorACGluescreenDummy -199,PerditionTurretACGluescreenDummy -200,FlamingBettyACGluescreenDummy -201,DevastationTurretACGluescreenDummy -202,BlasterBillyACGluescreenDummy -203,SpinningDizzyACGluescreenDummy -204,ZerglingKerriganACGluescreenDummy -205,RaptorACGluescreenDummy -206,QueenCoopACGluescreenDummy -207,HydraliskACGluescreenDummy -208,HydraliskLurkerACGluescreenDummy -209,MutaliskBroodlordACGluescreenDummy -210,BroodLordACGluescreenDummy -211,UltraliskACGluescreenDummy -212,TorrasqueACGluescreenDummy -213,OverseerACGluescreenDummy -214,LurkerACGluescreenDummy -215,SpineCrawlerACGluescreenDummy -216,SporeCrawlerACGluescreenDummy -217,NydusNetworkACGluescreenDummy -218,OmegaNetworkACGluescreenDummy -219,ZerglingZagaraACGluescreenDummy -220,SwarmlingACGluescreenDummy -221,BanelingACGluescreenDummy -222,SplitterlingACGluescreenDummy -223,AberrationACGluescreenDummy -224,ScourgeACGluescreenDummy -225,CorruptorACGluescreenDummy -226,BileLauncherACGluescreenDummy -227,SwarmQueenACGluescreenDummy -228,RoachACGluescreenDummy -229,RoachVileACGluescreenDummy -230,RavagerACGluescreenDummy -231,SwarmHostACGluescreenDummy -232,MutaliskACGluescreenDummy -233,GuardianACGluescreenDummy -234,DevourerACGluescreenDummy -235,ViperACGluescreenDummy -236,BrutaliskACGluescreenDummy -237,LeviathanACGluescreenDummy -238,ZealotACGluescreenDummy -239,ZealotAiurACGluescreenDummy -240,DragoonACGluescreenDummy -241,HighTemplarACGluescreenDummy -242,ArchonACGluescreenDummy -243,ImmortalACGluescreenDummy -244,ObserverACGluescreenDummy -245,PhoenixAiurACGluescreenDummy -246,ReaverACGluescreenDummy -247,TempestACGluescreenDummy -248,PhotonCannonACGluescreenDummy -249,ZealotVorazunACGluescreenDummy -250,ZealotShakurasACGluescreenDummy -251,StalkerShakurasACGluescreenDummy -252,DarkTemplarShakurasACGluescreenDummy -253,CorsairACGluescreenDummy -254,VoidRayACGluescreenDummy -255,VoidRayShakurasACGluescreenDummy -256,OracleACGluescreenDummy -257,DarkArchonACGluescreenDummy -258,DarkPylonACGluescreenDummy -259,ZealotPurifierACGluescreenDummy -260,SentryPurifierACGluescreenDummy -261,ImmortalKaraxACGluescreenDummy -262,ColossusACGluescreenDummy -263,ColossusPurifierACGluescreenDummy -264,PhoenixPurifierACGluescreenDummy -265,CarrierACGluescreenDummy -266,CarrierAiurACGluescreenDummy -267,KhaydarinMonolithACGluescreenDummy -268,ShieldBatteryACGluescreenDummy -269,EliteMarineACGluescreenDummy -270,MarauderCommandoACGluescreenDummy -271,SpecOpsGhostACGluescreenDummy -272,HellbatRangerACGluescreenDummy -273,StrikeGoliathACGluescreenDummy -274,HeavySiegeTankACGluescreenDummy -275,RaidLiberatorACGluescreenDummy -276,RavenTypeIIACGluescreenDummy -277,CovertBansheeACGluescreenDummy -278,RailgunTurretACGluescreenDummy -279,BlackOpsMissileTurretACGluescreenDummy -280,SupplicantACGluescreenDummy -281,StalkerTaldarimACGluescreenDummy -282,SentryTaldarimACGluescreenDummy -283,HighTemplarTaldarimACGluescreenDummy -284,ImmortalTaldarimACGluescreenDummy -285,ColossusTaldarimACGluescreenDummy -286,WarpPrismTaldarimACGluescreenDummy -287,PhotonCannonTaldarimACGluescreenDummy -289,NeedleSpinesWeapon -290,CorruptionWeapon -291,InfestedTerransWeapon -292,NeuralParasiteWeapon -293,PointDefenseDroneReleaseWeapon -294,HunterSeekerWeapon -295,MULE -297,ThorAAWeapon -298,PunisherGrenadesLMWeapon -299,VikingFighterWeapon -300,ATALaserBatteryLMWeapon -301,ATSLaserBatteryLMWeapon -302,LongboltMissileWeapon -303,D8ChargeWeapon -304,YamatoWeapon -305,IonCannonsWeapon -306,AcidSalivaWeapon -307,SpineCrawlerWeapon -308,SporeCrawlerWeapon -309,GlaiveWurmWeapon -310,GlaiveWurmM2Weapon -311,GlaiveWurmM3Weapon -312,StalkerWeapon -313,EMP2Weapon -314,BacklashRocketsLMWeapon -315,PhotonCannonWeapon -316,ParasiteSporeWeapon -318,Broodling -319,BroodLordBWeapon -322,AutoTurretReleaseWeapon -323,LarvaReleaseMissile -324,AcidSpinesWeapon -325,FrenzyWeapon -326,ContaminateWeapon -338,BeaconRally -339,BeaconArmy -340,BeaconAttack -341,BeaconDefend -342,BeaconHarass -343,BeaconIdle -344,BeaconAuto -345,BeaconDetect -346,BeaconScout -347,BeaconClaim -348,BeaconExpand -349,BeaconCustom1 -350,BeaconCustom2 -351,BeaconCustom3 -352,BeaconCustom4 -353,Adept -359,Rocks2x2NonConjoined -360,FungalGrowthMissile -361,NeuralParasiteTentacleMissile -362,Beacon_Protoss -363,Beacon_ProtossSmall -364,Beacon_Terran -365,Beacon_TerranSmall -366,Beacon_Zerg -367,Beacon_ZergSmall -368,Lyote -369,CarrionBird -370,KarakMale -371,KarakFemale -372,UrsadakFemaleExotic -373,UrsadakMale -374,UrsadakFemale -375,UrsadakCalf -376,UrsadakMaleExotic -377,UtilityBot -378,CommentatorBot1 -379,CommentatorBot2 -380,CommentatorBot3 -381,CommentatorBot4 -382,Scantipede -383,Dog -384,Sheep -385,Cow -386,InfestedTerransEggPlacement -387,InfestorTerransWeapon -388,MineralField -389,VespeneGeyser -390,SpacePlatformGeyser -391,RichVespeneGeyser -392,DestructibleSearchlight -393,DestructibleBullhornLights -394,DestructibleStreetlight -395,DestructibleSpacePlatformSign -396,DestructibleStoreFrontCityProps -397,DestructibleBillboardTall -398,DestructibleBillboardScrollingText -399,DestructibleSpacePlatformBarrier -400,DestructibleSignsDirectional -401,DestructibleSignsConstruction -402,DestructibleSignsFunny -403,DestructibleSignsIcons -404,DestructibleSignsWarning -405,DestructibleGarage -406,DestructibleGarageLarge -407,DestructibleTrafficSignal -408,TrafficSignal -409,BraxisAlphaDestructible1x1 -410,BraxisAlphaDestructible2x2 -411,DestructibleDebris4x4 -412,DestructibleDebris6x6 -413,DestructibleRock2x4Vertical -414,DestructibleRock2x4Horizontal -415,DestructibleRock2x6Vertical -416,DestructibleRock2x6Horizontal -417,DestructibleRock4x4 -418,DestructibleRock6x6 -419,DestructibleRampDiagonalHugeULBR -420,DestructibleRampDiagonalHugeBLUR -421,DestructibleRampVerticalHuge -422,DestructibleRampHorizontalHuge -423,DestructibleDebrisRampDiagonalHugeULBR -424,DestructibleDebrisRampDiagonalHugeBLUR -425,OverlordGenerateCreepKeybind -426,MengskStatueAlone -427,MengskStatue -428,WolfStatue -429,GlobeStatue -430,Weapon -431,GlaiveWurmBounceWeapon -432,BroodLordWeapon -433,BroodLordAWeapon -434,CreepBlocker1x1 -435,PermanentCreepBlocker1x1 -436,PathingBlocker1x1 -437,PathingBlocker2x2 -438,AutoTestAttackTargetGround -439,AutoTestAttackTargetAir -440,AutoTestAttacker -441,HelperEmitterSelectionArrow -442,MultiKillObject -443,ShapeGolfball -444,ShapeCone -445,ShapeCube -446,ShapeCylinder -447,ShapeDodecahedron -448,ShapeIcosahedron -449,ShapeOctahedron -450,ShapePyramid -451,ShapeRoundedCube -452,ShapeSphere -453,ShapeTetrahedron -454,ShapeThickTorus -455,ShapeThinTorus -456,ShapeTorus -457,Shape4PointStar -458,Shape5PointStar -459,Shape6PointStar -460,Shape8PointStar -461,ShapeArrowPointer -462,ShapeBowl -463,ShapeBox -464,ShapeCapsule -465,ShapeCrescentMoon -466,ShapeDecahedron -467,ShapeDiamond -468,ShapeFootball -469,ShapeGemstone -470,ShapeHeart -471,ShapeJack -472,ShapePlusSign -473,ShapeShamrock -474,ShapeSpade -475,ShapeTube -476,ShapeEgg -477,ShapeYenSign -478,ShapeX -479,ShapeWatermelon -480,ShapeWonSign -481,ShapeTennisball -482,ShapeStrawberry -483,ShapeSmileyFace -484,ShapeSoccerball -485,ShapeRainbow -486,ShapeSadFace -487,ShapePoundSign -488,ShapePear -489,ShapePineapple -490,ShapeOrange -491,ShapePeanut -492,ShapeO -493,ShapeLemon -494,ShapeMoneyBag -495,ShapeHorseshoe -496,ShapeHockeyStick -497,ShapeHockeyPuck -498,ShapeHand -499,ShapeGolfClub -500,ShapeGrape -501,ShapeEuroSign -502,ShapeDollarSign -503,ShapeBasketball -504,ShapeCarrot -505,ShapeCherry -506,ShapeBaseball -507,ShapeBaseballBat -508,ShapeBanana -509,ShapeApple -510,ShapeCashLarge -511,ShapeCashMedium -512,ShapeCashSmall -513,ShapeFootballColored -514,ShapeLemonSmall -515,ShapeOrangeSmall -516,ShapeTreasureChestOpen -517,ShapeTreasureChestClosed -518,ShapeWatermelonSmall -519,UnbuildableRocksDestructible -520,UnbuildableBricksDestructible -521,UnbuildablePlatesDestructible -522,Debris2x2NonConjoined -523,EnemyPathingBlocker1x1 -524,EnemyPathingBlocker2x2 -525,EnemyPathingBlocker4x4 -526,EnemyPathingBlocker8x8 -527,EnemyPathingBlocker16x16 -528,ScopeTest -529,SentryACGluescreenDummy -530,MineralField750 -546,HellionTank -547,CollapsibleTerranTowerDebris -548,DebrisRampLeft -549,DebrisRampRight -550,MothershipCore -554,LocustMP -555,CollapsibleRockTowerDebris -556,NydusCanalAttacker -557,NydusCanalCreeper -558,SwarmHostBurrowedMP -559,SwarmHostMP -560,Oracle -561,Tempest -562,WarHound -563,WidowMine -564,Viper -565,WidowMineBurrowed -566,LurkerMPEgg -567,LurkerMP -568,LurkerMPBurrowed -569,LurkerDenMP -570,ExtendingBridgeNEWide8Out -571,ExtendingBridgeNEWide8 -572,ExtendingBridgeNWWide8Out -573,ExtendingBridgeNWWide8 -574,ExtendingBridgeNEWide10Out -575,ExtendingBridgeNEWide10 -576,ExtendingBridgeNWWide10Out -577,ExtendingBridgeNWWide10 -578,ExtendingBridgeNEWide12Out -579,ExtendingBridgeNEWide12 -580,ExtendingBridgeNWWide12Out -581,ExtendingBridgeNWWide12 -583,CollapsibleRockTowerDebrisRampRight -584,CollapsibleRockTowerDebrisRampLeft -585,XelNaga_Caverns_DoorE -586,XelNaga_Caverns_DoorEOpened -587,XelNaga_Caverns_DoorN -588,XelNaga_Caverns_DoorNE -589,XelNaga_Caverns_DoorNEOpened -590,XelNaga_Caverns_DoorNOpened -591,XelNaga_Caverns_DoorNW -592,XelNaga_Caverns_DoorNWOpened -593,XelNaga_Caverns_DoorS -594,XelNaga_Caverns_DoorSE -595,XelNaga_Caverns_DoorSEOpened -596,XelNaga_Caverns_DoorSOpened -597,XelNaga_Caverns_DoorSW -598,XelNaga_Caverns_DoorSWOpened -599,XelNaga_Caverns_DoorW -600,XelNaga_Caverns_DoorWOpened -601,XelNaga_Caverns_Floating_BridgeNE8Out -602,XelNaga_Caverns_Floating_BridgeNE8 -603,XelNaga_Caverns_Floating_BridgeNW8Out -604,XelNaga_Caverns_Floating_BridgeNW8 -605,XelNaga_Caverns_Floating_BridgeNE10Out -606,XelNaga_Caverns_Floating_BridgeNE10 -607,XelNaga_Caverns_Floating_BridgeNW10Out -608,XelNaga_Caverns_Floating_BridgeNW10 -609,XelNaga_Caverns_Floating_BridgeNE12Out -610,XelNaga_Caverns_Floating_BridgeNE12 -611,XelNaga_Caverns_Floating_BridgeNW12Out -612,XelNaga_Caverns_Floating_BridgeNW12 -613,XelNaga_Caverns_Floating_BridgeH8Out -614,XelNaga_Caverns_Floating_BridgeH8 -615,XelNaga_Caverns_Floating_BridgeV8Out -616,XelNaga_Caverns_Floating_BridgeV8 -617,XelNaga_Caverns_Floating_BridgeH10Out -618,XelNaga_Caverns_Floating_BridgeH10 -619,XelNaga_Caverns_Floating_BridgeV10Out -620,XelNaga_Caverns_Floating_BridgeV10 -621,XelNaga_Caverns_Floating_BridgeH12Out -622,XelNaga_Caverns_Floating_BridgeH12 -623,XelNaga_Caverns_Floating_BridgeV12Out -624,XelNaga_Caverns_Floating_BridgeV12 -627,CollapsibleTerranTowerPushUnitRampLeft -628,CollapsibleTerranTowerPushUnitRampRight -631,CollapsibleRockTowerPushUnit -632,CollapsibleTerranTowerPushUnit -633,CollapsibleRockTowerPushUnitRampRight -634,CollapsibleRockTowerPushUnitRampLeft -635,DigesterCreepSprayTargetUnit -636,DigesterCreepSprayUnit -637,NydusCanalAttackerWeapon -638,ViperConsumeStructureWeapon -641,ResourceBlocker -642,TempestWeapon -643,YoinkMissile -647,YoinkVikingAirMissile -649,YoinkVikingGroundMissile -651,YoinkSiegeTankMissile -653,WarHoundWeapon -655,EyeStalkWeapon -658,WidowMineWeapon -659,WidowMineAirWeapon -660,MothershipCoreWeaponWeapon -661,TornadoMissileWeapon -662,TornadoMissileDummyWeapon -663,TalonsMissileWeapon -664,CreepTumorMissile -665,LocustMPEggAMissileWeapon -666,LocustMPEggBMissileWeapon -667,LocustMPWeapon -669,RepulsorCannonWeapon -673,CollapsibleRockTowerDiagonal -674,CollapsibleTerranTowerDiagonal -675,CollapsibleTerranTowerRampLeft -676,CollapsibleTerranTowerRampRight -677,Ice2x2NonConjoined -678,IceProtossCrates -679,ProtossCrates -680,TowerMine -681,PickupPalletGas -682,PickupPalletMinerals -683,PickupScrapSalvage1x1 -684,PickupScrapSalvage2x2 -685,PickupScrapSalvage3x3 -686,RoughTerrain -687,UnbuildableBricksSmallUnit -688,UnbuildablePlatesSmallUnit -689,UnbuildablePlatesUnit -690,UnbuildableRocksSmallUnit -691,XelNagaHealingShrine -692,InvisibleTargetDummy -693,ProtossVespeneGeyser -694,CollapsibleRockTower -695,CollapsibleTerranTower -696,ThornLizard -697,CleaningBot -698,DestructibleRock6x6Weak -699,ProtossSnakeSegmentDemo -700,PhysicsCapsule -701,PhysicsCube -702,PhysicsCylinder -703,PhysicsKnot -704,PhysicsL -705,PhysicsPrimitives -706,PhysicsSphere -707,PhysicsStar -708,CreepBlocker4x4 -709,DestructibleCityDebris2x4Vertical -710,DestructibleCityDebris2x4Horizontal -711,DestructibleCityDebris2x6Vertical -712,DestructibleCityDebris2x6Horizontal -713,DestructibleCityDebris4x4 -714,DestructibleCityDebris6x6 -715,DestructibleCityDebrisHugeDiagonalBLUR -716,DestructibleCityDebrisHugeDiagonalULBR -717,TestZerg -718,PathingBlockerRadius1 -719,DestructibleRockEx12x4Vertical -720,DestructibleRockEx12x4Horizontal -721,DestructibleRockEx12x6Vertical -722,DestructibleRockEx12x6Horizontal -723,DestructibleRockEx14x4 -724,DestructibleRockEx16x6 -725,DestructibleRockEx1DiagonalHugeULBR -726,DestructibleRockEx1DiagonalHugeBLUR -727,DestructibleRockEx1VerticalHuge -728,DestructibleRockEx1HorizontalHuge -729,DestructibleIce2x4Vertical -730,DestructibleIce2x4Horizontal -731,DestructibleIce2x6Vertical -732,DestructibleIce2x6Horizontal -733,DestructibleIce4x4 -734,DestructibleIce6x6 -735,DestructibleIceDiagonalHugeULBR -736,DestructibleIceDiagonalHugeBLUR -737,DestructibleIceVerticalHuge -738,DestructibleIceHorizontalHuge -739,DesertPlanetSearchlight -740,DesertPlanetStreetlight -741,UnbuildableBricksUnit -742,UnbuildableRocksUnit -743,ZerusDestructibleArch -744,Artosilope -745,Anteplott -746,LabBot -747,Crabeetle -748,CollapsibleRockTowerRampRight -749,CollapsibleRockTowerRampLeft -750,LabMineralField -751,LabMineralField750 -767,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -768,SnowRefinery_Terran_ExtendingBridgeNEShort8 -769,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -770,SnowRefinery_Terran_ExtendingBridgeNWShort8 -775,Tarsonis_DoorN -776,Tarsonis_DoorNLowered -777,Tarsonis_DoorNE -778,Tarsonis_DoorNELowered -779,Tarsonis_DoorE -780,Tarsonis_DoorELowered -781,Tarsonis_DoorNW -782,Tarsonis_DoorNWLowered -783,RavagerCocoon -784,Ravager -785,Liberator -786,RavagerBurrowed -788,ThorAP -789,Cyclone -790,LocustMPFlying -791,Disruptor -792,AiurLightBridgeNE8Out -793,AiurLightBridgeNE8 -794,AiurLightBridgeNE10Out -795,AiurLightBridgeNE10 -796,AiurLightBridgeNE12Out -797,AiurLightBridgeNE12 -798,AiurLightBridgeNW8Out -799,AiurLightBridgeNW8 -800,AiurLightBridgeNW10Out -801,AiurLightBridgeNW10 -802,AiurLightBridgeNW12Out -803,AiurLightBridgeNW12 -804,AiurTempleBridgeNE8Out -806,AiurTempleBridgeNE10Out -808,AiurTempleBridgeNE12Out -810,AiurTempleBridgeNW8Out -812,AiurTempleBridgeNW10Out -814,AiurTempleBridgeNW12Out -816,ShakurasLightBridgeNE8Out -817,ShakurasLightBridgeNE8 -818,ShakurasLightBridgeNE10Out -819,ShakurasLightBridgeNE10 -820,ShakurasLightBridgeNE12Out -821,ShakurasLightBridgeNE12 -822,ShakurasLightBridgeNW8Out -823,ShakurasLightBridgeNW8 -824,ShakurasLightBridgeNW10Out -825,ShakurasLightBridgeNW10 -826,ShakurasLightBridgeNW12Out -827,ShakurasLightBridgeNW12 -828,VoidMPImmortalReviveCorpse -829,GuardianCocoonMP -830,GuardianMP -831,DevourerCocoonMP -832,DevourerMP -833,DefilerMPBurrowed -834,DefilerMP -835,OracleStasisTrap -836,DisruptorPhased -837,LiberatorAG -838,AiurLightBridgeAbandonedNE8Out -839,AiurLightBridgeAbandonedNE8 -840,AiurLightBridgeAbandonedNE10Out -841,AiurLightBridgeAbandonedNE10 -842,AiurLightBridgeAbandonedNE12Out -843,AiurLightBridgeAbandonedNE12 -844,AiurLightBridgeAbandonedNW8Out -845,AiurLightBridgeAbandonedNW8 -846,AiurLightBridgeAbandonedNW10Out -847,AiurLightBridgeAbandonedNW10 -848,AiurLightBridgeAbandonedNW12Out -849,AiurLightBridgeAbandonedNW12 -850,CollapsiblePurifierTowerDebris -851,PortCity_Bridge_UnitNE8Out -852,PortCity_Bridge_UnitNE8 -853,PortCity_Bridge_UnitSE8Out -854,PortCity_Bridge_UnitSE8 -855,PortCity_Bridge_UnitNW8Out -856,PortCity_Bridge_UnitNW8 -857,PortCity_Bridge_UnitSW8Out -858,PortCity_Bridge_UnitSW8 -859,PortCity_Bridge_UnitNE10Out -860,PortCity_Bridge_UnitNE10 -861,PortCity_Bridge_UnitSE10Out -862,PortCity_Bridge_UnitSE10 -863,PortCity_Bridge_UnitNW10Out -864,PortCity_Bridge_UnitNW10 -865,PortCity_Bridge_UnitSW10Out -866,PortCity_Bridge_UnitSW10 -867,PortCity_Bridge_UnitNE12Out -868,PortCity_Bridge_UnitNE12 -869,PortCity_Bridge_UnitSE12Out -870,PortCity_Bridge_UnitSE12 -871,PortCity_Bridge_UnitNW12Out -872,PortCity_Bridge_UnitNW12 -873,PortCity_Bridge_UnitSW12Out -874,PortCity_Bridge_UnitSW12 -875,PortCity_Bridge_UnitN8Out -876,PortCity_Bridge_UnitN8 -877,PortCity_Bridge_UnitS8Out -878,PortCity_Bridge_UnitS8 -879,PortCity_Bridge_UnitE8Out -880,PortCity_Bridge_UnitE8 -881,PortCity_Bridge_UnitW8Out -882,PortCity_Bridge_UnitW8 -883,PortCity_Bridge_UnitN10Out -884,PortCity_Bridge_UnitN10 -885,PortCity_Bridge_UnitS10Out -886,PortCity_Bridge_UnitS10 -887,PortCity_Bridge_UnitE10Out -888,PortCity_Bridge_UnitE10 -889,PortCity_Bridge_UnitW10Out -890,PortCity_Bridge_UnitW10 -891,PortCity_Bridge_UnitN12Out -892,PortCity_Bridge_UnitN12 -893,PortCity_Bridge_UnitS12Out -894,PortCity_Bridge_UnitS12 -895,PortCity_Bridge_UnitE12Out -896,PortCity_Bridge_UnitE12 -897,PortCity_Bridge_UnitW12Out -898,PortCity_Bridge_UnitW12 -899,PurifierRichMineralField -900,PurifierRichMineralField750 -915,CollapsiblePurifierTowerPushUnit -917,LocustMPPrecursor -918,ReleaseInterceptorsBeacon -919,AdeptPhaseShift -920,RavagerCorrosiveBileMissile -921,HydraliskImpaleMissile -922,CycloneMissileLargeAir -923,CycloneMissile -924,CycloneMissileLarge -925,ThorAALance -926,OracleWeapon -927,TempestWeaponGround -928,RavagerWeaponMissile -929,ScoutMPAirWeaponLeft -930,ScoutMPAirWeaponRight -931,ArbiterMPWeaponMissile -932,GuardianMPWeapon -933,DevourerMPWeaponMissile -934,DefilerMPDarkSwarmWeapon -935,QueenMPEnsnareMissile -936,QueenMPSpawnBroodlingsMissile -937,LightningBombWeapon -938,HERCPlacement -939,GrappleWeapon -942,CausticSprayMissile -943,ParasiticBombMissile -944,ParasiticBombDummy -945,AdeptWeapon -946,AdeptUpgradeWeapon -947,LiberatorMissile -948,LiberatorDamageMissile -949,LiberatorAGMissile -950,KD8Charge -951,KD8ChargeWeapon -953,SlaynElementalGrabWeapon -954,SlaynElementalGrabAirUnit -955,SlaynElementalGrabGroundUnit -956,SlaynElementalWeapon -961,DestructibleExpeditionGate6x6 -962,DestructibleZergInfestation3x3 -963,HERC -964,Moopy -965,Replicant -966,SeekerMissile -967,AiurTempleBridgeDestructibleNE8Out -968,AiurTempleBridgeDestructibleNE10Out -969,AiurTempleBridgeDestructibleNE12Out -970,AiurTempleBridgeDestructibleNW8Out -971,AiurTempleBridgeDestructibleNW10Out -972,AiurTempleBridgeDestructibleNW12Out -973,AiurTempleBridgeDestructibleSW8Out -974,AiurTempleBridgeDestructibleSW10Out -975,AiurTempleBridgeDestructibleSW12Out -976,AiurTempleBridgeDestructibleSE8Out -977,AiurTempleBridgeDestructibleSE10Out -978,AiurTempleBridgeDestructibleSE12Out -980,FlyoverUnit -981,CorsairMP -982,ScoutMP -984,ArbiterMP -985,ScourgeMP -986,DefilerMPPlagueWeapon -987,QueenMP -988,XelNagaDestructibleRampBlocker6S -989,XelNagaDestructibleRampBlocker6SE -990,XelNagaDestructibleRampBlocker6E -991,XelNagaDestructibleRampBlocker6NE -992,XelNagaDestructibleRampBlocker6N -993,XelNagaDestructibleRampBlocker6NW -994,XelNagaDestructibleRampBlocker6W -995,XelNagaDestructibleRampBlocker6SW -996,XelNagaDestructibleRampBlocker8S -997,XelNagaDestructibleRampBlocker8SE -998,XelNagaDestructibleRampBlocker8E -999,XelNagaDestructibleRampBlocker8NE -1000,XelNagaDestructibleRampBlocker8N -1001,XelNagaDestructibleRampBlocker8NW -1002,XelNagaDestructibleRampBlocker8W -1003,XelNagaDestructibleRampBlocker8SW -1004,ReptileCrate -1005,SlaynSwarmHostSpawnFlyer -1006,SlaynElemental -1007,PurifierVespeneGeyser -1008,ShakurasVespeneGeyser -1009,CollapsiblePurifierTowerDiagonal -1010,CreepOnlyBlocker4x4 -1011,PurifierMineralField -1012,PurifierMineralField750 -1013,Beacon_Nova -1014,Beacon_NovaSmall -1015,Ursula -1016,Elsecaro_Colonist_Hut -1017,TransportOverlordCocoon -1018,OverlordTransport -1019,PylonOvercharged -1020,BypassArmorDrone -1021,AdeptPiercingWeapon -1022,CorrosiveParasiteWeapon diff --git a/sc2reader/data/LotV/48258_abilities.csv b/sc2reader/data/LotV/48258_abilities.csv deleted file mode 100644 index 2ca25a0..0000000 --- a/sc2reader/data/LotV/48258_abilities.csv +++ /dev/null @@ -1,542 +0,0 @@ -35,Taunt -36,stop -38,move -45,attack -59,SprayTerran -60,SprayZerg -61,SprayProtoss -62,SalvageShared -64,GhostHoldFire -65,GhostWeaponsFree -67,Explode -68,CarrierLaunchSpeedUpgrade -68,PhoenixRangeUpgrade -69,FungalGrowth -70,GuardianShield -71,MULERepair -72,Baneling -74,Feedback -76,PlacePointDefenseDrone -77,HallucinationArchon -78,HallucinationColossus -79,HallucinationHighTemplar -80,HallucinationImmortal -81,HallucinationPhoenix -82,HallucinationProbe -83,HallucinationStalker -84,HallucinationVoidRay -85,HallucinationWarpPrism -86,HallucinationZealot -87,MULEGather -88,SeekerMissile -89,CalldownMULE -90,GravitonBeam -94,SpawnChangeling -101,Rally -102,ProgressRally -103,RallyCommand -104,RallyNexus -105,RallyHatchery -106,GlialReconstitution -106,TunnelingClaws -108,InfestedTerrans -109,NeuralParasite -110,SpawnLarva -111,StimpackMarauder -112,SupplyDrop -115,TimeWarp -116,ChitinousPlating -118,SCVHarvest -119,ProbeHarvest -121,que1 -122,que5 -123,que5CancelToSelection -125,que5Addon -126,BuildInProgress -127,Repair -128,Armory -128,Barracks -128,Bunker -128,CommandCenter -128,EngineeringBay -128,Factory -128,FusionCore -128,GhostAcademy -128,MissileTurret -128,Refinery -128,SensorTower -128,Starport -128,SupplyDepot -130,Stimpack -131,GhostCloak -133,MedivacHeal -134,SiegeMode -135,Unsiege -136,BansheeCloak -137,MedivacTransport -138,ScannerSweep -139,Yamato -140,AssaultMode -141,FighterMode -142,BunkerTransport -143,CommandCenterTransport -144,CommandCenterLiftOff -145,CommandCenterLand -146,BarracksReactor -146,BarracksTechLab -147,BarracksLiftOff -148,FactoryReactor -148,FactoryTechLab -149,FactoryLiftOff -150,StarportReactor -150,StarportTechLab -151,StarportLiftOff -152,FactoryLand -153,StarportLand -154,SCV -155,BarracksLand -156,SupplyDepotLower -157,SupplyDepotRaise -158,Ghost -158,Marauder -158,Marine -158,Reaper -159,Cyclone -159,Hellion -159,HellionTank -159,SiegeTank -159,Thor -159,WidowMine -160,Banshee -160,Battlecruiser -160,Liberator -160,Medivac -160,Raven -160,VikingFighter -161,HiSecAutoTracking -161,NeosteelFrame -161,TerranBuildingArmor -161,TerranInfantryArmorsLevel1 -161,TerranInfantryArmorsLevel2 -161,TerranInfantryArmorsLevel3 -161,TerranInfantryWeaponsLevel1 -161,TerranInfantryWeaponsLevel2 -161,TerranInfantryWeaponsLevel3 -163,Nuke -164,PunisherGrenades -164,ShieldWall -164,Stimpack -165,DrillClaws -165,HighCapacityBarrels -166,BansheeCloak -166,BansheeSpeed -166,LiberatorAGRangeUpgrade -166,MedivacIncreaseSpeedBoost -166,RavenCorvidReactor -166,RavenRecalibratedExplosives -167,PersonalCloaking -168,TerranShipWeaponsLevel1 -168,TerranShipWeaponsLevel2 -168,TerranShipWeaponsLevel3 -168,TerranVehicleAndShipArmorsLevel1 -168,TerranVehicleAndShipArmorsLevel2 -168,TerranVehicleAndShipArmorsLevel3 -168,TerranVehicleWeaponsLevel1 -168,TerranVehicleWeaponsLevel2 -168,TerranVehicleWeaponsLevel3 -169,Assimilator -169,CyberneticsCore -169,DarkShrine -169,FleetBeacon -169,Forge -169,Gateway -169,Nexus -169,PhotonCannon -169,Pylon -169,RoboticsBay -169,RoboticsFacility -169,Stargate -169,TemplarArchive -169,TwilightCouncil -170,WarpPrismTransport -171,Adept -171,DarkTemplar -171,HighTemplar -171,Sentry -171,Stalker -171,Zealot -172,Carrier -172,Oracle -172,Phoenix -172,Tempest -172,VoidRay -173,Colossus -173,Disruptor -173,Immortal -173,Observer -173,WarpPrism -174,Probe -175,PsiStorm -176,HangarQueue5 -178,Interceptor -179,ProtossGroundArmorsLevel1 -179,ProtossGroundArmorsLevel2 -179,ProtossGroundArmorsLevel3 -179,ProtossGroundWeaponsLevel1 -179,ProtossGroundWeaponsLevel2 -179,ProtossGroundWeaponsLevel3 -179,ProtossShieldsLevel1 -179,ProtossShieldsLevel2 -179,ProtossShieldsLevel3 -180,ExtendedThermalLance -180,GraviticDrive -180,ObserverGraviticBooster -181,PsiStormTech -182,BanelingNest -182,EvolutionChamber -182,Extractor -182,Hatchery -182,HydraliskDen -182,InfestationPit -182,NydusNetwork -182,RoachWarren -182,SpawningPool -182,SpineCrawler -182,Spire -182,SporeCrawler -182,UltraliskCavern -183,DroneHarvest -184,ZergGroundArmorsLevel1 -184,ZergGroundArmorsLevel2 -184,ZergGroundArmorsLevel3 -184,ZergMeleeWeaponsLevel1 -184,ZergMeleeWeaponsLevel2 -184,ZergMeleeWeaponsLevel3 -184,ZergMissileWeaponsLevel1 -184,ZergMissileWeaponsLevel2 -184,ZergMissileWeaponsLevel3 -185,UpgradeToLair -186,UpgradeToHive -187,UpgradeToGreaterSpire -188,Burrow -188,overlordspeed -189,zerglingattackspeed -189,zerglingmovementspeed -190,EvolveMuscularAugments -191,ZergFlyerArmorsLevel1 -191,ZergFlyerArmorsLevel2 -191,ZergFlyerArmorsLevel3 -191,ZergFlyerWeaponsLevel1 -191,ZergFlyerWeaponsLevel2 -191,ZergFlyerWeaponsLevel3 -192,Corruptor -192,Drone -192,Hydralisk -192,Infestor -192,Mutalisk -192,Overlord -192,Roach -192,SwarmHostMP -192,Ultralisk -192,Viper -192,Zergling -193,MorphToBroodLord -194,BurrowBanelingDown -195,BurrowBanelingUp -196,BurrowDroneDown -197,BurrowDroneUp -198,BurrowHydraliskDown -199,BurrowHydraliskUp -200,BurrowRoachDown -201,BurrowRoachUp -202,BurrowZerglingDown -203,BurrowZerglingUp -204,BurrowInfestorTerranDown -205,BurrowInfestorTerranUp -206,RedstoneLavaCritterBurrow -207,RedstoneLavaCritterInjuredBurrow -208,RedstoneLavaCritterUnburrow -209,RedstoneLavaCritterInjuredUnburrow -210,OverlordTransport -213,Adept -213,DarkTemplar -213,HighTemplar -213,Sentry -213,Stalker -213,Zealot -214,BurrowQueenDown -215,BurrowQueenUp -216,NydusCanalTransport -217,Blink -218,BurrowInfestorDown -219,BurrowInfestorUp -220,MorphToOverseer -221,UpgradeToPlanetaryFortress -222,InfestorEnergyUpgrade -222,NeuralParasite -223,CentrificalHooks -224,BurrowUltraliskDown -225,BurrowUltraliskUp -226,UpgradeToOrbital -227,UpgradeToWarpGate -228,MorphBackToGateway -229,OrbitalLiftOff -230,OrbitalCommandLand -231,ForceField -232,PhasingMode -233,TransportMode -234,BattlecruiserEnableSpecializations -235,ProtossAirArmorsLevel1 -235,ProtossAirArmorsLevel2 -235,ProtossAirArmorsLevel3 -235,ProtossAirWeaponsLevel1 -235,ProtossAirWeaponsLevel2 -235,ProtossAirWeaponsLevel3 -235,WarpGateResearch -236,AdeptPiercingAttack -236,BlinkTech -236,Charge -237,TacNukeStrike -240,EMP -242,Queen -244,Transfusion -253,AttackRedirect -254,StimpackRedirect -255,StimpackMarauderRedirect -257,StopRedirect -258,GenerateCreep -259,CreepTumorQueen -260,SpineCrawlerUproot -261,SporeCrawlerUproot -262,SpineCrawlerRoot -263,SporeCrawlerRoot -264,CreepTumor -265,BuildAutoTurret -266,ArchonWarp -267,NydusCanal -269,Charge -273,Contaminate -276,que5Passive -277,que5PassiveCancelToSelection -305,DigesterCreepSpray -309,MorphToMothership -312,MothershipCore -334,XelNagaHealingShrine -343,MothershipCoreMassRecall -345,MorphToHellion -355,MorphToHellionTank -363,MorphToSwarmHostBurrowedMP -364,MorphToSwarmHostMP -366,attackProtossBuilding -368,stopProtossBuilding -369,BlindingCloud -371,Yoink -374,ViperConsumeStructure -377,TestZerg -378,VolatileBurstBuilding -385,WidowMineBurrow -386,WidowMineUnburrow -387,WidowMineAttack -388,TornadoMissile -392,BurrowLurkerMPDown -393,BurrowLurkerMPUp -394,UpgradeToLurkerDenMP -395,HallucinationOracle -396,MedivacSpeedBoost -397,ExtendingBridgeNEWide8Out -398,ExtendingBridgeNEWide8 -399,ExtendingBridgeNWWide8Out -400,ExtendingBridgeNWWide8 -401,ExtendingBridgeNEWide10Out -402,ExtendingBridgeNEWide10 -403,ExtendingBridgeNWWide10Out -404,ExtendingBridgeNWWide10 -405,ExtendingBridgeNEWide12Out -406,ExtendingBridgeNEWide12 -407,ExtendingBridgeNWWide12Out -408,ExtendingBridgeNWWide12 -410,CritterFlee -411,OracleRevelation -419,MothershipCorePurifyNexus -420,XelNaga_Caverns_DoorE -421,XelNaga_Caverns_DoorEOpened -422,XelNaga_Caverns_DoorN -423,XelNaga_Caverns_DoorNE -424,XelNaga_Caverns_DoorNEOpened -425,XelNaga_Caverns_DoorNOpened -426,XelNaga_Caverns_DoorNW -427,XelNaga_Caverns_DoorNWOpened -428,XelNaga_Caverns_DoorS -429,XelNaga_Caverns_DoorSE -430,XelNaga_Caverns_DoorSEOpened -431,XelNaga_Caverns_DoorSOpened -432,XelNaga_Caverns_DoorSW -433,XelNaga_Caverns_DoorSWOpened -434,XelNaga_Caverns_DoorW -435,XelNaga_Caverns_DoorWOpened -436,XelNaga_Caverns_Floating_BridgeNE8Out -437,XelNaga_Caverns_Floating_BridgeNE8 -438,XelNaga_Caverns_Floating_BridgeNW8Out -439,XelNaga_Caverns_Floating_BridgeNW8 -440,XelNaga_Caverns_Floating_BridgeNE10Out -441,XelNaga_Caverns_Floating_BridgeNE10 -442,XelNaga_Caverns_Floating_BridgeNW10Out -443,XelNaga_Caverns_Floating_BridgeNW10 -444,XelNaga_Caverns_Floating_BridgeNE12Out -445,XelNaga_Caverns_Floating_BridgeNE12 -446,XelNaga_Caverns_Floating_BridgeNW12Out -447,XelNaga_Caverns_Floating_BridgeNW12 -448,XelNaga_Caverns_Floating_BridgeH8Out -449,XelNaga_Caverns_Floating_BridgeH8 -450,XelNaga_Caverns_Floating_BridgeV8Out -451,XelNaga_Caverns_Floating_BridgeV8 -452,XelNaga_Caverns_Floating_BridgeH10Out -453,XelNaga_Caverns_Floating_BridgeH10 -454,XelNaga_Caverns_Floating_BridgeV10Out -455,XelNaga_Caverns_Floating_BridgeV10 -456,XelNaga_Caverns_Floating_BridgeH12Out -457,XelNaga_Caverns_Floating_BridgeH12 -458,XelNaga_Caverns_Floating_BridgeV12Out -459,XelNaga_Caverns_Floating_BridgeV12 -460,TemporalField -484,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -485,SnowRefinery_Terran_ExtendingBridgeNEShort8 -486,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -487,SnowRefinery_Terran_ExtendingBridgeNWShort8 -509,CausticSpray -512,MorphToRavager -513,MorphToLurker -516,RavagerCorrosiveBile -517,BurrowRavagerDown -518,BurrowRavagerUp -520,PurificationNovaTargeted -522,LockOn -524,LockOnCancel -526,Hyperjump -528,ThorAPMode -529,ThorNormalMode -531,MothershipMassRecall -532,NydusWormTransport -533,OracleWeapon -539,LocustMPFlyingSwoop -540,HallucinationDisruptor -541,HallucinationAdept -542,VoidRaySwarmDamageBoost -543,SeekerDummyChannel -544,AiurLightBridgeNE8Out -545,AiurLightBridgeNE8 -546,AiurLightBridgeNE10Out -547,AiurLightBridgeNE10 -548,AiurLightBridgeNE12Out -549,AiurLightBridgeNE12 -550,AiurLightBridgeNW8Out -551,AiurLightBridgeNW8 -552,AiurLightBridgeNW10Out -553,AiurLightBridgeNW10 -554,AiurLightBridgeNW12Out -555,AiurLightBridgeNW12 -568,ShakurasLightBridgeNE8Out -569,ShakurasLightBridgeNE8 -570,ShakurasLightBridgeNE10Out -571,ShakurasLightBridgeNE10 -572,ShakurasLightBridgeNE12Out -573,ShakurasLightBridgeNE12 -574,ShakurasLightBridgeNW8Out -575,ShakurasLightBridgeNW8 -576,ShakurasLightBridgeNW10Out -577,ShakurasLightBridgeNW10 -578,ShakurasLightBridgeNW12Out -579,ShakurasLightBridgeNW12 -580,VoidMPImmortalReviveRebuild -582,ArbiterMPStasisField -583,ArbiterMPRecall -584,CorsairMPDisruptionWeb -585,MorphToGuardianMP -586,MorphToDevourerMP -587,DefilerMPConsume -588,DefilerMPDarkSwarm -589,DefilerMPPlague -590,DefilerMPBurrow -591,DefilerMPUnburrow -592,QueenMPEnsnare -593,QueenMPSpawnBroodlings -594,QueenMPInfestCommandCenter -598,OracleStasisTrap -602,ParasiticBomb -603,AdeptPhaseShift -606,LurkerHoldFire -607,LurkerRemoveHoldFire -610,LiberatorAGTarget -611,LiberatorAATarget -613,AiurLightBridgeAbandonedNE8Out -614,AiurLightBridgeAbandonedNE8 -615,AiurLightBridgeAbandonedNE10Out -616,AiurLightBridgeAbandonedNE10 -617,AiurLightBridgeAbandonedNE12Out -618,AiurLightBridgeAbandonedNE12 -619,AiurLightBridgeAbandonedNW8Out -620,AiurLightBridgeAbandonedNW8 -621,AiurLightBridgeAbandonedNW10Out -622,AiurLightBridgeAbandonedNW10 -623,AiurLightBridgeAbandonedNW12Out -624,AiurLightBridgeAbandonedNW12 -625,KD8Charge -628,AdeptPhaseShiftCancel -629,AdeptShadePhaseShiftCancel -630,SlaynElementalGrab -632,PortCity_Bridge_UnitNE8Out -633,PortCity_Bridge_UnitNE8 -634,PortCity_Bridge_UnitSE8Out -635,PortCity_Bridge_UnitSE8 -636,PortCity_Bridge_UnitNW8Out -637,PortCity_Bridge_UnitNW8 -638,PortCity_Bridge_UnitSW8Out -639,PortCity_Bridge_UnitSW8 -640,PortCity_Bridge_UnitNE10Out -641,PortCity_Bridge_UnitNE10 -642,PortCity_Bridge_UnitSE10Out -643,PortCity_Bridge_UnitSE10 -644,PortCity_Bridge_UnitNW10Out -645,PortCity_Bridge_UnitNW10 -646,PortCity_Bridge_UnitSW10Out -646,PowerSourceFast -647,PortCity_Bridge_UnitSW10 -648,PortCity_Bridge_UnitNE12Out -649,PortCity_Bridge_UnitNE12 -650,PortCity_Bridge_UnitSE12Out -651,PortCity_Bridge_UnitSE12 -652,PortCity_Bridge_UnitNW12Out -653,PortCity_Bridge_UnitNW12 -654,PortCity_Bridge_UnitSW12Out -655,PortCity_Bridge_UnitSW12 -656,PortCity_Bridge_UnitN8Out -657,PortCity_Bridge_UnitN8 -658,PortCity_Bridge_UnitS8Out -659,PortCity_Bridge_UnitS8 -660,PortCity_Bridge_UnitE8Out -661,PortCity_Bridge_UnitE8 -662,PortCity_Bridge_UnitW8Out -663,PortCity_Bridge_UnitW8 -664,PortCity_Bridge_UnitN10Out -665,PortCity_Bridge_UnitN10 -666,PortCity_Bridge_UnitS10Out -667,PortCity_Bridge_UnitS10 -668,PortCity_Bridge_UnitE10Out -669,PortCity_Bridge_UnitE10 -670,PortCity_Bridge_UnitW10Out -671,PortCity_Bridge_UnitW10 -672,PortCity_Bridge_UnitN12Out -673,PortCity_Bridge_UnitN12 -674,PortCity_Bridge_UnitS12Out -675,PortCity_Bridge_UnitS12 -676,PortCity_Bridge_UnitE12Out -677,PortCity_Bridge_UnitE12 -678,PortCity_Bridge_UnitW12Out -679,PortCity_Bridge_UnitW12 -682,DarkTemplarBlink -686,SpawnLocustsTargeted -688,MorphToTransportOverlord -691,ChannelSnipe -694,DarkTemplarBlinkUpgrade -1843,WidowMineArmed -2378,IsTransportOverlord diff --git a/sc2reader/data/LotV/48258_units.csv b/sc2reader/data/LotV/48258_units.csv deleted file mode 100644 index cc21644..0000000 --- a/sc2reader/data/LotV/48258_units.csv +++ /dev/null @@ -1,897 +0,0 @@ -1,System_Snapshot_Dummy -21,Ball -22,StereoscopicOptionsUnit -23,Colossus -24,TechLab -25,Reactor -27,InfestorTerran -28,BanelingCocoon -29,Baneling -30,Mothership -31,PointDefenseDrone -32,Changeling -33,ChangelingZealot -34,ChangelingMarineShield -35,ChangelingMarine -36,ChangelingZerglingWings -37,ChangelingZergling -39,CommandCenter -40,SupplyDepot -41,Refinery -42,Barracks -43,EngineeringBay -44,MissileTurret -45,Bunker -46,SensorTower -47,GhostAcademy -48,Factory -49,Starport -51,Armory -52,FusionCore -53,AutoTurret -54,SiegeTankSieged -55,SiegeTank -56,VikingAssault -57,VikingFighter -58,CommandCenterFlying -59,BarracksTechLab -60,BarracksReactor -61,FactoryTechLab -62,FactoryReactor -63,StarportTechLab -64,StarportReactor -65,FactoryFlying -66,StarportFlying -67,SCV -68,BarracksFlying -69,SupplyDepotLowered -70,Marine -71,Reaper -72,Ghost -73,Marauder -74,Thor -75,Hellion -76,Medivac -77,Banshee -78,Raven -79,Battlecruiser -80,Nuke -81,Nexus -82,Pylon -83,Assimilator -84,Gateway -85,Forge -86,FleetBeacon -87,TwilightCouncil -88,PhotonCannon -89,Stargate -90,TemplarArchive -91,DarkShrine -92,RoboticsBay -93,RoboticsFacility -94,CyberneticsCore -95,Zealot -96,Stalker -97,HighTemplar -98,DarkTemplar -99,Sentry -100,Phoenix -101,Carrier -102,VoidRay -103,WarpPrism -104,Observer -105,Immortal -106,Probe -107,Interceptor -108,Hatchery -109,CreepTumor -110,Extractor -111,SpawningPool -112,EvolutionChamber -113,HydraliskDen -114,Spire -115,UltraliskCavern -116,InfestationPit -117,NydusNetwork -118,BanelingNest -119,RoachWarren -120,SpineCrawler -121,SporeCrawler -122,Lair -123,Hive -124,GreaterSpire -125,Egg -126,Drone -127,Zergling -128,Overlord -129,Hydralisk -130,Mutalisk -131,Ultralisk -132,Roach -133,Infestor -134,Corruptor -135,BroodLordCocoon -136,BroodLord -137,BanelingBurrowed -138,DroneBurrowed -139,HydraliskBurrowed -140,RoachBurrowed -141,ZerglingBurrowed -142,InfestorTerranBurrowed -143,RedstoneLavaCritterBurrowed -144,RedstoneLavaCritterInjuredBurrowed -145,RedstoneLavaCritter -146,RedstoneLavaCritterInjured -147,QueenBurrowed -148,Queen -149,InfestorBurrowed -150,OverlordCocoon -151,Overseer -152,PlanetaryFortress -153,UltraliskBurrowed -154,OrbitalCommand -155,WarpGate -156,OrbitalCommandFlying -157,ForceField -158,WarpPrismPhasing -159,CreepTumorBurrowed -160,CreepTumorQueen -161,SpineCrawlerUprooted -162,SporeCrawlerUprooted -163,Archon -164,NydusCanal -165,BroodlingEscort -166,GhostAlternate -167,GhostNova -168,RichMineralField -169,RichMineralField750 -170,Ursadon -172,XelNagaTower -176,InfestedTerransEgg -177,Larva -178,ReaperPlaceholder -179,MarineACGluescreenDummy -180,FirebatACGluescreenDummy -181,MedicACGluescreenDummy -182,MarauderACGluescreenDummy -183,VultureACGluescreenDummy -184,SiegeTankACGluescreenDummy -185,VikingACGluescreenDummy -186,BansheeACGluescreenDummy -187,BattlecruiserACGluescreenDummy -188,OrbitalCommandACGluescreenDummy -189,BunkerACGluescreenDummy -190,BunkerUpgradedACGluescreenDummy -191,MissileTurretACGluescreenDummy -192,HellbatACGluescreenDummy -193,GoliathACGluescreenDummy -194,CycloneACGluescreenDummy -195,WraithACGluescreenDummy -196,ScienceVesselACGluescreenDummy -197,HerculesACGluescreenDummy -198,ThorACGluescreenDummy -199,PerditionTurretACGluescreenDummy -200,FlamingBettyACGluescreenDummy -201,DevastationTurretACGluescreenDummy -202,BlasterBillyACGluescreenDummy -203,SpinningDizzyACGluescreenDummy -204,ZerglingKerriganACGluescreenDummy -205,RaptorACGluescreenDummy -206,QueenCoopACGluescreenDummy -207,HydraliskACGluescreenDummy -208,HydraliskLurkerACGluescreenDummy -209,MutaliskBroodlordACGluescreenDummy -210,BroodLordACGluescreenDummy -211,UltraliskACGluescreenDummy -212,TorrasqueACGluescreenDummy -213,OverseerACGluescreenDummy -214,LurkerACGluescreenDummy -215,SpineCrawlerACGluescreenDummy -216,SporeCrawlerACGluescreenDummy -217,NydusNetworkACGluescreenDummy -218,OmegaNetworkACGluescreenDummy -219,ZerglingZagaraACGluescreenDummy -220,SwarmlingACGluescreenDummy -221,BanelingACGluescreenDummy -222,SplitterlingACGluescreenDummy -223,AberrationACGluescreenDummy -224,ScourgeACGluescreenDummy -225,CorruptorACGluescreenDummy -226,BileLauncherACGluescreenDummy -227,SwarmQueenACGluescreenDummy -228,RoachACGluescreenDummy -229,RoachVileACGluescreenDummy -230,RavagerACGluescreenDummy -231,SwarmHostACGluescreenDummy -232,MutaliskACGluescreenDummy -233,GuardianACGluescreenDummy -234,DevourerACGluescreenDummy -235,ViperACGluescreenDummy -236,BrutaliskACGluescreenDummy -237,LeviathanACGluescreenDummy -238,ZealotACGluescreenDummy -239,ZealotAiurACGluescreenDummy -240,DragoonACGluescreenDummy -241,HighTemplarACGluescreenDummy -242,ArchonACGluescreenDummy -243,ImmortalACGluescreenDummy -244,ObserverACGluescreenDummy -245,PhoenixAiurACGluescreenDummy -246,ReaverACGluescreenDummy -247,TempestACGluescreenDummy -248,PhotonCannonACGluescreenDummy -249,ZealotVorazunACGluescreenDummy -250,ZealotShakurasACGluescreenDummy -251,StalkerShakurasACGluescreenDummy -252,DarkTemplarShakurasACGluescreenDummy -253,CorsairACGluescreenDummy -254,VoidRayACGluescreenDummy -255,VoidRayShakurasACGluescreenDummy -256,OracleACGluescreenDummy -257,DarkArchonACGluescreenDummy -258,DarkPylonACGluescreenDummy -259,ZealotPurifierACGluescreenDummy -260,SentryPurifierACGluescreenDummy -261,ImmortalKaraxACGluescreenDummy -262,ColossusACGluescreenDummy -263,ColossusPurifierACGluescreenDummy -264,PhoenixPurifierACGluescreenDummy -265,CarrierACGluescreenDummy -266,CarrierAiurACGluescreenDummy -267,KhaydarinMonolithACGluescreenDummy -268,ShieldBatteryACGluescreenDummy -269,EliteMarineACGluescreenDummy -270,MarauderCommandoACGluescreenDummy -271,SpecOpsGhostACGluescreenDummy -272,HellbatRangerACGluescreenDummy -273,StrikeGoliathACGluescreenDummy -274,HeavySiegeTankACGluescreenDummy -275,RaidLiberatorACGluescreenDummy -276,RavenTypeIIACGluescreenDummy -277,CovertBansheeACGluescreenDummy -278,RailgunTurretACGluescreenDummy -279,BlackOpsMissileTurretACGluescreenDummy -280,SupplicantACGluescreenDummy -281,StalkerTaldarimACGluescreenDummy -282,SentryTaldarimACGluescreenDummy -283,HighTemplarTaldarimACGluescreenDummy -284,ImmortalTaldarimACGluescreenDummy -285,ColossusTaldarimACGluescreenDummy -286,WarpPrismTaldarimACGluescreenDummy -287,PhotonCannonTaldarimACGluescreenDummy -289,NeedleSpinesWeapon -290,CorruptionWeapon -291,InfestedTerransWeapon -292,NeuralParasiteWeapon -293,PointDefenseDroneReleaseWeapon -294,HunterSeekerWeapon -295,MULE -297,ThorAAWeapon -298,PunisherGrenadesLMWeapon -299,VikingFighterWeapon -300,ATALaserBatteryLMWeapon -301,ATSLaserBatteryLMWeapon -302,LongboltMissileWeapon -303,D8ChargeWeapon -304,YamatoWeapon -305,IonCannonsWeapon -306,AcidSalivaWeapon -307,SpineCrawlerWeapon -308,SporeCrawlerWeapon -309,GlaiveWurmWeapon -310,GlaiveWurmM2Weapon -311,GlaiveWurmM3Weapon -312,StalkerWeapon -313,EMP2Weapon -314,BacklashRocketsLMWeapon -315,PhotonCannonWeapon -316,ParasiteSporeWeapon -318,Broodling -319,BroodLordBWeapon -322,AutoTurretReleaseWeapon -323,LarvaReleaseMissile -324,AcidSpinesWeapon -325,FrenzyWeapon -326,ContaminateWeapon -338,BeaconRally -339,BeaconArmy -340,BeaconAttack -341,BeaconDefend -342,BeaconHarass -343,BeaconIdle -344,BeaconAuto -345,BeaconDetect -346,BeaconScout -347,BeaconClaim -348,BeaconExpand -349,BeaconCustom1 -350,BeaconCustom2 -351,BeaconCustom3 -352,BeaconCustom4 -353,Adept -359,Rocks2x2NonConjoined -360,FungalGrowthMissile -361,NeuralParasiteTentacleMissile -362,Beacon_Protoss -363,Beacon_ProtossSmall -364,Beacon_Terran -365,Beacon_TerranSmall -366,Beacon_Zerg -367,Beacon_ZergSmall -368,Lyote -369,CarrionBird -370,KarakMale -371,KarakFemale -372,UrsadakFemaleExotic -373,UrsadakMale -374,UrsadakFemale -375,UrsadakCalf -376,UrsadakMaleExotic -377,UtilityBot -378,CommentatorBot1 -379,CommentatorBot2 -380,CommentatorBot3 -381,CommentatorBot4 -382,Scantipede -383,Dog -384,Sheep -385,Cow -386,InfestedTerransEggPlacement -387,InfestorTerransWeapon -388,MineralField -389,VespeneGeyser -390,SpacePlatformGeyser -391,RichVespeneGeyser -392,DestructibleSearchlight -393,DestructibleBullhornLights -394,DestructibleStreetlight -395,DestructibleSpacePlatformSign -396,DestructibleStoreFrontCityProps -397,DestructibleBillboardTall -398,DestructibleBillboardScrollingText -399,DestructibleSpacePlatformBarrier -400,DestructibleSignsDirectional -401,DestructibleSignsConstruction -402,DestructibleSignsFunny -403,DestructibleSignsIcons -404,DestructibleSignsWarning -405,DestructibleGarage -406,DestructibleGarageLarge -407,DestructibleTrafficSignal -408,TrafficSignal -409,BraxisAlphaDestructible1x1 -410,BraxisAlphaDestructible2x2 -411,DestructibleDebris4x4 -412,DestructibleDebris6x6 -413,DestructibleRock2x4Vertical -414,DestructibleRock2x4Horizontal -415,DestructibleRock2x6Vertical -416,DestructibleRock2x6Horizontal -417,DestructibleRock4x4 -418,DestructibleRock6x6 -419,DestructibleRampDiagonalHugeULBR -420,DestructibleRampDiagonalHugeBLUR -421,DestructibleRampVerticalHuge -422,DestructibleRampHorizontalHuge -423,DestructibleDebrisRampDiagonalHugeULBR -424,DestructibleDebrisRampDiagonalHugeBLUR -425,OverlordGenerateCreepKeybind -426,MengskStatueAlone -427,MengskStatue -428,WolfStatue -429,GlobeStatue -430,Weapon -431,GlaiveWurmBounceWeapon -432,BroodLordWeapon -433,BroodLordAWeapon -434,CreepBlocker1x1 -435,PermanentCreepBlocker1x1 -436,PathingBlocker1x1 -437,PathingBlocker2x2 -438,AutoTestAttackTargetGround -439,AutoTestAttackTargetAir -440,AutoTestAttacker -441,HelperEmitterSelectionArrow -442,MultiKillObject -443,ShapeGolfball -444,ShapeCone -445,ShapeCube -446,ShapeCylinder -447,ShapeDodecahedron -448,ShapeIcosahedron -449,ShapeOctahedron -450,ShapePyramid -451,ShapeRoundedCube -452,ShapeSphere -453,ShapeTetrahedron -454,ShapeThickTorus -455,ShapeThinTorus -456,ShapeTorus -457,Shape4PointStar -458,Shape5PointStar -459,Shape6PointStar -460,Shape8PointStar -461,ShapeArrowPointer -462,ShapeBowl -463,ShapeBox -464,ShapeCapsule -465,ShapeCrescentMoon -466,ShapeDecahedron -467,ShapeDiamond -468,ShapeFootball -469,ShapeGemstone -470,ShapeHeart -471,ShapeJack -472,ShapePlusSign -473,ShapeShamrock -474,ShapeSpade -475,ShapeTube -476,ShapeEgg -477,ShapeYenSign -478,ShapeX -479,ShapeWatermelon -480,ShapeWonSign -481,ShapeTennisball -482,ShapeStrawberry -483,ShapeSmileyFace -484,ShapeSoccerball -485,ShapeRainbow -486,ShapeSadFace -487,ShapePoundSign -488,ShapePear -489,ShapePineapple -490,ShapeOrange -491,ShapePeanut -492,ShapeO -493,ShapeLemon -494,ShapeMoneyBag -495,ShapeHorseshoe -496,ShapeHockeyStick -497,ShapeHockeyPuck -498,ShapeHand -499,ShapeGolfClub -500,ShapeGrape -501,ShapeEuroSign -502,ShapeDollarSign -503,ShapeBasketball -504,ShapeCarrot -505,ShapeCherry -506,ShapeBaseball -507,ShapeBaseballBat -508,ShapeBanana -509,ShapeApple -510,ShapeCashLarge -511,ShapeCashMedium -512,ShapeCashSmall -513,ShapeFootballColored -514,ShapeLemonSmall -515,ShapeOrangeSmall -516,ShapeTreasureChestOpen -517,ShapeTreasureChestClosed -518,ShapeWatermelonSmall -519,UnbuildableRocksDestructible -520,UnbuildableBricksDestructible -521,UnbuildablePlatesDestructible -522,Debris2x2NonConjoined -523,EnemyPathingBlocker1x1 -524,EnemyPathingBlocker2x2 -525,EnemyPathingBlocker4x4 -526,EnemyPathingBlocker8x8 -527,EnemyPathingBlocker16x16 -528,ScopeTest -529,SentryACGluescreenDummy -530,MineralField750 -546,HellionTank -547,CollapsibleTerranTowerDebris -548,DebrisRampLeft -549,DebrisRampRight -550,MothershipCore -554,LocustMP -555,CollapsibleRockTowerDebris -556,NydusCanalAttacker -557,NydusCanalCreeper -558,SwarmHostBurrowedMP -559,SwarmHostMP -560,Oracle -561,Tempest -562,WarHound -563,WidowMine -564,Viper -565,WidowMineBurrowed -566,LurkerMPEgg -567,LurkerMP -568,LurkerMPBurrowed -569,LurkerDenMP -570,ExtendingBridgeNEWide8Out -571,ExtendingBridgeNEWide8 -572,ExtendingBridgeNWWide8Out -573,ExtendingBridgeNWWide8 -574,ExtendingBridgeNEWide10Out -575,ExtendingBridgeNEWide10 -576,ExtendingBridgeNWWide10Out -577,ExtendingBridgeNWWide10 -578,ExtendingBridgeNEWide12Out -579,ExtendingBridgeNEWide12 -580,ExtendingBridgeNWWide12Out -581,ExtendingBridgeNWWide12 -583,CollapsibleRockTowerDebrisRampRight -584,CollapsibleRockTowerDebrisRampLeft -585,XelNaga_Caverns_DoorE -586,XelNaga_Caverns_DoorEOpened -587,XelNaga_Caverns_DoorN -588,XelNaga_Caverns_DoorNE -589,XelNaga_Caverns_DoorNEOpened -590,XelNaga_Caverns_DoorNOpened -591,XelNaga_Caverns_DoorNW -592,XelNaga_Caverns_DoorNWOpened -593,XelNaga_Caverns_DoorS -594,XelNaga_Caverns_DoorSE -595,XelNaga_Caverns_DoorSEOpened -596,XelNaga_Caverns_DoorSOpened -597,XelNaga_Caverns_DoorSW -598,XelNaga_Caverns_DoorSWOpened -599,XelNaga_Caverns_DoorW -600,XelNaga_Caverns_DoorWOpened -601,XelNaga_Caverns_Floating_BridgeNE8Out -602,XelNaga_Caverns_Floating_BridgeNE8 -603,XelNaga_Caverns_Floating_BridgeNW8Out -604,XelNaga_Caverns_Floating_BridgeNW8 -605,XelNaga_Caverns_Floating_BridgeNE10Out -606,XelNaga_Caverns_Floating_BridgeNE10 -607,XelNaga_Caverns_Floating_BridgeNW10Out -608,XelNaga_Caverns_Floating_BridgeNW10 -609,XelNaga_Caverns_Floating_BridgeNE12Out -610,XelNaga_Caverns_Floating_BridgeNE12 -611,XelNaga_Caverns_Floating_BridgeNW12Out -612,XelNaga_Caverns_Floating_BridgeNW12 -613,XelNaga_Caverns_Floating_BridgeH8Out -614,XelNaga_Caverns_Floating_BridgeH8 -615,XelNaga_Caverns_Floating_BridgeV8Out -616,XelNaga_Caverns_Floating_BridgeV8 -617,XelNaga_Caverns_Floating_BridgeH10Out -618,XelNaga_Caverns_Floating_BridgeH10 -619,XelNaga_Caverns_Floating_BridgeV10Out -620,XelNaga_Caverns_Floating_BridgeV10 -621,XelNaga_Caverns_Floating_BridgeH12Out -622,XelNaga_Caverns_Floating_BridgeH12 -623,XelNaga_Caverns_Floating_BridgeV12Out -624,XelNaga_Caverns_Floating_BridgeV12 -627,CollapsibleTerranTowerPushUnitRampLeft -628,CollapsibleTerranTowerPushUnitRampRight -631,CollapsibleRockTowerPushUnit -632,CollapsibleTerranTowerPushUnit -633,CollapsibleRockTowerPushUnitRampRight -634,CollapsibleRockTowerPushUnitRampLeft -635,DigesterCreepSprayTargetUnit -636,DigesterCreepSprayUnit -637,NydusCanalAttackerWeapon -638,ViperConsumeStructureWeapon -641,ResourceBlocker -642,TempestWeapon -643,YoinkMissile -647,YoinkVikingAirMissile -649,YoinkVikingGroundMissile -651,YoinkSiegeTankMissile -653,WarHoundWeapon -655,EyeStalkWeapon -658,WidowMineWeapon -659,WidowMineAirWeapon -660,MothershipCoreWeaponWeapon -661,TornadoMissileWeapon -662,TornadoMissileDummyWeapon -663,TalonsMissileWeapon -664,CreepTumorMissile -665,LocustMPEggAMissileWeapon -666,LocustMPEggBMissileWeapon -667,LocustMPWeapon -669,RepulsorCannonWeapon -673,CollapsibleRockTowerDiagonal -674,CollapsibleTerranTowerDiagonal -675,CollapsibleTerranTowerRampLeft -676,CollapsibleTerranTowerRampRight -677,Ice2x2NonConjoined -678,IceProtossCrates -679,ProtossCrates -680,TowerMine -681,PickupPalletGas -682,PickupPalletMinerals -683,PickupScrapSalvage1x1 -684,PickupScrapSalvage2x2 -685,PickupScrapSalvage3x3 -686,RoughTerrain -687,UnbuildableBricksSmallUnit -688,UnbuildablePlatesSmallUnit -689,UnbuildablePlatesUnit -690,UnbuildableRocksSmallUnit -691,XelNagaHealingShrine -692,InvisibleTargetDummy -693,ProtossVespeneGeyser -694,CollapsibleRockTower -695,CollapsibleTerranTower -696,ThornLizard -697,CleaningBot -698,DestructibleRock6x6Weak -699,ProtossSnakeSegmentDemo -700,PhysicsCapsule -701,PhysicsCube -702,PhysicsCylinder -703,PhysicsKnot -704,PhysicsL -705,PhysicsPrimitives -706,PhysicsSphere -707,PhysicsStar -708,CreepBlocker4x4 -709,DestructibleCityDebris2x4Vertical -710,DestructibleCityDebris2x4Horizontal -711,DestructibleCityDebris2x6Vertical -712,DestructibleCityDebris2x6Horizontal -713,DestructibleCityDebris4x4 -714,DestructibleCityDebris6x6 -715,DestructibleCityDebrisHugeDiagonalBLUR -716,DestructibleCityDebrisHugeDiagonalULBR -717,TestZerg -718,PathingBlockerRadius1 -719,DestructibleRockEx12x4Vertical -720,DestructibleRockEx12x4Horizontal -721,DestructibleRockEx12x6Vertical -722,DestructibleRockEx12x6Horizontal -723,DestructibleRockEx14x4 -724,DestructibleRockEx16x6 -725,DestructibleRockEx1DiagonalHugeULBR -726,DestructibleRockEx1DiagonalHugeBLUR -727,DestructibleRockEx1VerticalHuge -728,DestructibleRockEx1HorizontalHuge -729,DestructibleIce2x4Vertical -730,DestructibleIce2x4Horizontal -731,DestructibleIce2x6Vertical -732,DestructibleIce2x6Horizontal -733,DestructibleIce4x4 -734,DestructibleIce6x6 -735,DestructibleIceDiagonalHugeULBR -736,DestructibleIceDiagonalHugeBLUR -737,DestructibleIceVerticalHuge -738,DestructibleIceHorizontalHuge -739,DesertPlanetSearchlight -740,DesertPlanetStreetlight -741,UnbuildableBricksUnit -742,UnbuildableRocksUnit -743,ZerusDestructibleArch -744,Artosilope -745,Anteplott -746,LabBot -747,Crabeetle -748,CollapsibleRockTowerRampRight -749,CollapsibleRockTowerRampLeft -750,LabMineralField -751,LabMineralField750 -767,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -768,SnowRefinery_Terran_ExtendingBridgeNEShort8 -769,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -770,SnowRefinery_Terran_ExtendingBridgeNWShort8 -775,Tarsonis_DoorN -776,Tarsonis_DoorNLowered -777,Tarsonis_DoorNE -778,Tarsonis_DoorNELowered -779,Tarsonis_DoorE -780,Tarsonis_DoorELowered -781,Tarsonis_DoorNW -782,Tarsonis_DoorNWLowered -783,CompoundMansion_DoorN -784,CompoundMansion_DoorNLowered -785,CompoundMansion_DoorNE -786,CompoundMansion_DoorNELowered -787,CompoundMansion_DoorE -788,CompoundMansion_DoorELowered -789,CompoundMansion_DoorNW -790,CompoundMansion_DoorNWLowered -791,RavagerCocoon -792,Ravager -793,Liberator -794,RavagerBurrowed -796,ThorAP -797,Cyclone -798,LocustMPFlying -799,Disruptor -800,AiurLightBridgeNE8Out -801,AiurLightBridgeNE8 -802,AiurLightBridgeNE10Out -803,AiurLightBridgeNE10 -804,AiurLightBridgeNE12Out -805,AiurLightBridgeNE12 -806,AiurLightBridgeNW8Out -807,AiurLightBridgeNW8 -808,AiurLightBridgeNW10Out -809,AiurLightBridgeNW10 -810,AiurLightBridgeNW12Out -811,AiurLightBridgeNW12 -812,AiurTempleBridgeNE8Out -814,AiurTempleBridgeNE10Out -816,AiurTempleBridgeNE12Out -818,AiurTempleBridgeNW8Out -820,AiurTempleBridgeNW10Out -822,AiurTempleBridgeNW12Out -824,ShakurasLightBridgeNE8Out -825,ShakurasLightBridgeNE8 -826,ShakurasLightBridgeNE10Out -827,ShakurasLightBridgeNE10 -828,ShakurasLightBridgeNE12Out -829,ShakurasLightBridgeNE12 -830,ShakurasLightBridgeNW8Out -831,ShakurasLightBridgeNW8 -832,ShakurasLightBridgeNW10Out -833,ShakurasLightBridgeNW10 -834,ShakurasLightBridgeNW12Out -835,ShakurasLightBridgeNW12 -836,VoidMPImmortalReviveCorpse -837,GuardianCocoonMP -838,GuardianMP -839,DevourerCocoonMP -840,DevourerMP -841,DefilerMPBurrowed -842,DefilerMP -843,OracleStasisTrap -844,DisruptorPhased -845,LiberatorAG -846,AiurLightBridgeAbandonedNE8Out -847,AiurLightBridgeAbandonedNE8 -848,AiurLightBridgeAbandonedNE10Out -849,AiurLightBridgeAbandonedNE10 -850,AiurLightBridgeAbandonedNE12Out -851,AiurLightBridgeAbandonedNE12 -852,AiurLightBridgeAbandonedNW8Out -853,AiurLightBridgeAbandonedNW8 -854,AiurLightBridgeAbandonedNW10Out -855,AiurLightBridgeAbandonedNW10 -856,AiurLightBridgeAbandonedNW12Out -857,AiurLightBridgeAbandonedNW12 -858,CollapsiblePurifierTowerDebris -859,PortCity_Bridge_UnitNE8Out -860,PortCity_Bridge_UnitNE8 -861,PortCity_Bridge_UnitSE8Out -862,PortCity_Bridge_UnitSE8 -863,PortCity_Bridge_UnitNW8Out -864,PortCity_Bridge_UnitNW8 -865,PortCity_Bridge_UnitSW8Out -866,PortCity_Bridge_UnitSW8 -867,PortCity_Bridge_UnitNE10Out -868,PortCity_Bridge_UnitNE10 -869,PortCity_Bridge_UnitSE10Out -870,PortCity_Bridge_UnitSE10 -871,PortCity_Bridge_UnitNW10Out -872,PortCity_Bridge_UnitNW10 -873,PortCity_Bridge_UnitSW10Out -874,PortCity_Bridge_UnitSW10 -875,PortCity_Bridge_UnitNE12Out -876,PortCity_Bridge_UnitNE12 -877,PortCity_Bridge_UnitSE12Out -878,PortCity_Bridge_UnitSE12 -879,PortCity_Bridge_UnitNW12Out -880,PortCity_Bridge_UnitNW12 -881,PortCity_Bridge_UnitSW12Out -882,PortCity_Bridge_UnitSW12 -883,PortCity_Bridge_UnitN8Out -884,PortCity_Bridge_UnitN8 -885,PortCity_Bridge_UnitS8Out -886,PortCity_Bridge_UnitS8 -887,PortCity_Bridge_UnitE8Out -888,PortCity_Bridge_UnitE8 -889,PortCity_Bridge_UnitW8Out -890,PortCity_Bridge_UnitW8 -891,PortCity_Bridge_UnitN10Out -892,PortCity_Bridge_UnitN10 -893,PortCity_Bridge_UnitS10Out -894,PortCity_Bridge_UnitS10 -895,PortCity_Bridge_UnitE10Out -896,PortCity_Bridge_UnitE10 -897,PortCity_Bridge_UnitW10Out -898,PortCity_Bridge_UnitW10 -899,PortCity_Bridge_UnitN12Out -900,PortCity_Bridge_UnitN12 -901,PortCity_Bridge_UnitS12Out -902,PortCity_Bridge_UnitS12 -903,PortCity_Bridge_UnitE12Out -904,PortCity_Bridge_UnitE12 -905,PortCity_Bridge_UnitW12Out -906,PortCity_Bridge_UnitW12 -907,PurifierRichMineralField -908,PurifierRichMineralField750 -923,CollapsiblePurifierTowerPushUnit -925,LocustMPPrecursor -926,ReleaseInterceptorsBeacon -927,AdeptPhaseShift -928,RavagerCorrosiveBileMissile -929,HydraliskImpaleMissile -930,CycloneMissileLargeAir -931,CycloneMissile -932,CycloneMissileLarge -933,ThorAALance -934,OracleWeapon -935,TempestWeaponGround -936,RavagerWeaponMissile -937,ScoutMPAirWeaponLeft -938,ScoutMPAirWeaponRight -939,ArbiterMPWeaponMissile -940,GuardianMPWeapon -941,DevourerMPWeaponMissile -942,DefilerMPDarkSwarmWeapon -943,QueenMPEnsnareMissile -944,QueenMPSpawnBroodlingsMissile -945,LightningBombWeapon -946,HERCPlacement -947,GrappleWeapon -950,CausticSprayMissile -951,ParasiticBombMissile -952,ParasiticBombDummy -953,AdeptWeapon -954,AdeptUpgradeWeapon -955,LiberatorMissile -956,LiberatorDamageMissile -957,LiberatorAGMissile -958,KD8Charge -959,KD8ChargeWeapon -961,SlaynElementalGrabWeapon -962,SlaynElementalGrabAirUnit -963,SlaynElementalGrabGroundUnit -964,SlaynElementalWeapon -969,DestructibleExpeditionGate6x6 -970,DestructibleZergInfestation3x3 -971,HERC -972,Moopy -973,Replicant -974,SeekerMissile -975,AiurTempleBridgeDestructibleNE8Out -976,AiurTempleBridgeDestructibleNE10Out -977,AiurTempleBridgeDestructibleNE12Out -978,AiurTempleBridgeDestructibleNW8Out -979,AiurTempleBridgeDestructibleNW10Out -980,AiurTempleBridgeDestructibleNW12Out -981,AiurTempleBridgeDestructibleSW8Out -982,AiurTempleBridgeDestructibleSW10Out -983,AiurTempleBridgeDestructibleSW12Out -984,AiurTempleBridgeDestructibleSE8Out -985,AiurTempleBridgeDestructibleSE10Out -986,AiurTempleBridgeDestructibleSE12Out -988,FlyoverUnit -989,CorsairMP -990,ScoutMP -992,ArbiterMP -993,ScourgeMP -994,DefilerMPPlagueWeapon -995,QueenMP -996,XelNagaDestructibleRampBlocker6S -997,XelNagaDestructibleRampBlocker6SE -998,XelNagaDestructibleRampBlocker6E -999,XelNagaDestructibleRampBlocker6NE -1000,XelNagaDestructibleRampBlocker6N -1001,XelNagaDestructibleRampBlocker6NW -1002,XelNagaDestructibleRampBlocker6W -1003,XelNagaDestructibleRampBlocker6SW -1004,XelNagaDestructibleRampBlocker8S -1005,XelNagaDestructibleRampBlocker8SE -1006,XelNagaDestructibleRampBlocker8E -1007,XelNagaDestructibleRampBlocker8NE -1008,XelNagaDestructibleRampBlocker8N -1009,XelNagaDestructibleRampBlocker8NW -1010,XelNagaDestructibleRampBlocker8W -1011,XelNagaDestructibleRampBlocker8SW -1012,ReptileCrate -1013,SlaynSwarmHostSpawnFlyer -1014,SlaynElemental -1015,PurifierVespeneGeyser -1016,ShakurasVespeneGeyser -1017,CollapsiblePurifierTowerDiagonal -1018,CreepOnlyBlocker4x4 -1019,PurifierMineralField -1020,PurifierMineralField750 -1021,BattleStationMineralField -1022,BattleStationMineralField750 -1023,Beacon_Nova -1024,Beacon_NovaSmall -1025,Ursula -1026,Elsecaro_Colonist_Hut -1027,TransportOverlordCocoon -1028,OverlordTransport -1029,PylonOvercharged -1031,BypassArmorDrone -1032,AdeptPiercingWeapon -1033,CorrosiveParasiteWeapon diff --git a/sc2reader/data/LotV/53644_abilities.csv b/sc2reader/data/LotV/53644_abilities.csv deleted file mode 100644 index 112b8bd..0000000 --- a/sc2reader/data/LotV/53644_abilities.csv +++ /dev/null @@ -1,399 +0,0 @@ -35,Taunt -36,stop -38,move -45,attack -60,SprayTerran -61,SprayZerg -62,SprayProtoss -63,SalvageShared -65,GhostHoldFire -66,GhostWeaponsFree -68,Explode -69,FleetBeaconResearch -70,FungalGrowth -71,GuardianShield -72,MULERepair -73,ZerglingTrain -75,Feedback -77,PlacePointDefenseDrone -78,HallucinationArchon -79,HallucinationColossus -80,HallucinationHighTemplar -81,HallucinationImmortal -82,HallucinationPhoenix -83,HallucinationProbe -84,HallucinationStalker -85,HallucinationVoidRay -86,HallucinationWarpPrism -87,HallucinationZealot -88,MULEGather -89,SeekerMissile -90,CalldownMULE -91,GravitonBeam -95,SpawnChangeling -102,Rally -103,ProgressRally -104,RallyCommand -105,RallyNexus -106,RallyHatchery -107,RoachWarrenResearch -109,InfestedTerrans -110,NeuralParasite -111,SpawnLarva -112,StimpackMarauder -113,SupplyDrop -116,TimeWarp -117,UltraliskCavernResearch -119,SCVHarvest -120,ProbeHarvest -122,que1 -123,que5 -124,que5CancelToSelection -126,que5Addon -127,BuildInProgress -128,Repair -129,TerranBuild -131,Stimpack -132,GhostCloak -134,MedivacHeal -135,SiegeMode -136,Unsiege -137,BansheeCloak -138,MedivacTransport -139,ScannerSweep -140,Yamato -141,AssaultMode -142,FighterMode -143,BunkerTransport -144,CommandCenterTransport -145,CommandCenterLiftOff -146,CommandCenterLand -147,BarracksFlyingBuild -148,BarracksLiftOff -149,FactoryFlyingBuild -150,FactoryLiftOff -151,StarportFlyingBuild -152,StarportLiftOff -153,FactoryLand -154,StarportLand -155,PlanetaryFortressTrain -156,BarracksLand -157,SupplyDepotLower -158,SupplyDepotRaise -159,BarracksTrain -160,FactoryTrain -161,StarportTrain -162,EngineeringBayResearch -164,GhostAcademyTrain -165,BarracksTechLabResearch -166,FactoryTechLabResearch -167,StarportTechLabResearch -168,GhostAcademyResearch -169,ArmoryResearch -170,ProtossBuild -171,WarpPrismTransport -172,GatewayTrain -173,StargateTrain -174,RoboticsFacilityTrain -175,NexusTrain -176,PsiStorm -177,HangarQueue5 -179,CarrierTrain -180,ForgeResearch -181,RoboticsBayResearch -182,TemplarArchiveResearch -183,ZergBuild -184,DroneHarvest -185,EvolutionChamberResearch -186,UpgradeToLair -187,UpgradeToHive -188,UpgradeToGreaterSpire -189,LairResearch -190,SpawningPoolResearch -191,LurkerDenMPResearch -192,SpireResearch -193,LarvaTrain -194,MorphToBroodLord -195,BurrowBanelingDown -196,BurrowBanelingUp -197,BurrowDroneDown -198,BurrowDroneUp -199,BurrowHydraliskDown -200,BurrowHydraliskUp -201,BurrowRoachDown -202,BurrowRoachUp -203,BurrowZerglingDown -204,BurrowZerglingUp -205,BurrowInfestorTerranDown -206,BurrowInfestorTerranUp -207,RedstoneLavaCritterBurrow -208,RedstoneLavaCritterInjuredBurrow -209,RedstoneLavaCritterUnburrow -210,RedstoneLavaCritterInjuredUnburrow -211,OverlordTransport -214,WarpGateTrain -215,BurrowQueenDown -216,BurrowQueenUp -217,NydusCanalTransport -218,Blink -219,BurrowInfestorDown -220,BurrowInfestorUp -221,MorphToOverseer -222,UpgradeToPlanetaryFortress -223,InfestationPitResearch -224,BanelingNestResearch -225,BurrowUltraliskDown -226,BurrowUltraliskUp -227,UpgradeToOrbital -228,UpgradeToWarpGate -229,MorphBackToGateway -230,OrbitalLiftOff -231,OrbitalCommandLand -232,ForceField -233,PhasingMode -234,TransportMode -235,FusionCoreResearch -236,CyberneticsCoreResearch -237,TwilightCouncilResearch -238,TacNukeStrike -241,EMP -243,LairTrain -245,Transfusion -254,AttackRedirect -255,StimpackRedirect -256,StimpackMarauderRedirect -258,StopRedirect -259,GenerateCreep -260,QueenBuild -261,SpineCrawlerUproot -262,SporeCrawlerUproot -263,SpineCrawlerRoot -264,SporeCrawlerRoot -265,CreepTumorBurrowedBuild -266,BuildAutoTurret -267,ArchonWarp -268,NydusNetworkBuild -270,Charge -274,Contaminate -277,que5Passive -278,que5PassiveCancelToSelection -306,DigesterCreepSpray -310,MorphToMothership -313,NexusTrainMothershipCore -335,XelNagaHealingShrine -344,MothershipCoreMassRecall -346,MorphToHellion -356,MorphToHellionTank -364,MorphToSwarmHostBurrowedMP -365,MorphToSwarmHostMP -367,attackProtossBuilding -369,stopProtossBuilding -370,BlindingCloud -372,Yoink -375,ViperConsumeStructure -378,TestZerg -379,VolatileBurstBuilding -386,WidowMineBurrow -387,WidowMineUnburrow -388,WidowMineAttack -389,TornadoMissile -393,BurrowLurkerMPDown -394,BurrowLurkerMPUp -395,UpgradeToLurkerDenMP -396,HallucinationOracle -397,MedivacSpeedBoost -398,ExtendingBridgeNEWide8Out -399,ExtendingBridgeNEWide8 -400,ExtendingBridgeNWWide8Out -401,ExtendingBridgeNWWide8 -402,ExtendingBridgeNEWide10Out -403,ExtendingBridgeNEWide10 -404,ExtendingBridgeNWWide10Out -405,ExtendingBridgeNWWide10 -406,ExtendingBridgeNEWide12Out -407,ExtendingBridgeNEWide12 -408,ExtendingBridgeNWWide12Out -409,ExtendingBridgeNWWide12 -411,CritterFlee -412,OracleRevelation -420,MothershipCorePurifyNexus -421,XelNaga_Caverns_DoorE -422,XelNaga_Caverns_DoorEOpened -423,XelNaga_Caverns_DoorN -424,XelNaga_Caverns_DoorNE -425,XelNaga_Caverns_DoorNEOpened -426,XelNaga_Caverns_DoorNOpened -427,XelNaga_Caverns_DoorNW -428,XelNaga_Caverns_DoorNWOpened -429,XelNaga_Caverns_DoorS -430,XelNaga_Caverns_DoorSE -431,XelNaga_Caverns_DoorSEOpened -432,XelNaga_Caverns_DoorSOpened -433,XelNaga_Caverns_DoorSW -434,XelNaga_Caverns_DoorSWOpened -435,XelNaga_Caverns_DoorW -436,XelNaga_Caverns_DoorWOpened -437,XelNaga_Caverns_Floating_BridgeNE8Out -438,XelNaga_Caverns_Floating_BridgeNE8 -439,XelNaga_Caverns_Floating_BridgeNW8Out -440,XelNaga_Caverns_Floating_BridgeNW8 -441,XelNaga_Caverns_Floating_BridgeNE10Out -442,XelNaga_Caverns_Floating_BridgeNE10 -443,XelNaga_Caverns_Floating_BridgeNW10Out -444,XelNaga_Caverns_Floating_BridgeNW10 -445,XelNaga_Caverns_Floating_BridgeNE12Out -446,XelNaga_Caverns_Floating_BridgeNE12 -447,XelNaga_Caverns_Floating_BridgeNW12Out -448,XelNaga_Caverns_Floating_BridgeNW12 -449,XelNaga_Caverns_Floating_BridgeH8Out -450,XelNaga_Caverns_Floating_BridgeH8 -451,XelNaga_Caverns_Floating_BridgeV8Out -452,XelNaga_Caverns_Floating_BridgeV8 -453,XelNaga_Caverns_Floating_BridgeH10Out -454,XelNaga_Caverns_Floating_BridgeH10 -455,XelNaga_Caverns_Floating_BridgeV10Out -456,XelNaga_Caverns_Floating_BridgeV10 -457,XelNaga_Caverns_Floating_BridgeH12Out -458,XelNaga_Caverns_Floating_BridgeH12 -459,XelNaga_Caverns_Floating_BridgeV12Out -460,XelNaga_Caverns_Floating_BridgeV12 -461,TemporalField -485,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -486,SnowRefinery_Terran_ExtendingBridgeNEShort8 -487,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -488,SnowRefinery_Terran_ExtendingBridgeNWShort8 -510,CausticSpray -513,MorphToRavager -514,MorphToLurker -517,RavagerCorrosiveBile -518,BurrowRavagerDown -519,BurrowRavagerUp -521,PurificationNovaTargeted -523,LockOn -525,LockOnCancel -527,Hyperjump -529,ThorAPMode -530,ThorNormalMode -532,MothershipMassRecall -533,NydusWormTransport -534,OracleWeapon -540,LocustMPFlyingSwoop -541,HallucinationDisruptor -542,HallucinationAdept -543,VoidRaySwarmDamageBoost -544,SeekerDummyChannel -545,AiurLightBridgeNE8Out -546,AiurLightBridgeNE8 -547,AiurLightBridgeNE10Out -548,AiurLightBridgeNE10 -549,AiurLightBridgeNE12Out -550,AiurLightBridgeNE12 -551,AiurLightBridgeNW8Out -552,AiurLightBridgeNW8 -553,AiurLightBridgeNW10Out -554,AiurLightBridgeNW10 -555,AiurLightBridgeNW12Out -556,AiurLightBridgeNW12 -569,ShakurasLightBridgeNE8Out -570,ShakurasLightBridgeNE8 -571,ShakurasLightBridgeNE10Out -572,ShakurasLightBridgeNE10 -573,ShakurasLightBridgeNE12Out -574,ShakurasLightBridgeNE12 -575,ShakurasLightBridgeNW8Out -576,ShakurasLightBridgeNW8 -577,ShakurasLightBridgeNW10Out -578,ShakurasLightBridgeNW10 -579,ShakurasLightBridgeNW12Out -580,ShakurasLightBridgeNW12 -581,VoidMPImmortalReviveRebuild -583,ArbiterMPStasisField -584,ArbiterMPRecall -585,CorsairMPDisruptionWeb -586,MorphToGuardianMP -587,MorphToDevourerMP -588,DefilerMPConsume -589,DefilerMPDarkSwarm -590,DefilerMPPlague -591,DefilerMPBurrow -592,DefilerMPUnburrow -593,QueenMPEnsnare -594,QueenMPSpawnBroodlings -595,QueenMPInfestCommandCenter -599,OracleBuild -603,ParasiticBomb -604,AdeptPhaseShift -607,LurkerHoldFire -608,LurkerRemoveHoldFire -611,LiberatorAGTarget -612,LiberatorAATarget -614,AiurLightBridgeAbandonedNE8Out -615,AiurLightBridgeAbandonedNE8 -616,AiurLightBridgeAbandonedNE10Out -617,AiurLightBridgeAbandonedNE10 -618,AiurLightBridgeAbandonedNE12Out -619,AiurLightBridgeAbandonedNE12 -620,AiurLightBridgeAbandonedNW8Out -621,AiurLightBridgeAbandonedNW8 -622,AiurLightBridgeAbandonedNW10Out -623,AiurLightBridgeAbandonedNW10 -624,AiurLightBridgeAbandonedNW12Out -625,AiurLightBridgeAbandonedNW12 -626,KD8Charge -629,AdeptPhaseShiftCancel -630,AdeptShadePhaseShiftCancel -631,SlaynElementalGrab -633,PortCity_Bridge_UnitNE8Out -634,PortCity_Bridge_UnitNE8 -635,PortCity_Bridge_UnitSE8Out -636,PortCity_Bridge_UnitSE8 -637,PortCity_Bridge_UnitNW8Out -638,PortCity_Bridge_UnitNW8 -639,PortCity_Bridge_UnitSW8Out -640,PortCity_Bridge_UnitSW8 -641,PortCity_Bridge_UnitNE10Out -642,PortCity_Bridge_UnitNE10 -643,PortCity_Bridge_UnitSE10Out -644,PortCity_Bridge_UnitSE10 -645,PortCity_Bridge_UnitNW10Out -646,PortCity_Bridge_UnitNW10 -647,PortCity_Bridge_UnitSW10Out -648,PortCity_Bridge_UnitSW10 -649,PortCity_Bridge_UnitNE12Out -650,PortCity_Bridge_UnitNE12 -651,PortCity_Bridge_UnitSE12Out -652,PortCity_Bridge_UnitSE12 -653,PortCity_Bridge_UnitNW12Out -654,PortCity_Bridge_UnitNW12 -655,PortCity_Bridge_UnitSW12Out -656,PortCity_Bridge_UnitSW12 -657,PortCity_Bridge_UnitN8Out -658,PortCity_Bridge_UnitN8 -659,PortCity_Bridge_UnitS8Out -660,PortCity_Bridge_UnitS8 -661,PortCity_Bridge_UnitE8Out -662,PortCity_Bridge_UnitE8 -663,PortCity_Bridge_UnitW8Out -664,PortCity_Bridge_UnitW8 -665,PortCity_Bridge_UnitN10Out -666,PortCity_Bridge_UnitN10 -667,PortCity_Bridge_UnitS10Out -668,PortCity_Bridge_UnitS10 -669,PortCity_Bridge_UnitE10Out -670,PortCity_Bridge_UnitE10 -671,PortCity_Bridge_UnitW10Out -672,PortCity_Bridge_UnitW10 -673,PortCity_Bridge_UnitN12Out -674,PortCity_Bridge_UnitN12 -675,PortCity_Bridge_UnitS12Out -676,PortCity_Bridge_UnitS12 -677,PortCity_Bridge_UnitE12Out -678,PortCity_Bridge_UnitE12 -679,PortCity_Bridge_UnitW12Out -680,PortCity_Bridge_UnitW12 -683,DarkTemplarBlink -687,SpawnLocustsTargeted -688,VoidRaySwarmDamageBoostCancel -690,MorphToTransportOverlord -693,ChannelSnipe -696,DarkShrineResearch diff --git a/sc2reader/data/LotV/53644_units.csv b/sc2reader/data/LotV/53644_units.csv deleted file mode 100644 index b0c4522..0000000 --- a/sc2reader/data/LotV/53644_units.csv +++ /dev/null @@ -1,934 +0,0 @@ -1,System_Snapshot_Dummy -21,Ball -22,StereoscopicOptionsUnit -23,Colossus -24,TechLab -25,Reactor -27,InfestorTerran -28,BanelingCocoon -29,Baneling -30,Mothership -31,PointDefenseDrone -32,Changeling -33,ChangelingZealot -34,ChangelingMarineShield -35,ChangelingMarine -36,ChangelingZerglingWings -37,ChangelingZergling -39,CommandCenter -40,SupplyDepot -41,Refinery -42,Barracks -43,EngineeringBay -44,MissileTurret -45,Bunker -46,SensorTower -47,GhostAcademy -48,Factory -49,Starport -51,Armory -52,FusionCore -53,AutoTurret -54,SiegeTankSieged -55,SiegeTank -56,VikingAssault -57,VikingFighter -58,CommandCenterFlying -59,BarracksTechLab -60,BarracksReactor -61,FactoryTechLab -62,FactoryReactor -63,StarportTechLab -64,StarportReactor -65,FactoryFlying -66,StarportFlying -67,SCV -68,BarracksFlying -69,SupplyDepotLowered -70,Marine -71,Reaper -72,Ghost -73,Marauder -74,Thor -75,Hellion -76,Medivac -77,Banshee -78,Raven -79,Battlecruiser -80,Nuke -81,Nexus -82,Pylon -83,Assimilator -84,Gateway -85,Forge -86,FleetBeacon -87,TwilightCouncil -88,PhotonCannon -89,Stargate -90,TemplarArchive -91,DarkShrine -92,RoboticsBay -93,RoboticsFacility -94,CyberneticsCore -95,Zealot -96,Stalker -97,HighTemplar -98,DarkTemplar -99,Sentry -100,Phoenix -101,Carrier -102,VoidRay -103,WarpPrism -104,Observer -105,Immortal -106,Probe -107,Interceptor -108,Hatchery -109,CreepTumor -110,Extractor -111,SpawningPool -112,EvolutionChamber -113,HydraliskDen -114,Spire -115,UltraliskCavern -116,InfestationPit -117,NydusNetwork -118,BanelingNest -119,RoachWarren -120,SpineCrawler -121,SporeCrawler -122,Lair -123,Hive -124,GreaterSpire -125,Egg -126,Drone -127,Zergling -128,Overlord -129,Hydralisk -130,Mutalisk -131,Ultralisk -132,Roach -133,Infestor -134,Corruptor -135,BroodLordCocoon -136,BroodLord -137,BanelingBurrowed -138,DroneBurrowed -139,HydraliskBurrowed -140,RoachBurrowed -141,ZerglingBurrowed -142,InfestorTerranBurrowed -143,RedstoneLavaCritterBurrowed -144,RedstoneLavaCritterInjuredBurrowed -145,RedstoneLavaCritter -146,RedstoneLavaCritterInjured -147,QueenBurrowed -148,Queen -149,InfestorBurrowed -150,OverlordCocoon -151,Overseer -152,PlanetaryFortress -153,UltraliskBurrowed -154,OrbitalCommand -155,WarpGate -156,OrbitalCommandFlying -157,ForceField -158,WarpPrismPhasing -159,CreepTumorBurrowed -160,CreepTumorQueen -161,SpineCrawlerUprooted -162,SporeCrawlerUprooted -163,Archon -164,NydusCanal -165,BroodlingEscort -166,GhostAlternate -167,GhostNova -168,RichMineralField -169,RichMineralField750 -170,Ursadon -172,XelNagaTower -176,InfestedTerransEgg -177,Larva -178,ReaperPlaceholder -179,MarineACGluescreenDummy -180,FirebatACGluescreenDummy -181,MedicACGluescreenDummy -182,MarauderACGluescreenDummy -183,VultureACGluescreenDummy -184,SiegeTankACGluescreenDummy -185,VikingACGluescreenDummy -186,BansheeACGluescreenDummy -187,BattlecruiserACGluescreenDummy -188,OrbitalCommandACGluescreenDummy -189,BunkerACGluescreenDummy -190,BunkerUpgradedACGluescreenDummy -191,MissileTurretACGluescreenDummy -192,HellbatACGluescreenDummy -193,GoliathACGluescreenDummy -194,CycloneACGluescreenDummy -195,WraithACGluescreenDummy -196,ScienceVesselACGluescreenDummy -197,HerculesACGluescreenDummy -198,ThorACGluescreenDummy -199,PerditionTurretACGluescreenDummy -200,FlamingBettyACGluescreenDummy -201,DevastationTurretACGluescreenDummy -202,BlasterBillyACGluescreenDummy -203,SpinningDizzyACGluescreenDummy -204,ZerglingKerriganACGluescreenDummy -205,RaptorACGluescreenDummy -206,QueenCoopACGluescreenDummy -207,HydraliskACGluescreenDummy -208,HydraliskLurkerACGluescreenDummy -209,MutaliskBroodlordACGluescreenDummy -210,BroodLordACGluescreenDummy -211,UltraliskACGluescreenDummy -212,TorrasqueACGluescreenDummy -213,OverseerACGluescreenDummy -214,LurkerACGluescreenDummy -215,SpineCrawlerACGluescreenDummy -216,SporeCrawlerACGluescreenDummy -217,NydusNetworkACGluescreenDummy -218,OmegaNetworkACGluescreenDummy -219,ZerglingZagaraACGluescreenDummy -220,SwarmlingACGluescreenDummy -221,BanelingACGluescreenDummy -222,SplitterlingACGluescreenDummy -223,AberrationACGluescreenDummy -224,ScourgeACGluescreenDummy -225,CorruptorACGluescreenDummy -226,BileLauncherACGluescreenDummy -227,SwarmQueenACGluescreenDummy -228,RoachACGluescreenDummy -229,RoachVileACGluescreenDummy -230,RavagerACGluescreenDummy -231,SwarmHostACGluescreenDummy -232,MutaliskACGluescreenDummy -233,GuardianACGluescreenDummy -234,DevourerACGluescreenDummy -235,ViperACGluescreenDummy -236,BrutaliskACGluescreenDummy -237,LeviathanACGluescreenDummy -238,ZealotACGluescreenDummy -239,ZealotAiurACGluescreenDummy -240,DragoonACGluescreenDummy -241,HighTemplarACGluescreenDummy -242,ArchonACGluescreenDummy -243,ImmortalACGluescreenDummy -244,ObserverACGluescreenDummy -245,PhoenixAiurACGluescreenDummy -246,ReaverACGluescreenDummy -247,TempestACGluescreenDummy -248,PhotonCannonACGluescreenDummy -249,ZealotVorazunACGluescreenDummy -250,ZealotShakurasACGluescreenDummy -251,StalkerShakurasACGluescreenDummy -252,DarkTemplarShakurasACGluescreenDummy -253,CorsairACGluescreenDummy -254,VoidRayACGluescreenDummy -255,VoidRayShakurasACGluescreenDummy -256,OracleACGluescreenDummy -257,DarkArchonACGluescreenDummy -258,DarkPylonACGluescreenDummy -259,ZealotPurifierACGluescreenDummy -260,SentryPurifierACGluescreenDummy -261,ImmortalKaraxACGluescreenDummy -262,ColossusACGluescreenDummy -263,ColossusPurifierACGluescreenDummy -264,PhoenixPurifierACGluescreenDummy -265,CarrierACGluescreenDummy -266,CarrierAiurACGluescreenDummy -267,KhaydarinMonolithACGluescreenDummy -268,ShieldBatteryACGluescreenDummy -269,EliteMarineACGluescreenDummy -270,MarauderCommandoACGluescreenDummy -271,SpecOpsGhostACGluescreenDummy -272,HellbatRangerACGluescreenDummy -273,StrikeGoliathACGluescreenDummy -274,HeavySiegeTankACGluescreenDummy -275,RaidLiberatorACGluescreenDummy -276,RavenTypeIIACGluescreenDummy -277,CovertBansheeACGluescreenDummy -278,RailgunTurretACGluescreenDummy -279,BlackOpsMissileTurretACGluescreenDummy -280,SupplicantACGluescreenDummy -281,StalkerTaldarimACGluescreenDummy -282,SentryTaldarimACGluescreenDummy -283,HighTemplarTaldarimACGluescreenDummy -284,ImmortalTaldarimACGluescreenDummy -285,ColossusTaldarimACGluescreenDummy -286,WarpPrismTaldarimACGluescreenDummy -287,PhotonCannonTaldarimACGluescreenDummy -288,StukovInfestedCivilianACGluescreenDummy -289,StukovInfestedMarineACGluescreenDummy -290,StukovInfestedSiegeTankACGluescreenDummy -291,StukovInfestedDiamondbackACGluescreenDummy -292,StukovInfestedBansheeACGluescreenDummy -293,SILiberatorACGluescreenDummy -294,StukovInfestedBunkerACGluescreenDummy -295,StukovInfestedMissileTurretACGluescreenDummy -296,StukovBroodQueenACGluescreenDummy -297,ZealotFenixACGluescreenDummy -298,SentryFenixACGluescreenDummy -299,AdeptFenixACGluescreenDummy -300,ImmortalFenixACGluescreenDummy -301,ColossusFenixACGluescreenDummy -302,DisruptorACGluescreenDummy -303,ObserverFenixACGluescreenDummy -304,ScoutACGluescreenDummy -305,CarrierFenixACGluescreenDummy -306,PhotonCannonFenixACGluescreenDummy -308,NeedleSpinesWeapon -309,CorruptionWeapon -310,InfestedTerransWeapon -311,NeuralParasiteWeapon -312,PointDefenseDroneReleaseWeapon -313,HunterSeekerWeapon -314,MULE -316,ThorAAWeapon -317,PunisherGrenadesLMWeapon -318,VikingFighterWeapon -319,ATALaserBatteryLMWeapon -320,ATSLaserBatteryLMWeapon -321,LongboltMissileWeapon -322,D8ChargeWeapon -323,YamatoWeapon -324,IonCannonsWeapon -325,AcidSalivaWeapon -326,SpineCrawlerWeapon -327,SporeCrawlerWeapon -328,GlaiveWurmWeapon -329,GlaiveWurmM2Weapon -330,GlaiveWurmM3Weapon -331,StalkerWeapon -332,EMP2Weapon -333,BacklashRocketsLMWeapon -334,PhotonCannonWeapon -335,ParasiteSporeWeapon -337,Broodling -338,BroodLordBWeapon -341,AutoTurretReleaseWeapon -342,LarvaReleaseMissile -343,AcidSpinesWeapon -344,FrenzyWeapon -345,ContaminateWeapon -357,BeaconRally -358,BeaconArmy -359,BeaconAttack -360,BeaconDefend -361,BeaconHarass -362,BeaconIdle -363,BeaconAuto -364,BeaconDetect -365,BeaconScout -366,BeaconClaim -367,BeaconExpand -368,BeaconCustom1 -369,BeaconCustom2 -370,BeaconCustom3 -371,BeaconCustom4 -372,Adept -373,Ravager -379,Rocks2x2NonConjoined -380,FungalGrowthMissile -381,NeuralParasiteTentacleMissile -382,Beacon_Protoss -383,Beacon_ProtossSmall -384,Beacon_Terran -385,Beacon_TerranSmall -386,Beacon_Zerg -387,Beacon_ZergSmall -388,Lyote -389,CarrionBird -390,KarakMale -391,KarakFemale -392,UrsadakFemaleExotic -393,UrsadakMale -394,UrsadakFemale -395,UrsadakCalf -396,UrsadakMaleExotic -397,UtilityBot -398,CommentatorBot1 -399,CommentatorBot2 -400,CommentatorBot3 -401,CommentatorBot4 -402,Scantipede -403,Dog -404,Sheep -405,Cow -406,InfestedTerransEggPlacement -407,InfestorTerransWeapon -408,MineralField -409,VespeneGeyser -410,SpacePlatformGeyser -411,RichVespeneGeyser -412,DestructibleSearchlight -413,DestructibleBullhornLights -414,DestructibleStreetlight -415,DestructibleSpacePlatformSign -416,DestructibleStoreFrontCityProps -417,DestructibleBillboardTall -418,DestructibleBillboardScrollingText -419,DestructibleSpacePlatformBarrier -420,DestructibleSignsDirectional -421,DestructibleSignsConstruction -422,DestructibleSignsFunny -423,DestructibleSignsIcons -424,DestructibleSignsWarning -425,DestructibleGarage -426,DestructibleGarageLarge -427,DestructibleTrafficSignal -428,TrafficSignal -429,BraxisAlphaDestructible1x1 -430,BraxisAlphaDestructible2x2 -431,DestructibleDebris4x4 -432,DestructibleDebris6x6 -433,DestructibleRock2x4Vertical -434,DestructibleRock2x4Horizontal -435,DestructibleRock2x6Vertical -436,DestructibleRock2x6Horizontal -437,DestructibleRock4x4 -438,DestructibleRock6x6 -439,DestructibleRampDiagonalHugeULBR -440,DestructibleRampDiagonalHugeBLUR -441,DestructibleRampVerticalHuge -442,DestructibleRampHorizontalHuge -443,DestructibleDebrisRampDiagonalHugeULBR -444,DestructibleDebrisRampDiagonalHugeBLUR -445,OverlordGenerateCreepKeybind -446,MengskStatueAlone -447,MengskStatue -448,WolfStatue -449,GlobeStatue -450,Weapon -451,GlaiveWurmBounceWeapon -452,BroodLordWeapon -453,BroodLordAWeapon -454,CreepBlocker1x1 -455,PermanentCreepBlocker1x1 -456,PathingBlocker1x1 -457,PathingBlocker2x2 -458,AutoTestAttackTargetGround -459,AutoTestAttackTargetAir -460,AutoTestAttacker -461,HelperEmitterSelectionArrow -462,MultiKillObject -463,ShapeGolfball -464,ShapeCone -465,ShapeCube -466,ShapeCylinder -467,ShapeDodecahedron -468,ShapeIcosahedron -469,ShapeOctahedron -470,ShapePyramid -471,ShapeRoundedCube -472,ShapeSphere -473,ShapeTetrahedron -474,ShapeThickTorus -475,ShapeThinTorus -476,ShapeTorus -477,Shape4PointStar -478,Shape5PointStar -479,Shape6PointStar -480,Shape8PointStar -481,ShapeArrowPointer -482,ShapeBowl -483,ShapeBox -484,ShapeCapsule -485,ShapeCrescentMoon -486,ShapeDecahedron -487,ShapeDiamond -488,ShapeFootball -489,ShapeGemstone -490,ShapeHeart -491,ShapeJack -492,ShapePlusSign -493,ShapeShamrock -494,ShapeSpade -495,ShapeTube -496,ShapeEgg -497,ShapeYenSign -498,ShapeX -499,ShapeWatermelon -500,ShapeWonSign -501,ShapeTennisball -502,ShapeStrawberry -503,ShapeSmileyFace -504,ShapeSoccerball -505,ShapeRainbow -506,ShapeSadFace -507,ShapePoundSign -508,ShapePear -509,ShapePineapple -510,ShapeOrange -511,ShapePeanut -512,ShapeO -513,ShapeLemon -514,ShapeMoneyBag -515,ShapeHorseshoe -516,ShapeHockeyStick -517,ShapeHockeyPuck -518,ShapeHand -519,ShapeGolfClub -520,ShapeGrape -521,ShapeEuroSign -522,ShapeDollarSign -523,ShapeBasketball -524,ShapeCarrot -525,ShapeCherry -526,ShapeBaseball -527,ShapeBaseballBat -528,ShapeBanana -529,ShapeApple -530,ShapeCashLarge -531,ShapeCashMedium -532,ShapeCashSmall -533,ShapeFootballColored -534,ShapeLemonSmall -535,ShapeOrangeSmall -536,ShapeTreasureChestOpen -537,ShapeTreasureChestClosed -538,ShapeWatermelonSmall -539,UnbuildableRocksDestructible -540,UnbuildableBricksDestructible -541,UnbuildablePlatesDestructible -542,Debris2x2NonConjoined -543,EnemyPathingBlocker1x1 -544,EnemyPathingBlocker2x2 -545,EnemyPathingBlocker4x4 -546,EnemyPathingBlocker8x8 -547,EnemyPathingBlocker16x16 -548,ScopeTest -549,SentryACGluescreenDummy -550,StukovInfestedTrooperACGluescreenDummy -551,MineralField750 -567,HellionTank -568,CollapsibleTerranTowerDebris -569,DebrisRampLeft -570,DebrisRampRight -571,MothershipCore -575,LocustMP -576,CollapsibleRockTowerDebris -577,NydusCanalAttacker -578,NydusCanalCreeper -579,SwarmHostBurrowedMP -580,SwarmHostMP -581,Oracle -582,Tempest -583,WarHound -584,WidowMine -585,Viper -586,WidowMineBurrowed -587,LurkerMPEgg -588,LurkerMP -589,LurkerMPBurrowed -590,LurkerDenMP -591,ExtendingBridgeNEWide8Out -592,ExtendingBridgeNEWide8 -593,ExtendingBridgeNWWide8Out -594,ExtendingBridgeNWWide8 -595,ExtendingBridgeNEWide10Out -596,ExtendingBridgeNEWide10 -597,ExtendingBridgeNWWide10Out -598,ExtendingBridgeNWWide10 -599,ExtendingBridgeNEWide12Out -600,ExtendingBridgeNEWide12 -601,ExtendingBridgeNWWide12Out -602,ExtendingBridgeNWWide12 -604,CollapsibleRockTowerDebrisRampRight -605,CollapsibleRockTowerDebrisRampLeft -606,XelNaga_Caverns_DoorE -607,XelNaga_Caverns_DoorEOpened -608,XelNaga_Caverns_DoorN -609,XelNaga_Caverns_DoorNE -610,XelNaga_Caverns_DoorNEOpened -611,XelNaga_Caverns_DoorNOpened -612,XelNaga_Caverns_DoorNW -613,XelNaga_Caverns_DoorNWOpened -614,XelNaga_Caverns_DoorS -615,XelNaga_Caverns_DoorSE -616,XelNaga_Caverns_DoorSEOpened -617,XelNaga_Caverns_DoorSOpened -618,XelNaga_Caverns_DoorSW -619,XelNaga_Caverns_DoorSWOpened -620,XelNaga_Caverns_DoorW -621,XelNaga_Caverns_DoorWOpened -622,XelNaga_Caverns_Floating_BridgeNE8Out -623,XelNaga_Caverns_Floating_BridgeNE8 -624,XelNaga_Caverns_Floating_BridgeNW8Out -625,XelNaga_Caverns_Floating_BridgeNW8 -626,XelNaga_Caverns_Floating_BridgeNE10Out -627,XelNaga_Caverns_Floating_BridgeNE10 -628,XelNaga_Caverns_Floating_BridgeNW10Out -629,XelNaga_Caverns_Floating_BridgeNW10 -630,XelNaga_Caverns_Floating_BridgeNE12Out -631,XelNaga_Caverns_Floating_BridgeNE12 -632,XelNaga_Caverns_Floating_BridgeNW12Out -633,XelNaga_Caverns_Floating_BridgeNW12 -634,XelNaga_Caverns_Floating_BridgeH8Out -635,XelNaga_Caverns_Floating_BridgeH8 -636,XelNaga_Caverns_Floating_BridgeV8Out -637,XelNaga_Caverns_Floating_BridgeV8 -638,XelNaga_Caverns_Floating_BridgeH10Out -639,XelNaga_Caverns_Floating_BridgeH10 -640,XelNaga_Caverns_Floating_BridgeV10Out -641,XelNaga_Caverns_Floating_BridgeV10 -642,XelNaga_Caverns_Floating_BridgeH12Out -643,XelNaga_Caverns_Floating_BridgeH12 -644,XelNaga_Caverns_Floating_BridgeV12Out -645,XelNaga_Caverns_Floating_BridgeV12 -648,CollapsibleTerranTowerPushUnitRampLeft -649,CollapsibleTerranTowerPushUnitRampRight -652,CollapsibleRockTowerPushUnit -653,CollapsibleTerranTowerPushUnit -654,CollapsibleRockTowerPushUnitRampRight -655,CollapsibleRockTowerPushUnitRampLeft -656,DigesterCreepSprayTargetUnit -657,DigesterCreepSprayUnit -658,NydusCanalAttackerWeapon -659,ViperConsumeStructureWeapon -662,ResourceBlocker -663,TempestWeapon -664,YoinkMissile -668,YoinkVikingAirMissile -670,YoinkVikingGroundMissile -672,YoinkSiegeTankMissile -674,WarHoundWeapon -676,EyeStalkWeapon -679,WidowMineWeapon -680,WidowMineAirWeapon -681,MothershipCoreWeaponWeapon -682,TornadoMissileWeapon -683,TornadoMissileDummyWeapon -684,TalonsMissileWeapon -685,CreepTumorMissile -686,LocustMPEggAMissileWeapon -687,LocustMPEggBMissileWeapon -688,LocustMPWeapon -690,RepulsorCannonWeapon -694,CollapsibleRockTowerDiagonal -695,CollapsibleTerranTowerDiagonal -696,CollapsibleTerranTowerRampLeft -697,CollapsibleTerranTowerRampRight -698,Ice2x2NonConjoined -699,IceProtossCrates -700,ProtossCrates -701,TowerMine -702,PickupPalletGas -703,PickupPalletMinerals -704,PickupScrapSalvage1x1 -705,PickupScrapSalvage2x2 -706,PickupScrapSalvage3x3 -707,RoughTerrain -708,UnbuildableBricksSmallUnit -709,UnbuildablePlatesSmallUnit -710,UnbuildablePlatesUnit -711,UnbuildableRocksSmallUnit -712,XelNagaHealingShrine -713,InvisibleTargetDummy -714,ProtossVespeneGeyser -715,CollapsibleRockTower -716,CollapsibleTerranTower -717,ThornLizard -718,CleaningBot -719,DestructibleRock6x6Weak -720,ProtossSnakeSegmentDemo -721,PhysicsCapsule -722,PhysicsCube -723,PhysicsCylinder -724,PhysicsKnot -725,PhysicsL -726,PhysicsPrimitives -727,PhysicsSphere -728,PhysicsStar -729,CreepBlocker4x4 -730,DestructibleCityDebris2x4Vertical -731,DestructibleCityDebris2x4Horizontal -732,DestructibleCityDebris2x6Vertical -733,DestructibleCityDebris2x6Horizontal -734,DestructibleCityDebris4x4 -735,DestructibleCityDebris6x6 -736,DestructibleCityDebrisHugeDiagonalBLUR -737,DestructibleCityDebrisHugeDiagonalULBR -738,TestZerg -739,PathingBlockerRadius1 -740,DestructibleRockEx12x4Vertical -741,DestructibleRockEx12x4Horizontal -742,DestructibleRockEx12x6Vertical -743,DestructibleRockEx12x6Horizontal -744,DestructibleRockEx14x4 -745,DestructibleRockEx16x6 -746,DestructibleRockEx1DiagonalHugeULBR -747,DestructibleRockEx1DiagonalHugeBLUR -748,DestructibleRockEx1VerticalHuge -749,DestructibleRockEx1HorizontalHuge -750,DestructibleIce2x4Vertical -751,DestructibleIce2x4Horizontal -752,DestructibleIce2x6Vertical -753,DestructibleIce2x6Horizontal -754,DestructibleIce4x4 -755,DestructibleIce6x6 -756,DestructibleIceDiagonalHugeULBR -757,DestructibleIceDiagonalHugeBLUR -758,DestructibleIceVerticalHuge -759,DestructibleIceHorizontalHuge -760,DesertPlanetSearchlight -761,DesertPlanetStreetlight -762,UnbuildableBricksUnit -763,UnbuildableRocksUnit -764,ZerusDestructibleArch -765,Artosilope -766,Anteplott -767,LabBot -768,Crabeetle -769,CollapsibleRockTowerRampRight -770,CollapsibleRockTowerRampLeft -771,LabMineralField -772,LabMineralField750 -788,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -789,SnowRefinery_Terran_ExtendingBridgeNEShort8 -790,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -791,SnowRefinery_Terran_ExtendingBridgeNWShort8 -796,Tarsonis_DoorN -797,Tarsonis_DoorNLowered -798,Tarsonis_DoorNE -799,Tarsonis_DoorNELowered -800,Tarsonis_DoorE -801,Tarsonis_DoorELowered -802,Tarsonis_DoorNW -803,Tarsonis_DoorNWLowered -804,CompoundMansion_DoorN -805,CompoundMansion_DoorNLowered -806,CompoundMansion_DoorNE -807,CompoundMansion_DoorNELowered -808,CompoundMansion_DoorE -809,CompoundMansion_DoorELowered -810,CompoundMansion_DoorNW -811,CompoundMansion_DoorNWLowered -812,RavagerCocoon -813,Liberator -814,RavagerBurrowed -816,ThorAP -817,Cyclone -818,LocustMPFlying -819,Disruptor -820,AiurLightBridgeNE8Out -821,AiurLightBridgeNE8 -822,AiurLightBridgeNE10Out -823,AiurLightBridgeNE10 -824,AiurLightBridgeNE12Out -825,AiurLightBridgeNE12 -826,AiurLightBridgeNW8Out -827,AiurLightBridgeNW8 -828,AiurLightBridgeNW10Out -829,AiurLightBridgeNW10 -830,AiurLightBridgeNW12Out -831,AiurLightBridgeNW12 -832,AiurTempleBridgeNE8Out -834,AiurTempleBridgeNE10Out -836,AiurTempleBridgeNE12Out -838,AiurTempleBridgeNW8Out -840,AiurTempleBridgeNW10Out -842,AiurTempleBridgeNW12Out -844,ShakurasLightBridgeNE8Out -845,ShakurasLightBridgeNE8 -846,ShakurasLightBridgeNE10Out -847,ShakurasLightBridgeNE10 -848,ShakurasLightBridgeNE12Out -849,ShakurasLightBridgeNE12 -850,ShakurasLightBridgeNW8Out -851,ShakurasLightBridgeNW8 -852,ShakurasLightBridgeNW10Out -853,ShakurasLightBridgeNW10 -854,ShakurasLightBridgeNW12Out -855,ShakurasLightBridgeNW12 -856,VoidMPImmortalReviveCorpse -857,GuardianCocoonMP -858,GuardianMP -859,DevourerCocoonMP -860,DevourerMP -861,DefilerMPBurrowed -862,DefilerMP -863,OracleStasisTrap -864,DisruptorPhased -865,LiberatorAG -866,AiurLightBridgeAbandonedNE8Out -867,AiurLightBridgeAbandonedNE8 -868,AiurLightBridgeAbandonedNE10Out -869,AiurLightBridgeAbandonedNE10 -870,AiurLightBridgeAbandonedNE12Out -871,AiurLightBridgeAbandonedNE12 -872,AiurLightBridgeAbandonedNW8Out -873,AiurLightBridgeAbandonedNW8 -874,AiurLightBridgeAbandonedNW10Out -875,AiurLightBridgeAbandonedNW10 -876,AiurLightBridgeAbandonedNW12Out -877,AiurLightBridgeAbandonedNW12 -878,CollapsiblePurifierTowerDebris -879,PortCity_Bridge_UnitNE8Out -880,PortCity_Bridge_UnitNE8 -881,PortCity_Bridge_UnitSE8Out -882,PortCity_Bridge_UnitSE8 -883,PortCity_Bridge_UnitNW8Out -884,PortCity_Bridge_UnitNW8 -885,PortCity_Bridge_UnitSW8Out -886,PortCity_Bridge_UnitSW8 -887,PortCity_Bridge_UnitNE10Out -888,PortCity_Bridge_UnitNE10 -889,PortCity_Bridge_UnitSE10Out -890,PortCity_Bridge_UnitSE10 -891,PortCity_Bridge_UnitNW10Out -892,PortCity_Bridge_UnitNW10 -893,PortCity_Bridge_UnitSW10Out -894,PortCity_Bridge_UnitSW10 -895,PortCity_Bridge_UnitNE12Out -896,PortCity_Bridge_UnitNE12 -897,PortCity_Bridge_UnitSE12Out -898,PortCity_Bridge_UnitSE12 -899,PortCity_Bridge_UnitNW12Out -900,PortCity_Bridge_UnitNW12 -901,PortCity_Bridge_UnitSW12Out -902,PortCity_Bridge_UnitSW12 -903,PortCity_Bridge_UnitN8Out -904,PortCity_Bridge_UnitN8 -905,PortCity_Bridge_UnitS8Out -906,PortCity_Bridge_UnitS8 -907,PortCity_Bridge_UnitE8Out -908,PortCity_Bridge_UnitE8 -909,PortCity_Bridge_UnitW8Out -910,PortCity_Bridge_UnitW8 -911,PortCity_Bridge_UnitN10Out -912,PortCity_Bridge_UnitN10 -913,PortCity_Bridge_UnitS10Out -914,PortCity_Bridge_UnitS10 -915,PortCity_Bridge_UnitE10Out -916,PortCity_Bridge_UnitE10 -917,PortCity_Bridge_UnitW10Out -918,PortCity_Bridge_UnitW10 -919,PortCity_Bridge_UnitN12Out -920,PortCity_Bridge_UnitN12 -921,PortCity_Bridge_UnitS12Out -922,PortCity_Bridge_UnitS12 -923,PortCity_Bridge_UnitE12Out -924,PortCity_Bridge_UnitE12 -925,PortCity_Bridge_UnitW12Out -926,PortCity_Bridge_UnitW12 -927,PurifierRichMineralField -928,PurifierRichMineralField750 -943,CollapsiblePurifierTowerPushUnit -945,LocustMPPrecursor -946,ReleaseInterceptorsBeacon -947,AdeptPhaseShift -948,RavagerCorrosiveBileMissile -949,HydraliskImpaleMissile -950,CycloneMissileLargeAir -951,CycloneMissile -952,CycloneMissileLarge -953,ThorAALance -954,OracleWeapon -955,TempestWeaponGround -956,RavagerWeaponMissile -957,ScoutMPAirWeaponLeft -958,ScoutMPAirWeaponRight -959,ArbiterMPWeaponMissile -960,GuardianMPWeapon -961,DevourerMPWeaponMissile -962,DefilerMPDarkSwarmWeapon -963,QueenMPEnsnareMissile -964,QueenMPSpawnBroodlingsMissile -965,LightningBombWeapon -966,HERCPlacement -967,GrappleWeapon -970,CausticSprayMissile -971,ParasiticBombMissile -972,ParasiticBombDummy -973,AdeptWeapon -974,AdeptUpgradeWeapon -975,LiberatorMissile -976,LiberatorDamageMissile -977,LiberatorAGMissile -978,KD8Charge -979,KD8ChargeWeapon -981,SlaynElementalGrabWeapon -982,SlaynElementalGrabAirUnit -983,SlaynElementalGrabGroundUnit -984,SlaynElementalWeapon -989,DestructibleExpeditionGate6x6 -990,DestructibleZergInfestation3x3 -991,HERC -992,Moopy -993,Replicant -994,SeekerMissile -995,AiurTempleBridgeDestructibleNE8Out -996,AiurTempleBridgeDestructibleNE10Out -997,AiurTempleBridgeDestructibleNE12Out -998,AiurTempleBridgeDestructibleNW8Out -999,AiurTempleBridgeDestructibleNW10Out -1000,AiurTempleBridgeDestructibleNW12Out -1001,AiurTempleBridgeDestructibleSW8Out -1002,AiurTempleBridgeDestructibleSW10Out -1003,AiurTempleBridgeDestructibleSW12Out -1004,AiurTempleBridgeDestructibleSE8Out -1005,AiurTempleBridgeDestructibleSE10Out -1006,AiurTempleBridgeDestructibleSE12Out -1008,FlyoverUnit -1009,CorsairMP -1010,ScoutMP -1012,ArbiterMP -1013,ScourgeMP -1014,DefilerMPPlagueWeapon -1015,QueenMP -1016,XelNagaDestructibleRampBlocker6S -1017,XelNagaDestructibleRampBlocker6SE -1018,XelNagaDestructibleRampBlocker6E -1019,XelNagaDestructibleRampBlocker6NE -1020,XelNagaDestructibleRampBlocker6N -1021,XelNagaDestructibleRampBlocker6NW -1022,XelNagaDestructibleRampBlocker6W -1023,XelNagaDestructibleRampBlocker6SW -1024,XelNagaDestructibleRampBlocker8S -1025,XelNagaDestructibleRampBlocker8SE -1026,XelNagaDestructibleRampBlocker8E -1027,XelNagaDestructibleRampBlocker8NE -1028,XelNagaDestructibleRampBlocker8N -1029,XelNagaDestructibleRampBlocker8NW -1030,XelNagaDestructibleRampBlocker8W -1031,XelNagaDestructibleRampBlocker8SW -1032,XelNagaDestructibleBlocker6S -1033,XelNagaDestructibleBlocker6SE -1034,XelNagaDestructibleBlocker6E -1035,XelNagaDestructibleBlocker6NE -1036,XelNagaDestructibleBlocker6N -1037,XelNagaDestructibleBlocker6NW -1038,XelNagaDestructibleBlocker6W -1039,XelNagaDestructibleBlocker6SW -1040,XelNagaDestructibleBlocker8S -1041,XelNagaDestructibleBlocker8SE -1042,XelNagaDestructibleBlocker8E -1043,XelNagaDestructibleBlocker8NE -1044,XelNagaDestructibleBlocker8N -1045,XelNagaDestructibleBlocker8NW -1046,XelNagaDestructibleBlocker8W -1047,XelNagaDestructibleBlocker8SW -1048,ReptileCrate -1049,SlaynSwarmHostSpawnFlyer -1050,SlaynElemental -1051,PurifierVespeneGeyser -1052,ShakurasVespeneGeyser -1053,CollapsiblePurifierTowerDiagonal -1054,CreepOnlyBlocker4x4 -1055,PurifierMineralField -1056,PurifierMineralField750 -1057,BattleStationMineralField -1058,BattleStationMineralField750 -1059,Beacon_Nova -1060,Beacon_NovaSmall -1061,Ursula -1062,Elsecaro_Colonist_Hut -1063,SnowGlazeStarterMP -1064,TransportOverlordCocoon -1065,OverlordTransport -1066,PylonOvercharged -1068,BypassArmorDrone -1069,AdeptPiercingWeapon -1070,CorrosiveParasiteWeapon diff --git a/sc2reader/data/LotV/54724_abilities.csv b/sc2reader/data/LotV/54724_abilities.csv deleted file mode 100644 index 112b8bd..0000000 --- a/sc2reader/data/LotV/54724_abilities.csv +++ /dev/null @@ -1,399 +0,0 @@ -35,Taunt -36,stop -38,move -45,attack -60,SprayTerran -61,SprayZerg -62,SprayProtoss -63,SalvageShared -65,GhostHoldFire -66,GhostWeaponsFree -68,Explode -69,FleetBeaconResearch -70,FungalGrowth -71,GuardianShield -72,MULERepair -73,ZerglingTrain -75,Feedback -77,PlacePointDefenseDrone -78,HallucinationArchon -79,HallucinationColossus -80,HallucinationHighTemplar -81,HallucinationImmortal -82,HallucinationPhoenix -83,HallucinationProbe -84,HallucinationStalker -85,HallucinationVoidRay -86,HallucinationWarpPrism -87,HallucinationZealot -88,MULEGather -89,SeekerMissile -90,CalldownMULE -91,GravitonBeam -95,SpawnChangeling -102,Rally -103,ProgressRally -104,RallyCommand -105,RallyNexus -106,RallyHatchery -107,RoachWarrenResearch -109,InfestedTerrans -110,NeuralParasite -111,SpawnLarva -112,StimpackMarauder -113,SupplyDrop -116,TimeWarp -117,UltraliskCavernResearch -119,SCVHarvest -120,ProbeHarvest -122,que1 -123,que5 -124,que5CancelToSelection -126,que5Addon -127,BuildInProgress -128,Repair -129,TerranBuild -131,Stimpack -132,GhostCloak -134,MedivacHeal -135,SiegeMode -136,Unsiege -137,BansheeCloak -138,MedivacTransport -139,ScannerSweep -140,Yamato -141,AssaultMode -142,FighterMode -143,BunkerTransport -144,CommandCenterTransport -145,CommandCenterLiftOff -146,CommandCenterLand -147,BarracksFlyingBuild -148,BarracksLiftOff -149,FactoryFlyingBuild -150,FactoryLiftOff -151,StarportFlyingBuild -152,StarportLiftOff -153,FactoryLand -154,StarportLand -155,PlanetaryFortressTrain -156,BarracksLand -157,SupplyDepotLower -158,SupplyDepotRaise -159,BarracksTrain -160,FactoryTrain -161,StarportTrain -162,EngineeringBayResearch -164,GhostAcademyTrain -165,BarracksTechLabResearch -166,FactoryTechLabResearch -167,StarportTechLabResearch -168,GhostAcademyResearch -169,ArmoryResearch -170,ProtossBuild -171,WarpPrismTransport -172,GatewayTrain -173,StargateTrain -174,RoboticsFacilityTrain -175,NexusTrain -176,PsiStorm -177,HangarQueue5 -179,CarrierTrain -180,ForgeResearch -181,RoboticsBayResearch -182,TemplarArchiveResearch -183,ZergBuild -184,DroneHarvest -185,EvolutionChamberResearch -186,UpgradeToLair -187,UpgradeToHive -188,UpgradeToGreaterSpire -189,LairResearch -190,SpawningPoolResearch -191,LurkerDenMPResearch -192,SpireResearch -193,LarvaTrain -194,MorphToBroodLord -195,BurrowBanelingDown -196,BurrowBanelingUp -197,BurrowDroneDown -198,BurrowDroneUp -199,BurrowHydraliskDown -200,BurrowHydraliskUp -201,BurrowRoachDown -202,BurrowRoachUp -203,BurrowZerglingDown -204,BurrowZerglingUp -205,BurrowInfestorTerranDown -206,BurrowInfestorTerranUp -207,RedstoneLavaCritterBurrow -208,RedstoneLavaCritterInjuredBurrow -209,RedstoneLavaCritterUnburrow -210,RedstoneLavaCritterInjuredUnburrow -211,OverlordTransport -214,WarpGateTrain -215,BurrowQueenDown -216,BurrowQueenUp -217,NydusCanalTransport -218,Blink -219,BurrowInfestorDown -220,BurrowInfestorUp -221,MorphToOverseer -222,UpgradeToPlanetaryFortress -223,InfestationPitResearch -224,BanelingNestResearch -225,BurrowUltraliskDown -226,BurrowUltraliskUp -227,UpgradeToOrbital -228,UpgradeToWarpGate -229,MorphBackToGateway -230,OrbitalLiftOff -231,OrbitalCommandLand -232,ForceField -233,PhasingMode -234,TransportMode -235,FusionCoreResearch -236,CyberneticsCoreResearch -237,TwilightCouncilResearch -238,TacNukeStrike -241,EMP -243,LairTrain -245,Transfusion -254,AttackRedirect -255,StimpackRedirect -256,StimpackMarauderRedirect -258,StopRedirect -259,GenerateCreep -260,QueenBuild -261,SpineCrawlerUproot -262,SporeCrawlerUproot -263,SpineCrawlerRoot -264,SporeCrawlerRoot -265,CreepTumorBurrowedBuild -266,BuildAutoTurret -267,ArchonWarp -268,NydusNetworkBuild -270,Charge -274,Contaminate -277,que5Passive -278,que5PassiveCancelToSelection -306,DigesterCreepSpray -310,MorphToMothership -313,NexusTrainMothershipCore -335,XelNagaHealingShrine -344,MothershipCoreMassRecall -346,MorphToHellion -356,MorphToHellionTank -364,MorphToSwarmHostBurrowedMP -365,MorphToSwarmHostMP -367,attackProtossBuilding -369,stopProtossBuilding -370,BlindingCloud -372,Yoink -375,ViperConsumeStructure -378,TestZerg -379,VolatileBurstBuilding -386,WidowMineBurrow -387,WidowMineUnburrow -388,WidowMineAttack -389,TornadoMissile -393,BurrowLurkerMPDown -394,BurrowLurkerMPUp -395,UpgradeToLurkerDenMP -396,HallucinationOracle -397,MedivacSpeedBoost -398,ExtendingBridgeNEWide8Out -399,ExtendingBridgeNEWide8 -400,ExtendingBridgeNWWide8Out -401,ExtendingBridgeNWWide8 -402,ExtendingBridgeNEWide10Out -403,ExtendingBridgeNEWide10 -404,ExtendingBridgeNWWide10Out -405,ExtendingBridgeNWWide10 -406,ExtendingBridgeNEWide12Out -407,ExtendingBridgeNEWide12 -408,ExtendingBridgeNWWide12Out -409,ExtendingBridgeNWWide12 -411,CritterFlee -412,OracleRevelation -420,MothershipCorePurifyNexus -421,XelNaga_Caverns_DoorE -422,XelNaga_Caverns_DoorEOpened -423,XelNaga_Caverns_DoorN -424,XelNaga_Caverns_DoorNE -425,XelNaga_Caverns_DoorNEOpened -426,XelNaga_Caverns_DoorNOpened -427,XelNaga_Caverns_DoorNW -428,XelNaga_Caverns_DoorNWOpened -429,XelNaga_Caverns_DoorS -430,XelNaga_Caverns_DoorSE -431,XelNaga_Caverns_DoorSEOpened -432,XelNaga_Caverns_DoorSOpened -433,XelNaga_Caverns_DoorSW -434,XelNaga_Caverns_DoorSWOpened -435,XelNaga_Caverns_DoorW -436,XelNaga_Caverns_DoorWOpened -437,XelNaga_Caverns_Floating_BridgeNE8Out -438,XelNaga_Caverns_Floating_BridgeNE8 -439,XelNaga_Caverns_Floating_BridgeNW8Out -440,XelNaga_Caverns_Floating_BridgeNW8 -441,XelNaga_Caverns_Floating_BridgeNE10Out -442,XelNaga_Caverns_Floating_BridgeNE10 -443,XelNaga_Caverns_Floating_BridgeNW10Out -444,XelNaga_Caverns_Floating_BridgeNW10 -445,XelNaga_Caverns_Floating_BridgeNE12Out -446,XelNaga_Caverns_Floating_BridgeNE12 -447,XelNaga_Caverns_Floating_BridgeNW12Out -448,XelNaga_Caverns_Floating_BridgeNW12 -449,XelNaga_Caverns_Floating_BridgeH8Out -450,XelNaga_Caverns_Floating_BridgeH8 -451,XelNaga_Caverns_Floating_BridgeV8Out -452,XelNaga_Caverns_Floating_BridgeV8 -453,XelNaga_Caverns_Floating_BridgeH10Out -454,XelNaga_Caverns_Floating_BridgeH10 -455,XelNaga_Caverns_Floating_BridgeV10Out -456,XelNaga_Caverns_Floating_BridgeV10 -457,XelNaga_Caverns_Floating_BridgeH12Out -458,XelNaga_Caverns_Floating_BridgeH12 -459,XelNaga_Caverns_Floating_BridgeV12Out -460,XelNaga_Caverns_Floating_BridgeV12 -461,TemporalField -485,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -486,SnowRefinery_Terran_ExtendingBridgeNEShort8 -487,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -488,SnowRefinery_Terran_ExtendingBridgeNWShort8 -510,CausticSpray -513,MorphToRavager -514,MorphToLurker -517,RavagerCorrosiveBile -518,BurrowRavagerDown -519,BurrowRavagerUp -521,PurificationNovaTargeted -523,LockOn -525,LockOnCancel -527,Hyperjump -529,ThorAPMode -530,ThorNormalMode -532,MothershipMassRecall -533,NydusWormTransport -534,OracleWeapon -540,LocustMPFlyingSwoop -541,HallucinationDisruptor -542,HallucinationAdept -543,VoidRaySwarmDamageBoost -544,SeekerDummyChannel -545,AiurLightBridgeNE8Out -546,AiurLightBridgeNE8 -547,AiurLightBridgeNE10Out -548,AiurLightBridgeNE10 -549,AiurLightBridgeNE12Out -550,AiurLightBridgeNE12 -551,AiurLightBridgeNW8Out -552,AiurLightBridgeNW8 -553,AiurLightBridgeNW10Out -554,AiurLightBridgeNW10 -555,AiurLightBridgeNW12Out -556,AiurLightBridgeNW12 -569,ShakurasLightBridgeNE8Out -570,ShakurasLightBridgeNE8 -571,ShakurasLightBridgeNE10Out -572,ShakurasLightBridgeNE10 -573,ShakurasLightBridgeNE12Out -574,ShakurasLightBridgeNE12 -575,ShakurasLightBridgeNW8Out -576,ShakurasLightBridgeNW8 -577,ShakurasLightBridgeNW10Out -578,ShakurasLightBridgeNW10 -579,ShakurasLightBridgeNW12Out -580,ShakurasLightBridgeNW12 -581,VoidMPImmortalReviveRebuild -583,ArbiterMPStasisField -584,ArbiterMPRecall -585,CorsairMPDisruptionWeb -586,MorphToGuardianMP -587,MorphToDevourerMP -588,DefilerMPConsume -589,DefilerMPDarkSwarm -590,DefilerMPPlague -591,DefilerMPBurrow -592,DefilerMPUnburrow -593,QueenMPEnsnare -594,QueenMPSpawnBroodlings -595,QueenMPInfestCommandCenter -599,OracleBuild -603,ParasiticBomb -604,AdeptPhaseShift -607,LurkerHoldFire -608,LurkerRemoveHoldFire -611,LiberatorAGTarget -612,LiberatorAATarget -614,AiurLightBridgeAbandonedNE8Out -615,AiurLightBridgeAbandonedNE8 -616,AiurLightBridgeAbandonedNE10Out -617,AiurLightBridgeAbandonedNE10 -618,AiurLightBridgeAbandonedNE12Out -619,AiurLightBridgeAbandonedNE12 -620,AiurLightBridgeAbandonedNW8Out -621,AiurLightBridgeAbandonedNW8 -622,AiurLightBridgeAbandonedNW10Out -623,AiurLightBridgeAbandonedNW10 -624,AiurLightBridgeAbandonedNW12Out -625,AiurLightBridgeAbandonedNW12 -626,KD8Charge -629,AdeptPhaseShiftCancel -630,AdeptShadePhaseShiftCancel -631,SlaynElementalGrab -633,PortCity_Bridge_UnitNE8Out -634,PortCity_Bridge_UnitNE8 -635,PortCity_Bridge_UnitSE8Out -636,PortCity_Bridge_UnitSE8 -637,PortCity_Bridge_UnitNW8Out -638,PortCity_Bridge_UnitNW8 -639,PortCity_Bridge_UnitSW8Out -640,PortCity_Bridge_UnitSW8 -641,PortCity_Bridge_UnitNE10Out -642,PortCity_Bridge_UnitNE10 -643,PortCity_Bridge_UnitSE10Out -644,PortCity_Bridge_UnitSE10 -645,PortCity_Bridge_UnitNW10Out -646,PortCity_Bridge_UnitNW10 -647,PortCity_Bridge_UnitSW10Out -648,PortCity_Bridge_UnitSW10 -649,PortCity_Bridge_UnitNE12Out -650,PortCity_Bridge_UnitNE12 -651,PortCity_Bridge_UnitSE12Out -652,PortCity_Bridge_UnitSE12 -653,PortCity_Bridge_UnitNW12Out -654,PortCity_Bridge_UnitNW12 -655,PortCity_Bridge_UnitSW12Out -656,PortCity_Bridge_UnitSW12 -657,PortCity_Bridge_UnitN8Out -658,PortCity_Bridge_UnitN8 -659,PortCity_Bridge_UnitS8Out -660,PortCity_Bridge_UnitS8 -661,PortCity_Bridge_UnitE8Out -662,PortCity_Bridge_UnitE8 -663,PortCity_Bridge_UnitW8Out -664,PortCity_Bridge_UnitW8 -665,PortCity_Bridge_UnitN10Out -666,PortCity_Bridge_UnitN10 -667,PortCity_Bridge_UnitS10Out -668,PortCity_Bridge_UnitS10 -669,PortCity_Bridge_UnitE10Out -670,PortCity_Bridge_UnitE10 -671,PortCity_Bridge_UnitW10Out -672,PortCity_Bridge_UnitW10 -673,PortCity_Bridge_UnitN12Out -674,PortCity_Bridge_UnitN12 -675,PortCity_Bridge_UnitS12Out -676,PortCity_Bridge_UnitS12 -677,PortCity_Bridge_UnitE12Out -678,PortCity_Bridge_UnitE12 -679,PortCity_Bridge_UnitW12Out -680,PortCity_Bridge_UnitW12 -683,DarkTemplarBlink -687,SpawnLocustsTargeted -688,VoidRaySwarmDamageBoostCancel -690,MorphToTransportOverlord -693,ChannelSnipe -696,DarkShrineResearch diff --git a/sc2reader/data/LotV/54724_units.csv b/sc2reader/data/LotV/54724_units.csv deleted file mode 100644 index cc769de..0000000 --- a/sc2reader/data/LotV/54724_units.csv +++ /dev/null @@ -1,935 +0,0 @@ -1,System_Snapshot_Dummy -21,Ball -22,StereoscopicOptionsUnit -23,Colossus -24,TechLab -25,Reactor -27,InfestorTerran -28,BanelingCocoon -29,Baneling -30,Mothership -31,PointDefenseDrone -32,Changeling -33,ChangelingZealot -34,ChangelingMarineShield -35,ChangelingMarine -36,ChangelingZerglingWings -37,ChangelingZergling -39,CommandCenter -40,SupplyDepot -41,Refinery -42,Barracks -43,EngineeringBay -44,MissileTurret -45,Bunker -46,SensorTower -47,GhostAcademy -48,Factory -49,Starport -51,Armory -52,FusionCore -53,AutoTurret -54,SiegeTankSieged -55,SiegeTank -56,VikingAssault -57,VikingFighter -58,CommandCenterFlying -59,BarracksTechLab -60,BarracksReactor -61,FactoryTechLab -62,FactoryReactor -63,StarportTechLab -64,StarportReactor -65,FactoryFlying -66,StarportFlying -67,SCV -68,BarracksFlying -69,SupplyDepotLowered -70,Marine -71,Reaper -72,Ghost -73,Marauder -74,Thor -75,Hellion -76,Medivac -77,Banshee -78,Raven -79,Battlecruiser -80,Nuke -81,Nexus -82,Pylon -83,Assimilator -84,Gateway -85,Forge -86,FleetBeacon -87,TwilightCouncil -88,PhotonCannon -89,Stargate -90,TemplarArchive -91,DarkShrine -92,RoboticsBay -93,RoboticsFacility -94,CyberneticsCore -95,Zealot -96,Stalker -97,HighTemplar -98,DarkTemplar -99,Sentry -100,Phoenix -101,Carrier -102,VoidRay -103,WarpPrism -104,Observer -105,Immortal -106,Probe -107,Interceptor -108,Hatchery -109,CreepTumor -110,Extractor -111,SpawningPool -112,EvolutionChamber -113,HydraliskDen -114,Spire -115,UltraliskCavern -116,InfestationPit -117,NydusNetwork -118,BanelingNest -119,RoachWarren -120,SpineCrawler -121,SporeCrawler -122,Lair -123,Hive -124,GreaterSpire -125,Egg -126,Drone -127,Zergling -128,Overlord -129,Hydralisk -130,Mutalisk -131,Ultralisk -132,Roach -133,Infestor -134,Corruptor -135,BroodLordCocoon -136,BroodLord -137,BanelingBurrowed -138,DroneBurrowed -139,HydraliskBurrowed -140,RoachBurrowed -141,ZerglingBurrowed -142,InfestorTerranBurrowed -143,RedstoneLavaCritterBurrowed -144,RedstoneLavaCritterInjuredBurrowed -145,RedstoneLavaCritter -146,RedstoneLavaCritterInjured -147,QueenBurrowed -148,Queen -149,InfestorBurrowed -150,OverlordCocoon -151,Overseer -152,PlanetaryFortress -153,UltraliskBurrowed -154,OrbitalCommand -155,WarpGate -156,OrbitalCommandFlying -157,ForceField -158,WarpPrismPhasing -159,CreepTumorBurrowed -160,CreepTumorQueen -161,SpineCrawlerUprooted -162,SporeCrawlerUprooted -163,Archon -164,NydusCanal -165,BroodlingEscort -166,GhostAlternate -167,GhostNova -168,RichMineralField -169,RichMineralField750 -170,Ursadon -172,XelNagaTower -176,InfestedTerransEgg -177,Larva -178,ReaperPlaceholder -179,MarineACGluescreenDummy -180,FirebatACGluescreenDummy -181,MedicACGluescreenDummy -182,MarauderACGluescreenDummy -183,VultureACGluescreenDummy -184,SiegeTankACGluescreenDummy -185,VikingACGluescreenDummy -186,BansheeACGluescreenDummy -187,BattlecruiserACGluescreenDummy -188,OrbitalCommandACGluescreenDummy -189,BunkerACGluescreenDummy -190,BunkerUpgradedACGluescreenDummy -191,MissileTurretACGluescreenDummy -192,HellbatACGluescreenDummy -193,GoliathACGluescreenDummy -194,CycloneACGluescreenDummy -195,WraithACGluescreenDummy -196,ScienceVesselACGluescreenDummy -197,HerculesACGluescreenDummy -198,ThorACGluescreenDummy -199,PerditionTurretACGluescreenDummy -200,FlamingBettyACGluescreenDummy -201,DevastationTurretACGluescreenDummy -202,BlasterBillyACGluescreenDummy -203,SpinningDizzyACGluescreenDummy -204,ZerglingKerriganACGluescreenDummy -205,RaptorACGluescreenDummy -206,QueenCoopACGluescreenDummy -207,HydraliskACGluescreenDummy -208,HydraliskLurkerACGluescreenDummy -209,MutaliskBroodlordACGluescreenDummy -210,BroodLordACGluescreenDummy -211,UltraliskACGluescreenDummy -212,TorrasqueACGluescreenDummy -213,OverseerACGluescreenDummy -214,LurkerACGluescreenDummy -215,SpineCrawlerACGluescreenDummy -216,SporeCrawlerACGluescreenDummy -217,NydusNetworkACGluescreenDummy -218,OmegaNetworkACGluescreenDummy -219,ZerglingZagaraACGluescreenDummy -220,SwarmlingACGluescreenDummy -221,BanelingACGluescreenDummy -222,SplitterlingACGluescreenDummy -223,AberrationACGluescreenDummy -224,ScourgeACGluescreenDummy -225,CorruptorACGluescreenDummy -226,BileLauncherACGluescreenDummy -227,SwarmQueenACGluescreenDummy -228,RoachACGluescreenDummy -229,RoachVileACGluescreenDummy -230,RavagerACGluescreenDummy -231,SwarmHostACGluescreenDummy -232,MutaliskACGluescreenDummy -233,GuardianACGluescreenDummy -234,DevourerACGluescreenDummy -235,ViperACGluescreenDummy -236,BrutaliskACGluescreenDummy -237,LeviathanACGluescreenDummy -238,ZealotACGluescreenDummy -239,ZealotAiurACGluescreenDummy -240,DragoonACGluescreenDummy -241,HighTemplarACGluescreenDummy -242,ArchonACGluescreenDummy -243,ImmortalACGluescreenDummy -244,ObserverACGluescreenDummy -245,PhoenixAiurACGluescreenDummy -246,ReaverACGluescreenDummy -247,TempestACGluescreenDummy -248,PhotonCannonACGluescreenDummy -249,ZealotVorazunACGluescreenDummy -250,ZealotShakurasACGluescreenDummy -251,StalkerShakurasACGluescreenDummy -252,DarkTemplarShakurasACGluescreenDummy -253,CorsairACGluescreenDummy -254,VoidRayACGluescreenDummy -255,VoidRayShakurasACGluescreenDummy -256,OracleACGluescreenDummy -257,DarkArchonACGluescreenDummy -258,DarkPylonACGluescreenDummy -259,ZealotPurifierACGluescreenDummy -260,SentryPurifierACGluescreenDummy -261,ImmortalKaraxACGluescreenDummy -262,ColossusACGluescreenDummy -263,ColossusPurifierACGluescreenDummy -264,PhoenixPurifierACGluescreenDummy -265,CarrierACGluescreenDummy -266,CarrierAiurACGluescreenDummy -267,KhaydarinMonolithACGluescreenDummy -268,ShieldBatteryACGluescreenDummy -269,EliteMarineACGluescreenDummy -270,MarauderCommandoACGluescreenDummy -271,SpecOpsGhostACGluescreenDummy -272,HellbatRangerACGluescreenDummy -273,StrikeGoliathACGluescreenDummy -274,HeavySiegeTankACGluescreenDummy -275,RaidLiberatorACGluescreenDummy -276,RavenTypeIIACGluescreenDummy -277,CovertBansheeACGluescreenDummy -278,RailgunTurretACGluescreenDummy -279,BlackOpsMissileTurretACGluescreenDummy -280,SupplicantACGluescreenDummy -281,StalkerTaldarimACGluescreenDummy -282,SentryTaldarimACGluescreenDummy -283,HighTemplarTaldarimACGluescreenDummy -284,ImmortalTaldarimACGluescreenDummy -285,ColossusTaldarimACGluescreenDummy -286,WarpPrismTaldarimACGluescreenDummy -287,PhotonCannonTaldarimACGluescreenDummy -288,StukovInfestedCivilianACGluescreenDummy -289,StukovInfestedMarineACGluescreenDummy -290,StukovInfestedSiegeTankACGluescreenDummy -291,StukovInfestedDiamondbackACGluescreenDummy -292,StukovInfestedBansheeACGluescreenDummy -293,SILiberatorACGluescreenDummy -294,StukovInfestedBunkerACGluescreenDummy -295,StukovInfestedMissileTurretACGluescreenDummy -296,StukovBroodQueenACGluescreenDummy -297,ZealotFenixACGluescreenDummy -298,SentryFenixACGluescreenDummy -299,AdeptFenixACGluescreenDummy -300,ImmortalFenixACGluescreenDummy -301,ColossusFenixACGluescreenDummy -302,DisruptorACGluescreenDummy -303,ObserverFenixACGluescreenDummy -304,ScoutACGluescreenDummy -305,CarrierFenixACGluescreenDummy -306,PhotonCannonFenixACGluescreenDummy -308,NeedleSpinesWeapon -309,CorruptionWeapon -310,InfestedTerransWeapon -311,NeuralParasiteWeapon -312,PointDefenseDroneReleaseWeapon -313,HunterSeekerWeapon -314,MULE -316,ThorAAWeapon -317,PunisherGrenadesLMWeapon -318,VikingFighterWeapon -319,ATALaserBatteryLMWeapon -320,ATSLaserBatteryLMWeapon -321,LongboltMissileWeapon -322,D8ChargeWeapon -323,YamatoWeapon -324,IonCannonsWeapon -325,AcidSalivaWeapon -326,SpineCrawlerWeapon -327,SporeCrawlerWeapon -328,GlaiveWurmWeapon -329,GlaiveWurmM2Weapon -330,GlaiveWurmM3Weapon -331,StalkerWeapon -332,EMP2Weapon -333,BacklashRocketsLMWeapon -334,PhotonCannonWeapon -335,ParasiteSporeWeapon -337,Broodling -338,BroodLordBWeapon -341,AutoTurretReleaseWeapon -342,LarvaReleaseMissile -343,AcidSpinesWeapon -344,FrenzyWeapon -345,ContaminateWeapon -357,BeaconRally -358,BeaconArmy -359,BeaconAttack -360,BeaconDefend -361,BeaconHarass -362,BeaconIdle -363,BeaconAuto -364,BeaconDetect -365,BeaconScout -366,BeaconClaim -367,BeaconExpand -368,BeaconCustom1 -369,BeaconCustom2 -370,BeaconCustom3 -371,BeaconCustom4 -372,Adept -373,Ravager -374,VikingSkinPreview -380,Rocks2x2NonConjoined -381,FungalGrowthMissile -382,NeuralParasiteTentacleMissile -383,Beacon_Protoss -384,Beacon_ProtossSmall -385,Beacon_Terran -386,Beacon_TerranSmall -387,Beacon_Zerg -388,Beacon_ZergSmall -389,Lyote -390,CarrionBird -391,KarakMale -392,KarakFemale -393,UrsadakFemaleExotic -394,UrsadakMale -395,UrsadakFemale -396,UrsadakCalf -397,UrsadakMaleExotic -398,UtilityBot -399,CommentatorBot1 -400,CommentatorBot2 -401,CommentatorBot3 -402,CommentatorBot4 -403,Scantipede -404,Dog -405,Sheep -406,Cow -407,InfestedTerransEggPlacement -408,InfestorTerransWeapon -409,MineralField -410,VespeneGeyser -411,SpacePlatformGeyser -412,RichVespeneGeyser -413,DestructibleSearchlight -414,DestructibleBullhornLights -415,DestructibleStreetlight -416,DestructibleSpacePlatformSign -417,DestructibleStoreFrontCityProps -418,DestructibleBillboardTall -419,DestructibleBillboardScrollingText -420,DestructibleSpacePlatformBarrier -421,DestructibleSignsDirectional -422,DestructibleSignsConstruction -423,DestructibleSignsFunny -424,DestructibleSignsIcons -425,DestructibleSignsWarning -426,DestructibleGarage -427,DestructibleGarageLarge -428,DestructibleTrafficSignal -429,TrafficSignal -430,BraxisAlphaDestructible1x1 -431,BraxisAlphaDestructible2x2 -432,DestructibleDebris4x4 -433,DestructibleDebris6x6 -434,DestructibleRock2x4Vertical -435,DestructibleRock2x4Horizontal -436,DestructibleRock2x6Vertical -437,DestructibleRock2x6Horizontal -438,DestructibleRock4x4 -439,DestructibleRock6x6 -440,DestructibleRampDiagonalHugeULBR -441,DestructibleRampDiagonalHugeBLUR -442,DestructibleRampVerticalHuge -443,DestructibleRampHorizontalHuge -444,DestructibleDebrisRampDiagonalHugeULBR -445,DestructibleDebrisRampDiagonalHugeBLUR -446,OverlordGenerateCreepKeybind -447,MengskStatueAlone -448,MengskStatue -449,WolfStatue -450,GlobeStatue -451,Weapon -452,GlaiveWurmBounceWeapon -453,BroodLordWeapon -454,BroodLordAWeapon -455,CreepBlocker1x1 -456,PermanentCreepBlocker1x1 -457,PathingBlocker1x1 -458,PathingBlocker2x2 -459,AutoTestAttackTargetGround -460,AutoTestAttackTargetAir -461,AutoTestAttacker -462,HelperEmitterSelectionArrow -463,MultiKillObject -464,ShapeGolfball -465,ShapeCone -466,ShapeCube -467,ShapeCylinder -468,ShapeDodecahedron -469,ShapeIcosahedron -470,ShapeOctahedron -471,ShapePyramid -472,ShapeRoundedCube -473,ShapeSphere -474,ShapeTetrahedron -475,ShapeThickTorus -476,ShapeThinTorus -477,ShapeTorus -478,Shape4PointStar -479,Shape5PointStar -480,Shape6PointStar -481,Shape8PointStar -482,ShapeArrowPointer -483,ShapeBowl -484,ShapeBox -485,ShapeCapsule -486,ShapeCrescentMoon -487,ShapeDecahedron -488,ShapeDiamond -489,ShapeFootball -490,ShapeGemstone -491,ShapeHeart -492,ShapeJack -493,ShapePlusSign -494,ShapeShamrock -495,ShapeSpade -496,ShapeTube -497,ShapeEgg -498,ShapeYenSign -499,ShapeX -500,ShapeWatermelon -501,ShapeWonSign -502,ShapeTennisball -503,ShapeStrawberry -504,ShapeSmileyFace -505,ShapeSoccerball -506,ShapeRainbow -507,ShapeSadFace -508,ShapePoundSign -509,ShapePear -510,ShapePineapple -511,ShapeOrange -512,ShapePeanut -513,ShapeO -514,ShapeLemon -515,ShapeMoneyBag -516,ShapeHorseshoe -517,ShapeHockeyStick -518,ShapeHockeyPuck -519,ShapeHand -520,ShapeGolfClub -521,ShapeGrape -522,ShapeEuroSign -523,ShapeDollarSign -524,ShapeBasketball -525,ShapeCarrot -526,ShapeCherry -527,ShapeBaseball -528,ShapeBaseballBat -529,ShapeBanana -530,ShapeApple -531,ShapeCashLarge -532,ShapeCashMedium -533,ShapeCashSmall -534,ShapeFootballColored -535,ShapeLemonSmall -536,ShapeOrangeSmall -537,ShapeTreasureChestOpen -538,ShapeTreasureChestClosed -539,ShapeWatermelonSmall -540,UnbuildableRocksDestructible -541,UnbuildableBricksDestructible -542,UnbuildablePlatesDestructible -543,Debris2x2NonConjoined -544,EnemyPathingBlocker1x1 -545,EnemyPathingBlocker2x2 -546,EnemyPathingBlocker4x4 -547,EnemyPathingBlocker8x8 -548,EnemyPathingBlocker16x16 -549,ScopeTest -550,SentryACGluescreenDummy -551,StukovInfestedTrooperACGluescreenDummy -552,MineralField750 -568,HellionTank -569,CollapsibleTerranTowerDebris -570,DebrisRampLeft -571,DebrisRampRight -572,MothershipCore -576,LocustMP -577,CollapsibleRockTowerDebris -578,NydusCanalAttacker -579,NydusCanalCreeper -580,SwarmHostBurrowedMP -581,SwarmHostMP -582,Oracle -583,Tempest -584,WarHound -585,WidowMine -586,Viper -587,WidowMineBurrowed -588,LurkerMPEgg -589,LurkerMP -590,LurkerMPBurrowed -591,LurkerDenMP -592,ExtendingBridgeNEWide8Out -593,ExtendingBridgeNEWide8 -594,ExtendingBridgeNWWide8Out -595,ExtendingBridgeNWWide8 -596,ExtendingBridgeNEWide10Out -597,ExtendingBridgeNEWide10 -598,ExtendingBridgeNWWide10Out -599,ExtendingBridgeNWWide10 -600,ExtendingBridgeNEWide12Out -601,ExtendingBridgeNEWide12 -602,ExtendingBridgeNWWide12Out -603,ExtendingBridgeNWWide12 -605,CollapsibleRockTowerDebrisRampRight -606,CollapsibleRockTowerDebrisRampLeft -607,XelNaga_Caverns_DoorE -608,XelNaga_Caverns_DoorEOpened -609,XelNaga_Caverns_DoorN -610,XelNaga_Caverns_DoorNE -611,XelNaga_Caverns_DoorNEOpened -612,XelNaga_Caverns_DoorNOpened -613,XelNaga_Caverns_DoorNW -614,XelNaga_Caverns_DoorNWOpened -615,XelNaga_Caverns_DoorS -616,XelNaga_Caverns_DoorSE -617,XelNaga_Caverns_DoorSEOpened -618,XelNaga_Caverns_DoorSOpened -619,XelNaga_Caverns_DoorSW -620,XelNaga_Caverns_DoorSWOpened -621,XelNaga_Caverns_DoorW -622,XelNaga_Caverns_DoorWOpened -623,XelNaga_Caverns_Floating_BridgeNE8Out -624,XelNaga_Caverns_Floating_BridgeNE8 -625,XelNaga_Caverns_Floating_BridgeNW8Out -626,XelNaga_Caverns_Floating_BridgeNW8 -627,XelNaga_Caverns_Floating_BridgeNE10Out -628,XelNaga_Caverns_Floating_BridgeNE10 -629,XelNaga_Caverns_Floating_BridgeNW10Out -630,XelNaga_Caverns_Floating_BridgeNW10 -631,XelNaga_Caverns_Floating_BridgeNE12Out -632,XelNaga_Caverns_Floating_BridgeNE12 -633,XelNaga_Caverns_Floating_BridgeNW12Out -634,XelNaga_Caverns_Floating_BridgeNW12 -635,XelNaga_Caverns_Floating_BridgeH8Out -636,XelNaga_Caverns_Floating_BridgeH8 -637,XelNaga_Caverns_Floating_BridgeV8Out -638,XelNaga_Caverns_Floating_BridgeV8 -639,XelNaga_Caverns_Floating_BridgeH10Out -640,XelNaga_Caverns_Floating_BridgeH10 -641,XelNaga_Caverns_Floating_BridgeV10Out -642,XelNaga_Caverns_Floating_BridgeV10 -643,XelNaga_Caverns_Floating_BridgeH12Out -644,XelNaga_Caverns_Floating_BridgeH12 -645,XelNaga_Caverns_Floating_BridgeV12Out -646,XelNaga_Caverns_Floating_BridgeV12 -649,CollapsibleTerranTowerPushUnitRampLeft -650,CollapsibleTerranTowerPushUnitRampRight -653,CollapsibleRockTowerPushUnit -654,CollapsibleTerranTowerPushUnit -655,CollapsibleRockTowerPushUnitRampRight -656,CollapsibleRockTowerPushUnitRampLeft -657,DigesterCreepSprayTargetUnit -658,DigesterCreepSprayUnit -659,NydusCanalAttackerWeapon -660,ViperConsumeStructureWeapon -663,ResourceBlocker -664,TempestWeapon -665,YoinkMissile -669,YoinkVikingAirMissile -671,YoinkVikingGroundMissile -673,YoinkSiegeTankMissile -675,WarHoundWeapon -677,EyeStalkWeapon -680,WidowMineWeapon -681,WidowMineAirWeapon -682,MothershipCoreWeaponWeapon -683,TornadoMissileWeapon -684,TornadoMissileDummyWeapon -685,TalonsMissileWeapon -686,CreepTumorMissile -687,LocustMPEggAMissileWeapon -688,LocustMPEggBMissileWeapon -689,LocustMPWeapon -691,RepulsorCannonWeapon -695,CollapsibleRockTowerDiagonal -696,CollapsibleTerranTowerDiagonal -697,CollapsibleTerranTowerRampLeft -698,CollapsibleTerranTowerRampRight -699,Ice2x2NonConjoined -700,IceProtossCrates -701,ProtossCrates -702,TowerMine -703,PickupPalletGas -704,PickupPalletMinerals -705,PickupScrapSalvage1x1 -706,PickupScrapSalvage2x2 -707,PickupScrapSalvage3x3 -708,RoughTerrain -709,UnbuildableBricksSmallUnit -710,UnbuildablePlatesSmallUnit -711,UnbuildablePlatesUnit -712,UnbuildableRocksSmallUnit -713,XelNagaHealingShrine -714,InvisibleTargetDummy -715,ProtossVespeneGeyser -716,CollapsibleRockTower -717,CollapsibleTerranTower -718,ThornLizard -719,CleaningBot -720,DestructibleRock6x6Weak -721,ProtossSnakeSegmentDemo -722,PhysicsCapsule -723,PhysicsCube -724,PhysicsCylinder -725,PhysicsKnot -726,PhysicsL -727,PhysicsPrimitives -728,PhysicsSphere -729,PhysicsStar -730,CreepBlocker4x4 -731,DestructibleCityDebris2x4Vertical -732,DestructibleCityDebris2x4Horizontal -733,DestructibleCityDebris2x6Vertical -734,DestructibleCityDebris2x6Horizontal -735,DestructibleCityDebris4x4 -736,DestructibleCityDebris6x6 -737,DestructibleCityDebrisHugeDiagonalBLUR -738,DestructibleCityDebrisHugeDiagonalULBR -739,TestZerg -740,PathingBlockerRadius1 -741,DestructibleRockEx12x4Vertical -742,DestructibleRockEx12x4Horizontal -743,DestructibleRockEx12x6Vertical -744,DestructibleRockEx12x6Horizontal -745,DestructibleRockEx14x4 -746,DestructibleRockEx16x6 -747,DestructibleRockEx1DiagonalHugeULBR -748,DestructibleRockEx1DiagonalHugeBLUR -749,DestructibleRockEx1VerticalHuge -750,DestructibleRockEx1HorizontalHuge -751,DestructibleIce2x4Vertical -752,DestructibleIce2x4Horizontal -753,DestructibleIce2x6Vertical -754,DestructibleIce2x6Horizontal -755,DestructibleIce4x4 -756,DestructibleIce6x6 -757,DestructibleIceDiagonalHugeULBR -758,DestructibleIceDiagonalHugeBLUR -759,DestructibleIceVerticalHuge -760,DestructibleIceHorizontalHuge -761,DesertPlanetSearchlight -762,DesertPlanetStreetlight -763,UnbuildableBricksUnit -764,UnbuildableRocksUnit -765,ZerusDestructibleArch -766,Artosilope -767,Anteplott -768,LabBot -769,Crabeetle -770,CollapsibleRockTowerRampRight -771,CollapsibleRockTowerRampLeft -772,LabMineralField -773,LabMineralField750 -789,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -790,SnowRefinery_Terran_ExtendingBridgeNEShort8 -791,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -792,SnowRefinery_Terran_ExtendingBridgeNWShort8 -797,Tarsonis_DoorN -798,Tarsonis_DoorNLowered -799,Tarsonis_DoorNE -800,Tarsonis_DoorNELowered -801,Tarsonis_DoorE -802,Tarsonis_DoorELowered -803,Tarsonis_DoorNW -804,Tarsonis_DoorNWLowered -805,CompoundMansion_DoorN -806,CompoundMansion_DoorNLowered -807,CompoundMansion_DoorNE -808,CompoundMansion_DoorNELowered -809,CompoundMansion_DoorE -810,CompoundMansion_DoorELowered -811,CompoundMansion_DoorNW -812,CompoundMansion_DoorNWLowered -813,RavagerCocoon -814,Liberator -815,RavagerBurrowed -817,ThorAP -818,Cyclone -819,LocustMPFlying -820,Disruptor -821,AiurLightBridgeNE8Out -822,AiurLightBridgeNE8 -823,AiurLightBridgeNE10Out -824,AiurLightBridgeNE10 -825,AiurLightBridgeNE12Out -826,AiurLightBridgeNE12 -827,AiurLightBridgeNW8Out -828,AiurLightBridgeNW8 -829,AiurLightBridgeNW10Out -830,AiurLightBridgeNW10 -831,AiurLightBridgeNW12Out -832,AiurLightBridgeNW12 -833,AiurTempleBridgeNE8Out -835,AiurTempleBridgeNE10Out -837,AiurTempleBridgeNE12Out -839,AiurTempleBridgeNW8Out -841,AiurTempleBridgeNW10Out -843,AiurTempleBridgeNW12Out -845,ShakurasLightBridgeNE8Out -846,ShakurasLightBridgeNE8 -847,ShakurasLightBridgeNE10Out -848,ShakurasLightBridgeNE10 -849,ShakurasLightBridgeNE12Out -850,ShakurasLightBridgeNE12 -851,ShakurasLightBridgeNW8Out -852,ShakurasLightBridgeNW8 -853,ShakurasLightBridgeNW10Out -854,ShakurasLightBridgeNW10 -855,ShakurasLightBridgeNW12Out -856,ShakurasLightBridgeNW12 -857,VoidMPImmortalReviveCorpse -858,GuardianCocoonMP -859,GuardianMP -860,DevourerCocoonMP -861,DevourerMP -862,DefilerMPBurrowed -863,DefilerMP -864,OracleStasisTrap -865,DisruptorPhased -866,LiberatorAG -867,AiurLightBridgeAbandonedNE8Out -868,AiurLightBridgeAbandonedNE8 -869,AiurLightBridgeAbandonedNE10Out -870,AiurLightBridgeAbandonedNE10 -871,AiurLightBridgeAbandonedNE12Out -872,AiurLightBridgeAbandonedNE12 -873,AiurLightBridgeAbandonedNW8Out -874,AiurLightBridgeAbandonedNW8 -875,AiurLightBridgeAbandonedNW10Out -876,AiurLightBridgeAbandonedNW10 -877,AiurLightBridgeAbandonedNW12Out -878,AiurLightBridgeAbandonedNW12 -879,CollapsiblePurifierTowerDebris -880,PortCity_Bridge_UnitNE8Out -881,PortCity_Bridge_UnitNE8 -882,PortCity_Bridge_UnitSE8Out -883,PortCity_Bridge_UnitSE8 -884,PortCity_Bridge_UnitNW8Out -885,PortCity_Bridge_UnitNW8 -886,PortCity_Bridge_UnitSW8Out -887,PortCity_Bridge_UnitSW8 -888,PortCity_Bridge_UnitNE10Out -889,PortCity_Bridge_UnitNE10 -890,PortCity_Bridge_UnitSE10Out -891,PortCity_Bridge_UnitSE10 -892,PortCity_Bridge_UnitNW10Out -893,PortCity_Bridge_UnitNW10 -894,PortCity_Bridge_UnitSW10Out -895,PortCity_Bridge_UnitSW10 -896,PortCity_Bridge_UnitNE12Out -897,PortCity_Bridge_UnitNE12 -898,PortCity_Bridge_UnitSE12Out -899,PortCity_Bridge_UnitSE12 -900,PortCity_Bridge_UnitNW12Out -901,PortCity_Bridge_UnitNW12 -902,PortCity_Bridge_UnitSW12Out -903,PortCity_Bridge_UnitSW12 -904,PortCity_Bridge_UnitN8Out -905,PortCity_Bridge_UnitN8 -906,PortCity_Bridge_UnitS8Out -907,PortCity_Bridge_UnitS8 -908,PortCity_Bridge_UnitE8Out -909,PortCity_Bridge_UnitE8 -910,PortCity_Bridge_UnitW8Out -911,PortCity_Bridge_UnitW8 -912,PortCity_Bridge_UnitN10Out -913,PortCity_Bridge_UnitN10 -914,PortCity_Bridge_UnitS10Out -915,PortCity_Bridge_UnitS10 -916,PortCity_Bridge_UnitE10Out -917,PortCity_Bridge_UnitE10 -918,PortCity_Bridge_UnitW10Out -919,PortCity_Bridge_UnitW10 -920,PortCity_Bridge_UnitN12Out -921,PortCity_Bridge_UnitN12 -922,PortCity_Bridge_UnitS12Out -923,PortCity_Bridge_UnitS12 -924,PortCity_Bridge_UnitE12Out -925,PortCity_Bridge_UnitE12 -926,PortCity_Bridge_UnitW12Out -927,PortCity_Bridge_UnitW12 -928,PurifierRichMineralField -929,PurifierRichMineralField750 -944,CollapsiblePurifierTowerPushUnit -946,LocustMPPrecursor -947,ReleaseInterceptorsBeacon -948,AdeptPhaseShift -949,RavagerCorrosiveBileMissile -950,HydraliskImpaleMissile -951,CycloneMissileLargeAir -952,CycloneMissile -953,CycloneMissileLarge -954,ThorAALance -955,OracleWeapon -956,TempestWeaponGround -957,RavagerWeaponMissile -958,ScoutMPAirWeaponLeft -959,ScoutMPAirWeaponRight -960,ArbiterMPWeaponMissile -961,GuardianMPWeapon -962,DevourerMPWeaponMissile -963,DefilerMPDarkSwarmWeapon -964,QueenMPEnsnareMissile -965,QueenMPSpawnBroodlingsMissile -966,LightningBombWeapon -967,HERCPlacement -968,GrappleWeapon -971,CausticSprayMissile -972,ParasiticBombMissile -973,ParasiticBombDummy -974,AdeptWeapon -975,AdeptUpgradeWeapon -976,LiberatorMissile -977,LiberatorDamageMissile -978,LiberatorAGMissile -979,KD8Charge -980,KD8ChargeWeapon -982,SlaynElementalGrabWeapon -983,SlaynElementalGrabAirUnit -984,SlaynElementalGrabGroundUnit -985,SlaynElementalWeapon -990,DestructibleExpeditionGate6x6 -991,DestructibleZergInfestation3x3 -992,HERC -993,Moopy -994,Replicant -995,SeekerMissile -996,AiurTempleBridgeDestructibleNE8Out -997,AiurTempleBridgeDestructibleNE10Out -998,AiurTempleBridgeDestructibleNE12Out -999,AiurTempleBridgeDestructibleNW8Out -1000,AiurTempleBridgeDestructibleNW10Out -1001,AiurTempleBridgeDestructibleNW12Out -1002,AiurTempleBridgeDestructibleSW8Out -1003,AiurTempleBridgeDestructibleSW10Out -1004,AiurTempleBridgeDestructibleSW12Out -1005,AiurTempleBridgeDestructibleSE8Out -1006,AiurTempleBridgeDestructibleSE10Out -1007,AiurTempleBridgeDestructibleSE12Out -1009,FlyoverUnit -1010,CorsairMP -1011,ScoutMP -1013,ArbiterMP -1014,ScourgeMP -1015,DefilerMPPlagueWeapon -1016,QueenMP -1017,XelNagaDestructibleRampBlocker6S -1018,XelNagaDestructibleRampBlocker6SE -1019,XelNagaDestructibleRampBlocker6E -1020,XelNagaDestructibleRampBlocker6NE -1021,XelNagaDestructibleRampBlocker6N -1022,XelNagaDestructibleRampBlocker6NW -1023,XelNagaDestructibleRampBlocker6W -1024,XelNagaDestructibleRampBlocker6SW -1025,XelNagaDestructibleRampBlocker8S -1026,XelNagaDestructibleRampBlocker8SE -1027,XelNagaDestructibleRampBlocker8E -1028,XelNagaDestructibleRampBlocker8NE -1029,XelNagaDestructibleRampBlocker8N -1030,XelNagaDestructibleRampBlocker8NW -1031,XelNagaDestructibleRampBlocker8W -1032,XelNagaDestructibleRampBlocker8SW -1033,XelNagaDestructibleBlocker6S -1034,XelNagaDestructibleBlocker6SE -1035,XelNagaDestructibleBlocker6E -1036,XelNagaDestructibleBlocker6NE -1037,XelNagaDestructibleBlocker6N -1038,XelNagaDestructibleBlocker6NW -1039,XelNagaDestructibleBlocker6W -1040,XelNagaDestructibleBlocker6SW -1041,XelNagaDestructibleBlocker8S -1042,XelNagaDestructibleBlocker8SE -1043,XelNagaDestructibleBlocker8E -1044,XelNagaDestructibleBlocker8NE -1045,XelNagaDestructibleBlocker8N -1046,XelNagaDestructibleBlocker8NW -1047,XelNagaDestructibleBlocker8W -1048,XelNagaDestructibleBlocker8SW -1049,ReptileCrate -1050,SlaynSwarmHostSpawnFlyer -1051,SlaynElemental -1052,PurifierVespeneGeyser -1053,ShakurasVespeneGeyser -1054,CollapsiblePurifierTowerDiagonal -1055,CreepOnlyBlocker4x4 -1056,PurifierMineralField -1057,PurifierMineralField750 -1058,BattleStationMineralField -1059,BattleStationMineralField750 -1060,Beacon_Nova -1061,Beacon_NovaSmall -1062,Ursula -1063,Elsecaro_Colonist_Hut -1064,SnowGlazeStarterMP -1065,TransportOverlordCocoon -1066,OverlordTransport -1067,PylonOvercharged -1069,BypassArmorDrone -1070,AdeptPiercingWeapon -1071,CorrosiveParasiteWeapon diff --git a/sc2reader/data/LotV/59587_abilities.csv b/sc2reader/data/LotV/59587_abilities.csv deleted file mode 100644 index 19354e5..0000000 --- a/sc2reader/data/LotV/59587_abilities.csv +++ /dev/null @@ -1,406 +0,0 @@ -39,Taunt -40,stop -42,move -45,attack -60,SprayTerran -61,SprayZerg -62,SprayProtoss -63,SalvageShared -65,GhostHoldFire -66,GhostWeaponsFree -68,Explode -69,FleetBeaconResearch -70,FungalGrowth -71,GuardianShield -72,MULERepair -73,ZerglingTrain -74,NexusTrainMothership -75,Feedback -76,MassRecall -78,HallucinationArchon -79,HallucinationColossus -80,HallucinationHighTemplar -81,HallucinationImmortal -82,HallucinationPhoenix -83,HallucinationProbe -84,HallucinationStalker -85,HallucinationVoidRay -86,HallucinationWarpPrism -87,HallucinationZealot -88,MULEGather -90,CalldownMULE -91,GravitonBeam -95,SpawnChangeling -102,Rally -103,ProgressRally -104,RallyCommand -105,RallyNexus -106,RallyHatchery -107,RoachWarrenResearch -109,InfestedTerrans -110,NeuralParasite -111,SpawnLarva -112,StimpackMarauder -113,SupplyDrop -117,UltraliskCavernResearch -119,SCVHarvest -120,ProbeHarvest -122,que1 -123,que5 -124,que5CancelToSelection -126,que5Addon -127,BuildInProgress -128,Repair -129,TerranBuild -131,Stimpack -132,GhostCloak -134,MedivacHeal -135,SiegeMode -136,Unsiege -137,BansheeCloak -138,MedivacTransport -139,ScannerSweep -140,Yamato -141,AssaultMode -142,FighterMode -143,BunkerTransport -144,CommandCenterTransport -145,CommandCenterLiftOff -146,CommandCenterLand -147,BarracksFlyingBuild -148,BarracksLiftOff -149,FactoryBuild -150,FactoryLiftOff -151,StarportBuild -152,StarportLiftOff -153,FactoryLand -154,StarportLand -155,OrbitalCommandTrain -156,BarracksLand -157,SupplyDepotLower -158,SupplyDepotRaise -159,BarracksTrain -160,FactoryTrain -161,StarportTrain -162,EngineeringBayResearch -164,GhostAcademyTrain -165,BarracksTechLabResearch -166,FactoryTechLabResearch -167,StarportTechLabResearch -168,GhostAcademyResearch -169,ArmoryResearch -170,ProtossBuild -171,WarpPrismTransport -172,GatewayTrain -173,StargateTrain -174,RoboticsFacilityTrain -175,NexusTrain -176,PsiStorm -177,HangarQueue5 -179,CarrierTrain -180,ForgeResearch -181,RoboticsBayResearch -182,TemplarArchiveResearch -183,ZergBuild -184,DroneHarvest -185,EvolutionChamberResearch -186,UpgradeToLair -187,UpgradeToHive -188,UpgradeToGreaterSpire -189,HiveResearch -190,SpawningPoolResearch -191,HydraliskDenResearch -192,SpireResearch -193,LarvaTrain -194,MorphToBroodLord -195,BurrowBanelingDown -196,BurrowBanelingUp -197,BurrowDroneDown -198,BurrowDroneUp -199,BurrowHydraliskDown -200,BurrowHydraliskUp -201,BurrowRoachDown -202,BurrowRoachUp -203,BurrowZerglingDown -204,BurrowZerglingUp -205,BurrowInfestorTerranDown -206,BurrowInfestorTerranUp -207,RedstoneLavaCritterBurrow -208,RedstoneLavaCritterInjuredBurrow -209,RedstoneLavaCritterUnburrow -210,RedstoneLavaCritterInjuredUnburrow -211,OverlordTransport -214,WarpGateTrain -215,BurrowQueenDown -216,BurrowQueenUp -217,NydusCanalTransport -218,Blink -219,BurrowInfestorDown -220,BurrowInfestorUp -221,MorphToOverseer -222,UpgradeToPlanetaryFortress -223,InfestationPitResearch -224,BanelingNestResearch -225,BurrowUltraliskDown -226,BurrowUltraliskUp -227,UpgradeToOrbital -228,UpgradeToWarpGate -229,MorphBackToGateway -230,OrbitalLiftOff -231,OrbitalCommandLand -232,ForceField -233,PhasingMode -234,TransportMode -235,FusionCoreResearch -236,CyberneticsCoreResearch -237,TwilightCouncilResearch -238,TacNukeStrike -241,EMP -243,HiveTrain -245,Transfusion -254,AttackRedirect -255,StimpackRedirect -256,StimpackMarauderRedirect -258,StopRedirect -259,GenerateCreep -260,QueenBuild -261,SpineCrawlerUproot -262,SporeCrawlerUproot -263,SpineCrawlerRoot -264,SporeCrawlerRoot -265,CreepTumorBurrowedBuild -267,ArchonWarp -268,NydusNetworkBuild -270,Charge -274,Contaminate -277,que5Passive -278,que5PassiveCancelToSelection -306,DigesterCreepSpray -310,MorphToMothership -335,XelNagaHealingShrine -344,MothershipCoreMassRecall -346,MorphToHellion -356,MorphToHellionTank -364,MorphToSwarmHostBurrowedMP -365,MorphToSwarmHostMP -367,attackProtossBuilding -369,stopProtossBuilding -370,BlindingCloud -372,Yoink -375,ViperConsumeStructure -378,TestZerg -379,VolatileBurstBuilding -386,WidowMineBurrow -387,WidowMineUnburrow -388,WidowMineAttack -389,TornadoMissile -393,BurrowLurkerMPDown -394,BurrowLurkerMPUp -396,HallucinationOracle -397,MedivacSpeedBoost -398,ExtendingBridgeNEWide8Out -399,ExtendingBridgeNEWide8 -400,ExtendingBridgeNWWide8Out -401,ExtendingBridgeNWWide8 -402,ExtendingBridgeNEWide10Out -403,ExtendingBridgeNEWide10 -404,ExtendingBridgeNWWide10Out -405,ExtendingBridgeNWWide10 -406,ExtendingBridgeNEWide12Out -407,ExtendingBridgeNEWide12 -408,ExtendingBridgeNWWide12Out -409,ExtendingBridgeNWWide12 -411,CritterFlee -412,OracleRevelation -420,MothershipCorePurifyNexus -421,XelNaga_Caverns_DoorE -422,XelNaga_Caverns_DoorEOpened -423,XelNaga_Caverns_DoorN -424,XelNaga_Caverns_DoorNE -425,XelNaga_Caverns_DoorNEOpened -426,XelNaga_Caverns_DoorNOpened -427,XelNaga_Caverns_DoorNW -428,XelNaga_Caverns_DoorNWOpened -429,XelNaga_Caverns_DoorS -430,XelNaga_Caverns_DoorSE -431,XelNaga_Caverns_DoorSEOpened -432,XelNaga_Caverns_DoorSOpened -433,XelNaga_Caverns_DoorSW -434,XelNaga_Caverns_DoorSWOpened -435,XelNaga_Caverns_DoorW -436,XelNaga_Caverns_DoorWOpened -437,XelNaga_Caverns_Floating_BridgeNE8Out -438,XelNaga_Caverns_Floating_BridgeNE8 -439,XelNaga_Caverns_Floating_BridgeNW8Out -440,XelNaga_Caverns_Floating_BridgeNW8 -441,XelNaga_Caverns_Floating_BridgeNE10Out -442,XelNaga_Caverns_Floating_BridgeNE10 -443,XelNaga_Caverns_Floating_BridgeNW10Out -444,XelNaga_Caverns_Floating_BridgeNW10 -445,XelNaga_Caverns_Floating_BridgeNE12Out -446,XelNaga_Caverns_Floating_BridgeNE12 -447,XelNaga_Caverns_Floating_BridgeNW12Out -448,XelNaga_Caverns_Floating_BridgeNW12 -449,XelNaga_Caverns_Floating_BridgeH8Out -450,XelNaga_Caverns_Floating_BridgeH8 -451,XelNaga_Caverns_Floating_BridgeV8Out -452,XelNaga_Caverns_Floating_BridgeV8 -453,XelNaga_Caverns_Floating_BridgeH10Out -454,XelNaga_Caverns_Floating_BridgeH10 -455,XelNaga_Caverns_Floating_BridgeV10Out -456,XelNaga_Caverns_Floating_BridgeV10 -457,XelNaga_Caverns_Floating_BridgeH12Out -458,XelNaga_Caverns_Floating_BridgeH12 -459,XelNaga_Caverns_Floating_BridgeV12Out -460,XelNaga_Caverns_Floating_BridgeV12 -461,TemporalField -485,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -486,SnowRefinery_Terran_ExtendingBridgeNEShort8 -487,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -488,SnowRefinery_Terran_ExtendingBridgeNWShort8 -510,CausticSpray -513,MorphToRavager -514,MorphToLurker -517,RavagerCorrosiveBile -518,BurrowRavagerDown -519,BurrowRavagerUp -521,PurificationNovaTargeted -523,LockOn -525,LockOnCancel -527,Hyperjump -529,ThorAPMode -530,ThorNormalMode -533,NydusWormTransport -534,OracleWeapon -540,LocustMPFlyingSwoop -541,HallucinationDisruptor -542,HallucinationAdept -543,VoidRaySwarmDamageBoost -544,SeekerDummyChannel -545,AiurLightBridgeNE8Out -546,AiurLightBridgeNE8 -547,AiurLightBridgeNE10Out -548,AiurLightBridgeNE10 -549,AiurLightBridgeNE12Out -550,AiurLightBridgeNE12 -551,AiurLightBridgeNW8Out -552,AiurLightBridgeNW8 -553,AiurLightBridgeNW10Out -554,AiurLightBridgeNW10 -555,AiurLightBridgeNW12Out -556,AiurLightBridgeNW12 -569,ShakurasLightBridgeNE8Out -570,ShakurasLightBridgeNE8 -571,ShakurasLightBridgeNE10Out -572,ShakurasLightBridgeNE10 -573,ShakurasLightBridgeNE12Out -574,ShakurasLightBridgeNE12 -575,ShakurasLightBridgeNW8Out -576,ShakurasLightBridgeNW8 -577,ShakurasLightBridgeNW10Out -578,ShakurasLightBridgeNW10 -579,ShakurasLightBridgeNW12Out -580,ShakurasLightBridgeNW12 -581,VoidMPImmortalReviveRebuild -583,ArbiterMPStasisField -584,ArbiterMPRecall -585,CorsairMPDisruptionWeb -586,MorphToGuardianMP -587,MorphToDevourerMP -588,DefilerMPConsume -589,DefilerMPDarkSwarm -590,DefilerMPPlague -591,DefilerMPBurrow -592,DefilerMPUnburrow -593,QueenMPEnsnare -594,QueenMPSpawnBroodlings -595,QueenMPInfestCommandCenter -599,OracleBuild -603,ParasiticBomb -604,AdeptPhaseShift -607,LurkerHoldFire -608,LurkerRemoveHoldFire -611,LiberatorAGTarget -612,LiberatorAATarget -614,AiurLightBridgeAbandonedNE8Out -615,AiurLightBridgeAbandonedNE8 -616,AiurLightBridgeAbandonedNE10Out -617,AiurLightBridgeAbandonedNE10 -618,AiurLightBridgeAbandonedNE12Out -619,AiurLightBridgeAbandonedNE12 -620,AiurLightBridgeAbandonedNW8Out -621,AiurLightBridgeAbandonedNW8 -622,AiurLightBridgeAbandonedNW10Out -623,AiurLightBridgeAbandonedNW10 -624,AiurLightBridgeAbandonedNW12Out -625,AiurLightBridgeAbandonedNW12 -626,KD8Charge -629,AdeptPhaseShiftCancel -630,AdeptShadePhaseShiftCancel -631,SlaynElementalGrab -633,PortCity_Bridge_UnitNE8Out -634,PortCity_Bridge_UnitNE8 -635,PortCity_Bridge_UnitSE8Out -636,PortCity_Bridge_UnitSE8 -637,PortCity_Bridge_UnitNW8Out -638,PortCity_Bridge_UnitNW8 -639,PortCity_Bridge_UnitSW8Out -640,PortCity_Bridge_UnitSW8 -641,PortCity_Bridge_UnitNE10Out -642,PortCity_Bridge_UnitNE10 -643,PortCity_Bridge_UnitSE10Out -644,PortCity_Bridge_UnitSE10 -645,PortCity_Bridge_UnitNW10Out -646,PortCity_Bridge_UnitNW10 -647,PortCity_Bridge_UnitSW10Out -648,PortCity_Bridge_UnitSW10 -649,PortCity_Bridge_UnitNE12Out -650,PortCity_Bridge_UnitNE12 -651,PortCity_Bridge_UnitSE12Out -652,PortCity_Bridge_UnitSE12 -653,PortCity_Bridge_UnitNW12Out -654,PortCity_Bridge_UnitNW12 -655,PortCity_Bridge_UnitSW12Out -656,PortCity_Bridge_UnitSW12 -657,PortCity_Bridge_UnitN8Out -658,PortCity_Bridge_UnitN8 -659,PortCity_Bridge_UnitS8Out -660,PortCity_Bridge_UnitS8 -661,PortCity_Bridge_UnitE8Out -662,PortCity_Bridge_UnitE8 -663,PortCity_Bridge_UnitW8Out -664,PortCity_Bridge_UnitW8 -665,PortCity_Bridge_UnitN10Out -666,PortCity_Bridge_UnitN10 -667,PortCity_Bridge_UnitS10Out -668,PortCity_Bridge_UnitS10 -669,PortCity_Bridge_UnitE10Out -670,PortCity_Bridge_UnitE10 -671,PortCity_Bridge_UnitW10Out -672,PortCity_Bridge_UnitW10 -673,PortCity_Bridge_UnitN12Out -674,PortCity_Bridge_UnitN12 -675,PortCity_Bridge_UnitS12Out -676,PortCity_Bridge_UnitS12 -677,PortCity_Bridge_UnitE12Out -678,PortCity_Bridge_UnitE12 -679,PortCity_Bridge_UnitW12Out -680,PortCity_Bridge_UnitW12 -683,DarkTemplarBlink -687,SpawnLocustsTargeted -688,VoidRaySwarmDamageBoostCancel -690,MorphToTransportOverlord -693,ChannelSnipe -696,DarkShrineResearch -697,LurkerDenMPResearch -698,ObserverSiegeMorphtoObserver -699,ObserverMorphtoObserverSiege -700,OverseerMorphtoOverseerSiegeMode -701,OverseerSiegeModeMorphtoOverseer -702,RavenScramblerMissile -703,RavenRepairDrone -704,RavenRepairDroneHeal -705,RavenShredderMissile -706,ChronoBoostEnergyCost -707,NexusMassRecall -711,ShieldBatteryRechargeChanneled diff --git a/sc2reader/data/LotV/59587_units.csv b/sc2reader/data/LotV/59587_units.csv deleted file mode 100644 index 7d3d8e8..0000000 --- a/sc2reader/data/LotV/59587_units.csv +++ /dev/null @@ -1,976 +0,0 @@ -3,System_Snapshot_Dummy -21,Ball -22,StereoscopicOptionsUnit -23,Colossus -24,TechLab -25,Reactor -27,InfestorTerran -28,BanelingCocoon -29,Baneling -30,Mothership -31,PointDefenseDrone -32,Changeling -33,ChangelingZealot -34,ChangelingMarineShield -35,ChangelingMarine -36,ChangelingZerglingWings -37,ChangelingZergling -39,CommandCenter -40,SupplyDepot -41,Refinery -42,Barracks -43,EngineeringBay -44,MissileTurret -45,Bunker -46,SensorTower -47,GhostAcademy -48,Factory -49,Starport -51,Armory -52,FusionCore -53,AutoTurret -54,SiegeTankSieged -55,SiegeTank -56,VikingAssault -57,VikingFighter -58,CommandCenterFlying -59,BarracksTechLab -60,BarracksReactor -61,FactoryTechLab -62,FactoryReactor -63,StarportTechLab -64,StarportReactor -65,FactoryFlying -66,StarportFlying -67,SCV -68,BarracksFlying -69,SupplyDepotLowered -70,Marine -71,Reaper -72,Ghost -73,Marauder -74,Thor -75,Hellion -76,Medivac -77,Banshee -78,Raven -79,Battlecruiser -80,Nuke -81,Nexus -82,Pylon -83,Assimilator -84,Gateway -85,Forge -86,FleetBeacon -87,TwilightCouncil -88,PhotonCannon -89,Stargate -90,TemplarArchive -91,DarkShrine -92,RoboticsBay -93,RoboticsFacility -94,CyberneticsCore -95,Zealot -96,Stalker -97,HighTemplar -98,DarkTemplar -99,Sentry -100,Phoenix -101,Carrier -102,VoidRay -103,WarpPrism -104,Observer -105,Immortal -106,Probe -107,Interceptor -108,Hatchery -109,CreepTumor -110,Extractor -111,SpawningPool -112,EvolutionChamber -113,HydraliskDen -114,Spire -115,UltraliskCavern -116,InfestationPit -117,NydusNetwork -118,BanelingNest -119,RoachWarren -120,SpineCrawler -121,SporeCrawler -122,Lair -123,Hive -124,GreaterSpire -125,Egg -126,Drone -127,Zergling -128,Overlord -129,Hydralisk -130,Mutalisk -131,Ultralisk -132,Roach -133,Infestor -134,Corruptor -135,BroodLordCocoon -136,BroodLord -137,BanelingBurrowed -138,DroneBurrowed -139,HydraliskBurrowed -140,RoachBurrowed -141,ZerglingBurrowed -142,InfestorTerranBurrowed -143,RedstoneLavaCritterBurrowed -144,RedstoneLavaCritterInjuredBurrowed -145,RedstoneLavaCritter -146,RedstoneLavaCritterInjured -147,QueenBurrowed -148,Queen -149,InfestorBurrowed -150,OverlordCocoon -151,Overseer -152,PlanetaryFortress -153,UltraliskBurrowed -154,OrbitalCommand -155,WarpGate -156,OrbitalCommandFlying -157,ForceField -158,WarpPrismPhasing -159,CreepTumorBurrowed -160,CreepTumorQueen -161,SpineCrawlerUprooted -162,SporeCrawlerUprooted -163,Archon -164,NydusCanal -165,BroodlingEscort -166,GhostAlternate -167,GhostNova -168,RichMineralField -169,RichMineralField750 -170,Ursadon -172,XelNagaTower -176,InfestedTerransEgg -177,Larva -178,ReaperPlaceholder -179,MarineACGluescreenDummy -180,FirebatACGluescreenDummy -181,MedicACGluescreenDummy -182,MarauderACGluescreenDummy -183,VultureACGluescreenDummy -184,SiegeTankACGluescreenDummy -185,VikingACGluescreenDummy -186,BansheeACGluescreenDummy -187,BattlecruiserACGluescreenDummy -188,OrbitalCommandACGluescreenDummy -189,BunkerACGluescreenDummy -190,BunkerUpgradedACGluescreenDummy -191,MissileTurretACGluescreenDummy -192,HellbatACGluescreenDummy -193,GoliathACGluescreenDummy -194,CycloneACGluescreenDummy -195,WraithACGluescreenDummy -196,ScienceVesselACGluescreenDummy -197,HerculesACGluescreenDummy -198,ThorACGluescreenDummy -199,PerditionTurretACGluescreenDummy -200,FlamingBettyACGluescreenDummy -201,DevastationTurretACGluescreenDummy -202,BlasterBillyACGluescreenDummy -203,SpinningDizzyACGluescreenDummy -204,ZerglingKerriganACGluescreenDummy -205,RaptorACGluescreenDummy -206,QueenCoopACGluescreenDummy -207,HydraliskACGluescreenDummy -208,HydraliskLurkerACGluescreenDummy -209,MutaliskBroodlordACGluescreenDummy -210,BroodLordACGluescreenDummy -211,UltraliskACGluescreenDummy -212,TorrasqueACGluescreenDummy -213,OverseerACGluescreenDummy -214,LurkerACGluescreenDummy -215,SpineCrawlerACGluescreenDummy -216,SporeCrawlerACGluescreenDummy -217,NydusNetworkACGluescreenDummy -218,OmegaNetworkACGluescreenDummy -219,ZerglingZagaraACGluescreenDummy -220,SwarmlingACGluescreenDummy -221,QueenZagaraACGluescreenDummy -222,BanelingACGluescreenDummy -223,SplitterlingACGluescreenDummy -224,AberrationACGluescreenDummy -225,ScourgeACGluescreenDummy -226,CorruptorACGluescreenDummy -227,OverseerZagaraACGluescreenDummy -228,BileLauncherACGluescreenDummy -229,SwarmQueenACGluescreenDummy -230,RoachACGluescreenDummy -231,RoachVileACGluescreenDummy -232,RavagerACGluescreenDummy -233,SwarmHostACGluescreenDummy -234,MutaliskACGluescreenDummy -235,GuardianACGluescreenDummy -236,DevourerACGluescreenDummy -237,ViperACGluescreenDummy -238,BrutaliskACGluescreenDummy -239,LeviathanACGluescreenDummy -240,ZealotACGluescreenDummy -241,ZealotAiurACGluescreenDummy -242,DragoonACGluescreenDummy -243,HighTemplarACGluescreenDummy -244,ArchonACGluescreenDummy -245,ImmortalACGluescreenDummy -246,ObserverACGluescreenDummy -247,PhoenixAiurACGluescreenDummy -248,ReaverACGluescreenDummy -249,TempestACGluescreenDummy -250,PhotonCannonACGluescreenDummy -251,ZealotVorazunACGluescreenDummy -252,ZealotShakurasACGluescreenDummy -253,StalkerShakurasACGluescreenDummy -254,DarkTemplarShakurasACGluescreenDummy -255,CorsairACGluescreenDummy -256,VoidRayACGluescreenDummy -257,VoidRayShakurasACGluescreenDummy -258,OracleACGluescreenDummy -259,DarkArchonACGluescreenDummy -260,DarkPylonACGluescreenDummy -261,ZealotPurifierACGluescreenDummy -262,SentryPurifierACGluescreenDummy -263,ImmortalKaraxACGluescreenDummy -264,ColossusACGluescreenDummy -265,ColossusPurifierACGluescreenDummy -266,PhoenixPurifierACGluescreenDummy -267,CarrierACGluescreenDummy -268,CarrierAiurACGluescreenDummy -269,KhaydarinMonolithACGluescreenDummy -270,ShieldBatteryACGluescreenDummy -271,EliteMarineACGluescreenDummy -272,MarauderCommandoACGluescreenDummy -273,SpecOpsGhostACGluescreenDummy -274,HellbatRangerACGluescreenDummy -275,StrikeGoliathACGluescreenDummy -276,HeavySiegeTankACGluescreenDummy -277,RaidLiberatorACGluescreenDummy -278,RavenTypeIIACGluescreenDummy -279,CovertBansheeACGluescreenDummy -280,RailgunTurretACGluescreenDummy -281,BlackOpsMissileTurretACGluescreenDummy -282,SupplicantACGluescreenDummy -283,StalkerTaldarimACGluescreenDummy -284,SentryTaldarimACGluescreenDummy -285,HighTemplarTaldarimACGluescreenDummy -286,ImmortalTaldarimACGluescreenDummy -287,ColossusTaldarimACGluescreenDummy -288,WarpPrismTaldarimACGluescreenDummy -289,PhotonCannonTaldarimACGluescreenDummy -290,StukovInfestedCivilianACGluescreenDummy -291,StukovInfestedMarineACGluescreenDummy -292,StukovInfestedSiegeTankACGluescreenDummy -293,StukovInfestedDiamondbackACGluescreenDummy -294,StukovInfestedBansheeACGluescreenDummy -295,SILiberatorACGluescreenDummy -296,StukovInfestedBunkerACGluescreenDummy -297,StukovInfestedMissileTurretACGluescreenDummy -298,StukovBroodQueenACGluescreenDummy -299,ZealotFenixACGluescreenDummy -300,SentryFenixACGluescreenDummy -301,AdeptFenixACGluescreenDummy -302,ImmortalFenixACGluescreenDummy -303,ColossusFenixACGluescreenDummy -304,DisruptorACGluescreenDummy -305,ObserverFenixACGluescreenDummy -306,ScoutACGluescreenDummy -307,CarrierFenixACGluescreenDummy -308,PhotonCannonFenixACGluescreenDummy -309,PrimalZerglingACGluescreenDummy -310,RavasaurACGluescreenDummy -311,PrimalRoachACGluescreenDummy -312,FireRoachACGluescreenDummy -313,PrimalGuardianACGluescreenDummy -314,PrimalHydraliskACGluescreenDummy -315,PrimalMutaliskACGluescreenDummy -316,PrimalImpalerACGluescreenDummy -317,PrimalSwarmHostACGluescreenDummy -318,CreeperHostACGluescreenDummy -319,PrimalUltraliskACGluescreenDummy -320,TyrannozorACGluescreenDummy -321,PrimalWurmACGluescreenDummy -322,HHReaperACGluescreenDummy -323,HHWidowMineACGluescreenDummy -324,HHHellionTankACGluescreenDummy -325,HHWraithACGluescreenDummy -326,HHVikingACGluescreenDummy -327,HHBattlecruiserACGluescreenDummy -328,HHRavenACGluescreenDummy -329,HHBomberPlatformACGluescreenDummy -330,HHMercStarportACGluescreenDummy -331,HHMissileTurretACGluescreenDummy -333,NeedleSpinesWeapon -334,CorruptionWeapon -335,InfestedTerransWeapon -336,NeuralParasiteWeapon -337,PointDefenseDroneReleaseWeapon -338,HunterSeekerWeapon -339,MULE -341,ThorAAWeapon -342,PunisherGrenadesLMWeapon -343,VikingFighterWeapon -344,ATALaserBatteryLMWeapon -345,ATSLaserBatteryLMWeapon -346,LongboltMissileWeapon -347,D8ChargeWeapon -348,YamatoWeapon -349,IonCannonsWeapon -350,AcidSalivaWeapon -351,SpineCrawlerWeapon -352,SporeCrawlerWeapon -353,GlaiveWurmWeapon -354,GlaiveWurmM2Weapon -355,GlaiveWurmM3Weapon -356,StalkerWeapon -357,EMP2Weapon -358,BacklashRocketsLMWeapon -359,PhotonCannonWeapon -360,ParasiteSporeWeapon -362,Broodling -363,BroodLordBWeapon -366,AutoTurretReleaseWeapon -367,LarvaReleaseMissile -368,AcidSpinesWeapon -369,FrenzyWeapon -370,ContaminateWeapon -382,BeaconArmy -383,BeaconDefend -384,BeaconAttack -385,BeaconHarass -386,BeaconIdle -387,BeaconAuto -388,BeaconDetect -389,BeaconScout -390,BeaconClaim -391,BeaconExpand -392,BeaconRally -393,BeaconCustom1 -394,BeaconCustom2 -395,BeaconCustom3 -396,BeaconCustom4 -397,HellionTank -398,Liberator -399,LiberatorAG -400,LurkerMP -401,SwarmHostMP -402,Ravager -403,Viper -404,Adept -405,MothershipCore -406,Cyclone -407,WidowMine -408,Disruptor -409,Oracle -411,Tempest -412,HighTemplarSkinPreview -418,Rocks2x2NonConjoined -419,FungalGrowthMissile -420,NeuralParasiteTentacleMissile -421,Beacon_Protoss -422,Beacon_ProtossSmall -423,Beacon_Terran -424,Beacon_TerranSmall -425,Beacon_Zerg -426,Beacon_ZergSmall -427,Lyote -428,CarrionBird -429,KarakMale -430,KarakFemale -431,UrsadakFemaleExotic -432,UrsadakMale -433,UrsadakFemale -434,UrsadakCalf -435,UrsadakMaleExotic -436,UtilityBot -437,CommentatorBot1 -438,CommentatorBot2 -439,CommentatorBot3 -440,CommentatorBot4 -441,Scantipede -442,Dog -443,Sheep -444,Cow -445,InfestedTerransEggPlacement -446,InfestorTerransWeapon -447,MineralField -448,VespeneGeyser -449,SpacePlatformGeyser -450,RichVespeneGeyser -451,DestructibleSearchlight -452,DestructibleBullhornLights -453,DestructibleStreetlight -454,DestructibleSpacePlatformSign -455,DestructibleStoreFrontCityProps -456,DestructibleBillboardTall -457,DestructibleBillboardScrollingText -458,DestructibleSpacePlatformBarrier -459,DestructibleSignsDirectional -460,DestructibleSignsConstruction -461,DestructibleSignsFunny -462,DestructibleSignsIcons -463,DestructibleSignsWarning -464,DestructibleGarage -465,DestructibleGarageLarge -466,DestructibleTrafficSignal -467,TrafficSignal -468,BraxisAlphaDestructible1x1 -469,BraxisAlphaDestructible2x2 -470,DestructibleDebris4x4 -471,DestructibleDebris6x6 -472,DestructibleRock2x4Vertical -473,DestructibleRock2x4Horizontal -474,DestructibleRock2x6Vertical -475,DestructibleRock2x6Horizontal -476,DestructibleRock4x4 -477,DestructibleRock6x6 -478,DestructibleRampDiagonalHugeULBR -479,DestructibleRampDiagonalHugeBLUR -480,DestructibleRampVerticalHuge -481,DestructibleRampHorizontalHuge -482,DestructibleDebrisRampDiagonalHugeULBR -483,DestructibleDebrisRampDiagonalHugeBLUR -484,WarpPrismSkinPreview -485,SiegeTankSkinPreview -486,LiberatorSkinPreview -487,OverlordGenerateCreepKeybind -488,MengskStatueAlone -489,MengskStatue -490,WolfStatue -491,GlobeStatue -492,Weapon -493,GlaiveWurmBounceWeapon -494,BroodLordWeapon -495,BroodLordAWeapon -496,CreepBlocker1x1 -497,PermanentCreepBlocker1x1 -498,PathingBlocker1x1 -499,PathingBlocker2x2 -500,AutoTestAttackTargetGround -501,AutoTestAttackTargetAir -502,AutoTestAttacker -503,HelperEmitterSelectionArrow -504,MultiKillObject -505,ShapeGolfball -506,ShapeCone -507,ShapeCube -508,ShapeCylinder -509,ShapeDodecahedron -510,ShapeIcosahedron -511,ShapeOctahedron -512,ShapePyramid -513,ShapeRoundedCube -514,ShapeSphere -515,ShapeTetrahedron -516,ShapeThickTorus -517,ShapeThinTorus -518,ShapeTorus -519,Shape4PointStar -520,Shape5PointStar -521,Shape6PointStar -522,Shape8PointStar -523,ShapeArrowPointer -524,ShapeBowl -525,ShapeBox -526,ShapeCapsule -527,ShapeCrescentMoon -528,ShapeDecahedron -529,ShapeDiamond -530,ShapeFootball -531,ShapeGemstone -532,ShapeHeart -533,ShapeJack -534,ShapePlusSign -535,ShapeShamrock -536,ShapeSpade -537,ShapeTube -538,ShapeEgg -539,ShapeYenSign -540,ShapeX -541,ShapeWatermelon -542,ShapeWonSign -543,ShapeTennisball -544,ShapeStrawberry -545,ShapeSmileyFace -546,ShapeSoccerball -547,ShapeRainbow -548,ShapeSadFace -549,ShapePoundSign -550,ShapePear -551,ShapePineapple -552,ShapeOrange -553,ShapePeanut -554,ShapeO -555,ShapeLemon -556,ShapeMoneyBag -557,ShapeHorseshoe -558,ShapeHockeyStick -559,ShapeHockeyPuck -560,ShapeHand -561,ShapeGolfClub -562,ShapeGrape -563,ShapeEuroSign -564,ShapeDollarSign -565,ShapeBasketball -566,ShapeCarrot -567,ShapeCherry -568,ShapeBaseball -569,ShapeBaseballBat -570,ShapeBanana -571,ShapeApple -572,ShapeCashLarge -573,ShapeCashMedium -574,ShapeCashSmall -575,ShapeFootballColored -576,ShapeLemonSmall -577,ShapeOrangeSmall -578,ShapeTreasureChestOpen -579,ShapeTreasureChestClosed -580,ShapeWatermelonSmall -581,UnbuildableRocksDestructible -582,UnbuildableBricksDestructible -583,UnbuildablePlatesDestructible -584,Debris2x2NonConjoined -585,EnemyPathingBlocker1x1 -586,EnemyPathingBlocker2x2 -587,EnemyPathingBlocker4x4 -588,EnemyPathingBlocker8x8 -589,EnemyPathingBlocker16x16 -590,ScopeTest -591,VikingSkinPreview -592,SentryACGluescreenDummy -593,StukovInfestedTrooperACGluescreenDummy -594,MineralField750 -610,CollapsibleTerranTowerDebris -611,DebrisRampLeft -612,DebrisRampRight -616,LocustMP -617,CollapsibleRockTowerDebris -618,NydusCanalAttacker -619,NydusCanalCreeper -620,SwarmHostBurrowedMP -621,WarHound -622,WidowMineBurrowed -623,LurkerMPEgg -624,LurkerMPBurrowed -625,LurkerDenMP -626,ExtendingBridgeNEWide8Out -627,ExtendingBridgeNEWide8 -628,ExtendingBridgeNWWide8Out -629,ExtendingBridgeNWWide8 -630,ExtendingBridgeNEWide10Out -631,ExtendingBridgeNEWide10 -632,ExtendingBridgeNWWide10Out -633,ExtendingBridgeNWWide10 -634,ExtendingBridgeNEWide12Out -635,ExtendingBridgeNEWide12 -636,ExtendingBridgeNWWide12Out -637,ExtendingBridgeNWWide12 -639,CollapsibleRockTowerDebrisRampRight -640,CollapsibleRockTowerDebrisRampLeft -641,XelNaga_Caverns_DoorE -642,XelNaga_Caverns_DoorEOpened -643,XelNaga_Caverns_DoorN -644,XelNaga_Caverns_DoorNE -645,XelNaga_Caverns_DoorNEOpened -646,XelNaga_Caverns_DoorNOpened -647,XelNaga_Caverns_DoorNW -648,XelNaga_Caverns_DoorNWOpened -649,XelNaga_Caverns_DoorS -650,XelNaga_Caverns_DoorSE -651,XelNaga_Caverns_DoorSEOpened -652,XelNaga_Caverns_DoorSOpened -653,XelNaga_Caverns_DoorSW -654,XelNaga_Caverns_DoorSWOpened -655,XelNaga_Caverns_DoorW -656,XelNaga_Caverns_DoorWOpened -657,XelNaga_Caverns_Floating_BridgeNE8Out -658,XelNaga_Caverns_Floating_BridgeNE8 -659,XelNaga_Caverns_Floating_BridgeNW8Out -660,XelNaga_Caverns_Floating_BridgeNW8 -661,XelNaga_Caverns_Floating_BridgeNE10Out -662,XelNaga_Caverns_Floating_BridgeNE10 -663,XelNaga_Caverns_Floating_BridgeNW10Out -664,XelNaga_Caverns_Floating_BridgeNW10 -665,XelNaga_Caverns_Floating_BridgeNE12Out -666,XelNaga_Caverns_Floating_BridgeNE12 -667,XelNaga_Caverns_Floating_BridgeNW12Out -668,XelNaga_Caverns_Floating_BridgeNW12 -669,XelNaga_Caverns_Floating_BridgeH8Out -670,XelNaga_Caverns_Floating_BridgeH8 -671,XelNaga_Caverns_Floating_BridgeV8Out -672,XelNaga_Caverns_Floating_BridgeV8 -673,XelNaga_Caverns_Floating_BridgeH10Out -674,XelNaga_Caverns_Floating_BridgeH10 -675,XelNaga_Caverns_Floating_BridgeV10Out -676,XelNaga_Caverns_Floating_BridgeV10 -677,XelNaga_Caverns_Floating_BridgeH12Out -678,XelNaga_Caverns_Floating_BridgeH12 -679,XelNaga_Caverns_Floating_BridgeV12Out -680,XelNaga_Caverns_Floating_BridgeV12 -683,CollapsibleTerranTowerPushUnitRampLeft -684,CollapsibleTerranTowerPushUnitRampRight -687,CollapsibleRockTowerPushUnit -688,CollapsibleTerranTowerPushUnit -689,CollapsibleRockTowerPushUnitRampRight -690,CollapsibleRockTowerPushUnitRampLeft -691,DigesterCreepSprayTargetUnit -692,DigesterCreepSprayUnit -693,NydusCanalAttackerWeapon -694,ViperConsumeStructureWeapon -697,ResourceBlocker -698,TempestWeapon -699,YoinkMissile -703,YoinkVikingAirMissile -705,YoinkVikingGroundMissile -707,YoinkSiegeTankMissile -709,WarHoundWeapon -711,EyeStalkWeapon -714,WidowMineWeapon -715,WidowMineAirWeapon -716,MothershipCoreWeaponWeapon -717,TornadoMissileWeapon -718,TornadoMissileDummyWeapon -719,TalonsMissileWeapon -720,CreepTumorMissile -721,LocustMPEggAMissileWeapon -722,LocustMPEggBMissileWeapon -723,LocustMPWeapon -725,RepulsorCannonWeapon -729,CollapsibleRockTowerDiagonal -730,CollapsibleTerranTowerDiagonal -731,CollapsibleTerranTowerRampLeft -732,CollapsibleTerranTowerRampRight -733,Ice2x2NonConjoined -734,IceProtossCrates -735,ProtossCrates -736,TowerMine -737,PickupPalletGas -738,PickupPalletMinerals -739,PickupScrapSalvage1x1 -740,PickupScrapSalvage2x2 -741,PickupScrapSalvage3x3 -742,RoughTerrain -743,UnbuildableBricksSmallUnit -744,UnbuildablePlatesSmallUnit -745,UnbuildablePlatesUnit -746,UnbuildableRocksSmallUnit -747,XelNagaHealingShrine -748,InvisibleTargetDummy -749,ProtossVespeneGeyser -750,CollapsibleRockTower -751,CollapsibleTerranTower -752,ThornLizard -753,CleaningBot -754,DestructibleRock6x6Weak -755,ProtossSnakeSegmentDemo -756,PhysicsCapsule -757,PhysicsCube -758,PhysicsCylinder -759,PhysicsKnot -760,PhysicsL -761,PhysicsPrimitives -762,PhysicsSphere -763,PhysicsStar -764,CreepBlocker4x4 -765,DestructibleCityDebris2x4Vertical -766,DestructibleCityDebris2x4Horizontal -767,DestructibleCityDebris2x6Vertical -768,DestructibleCityDebris2x6Horizontal -769,DestructibleCityDebris4x4 -770,DestructibleCityDebris6x6 -771,DestructibleCityDebrisHugeDiagonalBLUR -772,DestructibleCityDebrisHugeDiagonalULBR -773,TestZerg -774,PathingBlockerRadius1 -775,DestructibleRockEx12x4Vertical -776,DestructibleRockEx12x4Horizontal -777,DestructibleRockEx12x6Vertical -778,DestructibleRockEx12x6Horizontal -779,DestructibleRockEx14x4 -780,DestructibleRockEx16x6 -781,DestructibleRockEx1DiagonalHugeULBR -782,DestructibleRockEx1DiagonalHugeBLUR -783,DestructibleRockEx1VerticalHuge -784,DestructibleRockEx1HorizontalHuge -785,DestructibleIce2x4Vertical -786,DestructibleIce2x4Horizontal -787,DestructibleIce2x6Vertical -788,DestructibleIce2x6Horizontal -789,DestructibleIce4x4 -790,DestructibleIce6x6 -791,DestructibleIceDiagonalHugeULBR -792,DestructibleIceDiagonalHugeBLUR -793,DestructibleIceVerticalHuge -794,DestructibleIceHorizontalHuge -795,DesertPlanetSearchlight -796,DesertPlanetStreetlight -797,UnbuildableBricksUnit -798,UnbuildableRocksUnit -799,ZerusDestructibleArch -800,Artosilope -801,Anteplott -802,LabBot -803,Crabeetle -804,CollapsibleRockTowerRampRight -805,CollapsibleRockTowerRampLeft -806,LabMineralField -807,LabMineralField750 -822,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -823,SnowRefinery_Terran_ExtendingBridgeNEShort8 -824,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -825,SnowRefinery_Terran_ExtendingBridgeNWShort8 -830,Tarsonis_DoorN -831,Tarsonis_DoorNLowered -832,Tarsonis_DoorNE -833,Tarsonis_DoorNELowered -834,Tarsonis_DoorE -835,Tarsonis_DoorELowered -836,Tarsonis_DoorNW -837,Tarsonis_DoorNWLowered -838,CompoundMansion_DoorN -839,CompoundMansion_DoorNLowered -840,CompoundMansion_DoorNE -841,CompoundMansion_DoorNELowered -842,CompoundMansion_DoorE -843,CompoundMansion_DoorELowered -844,CompoundMansion_DoorNW -845,CompoundMansion_DoorNWLowered -846,RavagerCocoon -847,RavagerBurrowed -849,ThorAP -850,LocustMPFlying -851,AiurLightBridgeNE8Out -852,AiurLightBridgeNE8 -853,AiurLightBridgeNE10Out -854,AiurLightBridgeNE10 -855,AiurLightBridgeNE12Out -856,AiurLightBridgeNE12 -857,AiurLightBridgeNW8Out -858,AiurLightBridgeNW8 -859,AiurLightBridgeNW10Out -860,AiurLightBridgeNW10 -861,AiurLightBridgeNW12Out -862,AiurLightBridgeNW12 -863,AiurTempleBridgeNE8Out -865,AiurTempleBridgeNE10Out -867,AiurTempleBridgeNE12Out -869,AiurTempleBridgeNW8Out -871,AiurTempleBridgeNW10Out -873,AiurTempleBridgeNW12Out -875,ShakurasLightBridgeNE8Out -876,ShakurasLightBridgeNE8 -877,ShakurasLightBridgeNE10Out -878,ShakurasLightBridgeNE10 -879,ShakurasLightBridgeNE12Out -880,ShakurasLightBridgeNE12 -881,ShakurasLightBridgeNW8Out -882,ShakurasLightBridgeNW8 -883,ShakurasLightBridgeNW10Out -884,ShakurasLightBridgeNW10 -885,ShakurasLightBridgeNW12Out -886,ShakurasLightBridgeNW12 -887,VoidMPImmortalReviveCorpse -888,GuardianCocoonMP -889,GuardianMP -890,DevourerCocoonMP -891,DevourerMP -892,DefilerMPBurrowed -893,DefilerMP -894,OracleStasisTrap -895,DisruptorPhased -896,AiurLightBridgeAbandonedNE8Out -897,AiurLightBridgeAbandonedNE8 -898,AiurLightBridgeAbandonedNE10Out -899,AiurLightBridgeAbandonedNE10 -900,AiurLightBridgeAbandonedNE12Out -901,AiurLightBridgeAbandonedNE12 -902,AiurLightBridgeAbandonedNW8Out -903,AiurLightBridgeAbandonedNW8 -904,AiurLightBridgeAbandonedNW10Out -905,AiurLightBridgeAbandonedNW10 -906,AiurLightBridgeAbandonedNW12Out -907,AiurLightBridgeAbandonedNW12 -908,CollapsiblePurifierTowerDebris -909,PortCity_Bridge_UnitNE8Out -910,PortCity_Bridge_UnitNE8 -911,PortCity_Bridge_UnitSE8Out -912,PortCity_Bridge_UnitSE8 -913,PortCity_Bridge_UnitNW8Out -914,PortCity_Bridge_UnitNW8 -915,PortCity_Bridge_UnitSW8Out -916,PortCity_Bridge_UnitSW8 -917,PortCity_Bridge_UnitNE10Out -918,PortCity_Bridge_UnitNE10 -919,PortCity_Bridge_UnitSE10Out -920,PortCity_Bridge_UnitSE10 -921,PortCity_Bridge_UnitNW10Out -922,PortCity_Bridge_UnitNW10 -923,PortCity_Bridge_UnitSW10Out -924,PortCity_Bridge_UnitSW10 -925,PortCity_Bridge_UnitNE12Out -926,PortCity_Bridge_UnitNE12 -927,PortCity_Bridge_UnitSE12Out -928,PortCity_Bridge_UnitSE12 -929,PortCity_Bridge_UnitNW12Out -930,PortCity_Bridge_UnitNW12 -931,PortCity_Bridge_UnitSW12Out -932,PortCity_Bridge_UnitSW12 -933,PortCity_Bridge_UnitN8Out -934,PortCity_Bridge_UnitN8 -935,PortCity_Bridge_UnitS8Out -936,PortCity_Bridge_UnitS8 -937,PortCity_Bridge_UnitE8Out -938,PortCity_Bridge_UnitE8 -939,PortCity_Bridge_UnitW8Out -940,PortCity_Bridge_UnitW8 -941,PortCity_Bridge_UnitN10Out -942,PortCity_Bridge_UnitN10 -943,PortCity_Bridge_UnitS10Out -944,PortCity_Bridge_UnitS10 -945,PortCity_Bridge_UnitE10Out -946,PortCity_Bridge_UnitE10 -947,PortCity_Bridge_UnitW10Out -948,PortCity_Bridge_UnitW10 -949,PortCity_Bridge_UnitN12Out -950,PortCity_Bridge_UnitN12 -951,PortCity_Bridge_UnitS12Out -952,PortCity_Bridge_UnitS12 -953,PortCity_Bridge_UnitE12Out -954,PortCity_Bridge_UnitE12 -955,PortCity_Bridge_UnitW12Out -956,PortCity_Bridge_UnitW12 -957,PurifierRichMineralField -958,PurifierRichMineralField750 -973,CollapsiblePurifierTowerPushUnit -975,LocustMPPrecursor -976,ReleaseInterceptorsBeacon -977,AdeptPhaseShift -978,RavagerCorrosiveBileMissile -979,HydraliskImpaleMissile -980,CycloneMissileLargeAir -981,CycloneMissile -982,CycloneMissileLarge -983,ThorAALance -984,OracleWeapon -985,TempestWeaponGround -986,RavagerWeaponMissile -987,ScoutMPAirWeaponLeft -988,ScoutMPAirWeaponRight -989,ArbiterMPWeaponMissile -990,GuardianMPWeapon -991,DevourerMPWeaponMissile -992,DefilerMPDarkSwarmWeapon -993,QueenMPEnsnareMissile -994,QueenMPSpawnBroodlingsMissile -995,LightningBombWeapon -996,HERCPlacement -997,GrappleWeapon -1000,CausticSprayMissile -1001,ParasiticBombMissile -1002,ParasiticBombDummy -1003,AdeptWeapon -1004,AdeptUpgradeWeapon -1005,LiberatorMissile -1006,LiberatorDamageMissile -1007,LiberatorAGMissile -1008,KD8Charge -1009,KD8ChargeWeapon -1011,SlaynElementalGrabWeapon -1012,SlaynElementalGrabAirUnit -1013,SlaynElementalGrabGroundUnit -1014,SlaynElementalWeapon -1019,DestructibleExpeditionGate6x6 -1020,DestructibleZergInfestation3x3 -1021,HERC -1022,Moopy -1023,Replicant -1024,SeekerMissile -1025,AiurTempleBridgeDestructibleNE8Out -1026,AiurTempleBridgeDestructibleNE10Out -1027,AiurTempleBridgeDestructibleNE12Out -1028,AiurTempleBridgeDestructibleNW8Out -1029,AiurTempleBridgeDestructibleNW10Out -1030,AiurTempleBridgeDestructibleNW12Out -1031,AiurTempleBridgeDestructibleSW8Out -1032,AiurTempleBridgeDestructibleSW10Out -1033,AiurTempleBridgeDestructibleSW12Out -1034,AiurTempleBridgeDestructibleSE8Out -1035,AiurTempleBridgeDestructibleSE10Out -1036,AiurTempleBridgeDestructibleSE12Out -1038,FlyoverUnit -1039,CorsairMP -1040,ScoutMP -1042,ArbiterMP -1043,ScourgeMP -1044,DefilerMPPlagueWeapon -1045,QueenMP -1046,XelNagaDestructibleRampBlocker6S -1047,XelNagaDestructibleRampBlocker6SE -1048,XelNagaDestructibleRampBlocker6E -1049,XelNagaDestructibleRampBlocker6NE -1050,XelNagaDestructibleRampBlocker6N -1051,XelNagaDestructibleRampBlocker6NW -1052,XelNagaDestructibleRampBlocker6W -1053,XelNagaDestructibleRampBlocker6SW -1054,XelNagaDestructibleRampBlocker8S -1055,XelNagaDestructibleRampBlocker8SE -1056,XelNagaDestructibleRampBlocker8E -1057,XelNagaDestructibleRampBlocker8NE -1058,XelNagaDestructibleRampBlocker8N -1059,XelNagaDestructibleRampBlocker8NW -1060,XelNagaDestructibleRampBlocker8W -1061,XelNagaDestructibleRampBlocker8SW -1062,XelNagaDestructibleBlocker6S -1063,XelNagaDestructibleBlocker6SE -1064,XelNagaDestructibleBlocker6E -1065,XelNagaDestructibleBlocker6NE -1066,XelNagaDestructibleBlocker6N -1067,XelNagaDestructibleBlocker6NW -1068,XelNagaDestructibleBlocker6W -1069,XelNagaDestructibleBlocker6SW -1070,XelNagaDestructibleBlocker8S -1071,XelNagaDestructibleBlocker8SE -1072,XelNagaDestructibleBlocker8E -1073,XelNagaDestructibleBlocker8NE -1074,XelNagaDestructibleBlocker8N -1075,XelNagaDestructibleBlocker8NW -1076,XelNagaDestructibleBlocker8W -1077,XelNagaDestructibleBlocker8SW -1078,ReptileCrate -1079,SlaynSwarmHostSpawnFlyer -1080,SlaynElemental -1081,PurifierVespeneGeyser -1082,ShakurasVespeneGeyser -1083,CollapsiblePurifierTowerDiagonal -1084,CreepOnlyBlocker4x4 -1085,PurifierMineralField -1086,PurifierMineralField750 -1087,BattleStationMineralField -1088,BattleStationMineralField750 -1089,Beacon_Nova -1090,Beacon_NovaSmall -1091,Ursula -1092,Elsecaro_Colonist_Hut -1093,SnowGlazeStarterMP -1094,ShieldBattery -1095,TransportOverlordCocoon -1096,OverlordTransport -1097,PylonOvercharged -1098,ObserverSiegeMode -1099,OverseerSiegeMode -1100,RavenRepairDrone -1102,BypassArmorDrone -1103,AdeptPiercingWeapon -1104,HighTemplarWeaponMissile -1105,CycloneMissileLargeAirAlternative -1106,RavenScramblerMissile -1107,RavenRepairDroneReleaseWeapon -1108,RavenShredderMissileWeapon -1109,InfestedAcidSpinesWeapon -1110,InfestorEnsnareAttackMissile -1111,SNARE_PLACEHOLDER -1114,CorrosiveParasiteWeapon diff --git a/sc2reader/data/LotV/70154_abilities.csv b/sc2reader/data/LotV/70154_abilities.csv deleted file mode 100644 index d4d9cc4..0000000 --- a/sc2reader/data/LotV/70154_abilities.csv +++ /dev/null @@ -1,408 +0,0 @@ -39,Taunt -40,stop -42,move -45,attack -60,SprayTerran -61,SprayZerg -62,SprayProtoss -63,SalvageShared -65,GhostHoldFire -66,GhostWeaponsFree -68,Explode -69,FleetBeaconResearch -70,FungalGrowth -71,GuardianShield -72,MULERepair -73,ZerglingTrain -74,NexusTrainMothership -75,Feedback -76,MassRecall -78,HallucinationArchon -79,HallucinationColossus -80,HallucinationHighTemplar -81,HallucinationImmortal -82,HallucinationPhoenix -83,HallucinationProbe -84,HallucinationStalker -85,HallucinationVoidRay -86,HallucinationWarpPrism -87,HallucinationZealot -88,MULEGather -90,CalldownMULE -91,GravitonBeam -95,SpawnChangeling -102,Rally -103,ProgressRally -104,RallyCommand -105,RallyNexus -106,RallyHatchery -107,RoachWarrenResearch -109,InfestedTerrans -110,NeuralParasite -111,SpawnLarva -112,StimpackMarauder -113,SupplyDrop -117,UltraliskCavernResearch -119,SCVHarvest -120,ProbeHarvest -122,que1 -123,que5 -124,que5CancelToSelection -126,que5Addon -127,BuildInProgress -128,Repair -129,TerranBuild -131,Stimpack -132,GhostCloak -134,MedivacHeal -135,SiegeMode -136,Unsiege -137,BansheeCloak -138,MedivacTransport -139,ScannerSweep -140,Yamato -141,AssaultMode -142,FighterMode -143,BunkerTransport -144,CommandCenterTransport -145,CommandCenterLiftOff -146,CommandCenterLand -147,BarracksFlyingBuild -148,BarracksLiftOff -149,FactoryBuild -150,FactoryLiftOff -151,StarportBuild -152,StarportLiftOff -153,FactoryLand -154,StarportLand -155,OrbitalCommandTrain -156,BarracksLand -157,SupplyDepotLower -158,SupplyDepotRaise -159,BarracksTrain -160,FactoryTrain -161,StarportTrain -162,EngineeringBayResearch -164,GhostAcademyTrain -165,BarracksTechLabResearch -166,FactoryTechLabResearch -167,StarportTechLabResearch -168,GhostAcademyResearch -169,ArmoryResearch -170,ProtossBuild -171,WarpPrismTransport -172,GatewayTrain -173,StargateTrain -174,RoboticsFacilityTrain -175,NexusTrain -176,PsiStorm -177,HangarQueue5 -179,CarrierTrain -180,ForgeResearch -181,RoboticsBayResearch -182,TemplarArchiveResearch -183,ZergBuild -184,DroneHarvest -185,EvolutionChamberResearch -186,UpgradeToLair -187,UpgradeToHive -188,UpgradeToGreaterSpire -189,HiveResearch -190,SpawningPoolResearch -191,HydraliskDenResearch -192,SpireResearch -193,LarvaTrain -194,MorphToBroodLord -195,BurrowBanelingDown -196,BurrowBanelingUp -197,BurrowDroneDown -198,BurrowDroneUp -199,BurrowHydraliskDown -200,BurrowHydraliskUp -201,BurrowRoachDown -202,BurrowRoachUp -203,BurrowZerglingDown -204,BurrowZerglingUp -205,BurrowInfestorTerranDown -206,BurrowInfestorTerranUp -207,RedstoneLavaCritterBurrow -208,RedstoneLavaCritterInjuredBurrow -209,RedstoneLavaCritterUnburrow -210,RedstoneLavaCritterInjuredUnburrow -214,WarpGateTrain -215,BurrowQueenDown -216,BurrowQueenUp -217,NydusCanalTransport -218,Blink -219,BurrowInfestorDown -220,BurrowInfestorUp -221,MorphToOverseer -222,UpgradeToPlanetaryFortress -223,InfestationPitResearch -224,BanelingNestResearch -225,BurrowUltraliskDown -226,BurrowUltraliskUp -227,UpgradeToOrbital -228,UpgradeToWarpGate -229,MorphBackToGateway -230,OrbitalLiftOff -231,OrbitalCommandLand -232,ForceField -233,PhasingMode -234,TransportMode -235,FusionCoreResearch -236,CyberneticsCoreResearch -237,TwilightCouncilResearch -238,TacNukeStrike -241,EMP -243,HiveTrain -245,Transfusion -254,AttackRedirect -255,StimpackRedirect -256,StimpackMarauderRedirect -258,StopRedirect -259,GenerateCreep -260,QueenBuild -261,SpineCrawlerUproot -262,SporeCrawlerUproot -263,SpineCrawlerRoot -264,SporeCrawlerRoot -265,CreepTumorBurrowedBuild -266,BuildAutoTurret -267,ArchonWarp -268,NydusNetworkBuild -270,Charge -274,Contaminate -277,que5Passive -278,que5PassiveCancelToSelection -302,ThorNormalMode -307,DigesterCreepSpray -311,MorphToMothership -336,XelNagaHealingShrine -345,MothershipCoreMassRecall -347,MorphToHellion -357,MorphToHellionTank -365,MorphToSwarmHostBurrowedMP -366,MorphToSwarmHostMP -368,attackProtossBuilding -370,stopProtossBuilding -371,BlindingCloud -373,Yoink -376,ViperConsumeStructure -379,TestZerg -380,VolatileBurstBuilding -387,WidowMineBurrow -388,WidowMineUnburrow -389,WidowMineAttack -390,TornadoMissile -394,BurrowLurkerMPDown -395,BurrowLurkerMPUp -397,HallucinationOracle -398,MedivacSpeedBoost -399,ExtendingBridgeNEWide8Out -400,ExtendingBridgeNEWide8 -401,ExtendingBridgeNWWide8Out -402,ExtendingBridgeNWWide8 -403,ExtendingBridgeNEWide10Out -404,ExtendingBridgeNEWide10 -405,ExtendingBridgeNWWide10Out -406,ExtendingBridgeNWWide10 -407,ExtendingBridgeNEWide12Out -408,ExtendingBridgeNEWide12 -409,ExtendingBridgeNWWide12Out -410,ExtendingBridgeNWWide12 -412,CritterFlee -413,OracleRevelation -421,MothershipCorePurifyNexus -422,XelNaga_Caverns_DoorE -423,XelNaga_Caverns_DoorEOpened -424,XelNaga_Caverns_DoorN -425,XelNaga_Caverns_DoorNE -426,XelNaga_Caverns_DoorNEOpened -427,XelNaga_Caverns_DoorNOpened -428,XelNaga_Caverns_DoorNW -429,XelNaga_Caverns_DoorNWOpened -430,XelNaga_Caverns_DoorS -431,XelNaga_Caverns_DoorSE -432,XelNaga_Caverns_DoorSEOpened -433,XelNaga_Caverns_DoorSOpened -434,XelNaga_Caverns_DoorSW -435,XelNaga_Caverns_DoorSWOpened -436,XelNaga_Caverns_DoorW -437,XelNaga_Caverns_DoorWOpened -438,XelNaga_Caverns_Floating_BridgeNE8Out -439,XelNaga_Caverns_Floating_BridgeNE8 -440,XelNaga_Caverns_Floating_BridgeNW8Out -441,XelNaga_Caverns_Floating_BridgeNW8 -442,XelNaga_Caverns_Floating_BridgeNE10Out -443,XelNaga_Caverns_Floating_BridgeNE10 -444,XelNaga_Caverns_Floating_BridgeNW10Out -445,XelNaga_Caverns_Floating_BridgeNW10 -446,XelNaga_Caverns_Floating_BridgeNE12Out -447,XelNaga_Caverns_Floating_BridgeNE12 -448,XelNaga_Caverns_Floating_BridgeNW12Out -449,XelNaga_Caverns_Floating_BridgeNW12 -450,XelNaga_Caverns_Floating_BridgeH8Out -451,XelNaga_Caverns_Floating_BridgeH8 -452,XelNaga_Caverns_Floating_BridgeV8Out -453,XelNaga_Caverns_Floating_BridgeV8 -454,XelNaga_Caverns_Floating_BridgeH10Out -455,XelNaga_Caverns_Floating_BridgeH10 -456,XelNaga_Caverns_Floating_BridgeV10Out -457,XelNaga_Caverns_Floating_BridgeV10 -458,XelNaga_Caverns_Floating_BridgeH12Out -459,XelNaga_Caverns_Floating_BridgeH12 -460,XelNaga_Caverns_Floating_BridgeV12Out -461,XelNaga_Caverns_Floating_BridgeV12 -462,TemporalField -486,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -487,SnowRefinery_Terran_ExtendingBridgeNEShort8 -488,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -489,SnowRefinery_Terran_ExtendingBridgeNWShort8 -511,CausticSpray -514,MorphToRavager -515,MorphToLurker -518,RavagerCorrosiveBile -519,BurrowRavagerDown -520,BurrowRavagerUp -522,PurificationNovaTargeted -524,LockOn -526,LockOnCancel -528,Hyperjump -530,ThorAPMode -533,NydusWormTransport -534,OracleWeapon -540,LocustMPFlyingSwoop -541,HallucinationDisruptor -542,HallucinationAdept -543,VoidRaySwarmDamageBoost -544,SeekerDummyChannel -545,AiurLightBridgeNE8Out -546,AiurLightBridgeNE8 -547,AiurLightBridgeNE10Out -548,AiurLightBridgeNE10 -549,AiurLightBridgeNE12Out -550,AiurLightBridgeNE12 -551,AiurLightBridgeNW8Out -552,AiurLightBridgeNW8 -553,AiurLightBridgeNW10Out -554,AiurLightBridgeNW10 -555,AiurLightBridgeNW12Out -556,AiurLightBridgeNW12 -569,ShakurasLightBridgeNE8Out -570,ShakurasLightBridgeNE8 -571,ShakurasLightBridgeNE10Out -572,ShakurasLightBridgeNE10 -573,ShakurasLightBridgeNE12Out -574,ShakurasLightBridgeNE12 -575,ShakurasLightBridgeNW8Out -576,ShakurasLightBridgeNW8 -577,ShakurasLightBridgeNW10Out -578,ShakurasLightBridgeNW10 -579,ShakurasLightBridgeNW12Out -580,ShakurasLightBridgeNW12 -581,VoidMPImmortalReviveRebuild -583,ArbiterMPStasisField -584,ArbiterMPRecall -585,CorsairMPDisruptionWeb -586,MorphToGuardianMP -587,MorphToDevourerMP -588,DefilerMPConsume -589,DefilerMPDarkSwarm -590,DefilerMPPlague -591,DefilerMPBurrow -592,DefilerMPUnburrow -593,QueenMPEnsnare -594,QueenMPSpawnBroodlings -595,QueenMPInfestCommandCenter -599,OracleBuild -603,ParasiticBomb -604,AdeptPhaseShift -607,LurkerHoldFire -608,LurkerRemoveHoldFire -611,LiberatorAGTarget -612,LiberatorAATarget -614,AiurLightBridgeAbandonedNE8Out -615,AiurLightBridgeAbandonedNE8 -616,AiurLightBridgeAbandonedNE10Out -617,AiurLightBridgeAbandonedNE10 -618,AiurLightBridgeAbandonedNE12Out -619,AiurLightBridgeAbandonedNE12 -620,AiurLightBridgeAbandonedNW8Out -621,AiurLightBridgeAbandonedNW8 -622,AiurLightBridgeAbandonedNW10Out -623,AiurLightBridgeAbandonedNW10 -624,AiurLightBridgeAbandonedNW12Out -625,AiurLightBridgeAbandonedNW12 -626,KD8Charge -629,AdeptPhaseShiftCancel -630,AdeptShadePhaseShiftCancel -631,SlaynElementalGrab -633,PortCity_Bridge_UnitNE8Out -634,PortCity_Bridge_UnitNE8 -635,PortCity_Bridge_UnitSE8Out -636,PortCity_Bridge_UnitSE8 -637,PortCity_Bridge_UnitNW8Out -638,PortCity_Bridge_UnitNW8 -639,PortCity_Bridge_UnitSW8Out -640,PortCity_Bridge_UnitSW8 -641,PortCity_Bridge_UnitNE10Out -642,PortCity_Bridge_UnitNE10 -643,PortCity_Bridge_UnitSE10Out -644,PortCity_Bridge_UnitSE10 -645,PortCity_Bridge_UnitNW10Out -646,PortCity_Bridge_UnitNW10 -647,PortCity_Bridge_UnitSW10Out -648,PortCity_Bridge_UnitSW10 -649,PortCity_Bridge_UnitNE12Out -650,PortCity_Bridge_UnitNE12 -651,PortCity_Bridge_UnitSE12Out -652,PortCity_Bridge_UnitSE12 -653,PortCity_Bridge_UnitNW12Out -654,PortCity_Bridge_UnitNW12 -655,PortCity_Bridge_UnitSW12Out -656,PortCity_Bridge_UnitSW12 -657,PortCity_Bridge_UnitN8Out -658,PortCity_Bridge_UnitN8 -659,PortCity_Bridge_UnitS8Out -660,PortCity_Bridge_UnitS8 -661,PortCity_Bridge_UnitE8Out -662,PortCity_Bridge_UnitE8 -663,PortCity_Bridge_UnitW8Out -664,PortCity_Bridge_UnitW8 -665,PortCity_Bridge_UnitN10Out -666,PortCity_Bridge_UnitN10 -667,PortCity_Bridge_UnitS10Out -668,PortCity_Bridge_UnitS10 -669,PortCity_Bridge_UnitE10Out -670,PortCity_Bridge_UnitE10 -671,PortCity_Bridge_UnitW10Out -672,PortCity_Bridge_UnitW10 -673,PortCity_Bridge_UnitN12Out -674,PortCity_Bridge_UnitN12 -675,PortCity_Bridge_UnitS12Out -676,PortCity_Bridge_UnitS12 -677,PortCity_Bridge_UnitE12Out -678,PortCity_Bridge_UnitE12 -679,PortCity_Bridge_UnitW12Out -680,PortCity_Bridge_UnitW12 -683,DarkTemplarBlink -687,OverlordSingleTransport -688,SpawnLocustsTargeted -689,ViperParasiticBombRelay -690,ParasiticBombRelayDodge -691,VoidRaySwarmDamageBoostCancel -693,MorphToTransportOverlord -696,ChannelSnipe -699,DarkShrineResearch -700,LurkerDenMPResearch -701,ObserverSiegeMorphtoObserver -702,ObserverMorphtoObserverSiege -703,OverseerMorphtoOverseerSiegeMode -704,OverseerSiegeModeMorphtoOverseer -705,RavenScramblerMissile -707,RavenRepairDroneHeal -708,RavenShredderMissile -709,ChronoBoostEnergyCost -710,NexusMassRecall -714,ShieldBatteryRechargeChanneled diff --git a/sc2reader/data/LotV/70154_units.csv b/sc2reader/data/LotV/70154_units.csv deleted file mode 100644 index 9d5982e..0000000 --- a/sc2reader/data/LotV/70154_units.csv +++ /dev/null @@ -1,996 +0,0 @@ -3,System_Snapshot_Dummy -21,Ball -22,StereoscopicOptionsUnit -23,Colossus -24,TechLab -25,Reactor -27,InfestorTerran -28,BanelingCocoon -29,Baneling -30,Mothership -31,PointDefenseDrone -32,Changeling -33,ChangelingZealot -34,ChangelingMarineShield -35,ChangelingMarine -36,ChangelingZerglingWings -37,ChangelingZergling -39,CommandCenter -40,SupplyDepot -41,Refinery -42,Barracks -43,EngineeringBay -44,MissileTurret -45,Bunker -46,SensorTower -47,GhostAcademy -48,Factory -49,Starport -51,Armory -52,FusionCore -53,AutoTurret -54,SiegeTankSieged -55,SiegeTank -56,VikingAssault -57,VikingFighter -58,CommandCenterFlying -59,BarracksTechLab -60,BarracksReactor -61,FactoryTechLab -62,FactoryReactor -63,StarportTechLab -64,StarportReactor -65,FactoryFlying -66,StarportFlying -67,SCV -68,BarracksFlying -69,SupplyDepotLowered -70,Marine -71,Reaper -72,Ghost -73,Marauder -74,Thor -75,Hellion -76,Medivac -77,Banshee -78,Raven -79,Battlecruiser -80,Nuke -81,Nexus -82,Pylon -83,Assimilator -84,Gateway -85,Forge -86,FleetBeacon -87,TwilightCouncil -88,PhotonCannon -89,Stargate -90,TemplarArchive -91,DarkShrine -92,RoboticsBay -93,RoboticsFacility -94,CyberneticsCore -95,Zealot -96,Stalker -97,HighTemplar -98,DarkTemplar -99,Sentry -100,Phoenix -101,Carrier -102,VoidRay -103,WarpPrism -104,Observer -105,Immortal -106,Probe -107,Interceptor -108,Hatchery -109,CreepTumor -110,Extractor -111,SpawningPool -112,EvolutionChamber -113,HydraliskDen -114,Spire -115,UltraliskCavern -116,InfestationPit -117,NydusNetwork -118,BanelingNest -119,RoachWarren -120,SpineCrawler -121,SporeCrawler -122,Lair -123,Hive -124,GreaterSpire -125,Egg -126,Drone -127,Zergling -128,Overlord -129,Hydralisk -130,Mutalisk -131,Ultralisk -132,Roach -133,Infestor -134,Corruptor -135,BroodLordCocoon -136,BroodLord -137,BanelingBurrowed -138,DroneBurrowed -139,HydraliskBurrowed -140,RoachBurrowed -141,ZerglingBurrowed -142,InfestorTerranBurrowed -143,RedstoneLavaCritterBurrowed -144,RedstoneLavaCritterInjuredBurrowed -145,RedstoneLavaCritter -146,RedstoneLavaCritterInjured -147,QueenBurrowed -148,Queen -149,InfestorBurrowed -150,OverlordCocoon -151,Overseer -152,PlanetaryFortress -153,UltraliskBurrowed -154,OrbitalCommand -155,WarpGate -156,OrbitalCommandFlying -157,ForceField -158,WarpPrismPhasing -159,CreepTumorBurrowed -160,CreepTumorQueen -161,SpineCrawlerUprooted -162,SporeCrawlerUprooted -163,Archon -164,NydusCanal -165,BroodlingEscort -166,GhostAlternate -167,GhostNova -168,RichMineralField -169,RichMineralField750 -170,Ursadon -172,XelNagaTower -176,InfestedTerransEgg -177,Larva -178,OverseerSiegeMode -179,ReaperPlaceholder -180,MarineACGluescreenDummy -181,FirebatACGluescreenDummy -182,MedicACGluescreenDummy -183,MarauderACGluescreenDummy -184,VultureACGluescreenDummy -185,SiegeTankACGluescreenDummy -186,VikingACGluescreenDummy -187,BansheeACGluescreenDummy -188,BattlecruiserACGluescreenDummy -189,OrbitalCommandACGluescreenDummy -190,BunkerACGluescreenDummy -191,BunkerUpgradedACGluescreenDummy -192,MissileTurretACGluescreenDummy -193,HellbatACGluescreenDummy -194,GoliathACGluescreenDummy -195,CycloneACGluescreenDummy -196,WraithACGluescreenDummy -197,ScienceVesselACGluescreenDummy -198,HerculesACGluescreenDummy -199,ThorACGluescreenDummy -200,PerditionTurretACGluescreenDummy -201,FlamingBettyACGluescreenDummy -202,DevastationTurretACGluescreenDummy -203,BlasterBillyACGluescreenDummy -204,SpinningDizzyACGluescreenDummy -205,ZerglingKerriganACGluescreenDummy -206,RaptorACGluescreenDummy -207,QueenCoopACGluescreenDummy -208,HydraliskACGluescreenDummy -209,HydraliskLurkerACGluescreenDummy -210,MutaliskBroodlordACGluescreenDummy -211,BroodLordACGluescreenDummy -212,UltraliskACGluescreenDummy -213,TorrasqueACGluescreenDummy -214,OverseerACGluescreenDummy -215,LurkerACGluescreenDummy -216,SpineCrawlerACGluescreenDummy -217,SporeCrawlerACGluescreenDummy -218,NydusNetworkACGluescreenDummy -219,OmegaNetworkACGluescreenDummy -220,ZerglingZagaraACGluescreenDummy -221,SwarmlingACGluescreenDummy -222,QueenZagaraACGluescreenDummy -223,BanelingACGluescreenDummy -224,SplitterlingACGluescreenDummy -225,AberrationACGluescreenDummy -226,ScourgeACGluescreenDummy -227,CorruptorACGluescreenDummy -228,OverseerZagaraACGluescreenDummy -229,BileLauncherACGluescreenDummy -230,SwarmQueenACGluescreenDummy -231,RoachACGluescreenDummy -232,RoachVileACGluescreenDummy -233,RavagerACGluescreenDummy -234,SwarmHostACGluescreenDummy -235,MutaliskACGluescreenDummy -236,GuardianACGluescreenDummy -237,DevourerACGluescreenDummy -238,ViperACGluescreenDummy -239,BrutaliskACGluescreenDummy -240,LeviathanACGluescreenDummy -241,ZealotACGluescreenDummy -242,ZealotAiurACGluescreenDummy -243,DragoonACGluescreenDummy -244,HighTemplarACGluescreenDummy -245,ArchonACGluescreenDummy -246,ImmortalACGluescreenDummy -247,ObserverACGluescreenDummy -248,PhoenixAiurACGluescreenDummy -249,ReaverACGluescreenDummy -250,TempestACGluescreenDummy -251,PhotonCannonACGluescreenDummy -252,ZealotVorazunACGluescreenDummy -253,ZealotShakurasACGluescreenDummy -254,StalkerShakurasACGluescreenDummy -255,DarkTemplarShakurasACGluescreenDummy -256,CorsairACGluescreenDummy -257,VoidRayACGluescreenDummy -258,VoidRayShakurasACGluescreenDummy -259,OracleACGluescreenDummy -260,DarkArchonACGluescreenDummy -261,DarkPylonACGluescreenDummy -262,ZealotPurifierACGluescreenDummy -263,SentryPurifierACGluescreenDummy -264,ImmortalKaraxACGluescreenDummy -265,ColossusACGluescreenDummy -266,ColossusPurifierACGluescreenDummy -267,PhoenixPurifierACGluescreenDummy -268,CarrierACGluescreenDummy -269,CarrierAiurACGluescreenDummy -270,KhaydarinMonolithACGluescreenDummy -271,ShieldBatteryACGluescreenDummy -272,EliteMarineACGluescreenDummy -273,MarauderCommandoACGluescreenDummy -274,SpecOpsGhostACGluescreenDummy -275,HellbatRangerACGluescreenDummy -276,StrikeGoliathACGluescreenDummy -277,HeavySiegeTankACGluescreenDummy -278,RaidLiberatorACGluescreenDummy -279,RavenTypeIIACGluescreenDummy -280,CovertBansheeACGluescreenDummy -281,RailgunTurretACGluescreenDummy -282,BlackOpsMissileTurretACGluescreenDummy -283,SupplicantACGluescreenDummy -284,StalkerTaldarimACGluescreenDummy -285,SentryTaldarimACGluescreenDummy -286,HighTemplarTaldarimACGluescreenDummy -287,ImmortalTaldarimACGluescreenDummy -288,ColossusTaldarimACGluescreenDummy -289,WarpPrismTaldarimACGluescreenDummy -290,PhotonCannonTaldarimACGluescreenDummy -291,StukovInfestedCivilianACGluescreenDummy -292,StukovInfestedMarineACGluescreenDummy -293,StukovInfestedSiegeTankACGluescreenDummy -294,StukovInfestedDiamondbackACGluescreenDummy -295,StukovInfestedBansheeACGluescreenDummy -296,SILiberatorACGluescreenDummy -297,StukovInfestedBunkerACGluescreenDummy -298,StukovInfestedMissileTurretACGluescreenDummy -299,StukovBroodQueenACGluescreenDummy -300,ZealotFenixACGluescreenDummy -301,SentryFenixACGluescreenDummy -302,AdeptFenixACGluescreenDummy -303,ImmortalFenixACGluescreenDummy -304,ColossusFenixACGluescreenDummy -305,DisruptorACGluescreenDummy -306,ObserverFenixACGluescreenDummy -307,ScoutACGluescreenDummy -308,CarrierFenixACGluescreenDummy -309,PhotonCannonFenixACGluescreenDummy -310,PrimalZerglingACGluescreenDummy -311,RavasaurACGluescreenDummy -312,PrimalRoachACGluescreenDummy -313,FireRoachACGluescreenDummy -314,PrimalGuardianACGluescreenDummy -315,PrimalHydraliskACGluescreenDummy -316,PrimalMutaliskACGluescreenDummy -317,PrimalImpalerACGluescreenDummy -318,PrimalSwarmHostACGluescreenDummy -319,CreeperHostACGluescreenDummy -320,PrimalUltraliskACGluescreenDummy -321,TyrannozorACGluescreenDummy -322,PrimalWurmACGluescreenDummy -323,HHReaperACGluescreenDummy -324,HHWidowMineACGluescreenDummy -325,HHHellionTankACGluescreenDummy -326,HHWraithACGluescreenDummy -327,HHVikingACGluescreenDummy -328,HHBattlecruiserACGluescreenDummy -329,HHRavenACGluescreenDummy -330,HHBomberPlatformACGluescreenDummy -331,HHMercStarportACGluescreenDummy -332,HHMissileTurretACGluescreenDummy -333,TychusReaperACGluescreenDummy -334,TychusFirebatACGluescreenDummy -335,TychusSpectreACGluescreenDummy -336,TychusMedicACGluescreenDummy -337,TychusMarauderACGluescreenDummy -338,TychusWarhoundACGluescreenDummy -339,TychusHERCACGluescreenDummy -340,TychusGhostACGluescreenDummy -341,TychusSCVAutoTurretACGluescreenDummy -342,ZeratulStalkerACGluescreenDummy -343,ZeratulSentryACGluescreenDummy -344,ZeratulDarkTemplarACGluescreenDummy -345,ZeratulImmortalACGluescreenDummy -346,ZeratulObserverACGluescreenDummy -347,ZeratulDisruptorACGluescreenDummy -348,ZeratulWarpPrismACGluescreenDummy -349,ZeratulPhotonCannonACGluescreenDummy -351,RenegadeLongboltMissileWeapon -352,NeedleSpinesWeapon -353,CorruptionWeapon -354,InfestedTerransWeapon -355,NeuralParasiteWeapon -356,PointDefenseDroneReleaseWeapon -357,HunterSeekerWeapon -358,MULE -360,ThorAAWeapon -361,PunisherGrenadesLMWeapon -362,VikingFighterWeapon -363,ATALaserBatteryLMWeapon -364,ATSLaserBatteryLMWeapon -365,LongboltMissileWeapon -366,D8ChargeWeapon -367,YamatoWeapon -368,IonCannonsWeapon -369,AcidSalivaWeapon -370,SpineCrawlerWeapon -371,SporeCrawlerWeapon -372,GlaiveWurmWeapon -373,GlaiveWurmM2Weapon -374,GlaiveWurmM3Weapon -375,StalkerWeapon -376,EMP2Weapon -377,BacklashRocketsLMWeapon -378,PhotonCannonWeapon -379,ParasiteSporeWeapon -381,Broodling -382,BroodLordBWeapon -385,AutoTurretReleaseWeapon -386,LarvaReleaseMissile -387,AcidSpinesWeapon -388,FrenzyWeapon -389,ContaminateWeapon -401,BeaconArmy -402,BeaconDefend -403,BeaconAttack -404,BeaconHarass -405,BeaconIdle -406,BeaconAuto -407,BeaconDetect -408,BeaconScout -409,BeaconClaim -410,BeaconExpand -411,BeaconRally -412,BeaconCustom1 -413,BeaconCustom2 -414,BeaconCustom3 -415,BeaconCustom4 -420,LiberatorAG -421,LurkerMP -422,OverlordTransport -425,HellionTank -426,Cyclone -427,WidowMine -428,Liberator -429,Adept -430,Disruptor -431,Oracle -432,Tempest -433,Ravager -434,SwarmHostMP -435,Viper -436,HighTemplarSkinPreview -437,MothershipCore -438,Viking -446,RenegadeMissileTurret -447,Rocks2x2NonConjoined -448,FungalGrowthMissile -449,NeuralParasiteTentacleMissile -450,Beacon_Protoss -451,Beacon_ProtossSmall -452,Beacon_Terran -453,Beacon_TerranSmall -454,Beacon_Zerg -455,Beacon_ZergSmall -456,Lyote -457,CarrionBird -458,KarakMale -459,KarakFemale -460,UrsadakFemaleExotic -461,UrsadakMale -462,UrsadakFemale -463,UrsadakCalf -464,UrsadakMaleExotic -465,UtilityBot -466,CommentatorBot1 -467,CommentatorBot2 -468,CommentatorBot3 -469,CommentatorBot4 -470,Scantipede -471,Dog -472,Sheep -473,Cow -474,InfestedTerransEggPlacement -475,InfestorTerransWeapon -476,MineralField -477,MineralField750 -478,VespeneGeyser -479,SpacePlatformGeyser -480,RichVespeneGeyser -481,DestructibleSearchlight -482,DestructibleBullhornLights -483,DestructibleStreetlight -484,DestructibleSpacePlatformSign -485,DestructibleStoreFrontCityProps -486,DestructibleBillboardTall -487,DestructibleBillboardScrollingText -488,DestructibleSpacePlatformBarrier -489,DestructibleSignsDirectional -490,DestructibleSignsConstruction -491,DestructibleSignsFunny -492,DestructibleSignsIcons -493,DestructibleSignsWarning -494,DestructibleGarage -495,DestructibleGarageLarge -496,DestructibleTrafficSignal -497,TrafficSignal -498,BraxisAlphaDestructible1x1 -499,BraxisAlphaDestructible2x2 -500,DestructibleDebris4x4 -501,DestructibleDebris6x6 -502,DestructibleRock2x4Vertical -503,DestructibleRock2x4Horizontal -504,DestructibleRock2x6Vertical -505,DestructibleRock2x6Horizontal -506,DestructibleRock4x4 -507,DestructibleRock6x6 -508,DestructibleRampDiagonalHugeULBR -509,DestructibleRampDiagonalHugeBLUR -510,DestructibleRampVerticalHuge -511,DestructibleRampHorizontalHuge -512,DestructibleDebrisRampDiagonalHugeULBR -513,DestructibleDebrisRampDiagonalHugeBLUR -514,WarpPrismSkinPreview -515,SiegeTankSkinPreview -516,ThorAP -517,ThorAALance -518,LiberatorSkinPreview -519,OverlordGenerateCreepKeybind -520,MengskStatueAlone -521,MengskStatue -522,WolfStatue -523,GlobeStatue -524,Weapon -525,GlaiveWurmBounceWeapon -526,BroodLordWeapon -527,BroodLordAWeapon -528,CreepBlocker1x1 -529,PermanentCreepBlocker1x1 -530,PathingBlocker1x1 -531,PathingBlocker2x2 -532,AutoTestAttackTargetGround -533,AutoTestAttackTargetAir -534,AutoTestAttacker -535,HelperEmitterSelectionArrow -536,MultiKillObject -537,ShapeGolfball -538,ShapeCone -539,ShapeCube -540,ShapeCylinder -541,ShapeDodecahedron -542,ShapeIcosahedron -543,ShapeOctahedron -544,ShapePyramid -545,ShapeRoundedCube -546,ShapeSphere -547,ShapeTetrahedron -548,ShapeThickTorus -549,ShapeThinTorus -550,ShapeTorus -551,Shape4PointStar -552,Shape5PointStar -553,Shape6PointStar -554,Shape8PointStar -555,ShapeArrowPointer -556,ShapeBowl -557,ShapeBox -558,ShapeCapsule -559,ShapeCrescentMoon -560,ShapeDecahedron -561,ShapeDiamond -562,ShapeFootball -563,ShapeGemstone -564,ShapeHeart -565,ShapeJack -566,ShapePlusSign -567,ShapeShamrock -568,ShapeSpade -569,ShapeTube -570,ShapeEgg -571,ShapeYenSign -572,ShapeX -573,ShapeWatermelon -574,ShapeWonSign -575,ShapeTennisball -576,ShapeStrawberry -577,ShapeSmileyFace -578,ShapeSoccerball -579,ShapeRainbow -580,ShapeSadFace -581,ShapePoundSign -582,ShapePear -583,ShapePineapple -584,ShapeOrange -585,ShapePeanut -586,ShapeO -587,ShapeLemon -588,ShapeMoneyBag -589,ShapeHorseshoe -590,ShapeHockeyStick -591,ShapeHockeyPuck -592,ShapeHand -593,ShapeGolfClub -594,ShapeGrape -595,ShapeEuroSign -596,ShapeDollarSign -597,ShapeBasketball -598,ShapeCarrot -599,ShapeCherry -600,ShapeBaseball -601,ShapeBaseballBat -602,ShapeBanana -603,ShapeApple -604,ShapeCashLarge -605,ShapeCashMedium -606,ShapeCashSmall -607,ShapeFootballColored -608,ShapeLemonSmall -609,ShapeOrangeSmall -610,ShapeTreasureChestOpen -611,ShapeTreasureChestClosed -612,ShapeWatermelonSmall -613,UnbuildableRocksDestructible -614,UnbuildableBricksDestructible -615,UnbuildablePlatesDestructible -616,Debris2x2NonConjoined -617,EnemyPathingBlocker1x1 -618,EnemyPathingBlocker2x2 -619,EnemyPathingBlocker4x4 -620,EnemyPathingBlocker8x8 -621,EnemyPathingBlocker16x16 -622,ScopeTest -623,SentryACGluescreenDummy -624,StukovInfestedTrooperACGluescreenDummy -640,CollapsibleTerranTowerDebris -641,DebrisRampLeft -642,DebrisRampRight -646,LocustMP -647,CollapsibleRockTowerDebris -648,NydusCanalAttacker -649,NydusCanalCreeper -650,SwarmHostBurrowedMP -651,WarHound -652,WidowMineBurrowed -653,LurkerMPEgg -654,LurkerMPBurrowed -655,LurkerDenMP -656,ExtendingBridgeNEWide8Out -657,ExtendingBridgeNEWide8 -658,ExtendingBridgeNWWide8Out -659,ExtendingBridgeNWWide8 -660,ExtendingBridgeNEWide10Out -661,ExtendingBridgeNEWide10 -662,ExtendingBridgeNWWide10Out -663,ExtendingBridgeNWWide10 -664,ExtendingBridgeNEWide12Out -665,ExtendingBridgeNEWide12 -666,ExtendingBridgeNWWide12Out -667,ExtendingBridgeNWWide12 -669,CollapsibleRockTowerDebrisRampRight -670,CollapsibleRockTowerDebrisRampLeft -671,XelNaga_Caverns_DoorE -672,XelNaga_Caverns_DoorEOpened -673,XelNaga_Caverns_DoorN -674,XelNaga_Caverns_DoorNE -675,XelNaga_Caverns_DoorNEOpened -676,XelNaga_Caverns_DoorNOpened -677,XelNaga_Caverns_DoorNW -678,XelNaga_Caverns_DoorNWOpened -679,XelNaga_Caverns_DoorS -680,XelNaga_Caverns_DoorSE -681,XelNaga_Caverns_DoorSEOpened -682,XelNaga_Caverns_DoorSOpened -683,XelNaga_Caverns_DoorSW -684,XelNaga_Caverns_DoorSWOpened -685,XelNaga_Caverns_DoorW -686,XelNaga_Caverns_DoorWOpened -687,XelNaga_Caverns_Floating_BridgeNE8Out -688,XelNaga_Caverns_Floating_BridgeNE8 -689,XelNaga_Caverns_Floating_BridgeNW8Out -690,XelNaga_Caverns_Floating_BridgeNW8 -691,XelNaga_Caverns_Floating_BridgeNE10Out -692,XelNaga_Caverns_Floating_BridgeNE10 -693,XelNaga_Caverns_Floating_BridgeNW10Out -694,XelNaga_Caverns_Floating_BridgeNW10 -695,XelNaga_Caverns_Floating_BridgeNE12Out -696,XelNaga_Caverns_Floating_BridgeNE12 -697,XelNaga_Caverns_Floating_BridgeNW12Out -698,XelNaga_Caverns_Floating_BridgeNW12 -699,XelNaga_Caverns_Floating_BridgeH8Out -700,XelNaga_Caverns_Floating_BridgeH8 -701,XelNaga_Caverns_Floating_BridgeV8Out -702,XelNaga_Caverns_Floating_BridgeV8 -703,XelNaga_Caverns_Floating_BridgeH10Out -704,XelNaga_Caverns_Floating_BridgeH10 -705,XelNaga_Caverns_Floating_BridgeV10Out -706,XelNaga_Caverns_Floating_BridgeV10 -707,XelNaga_Caverns_Floating_BridgeH12Out -708,XelNaga_Caverns_Floating_BridgeH12 -709,XelNaga_Caverns_Floating_BridgeV12Out -710,XelNaga_Caverns_Floating_BridgeV12 -713,CollapsibleTerranTowerPushUnitRampLeft -714,CollapsibleTerranTowerPushUnitRampRight -717,CollapsibleRockTowerPushUnit -718,CollapsibleTerranTowerPushUnit -719,CollapsibleRockTowerPushUnitRampRight -720,CollapsibleRockTowerPushUnitRampLeft -721,DigesterCreepSprayTargetUnit -722,DigesterCreepSprayUnit -723,NydusCanalAttackerWeapon -724,ViperConsumeStructureWeapon -727,ResourceBlocker -728,TempestWeapon -729,YoinkMissile -733,YoinkVikingAirMissile -735,YoinkVikingGroundMissile -737,YoinkSiegeTankMissile -739,WarHoundWeapon -741,EyeStalkWeapon -744,WidowMineWeapon -745,WidowMineAirWeapon -746,MothershipCoreWeaponWeapon -747,TornadoMissileWeapon -748,TornadoMissileDummyWeapon -749,TalonsMissileWeapon -750,CreepTumorMissile -751,LocustMPEggAMissileWeapon -752,LocustMPEggBMissileWeapon -753,LocustMPWeapon -755,RepulsorCannonWeapon -759,CollapsibleRockTowerDiagonal -760,CollapsibleTerranTowerDiagonal -761,CollapsibleTerranTowerRampLeft -762,CollapsibleTerranTowerRampRight -763,Ice2x2NonConjoined -764,IceProtossCrates -765,ProtossCrates -766,TowerMine -767,PickupPalletGas -768,PickupPalletMinerals -769,PickupScrapSalvage1x1 -770,PickupScrapSalvage2x2 -771,PickupScrapSalvage3x3 -772,RoughTerrain -773,UnbuildableBricksSmallUnit -774,UnbuildablePlatesSmallUnit -775,UnbuildablePlatesUnit -776,UnbuildableRocksSmallUnit -777,XelNagaHealingShrine -778,InvisibleTargetDummy -779,ProtossVespeneGeyser -780,CollapsibleRockTower -781,CollapsibleTerranTower -782,ThornLizard -783,CleaningBot -784,DestructibleRock6x6Weak -785,ProtossSnakeSegmentDemo -786,PhysicsCapsule -787,PhysicsCube -788,PhysicsCylinder -789,PhysicsKnot -790,PhysicsL -791,PhysicsPrimitives -792,PhysicsSphere -793,PhysicsStar -794,CreepBlocker4x4 -795,DestructibleCityDebris2x4Vertical -796,DestructibleCityDebris2x4Horizontal -797,DestructibleCityDebris2x6Vertical -798,DestructibleCityDebris2x6Horizontal -799,DestructibleCityDebris4x4 -800,DestructibleCityDebris6x6 -801,DestructibleCityDebrisHugeDiagonalBLUR -802,DestructibleCityDebrisHugeDiagonalULBR -803,TestZerg -804,PathingBlockerRadius1 -805,DestructibleRockEx12x4Vertical -806,DestructibleRockEx12x4Horizontal -807,DestructibleRockEx12x6Vertical -808,DestructibleRockEx12x6Horizontal -809,DestructibleRockEx14x4 -810,DestructibleRockEx16x6 -811,DestructibleRockEx1DiagonalHugeULBR -812,DestructibleRockEx1DiagonalHugeBLUR -813,DestructibleRockEx1VerticalHuge -814,DestructibleRockEx1HorizontalHuge -815,DestructibleIce2x4Vertical -816,DestructibleIce2x4Horizontal -817,DestructibleIce2x6Vertical -818,DestructibleIce2x6Horizontal -819,DestructibleIce4x4 -820,DestructibleIce6x6 -821,DestructibleIceDiagonalHugeULBR -822,DestructibleIceDiagonalHugeBLUR -823,DestructibleIceVerticalHuge -824,DestructibleIceHorizontalHuge -825,DesertPlanetSearchlight -826,DesertPlanetStreetlight -827,UnbuildableBricksUnit -828,UnbuildableRocksUnit -829,ZerusDestructibleArch -830,Artosilope -831,Anteplott -832,LabBot -833,Crabeetle -834,CollapsibleRockTowerRampRight -835,CollapsibleRockTowerRampLeft -836,LabMineralField -837,LabMineralField750 -852,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -853,SnowRefinery_Terran_ExtendingBridgeNEShort8 -854,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -855,SnowRefinery_Terran_ExtendingBridgeNWShort8 -860,Tarsonis_DoorN -861,Tarsonis_DoorNLowered -862,Tarsonis_DoorNE -863,Tarsonis_DoorNELowered -864,Tarsonis_DoorE -865,Tarsonis_DoorELowered -866,Tarsonis_DoorNW -867,Tarsonis_DoorNWLowered -868,CompoundMansion_DoorN -869,CompoundMansion_DoorNLowered -870,CompoundMansion_DoorNE -871,CompoundMansion_DoorNELowered -872,CompoundMansion_DoorE -873,CompoundMansion_DoorELowered -874,CompoundMansion_DoorNW -875,CompoundMansion_DoorNWLowered -876,RavagerCocoon -877,RavagerBurrowed -879,LocustMPFlying -880,AiurLightBridgeNE8Out -881,AiurLightBridgeNE8 -882,AiurLightBridgeNE10Out -883,AiurLightBridgeNE10 -884,AiurLightBridgeNE12Out -885,AiurLightBridgeNE12 -886,AiurLightBridgeNW8Out -887,AiurLightBridgeNW8 -888,AiurLightBridgeNW10Out -889,AiurLightBridgeNW10 -890,AiurLightBridgeNW12Out -891,AiurLightBridgeNW12 -892,AiurTempleBridgeNE8Out -894,AiurTempleBridgeNE10Out -896,AiurTempleBridgeNE12Out -898,AiurTempleBridgeNW8Out -900,AiurTempleBridgeNW10Out -902,AiurTempleBridgeNW12Out -904,ShakurasLightBridgeNE8Out -905,ShakurasLightBridgeNE8 -906,ShakurasLightBridgeNE10Out -907,ShakurasLightBridgeNE10 -908,ShakurasLightBridgeNE12Out -909,ShakurasLightBridgeNE12 -910,ShakurasLightBridgeNW8Out -911,ShakurasLightBridgeNW8 -912,ShakurasLightBridgeNW10Out -913,ShakurasLightBridgeNW10 -914,ShakurasLightBridgeNW12Out -915,ShakurasLightBridgeNW12 -916,VoidMPImmortalReviveCorpse -917,GuardianCocoonMP -918,GuardianMP -919,DevourerCocoonMP -920,DevourerMP -921,DefilerMPBurrowed -922,DefilerMP -923,OracleStasisTrap -924,DisruptorPhased -925,AiurLightBridgeAbandonedNE8Out -926,AiurLightBridgeAbandonedNE8 -927,AiurLightBridgeAbandonedNE10Out -928,AiurLightBridgeAbandonedNE10 -929,AiurLightBridgeAbandonedNE12Out -930,AiurLightBridgeAbandonedNE12 -931,AiurLightBridgeAbandonedNW8Out -932,AiurLightBridgeAbandonedNW8 -933,AiurLightBridgeAbandonedNW10Out -934,AiurLightBridgeAbandonedNW10 -935,AiurLightBridgeAbandonedNW12Out -936,AiurLightBridgeAbandonedNW12 -937,CollapsiblePurifierTowerDebris -938,PortCity_Bridge_UnitNE8Out -939,PortCity_Bridge_UnitNE8 -940,PortCity_Bridge_UnitSE8Out -941,PortCity_Bridge_UnitSE8 -942,PortCity_Bridge_UnitNW8Out -943,PortCity_Bridge_UnitNW8 -944,PortCity_Bridge_UnitSW8Out -945,PortCity_Bridge_UnitSW8 -946,PortCity_Bridge_UnitNE10Out -947,PortCity_Bridge_UnitNE10 -948,PortCity_Bridge_UnitSE10Out -949,PortCity_Bridge_UnitSE10 -950,PortCity_Bridge_UnitNW10Out -951,PortCity_Bridge_UnitNW10 -952,PortCity_Bridge_UnitSW10Out -953,PortCity_Bridge_UnitSW10 -954,PortCity_Bridge_UnitNE12Out -955,PortCity_Bridge_UnitNE12 -956,PortCity_Bridge_UnitSE12Out -957,PortCity_Bridge_UnitSE12 -958,PortCity_Bridge_UnitNW12Out -959,PortCity_Bridge_UnitNW12 -960,PortCity_Bridge_UnitSW12Out -961,PortCity_Bridge_UnitSW12 -962,PortCity_Bridge_UnitN8Out -963,PortCity_Bridge_UnitN8 -964,PortCity_Bridge_UnitS8Out -965,PortCity_Bridge_UnitS8 -966,PortCity_Bridge_UnitE8Out -967,PortCity_Bridge_UnitE8 -968,PortCity_Bridge_UnitW8Out -969,PortCity_Bridge_UnitW8 -970,PortCity_Bridge_UnitN10Out -971,PortCity_Bridge_UnitN10 -972,PortCity_Bridge_UnitS10Out -973,PortCity_Bridge_UnitS10 -974,PortCity_Bridge_UnitE10Out -975,PortCity_Bridge_UnitE10 -976,PortCity_Bridge_UnitW10Out -977,PortCity_Bridge_UnitW10 -978,PortCity_Bridge_UnitN12Out -979,PortCity_Bridge_UnitN12 -980,PortCity_Bridge_UnitS12Out -981,PortCity_Bridge_UnitS12 -982,PortCity_Bridge_UnitE12Out -983,PortCity_Bridge_UnitE12 -984,PortCity_Bridge_UnitW12Out -985,PortCity_Bridge_UnitW12 -986,PurifierRichMineralField -987,PurifierRichMineralField750 -1002,CollapsiblePurifierTowerPushUnit -1004,LocustMPPrecursor -1005,ReleaseInterceptorsBeacon -1006,AdeptPhaseShift -1007,RavagerCorrosiveBileMissile -1008,HydraliskImpaleMissile -1009,CycloneMissileLargeAir -1010,CycloneMissile -1011,CycloneMissileLarge -1012,OracleWeapon -1013,TempestWeaponGround -1014,RavagerWeaponMissile -1015,ScoutMPAirWeaponLeft -1016,ScoutMPAirWeaponRight -1017,ArbiterMPWeaponMissile -1018,GuardianMPWeapon -1019,DevourerMPWeaponMissile -1020,DefilerMPDarkSwarmWeapon -1021,QueenMPEnsnareMissile -1022,QueenMPSpawnBroodlingsMissile -1023,LightningBombWeapon -1024,HERCPlacement -1025,GrappleWeapon -1028,CausticSprayMissile -1029,ParasiticBombMissile -1030,ParasiticBombDummy -1031,AdeptWeapon -1032,AdeptUpgradeWeapon -1033,LiberatorMissile -1034,LiberatorDamageMissile -1035,LiberatorAGMissile -1036,KD8Charge -1037,KD8ChargeWeapon -1039,SlaynElementalGrabWeapon -1040,SlaynElementalGrabAirUnit -1041,SlaynElementalGrabGroundUnit -1042,SlaynElementalWeapon -1047,DestructibleExpeditionGate6x6 -1048,DestructibleZergInfestation3x3 -1049,HERC -1050,Moopy -1051,Replicant -1052,SeekerMissile -1053,AiurTempleBridgeDestructibleNE8Out -1054,AiurTempleBridgeDestructibleNE10Out -1055,AiurTempleBridgeDestructibleNE12Out -1056,AiurTempleBridgeDestructibleNW8Out -1057,AiurTempleBridgeDestructibleNW10Out -1058,AiurTempleBridgeDestructibleNW12Out -1059,AiurTempleBridgeDestructibleSW8Out -1060,AiurTempleBridgeDestructibleSW10Out -1061,AiurTempleBridgeDestructibleSW12Out -1062,AiurTempleBridgeDestructibleSE8Out -1063,AiurTempleBridgeDestructibleSE10Out -1064,AiurTempleBridgeDestructibleSE12Out -1066,FlyoverUnit -1067,CorsairMP -1068,ScoutMP -1070,ArbiterMP -1071,ScourgeMP -1072,DefilerMPPlagueWeapon -1073,QueenMP -1074,XelNagaDestructibleRampBlocker6S -1075,XelNagaDestructibleRampBlocker6SE -1076,XelNagaDestructibleRampBlocker6E -1077,XelNagaDestructibleRampBlocker6NE -1078,XelNagaDestructibleRampBlocker6N -1079,XelNagaDestructibleRampBlocker6NW -1080,XelNagaDestructibleRampBlocker6W -1081,XelNagaDestructibleRampBlocker6SW -1082,XelNagaDestructibleRampBlocker8S -1083,XelNagaDestructibleRampBlocker8SE -1084,XelNagaDestructibleRampBlocker8E -1085,XelNagaDestructibleRampBlocker8NE -1086,XelNagaDestructibleRampBlocker8N -1087,XelNagaDestructibleRampBlocker8NW -1088,XelNagaDestructibleRampBlocker8W -1089,XelNagaDestructibleRampBlocker8SW -1090,XelNagaDestructibleBlocker6S -1091,XelNagaDestructibleBlocker6SE -1092,XelNagaDestructibleBlocker6E -1093,XelNagaDestructibleBlocker6NE -1094,XelNagaDestructibleBlocker6N -1095,XelNagaDestructibleBlocker6NW -1096,XelNagaDestructibleBlocker6W -1097,XelNagaDestructibleBlocker6SW -1098,XelNagaDestructibleBlocker8S -1099,XelNagaDestructibleBlocker8SE -1100,XelNagaDestructibleBlocker8E -1101,XelNagaDestructibleBlocker8NE -1102,XelNagaDestructibleBlocker8N -1103,XelNagaDestructibleBlocker8NW -1104,XelNagaDestructibleBlocker8W -1105,XelNagaDestructibleBlocker8SW -1106,ReptileCrate -1107,SlaynSwarmHostSpawnFlyer -1108,SlaynElemental -1109,PurifierVespeneGeyser -1110,ShakurasVespeneGeyser -1111,CollapsiblePurifierTowerDiagonal -1112,CreepOnlyBlocker4x4 -1113,BattleStationMineralField -1114,BattleStationMineralField750 -1115,PurifierMineralField -1116,PurifierMineralField750 -1117,Beacon_Nova -1118,Beacon_NovaSmall -1119,Ursula -1120,Elsecaro_Colonist_Hut -1121,SnowGlazeStarterMP -1122,ShieldBattery -1123,TransportOverlordCocoon -1124,PylonOvercharged -1125,ObserverSiegeMode -1126,RavenRepairDrone -1128,ParasiticBombRelayDummy -1129,BypassArmorDrone -1130,AdeptPiercingWeapon -1131,HighTemplarWeaponMissile -1132,CycloneMissileLargeAirAlternative -1133,RavenScramblerMissile -1134,RavenRepairDroneReleaseWeapon -1135,RavenShredderMissileWeapon -1136,InfestedAcidSpinesWeapon -1137,InfestorEnsnareAttackMissile -1138,SNARE_PLACEHOLDER -1141,CorrosiveParasiteWeapon diff --git a/sc2reader/data/LotV/base_abilities.csv b/sc2reader/data/LotV/base_abilities.csv deleted file mode 100644 index 35abe07..0000000 --- a/sc2reader/data/LotV/base_abilities.csv +++ /dev/null @@ -1,519 +0,0 @@ -0,CAbil -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -40,ReviveSelf -41,ReviveSelfAtTarget -42,ReviveSelfReplaceTarget -43,ReviveSelfOnCreep -45,attack -47,MetalGateDefaultLower -48,MetalGateDefaultRaise -49,TerranAddOns -50,TerranBuildingLiftOff -51,TerranBuildingLand -52,Refund -53,Salvage -54,DisguiseChangeling -55,SalvageShared -56,Corruption -57,GhostHoldFire -58,GhostWeaponsFree -59,MorphToInfestedTerran -60,Explode -61,FleetBeaconResearch -62,FungalGrowth -63,GuardianShield -64,MULERepair -65,MorphZerglingToBaneling -66,NexusTrainMothership -67,Feedback -68,MassRecall -69,PlacePointDefenseDrone -70,HallucinationArchon -71,HallucinationColossus -72,HallucinationHighTemplar -73,HallucinationImmortal -74,HallucinationPhoenix -75,HallucinationProbe -76,HallucinationStalker -77,HallucinationVoidRay -78,HallucinationWarpPrism -79,HallucinationZealot -80,MULEGather -81,SeekerMissile -82,CalldownMULE -83,GravitonBeam -84,BuildinProgressNydusCanal -85,Siphon -86,Leech -87,SpawnChangeling -88,DisguiseAsZealot -89,DisguiseAsMarineWithShield -90,DisguiseAsMarineWithoutShield -91,DisguiseAsZerglingWithWings -92,DisguiseAsZerglingWithoutWings -93,PhaseShift -94,Rally -95,ProgressRally -96,RallyCommand -97,RallyNexus -98,RallyHatchery -99,RoachWarrenResearch -100,SapStructure -101,InfestedTerrans -102,NeuralParasite -103,SpawnLarva -104,StimpackMarauder -105,SupplyDrop -106,250mmStrikeCannons -107,TemporalRift -108,TimeWarp -109,UltraliskCavernResearch -110,WormholeTransit -111,SCVHarvest -112,ProbeHarvest -113,AttackWarpPrism -114,que1 -115,que5 -116,que5CancelToSelection -117,que5LongBlend -118,que5Addon -119,BuildInProgress -120,Repair -121,TerranBuild -122,RavenBuild -123,Stimpack -124,GhostCloak -125,Snipe -126,MedivacHeal -127,SiegeMode -128,Unsiege -129,BansheeCloak -130,MedivacTransport -131,ScannerSweep -132,Yamato -133,AssaultMode -134,FighterMode -135,BunkerTransport -136,CommandCenterTransport -137,CommandCenterLiftOff -138,CommandCenterLand -139,BarracksAddOns -140,BarracksLiftOff -141,FactoryAddOns -142,FactoryLiftOff -143,StarportAddOns -144,StarportLiftOff -145,FactoryLand -146,StarportLand -147,CommandCenterTrain -148,BarracksLand -149,SupplyDepotLower -150,SupplyDepotRaise -151,BarracksTrain -152,FactoryTrain -153,StarportTrain -154,EngineeringBayResearch -155,MercCompoundResearch -156,ArmSiloWithNuke -157,BarracksTechLabResearch -158,FactoryTechLabResearch -159,StarportTechLabResearch -160,GhostAcademyResearch -161,ArmoryResearch -162,ProtossBuild -163,WarpPrismTransport -164,GatewayTrain -165,StargateTrain -166,RoboticsFacilityTrain -167,NexusTrain -168,PsiStorm -169,HangarQueue5 -170,BroodLordQueue2 -171,CarrierHangar -172,ForgeResearch -173,RoboticsBayResearch -174,TemplarArchivesResearch -175,ZergBuild -176,DroneHarvest -177,evolutionchamberresearch -178,UpgradeToLair -179,UpgradeToHive -180,UpgradeToGreaterSpire -181,LairResearch -182,SpawningPoolResearch -183,HydraliskDenResearch -184,SpireResearch -185,LarvaTrain -186,MorphToBroodLord -187,BurrowBanelingDown -188,BurrowBanelingUp -189,BurrowDroneDown -190,BurrowDroneUp -191,BurrowHydraliskDown -192,BurrowHydraliskUp -193,BurrowRoachDown -194,BurrowRoachUp -195,BurrowZerglingDown -196,BurrowZerglingUp -197,BurrowInfestorTerranDown -198,BurrowInfestorTerranUp -199,RedstoneLavaCritterBurrow -200,RedstoneLavaCritterInjuredBurrow -201,RedstoneLavaCritterUnburrow -202,RedstoneLavaCritterInjuredUnburrow -203,OverlordTransport -204,Mergeable -205,Warpable -206,WarpGateTrain -207,BurrowQueenDown -208,BurrowQueenUp -209,NydusCanalTransport -210,Blink -211,BurrowInfestorDown -212,BurrowInfestorUp -213,MorphToOverseer -214,UpgradeToPlanetaryFortress -215,InfestationPitResearch -216,BanelingNestResearch -217,BurrowUltraliskDown -218,BurrowUltraliskUp -219,UpgradeToOrbital -220,UpgradeToWarpGate -221,MorphBackToGateway -222,OrbitalLiftOff -223,OrbitalCommandLand -224,ForceField -225,PhasingMode -226,TransportMode -227,FusionCoreResearch -228,CyberneticsCoreResearch -229,TwilightCouncilResearch -230,TacNukeStrike -231,SalvageBunkerRefund -232,SalvageBunker -233,EMP -234,Vortex -235,TrainQueen -236,BurrowCreepTumorDown -237,Transfusion -238,TechLabMorph -239,BarracksTechLabMorph -240,FactoryTechLabMorph -241,StarportTechLabMorph -242,ReactorMorph -243,BarracksReactorMorph -244,FactoryReactorMorph -245,StarportReactorMorph -246,AttackRedirect -247,StimpackRedirect -248,StimpackMarauderRedirect -249,burrowedStop -250,StopRedirect -251,GenerateCreep -252,QueenBuild -253,SpineCrawlerUproot -254,SporeCrawlerUproot -255,SpineCrawlerRoot -256,SporeCrawlerRoot -257,CreepTumorBuild -258,BuildAutoTurret -259,ArchonWarp -260,BuildNydusCanal -261,BroodLordHangar -262,Charge -263,TowerCapture -264,HerdInteract -265,Frenzy -266,Contaminate -267,Shatter -268,InfestedTerransLayEgg -269,que5Passive -270,que5PassiveCancelToSelection -292,BridgeExtend -293,BridgeRetract -294,XelNaga_Caverns_DoorDefaultOpen -295,XelNaga_Caverns_DoorDefaultClose -296,DigesterCreepSpray -297,MorphToCollapsibleTerranTowerDebris -298,MorphToCollapsibleTerranTowerDebrisRampLeft -299,MorphToCollapsibleTerranTowerDebrisRampRight -300,MorphToMothership -301,MothershipStasis -302,MothershipCoreWeapon -303,NexusTrainMothershipCore -304,MothershipCoreTeleport -305,SalvageDroneRefund -306,SalvageDrone -307,SalvageZerglingRefund -308,SalvageZergling -309,SalvageQueenRefund -310,SalvageQueen -311,SalvageRoachRefund -312,SalvageRoach -313,SalvageBanelingRefund -314,SalvageBaneling -315,SalvageHydraliskRefund -316,SalvageHydralisk -317,SalvageInfestorRefund -318,SalvageInfestor -319,SalvageSwarmHostRefund -320,SalvageSwarmHost -321,SalvageUltraliskRefund -322,SalvageUltralisk -323,DigesterTransport -324,SpectreShield -325,XelNagaHealingShrine -326,NexusInvulnerability -327,NexusPhaseShift -328,SpawnChangelingTarget -329,QueenLand -330,QueenFly -331,OracleCloakField -332,FlyerShield -333,LocustTrain -334,MothershipCoreMassRecall -335,SingleRecall -336,MorphToHellion -337,RestoreShields -338,Scryer -339,BurrowChargeTrial -340,LeechResources -341,SnipeDoT -342,SwarmHostSpawnLocusts -343,Clone -344,BuildingShield -345,MorphToCollapsibleRockTowerDebris -346,MorphToHellionTank -347,BuildingStasis -348,ResourceBlocker -349,ResourceStun -350,MaxiumThrust -351,Sacrifice -352,BurrowChargeMP -353,BurrowChargeRevD -354,MorphToSwarmHostBurrowedMP -355,MorphToSwarmHostMP -356,SpawnInfestedTerran -357,attackProtossBuilding -358,burrowedBanelingStop -359,stopProtossBuilding -360,BlindingCloud -361,EyeStalk -362,Yoink -363,ViperConsume -364,ViperConsumeMinerals -365,ViperConsumeStructure -366,ProtossBuildingQueue -367,que8 -368,TestZerg -369,VolatileBurstBuilding -370,PickupScrapSmall -371,PickupScrapMedium -372,PickupScrapLarge -373,PickupPalletGas -374,PickupPalletMinerals -375,MassiveKnockover -376,WidowMineBurrow -377,WidowMineUnburrow -378,WidowMineAttack -379,TornadoMissile -380,MothershipCoreEnergize -381,LurkerAspectMPFromHydraliskBurrowed -382,LurkerAspectMP -383,BurrowLurkerMPDown -384,BurrowLurkerMPUp -385,UpgradeToLurkerDenMP -386,HallucinationOracle -387,MedivacSpeedBoost -388,ExtendingBridgeNEWide8Out -389,ExtendingBridgeNEWide8 -390,ExtendingBridgeNWWide8Out -391,ExtendingBridgeNWWide8 -392,ExtendingBridgeNEWide10Out -393,ExtendingBridgeNEWide10 -394,ExtendingBridgeNWWide10Out -395,ExtendingBridgeNWWide10 -396,ExtendingBridgeNEWide12Out -397,ExtendingBridgeNEWide12 -398,ExtendingBridgeNWWide12Out -399,ExtendingBridgeNWWide12 -400,InvulnerabilityShield -401,CritterFlee -402,OracleRevelation -403,OracleRevelationMode -404,OracleNormalMode -405,MorphToCollapsibleRockTowerDebrisRampRight -406,MorphToCollapsibleRockTowerDebrisRampLeft -407,VoidSiphon -408,UltraliskWeaponCooldown -409,MothershipCorePurifyNexusCancel -410,MothershipCorePurifyNexus -411,XelNaga_Caverns_DoorE -412,XelNaga_Caverns_DoorEOpened -413,XelNaga_Caverns_DoorN -414,XelNaga_Caverns_DoorNE -415,XelNaga_Caverns_DoorNEOpened -416,XelNaga_Caverns_DoorNOpened -417,XelNaga_Caverns_DoorNW -418,XelNaga_Caverns_DoorNWOpened -419,XelNaga_Caverns_DoorS -420,XelNaga_Caverns_DoorSE -421,XelNaga_Caverns_DoorSEOpened -422,XelNaga_Caverns_DoorSOpened -423,XelNaga_Caverns_DoorSW -424,XelNaga_Caverns_DoorSWOpened -425,XelNaga_Caverns_DoorW -426,XelNaga_Caverns_DoorWOpened -427,XelNaga_Caverns_Floating_BridgeNE8Out -428,XelNaga_Caverns_Floating_BridgeNE8 -429,XelNaga_Caverns_Floating_BridgeNW8Out -430,XelNaga_Caverns_Floating_BridgeNW8 -431,XelNaga_Caverns_Floating_BridgeNE10Out -432,XelNaga_Caverns_Floating_BridgeNE10 -433,XelNaga_Caverns_Floating_BridgeNW10Out -434,XelNaga_Caverns_Floating_BridgeNW10 -435,XelNaga_Caverns_Floating_BridgeNE12Out -436,XelNaga_Caverns_Floating_BridgeNE12 -437,XelNaga_Caverns_Floating_BridgeNW12Out -438,XelNaga_Caverns_Floating_BridgeNW12 -439,XelNaga_Caverns_Floating_BridgeH8Out -440,XelNaga_Caverns_Floating_BridgeH8 -441,XelNaga_Caverns_Floating_BridgeV8Out -442,XelNaga_Caverns_Floating_BridgeV8 -443,XelNaga_Caverns_Floating_BridgeH10Out -444,XelNaga_Caverns_Floating_BridgeH10 -445,XelNaga_Caverns_Floating_BridgeV10Out -446,XelNaga_Caverns_Floating_BridgeV10 -447,XelNaga_Caverns_Floating_BridgeH12Out -448,XelNaga_Caverns_Floating_BridgeH12 -449,XelNaga_Caverns_Floating_BridgeV12Out -450,XelNaga_Caverns_Floating_BridgeV12 -451,TemporalField -473,ArmoryResearchSwarm -474,CausticSpray -475,OracleCloakingFieldTargeted -476,ImmortalOverload -477,MorphToRavager -478,MorphToLurker -479,OraclePhaseShift -480,ReleaseInterceptors -481,RavagerCorrosiveBile -482,BurrowRavagerDown -483,BurrowRavagerUp -484,PurificationNova -485,Impale -486,LockOn -487,LockOnCancel -488,CorruptionBomb -489,Hyperjump -490,Overcharge -491,ThorAPMode -492,ThorNormalMode -493,LightofAiur -494,MothershipMassRecall -495,NydusWormTransport -496,OracleWeapon -497,PulsarBeam -498,PulsarCannon -499,VoidSwarmHostSpawnLocust -500,LocustMPFlyingMorphToGround -501,LocustMPMorphToAir -502,LocustMPFlyingSwoop -503,HallucinationDisruptor -504,HallucinationAdept -505,VoidRaySwarmDamageBoost -506,SeekerDummyChannel -507,AiurTempleBridgeNE8Out -508,AiurTempleBridgeNE8 -509,AiurTempleBridgeNE10Out -510,AiurTempleBridgeNE10 -511,AiurTempleBridgeNE12Out -512,AiurTempleBridgeNE12 -513,AiurTempleBridgeNW8Out -514,AiurTempleBridgeNW8 -515,AiurTempleBridgeNW10Out -516,AiurTempleBridgeNW10 -517,AiurTempleBridgeNW12Out -518,AiurTempleBridgeNW12 -519,VoidMPImmortalReviveRebuild -520,VoidMPImmortalReviveDeath -521,ArbiterMPStasisField -522,ArbiterMPRecall -523,CorsairMPDisruptionWeb -524,MorphToGuardianMP -525,MorphToDevourerMP -526,DefilerMPConsume -527,DefilerMPDarkSwarm -528,DefilerMPPlague -529,DefilerMPBurrow -530,DefilerMPUnburrow -531,QueenMPEnsnare -532,QueenMPSpawnBroodlings -533,QueenMPInfestCommandCenter -534,LightningBomb -535,Grapple -536,OracleStasisTrap -537,OracleStasisTrapBuild -538,OracleStasisTrapActivate -539,SelfRepair -540,ParasiticBomb -541,AdeptPhaseShift -542,PurificationNovaMorph -543,PurificationNovaMorphBack -544,LurkerHoldFire -545,LurkerRemoveHoldFire -546,LiberatorMorphtoAG -547,LiberatorMorphtoAA -548,LiberatorAGTarget -549,LiberatorAATarget -550,TimeStop -551,KD8Charge -552,AdeptPhaseShiftCancel -553,AdeptShadePhaseShiftCancel -557,LaunchInterceptors -558,SpawnLocustsTargeted -559,LocustMPFlyingSwoopAttack -560,MorphToTransportOverlord -561,BypassArmor -562,BypassArmorDroneCU -563,ChannelSnipe -564,LockOnAir -565,PurificationNovaTargetted diff --git a/sc2reader/data/LotV/base_units.csv b/sc2reader/data/LotV/base_units.csv deleted file mode 100644 index cfb0b3b..0000000 --- a/sc2reader/data/LotV/base_units.csv +++ /dev/null @@ -1,654 +0,0 @@ -1,System_Snapshot_Dummy -7,DESTRUCTIBLE -8,ITEM -9,POWERUP -10,SMCAMERA -11,SMCHARACTER -12,STARMAP -13,SMSET -14,MISSILE -15,MISSILE_INVULNERABLE -16,MISSILE_HALFLIFE -17,PLACEHOLDER -18,PLACEHOLDER_AIR -19,PATHINGBLOCKER -20,BEACON -21,Ball -22,StereoscopicOptionsUnit -23,Colossus -24,TechLab -25,Reactor -27,InfestorTerran -28,BanelingCocoon -29,Baneling -30,Mothership -31,PointDefenseDrone -32,Changeling -33,ChangelingZealot -34,ChangelingMarineShield -35,ChangelingMarine -36,ChangelingZerglingWings -37,ChangelingZergling -39,CommandCenter -40,SupplyDepot -41,Refinery -42,Barracks -43,EngineeringBay -44,MissileTurret -45,Bunker -46,SensorTower -47,GhostAcademy -48,Factory -49,Starport -51,Armory -52,FusionCore -53,AutoTurret -54,SiegeTankSieged -55,SiegeTank -56,VikingAssault -57,VikingFighter -58,CommandCenterFlying -59,BarracksTechLab -60,BarracksReactor -61,FactoryTechLab -62,FactoryReactor -63,StarportTechLab -64,StarportReactor -65,FactoryFlying -66,StarportFlying -67,SCV -68,BarracksFlying -69,SupplyDepotLowered -70,Marine -71,Reaper -72,Ghost -73,Marauder -74,Thor -75,Hellion -76,Medivac -77,Banshee -78,Raven -79,Battlecruiser -80,Nuke -81,Nexus -82,Pylon -83,Assimilator -84,Gateway -85,Forge -86,FleetBeacon -87,TwilightCouncil -88,PhotonCannon -89,Stargate -90,TemplarArchive -91,DarkShrine -92,RoboticsBay -93,RoboticsFacility -94,CyberneticsCore -95,Zealot -96,Stalker -97,HighTemplar -98,DarkTemplar -99,Sentry -100,Phoenix -101,Carrier -102,VoidRay -103,WarpPrism -104,Observer -105,Immortal -106,Probe -107,Interceptor -108,Hatchery -109,CreepTumor -110,Extractor -111,SpawningPool -112,EvolutionChamber -113,HydraliskDen -114,Spire -115,UltraliskCavern -116,InfestationPit -117,NydusNetwork -118,BanelingNest -119,RoachWarren -120,SpineCrawler -121,SporeCrawler -122,Lair -123,Hive -124,GreaterSpire -125,Egg -126,Drone -127,Zergling -128,Overlord -129,Hydralisk -130,Mutalisk -131,Ultralisk -132,Roach -133,Infestor -134,Corruptor -135,BroodLordCocoon -136,BroodLord -137,BanelingBurrowed -138,DroneBurrowed -139,HydraliskBurrowed -140,RoachBurrowed -141,ZerglingBurrowed -142,InfestorTerranBurrowed -143,RedstoneLavaCritterBurrowed -144,RedstoneLavaCritterInjuredBurrowed -145,RedstoneLavaCritter -146,RedstoneLavaCritterInjured -147,QueenBurrowed -148,Queen -149,InfestorBurrowed -150,OverlordCocoon -151,Overseer -152,PlanetaryFortress -153,UltraliskBurrowed -154,OrbitalCommand -155,WarpGate -156,OrbitalCommandFlying -157,ForceField -158,WarpPrismPhasing -159,CreepTumorBurrowed -160,CreepTumorQueen -161,SpineCrawlerUprooted -162,SporeCrawlerUprooted -163,Archon -164,NydusCanal -165,BroodlingEscort -166,RichMineralField -168,XelNagaTower -172,InfestedTerransEgg -173,Larva -174,ReaperPlaceholder -185,Cyclone -187,HellionTank -208,NeedleSpinesWeapon -209,CorruptionWeapon -210,InfestedTerransWeapon -211,NeuralParasiteWeapon -212,PointDefenseDroneReleaseWeapon -213,HunterSeekerWeapon -214,MULE -216,ThorAAWeapon -217,PunisherGrenadesLMWeapon -218,VikingFighterWeapon -219,ATALaserBatteryLMWeapon -220,ATSLaserBatteryLMWeapon -221,LongboltMissileWeapon -222,D8ChargeWeapon -223,YamatoWeapon -224,IonCannonsWeapon -225,AcidSalivaWeapon -226,SpineCrawlerWeapon -227,SporeCrawlerWeapon -228,GlaiveWurmWeapon -229,GlaiveWurmM2Weapon -230,GlaiveWurmM3Weapon -231,StalkerWeapon -232,EMP2Weapon -233,BacklashRocketsLMWeapon -234,PhotonCannonWeapon -235,ParasiteSporeWeapon -237,Broodling -238,BroodLordBWeapon -241,AutoTurretReleaseWeapon -242,LarvaReleaseMissile -243,AcidSpinesWeapon -244,FrenzyWeapon -245,ContaminateWeapon -253,BeaconRally -254,BeaconArmy -255,BeaconAttack -256,BeaconDefend -257,BeaconHarass -258,BeaconIdle -259,BeaconAuto -260,BeaconDetect -261,BeaconScout -262,BeaconClaim -263,BeaconExpand -264,BeaconCustom1 -265,BeaconCustom2 -266,BeaconCustom3 -267,BeaconCustom4 -268,BroodlingDefault -269,Critter -270,CritterStationary -271,Shape -272,Rocks2x2NonConjoined -273,FungalGrowthMissile -274,NeuralParasiteTentacleMissile -275,Beacon_Protoss -276,Beacon_ProtossSmall -277,Beacon_Terran -278,Beacon_TerranSmall -279,Beacon_Zerg -280,Beacon_ZergSmall -281,Lyote -282,CarrionBird -283,KarakMale -284,KarakFemale -285,UrsadakFemaleExotic -286,UrsadakMale -287,UrsadakFemale -288,UrsadakCalf -289,UrsadakMaleExotic -290,UtilityBot -291,CommentatorBot1 -292,CommentatorBot2 -293,CommentatorBot3 -294,CommentatorBot4 -295,Scantipede -296,Dog -297,Sheep -298,Cow -299,InfestedTerransEggPlacement -300,InfestorTerransWeapon -301,MineralField -302,VespeneGeyser -303,SpacePlatformGeyser -304,RichVespeneGeyser -305,DestructibleSearchlight -306,DestructibleBullhornLights -307,DestructibleStreetlight -308,DestructibleSpacePlatformSign -309,DestructibleStoreFrontCityProps -310,DestructibleBillboardTall -311,DestructibleBillboardScrollingText -312,DestructibleSpacePlatformBarrier -313,DestructibleSignsDirectional -314,DestructibleSignsConstruction -315,DestructibleSignsFunny -316,DestructibleSignsIcons -317,DestructibleSignsWarning -318,DestructibleGarage -319,DestructibleGarageLarge -320,DestructibleTrafficSignal -321,TrafficSignal -322,BraxisAlphaDestructible1x1 -323,BraxisAlphaDestructible2x2 -324,DestructibleDebris4x4 -325,DestructibleDebris6x6 -326,DestructibleRock2x4Vertical -327,DestructibleRock2x4Horizontal -328,DestructibleRock2x6Vertical -329,DestructibleRock2x6Horizontal -330,DestructibleRock4x4 -331,DestructibleRock6x6 -332,DestructibleRampDiagonalHugeULBR -333,DestructibleRampDiagonalHugeBLUR -334,DestructibleRampVerticalHuge -335,DestructibleRampHorizontalHuge -336,DestructibleDebrisRampDiagonalHugeULBR -337,DestructibleDebrisRampDiagonalHugeBLUR -338,OverlordGenerateCreepKeybind -339,MengskStatueAlone -340,MengskStatue -341,WolfStatue -342,GlobeStatue -343,Weapon -344,GlaiveWurmBounceWeapon -345,BroodLordWeapon -346,BroodLordAWeapon -347,CreepBlocker1x1 -348,PathingBlocker1x1 -349,PathingBlocker2x2 -350,AutoTestAttackTargetGround -351,AutoTestAttackTargetAir -352,AutoTestAttacker -353,HelperEmitterSelectionArrow -354,MultiKillObject -355,ShapeGolfball -356,ShapeCone -357,ShapeCube -358,ShapeCylinder -359,ShapeDodecahedron -360,ShapeIcosahedron -361,ShapeOctahedron -362,ShapePyramid -363,ShapeRoundedCube -364,ShapeSphere -365,ShapeTetrahedron -366,ShapeThickTorus -367,ShapeThinTorus -368,ShapeTorus -369,Shape4PointStar -370,Shape5PointStar -371,Shape6PointStar -372,Shape8PointStar -373,ShapeArrowPointer -374,ShapeBowl -375,ShapeBox -376,ShapeCapsule -377,ShapeCrescentMoon -378,ShapeDecahedron -379,ShapeDiamond -380,ShapeFootball -381,ShapeGemstone -382,ShapeHeart -383,ShapeJack -384,ShapePlusSign -385,ShapeShamrock -386,ShapeSpade -387,ShapeTube -388,ShapeEgg -389,ShapeYenSign -390,ShapeX -391,ShapeWatermelon -392,ShapeWonSign -393,ShapeTennisball -394,ShapeStrawberry -395,ShapeSmileyFace -396,ShapeSoccerball -397,ShapeRainbow -398,ShapeSadFace -399,ShapePoundSign -400,ShapePear -401,ShapePineapple -402,ShapeOrange -403,ShapePeanut -404,ShapeO -405,ShapeLemon -406,ShapeMoneyBag -407,ShapeHorseshoe -408,ShapeHockeyStick -409,ShapeHockeyPuck -410,ShapeHand -411,ShapeGolfClub -412,ShapeGrape -413,ShapeEuroSign -414,ShapeDollarSign -415,ShapeBasketball -416,ShapeCarrot -417,ShapeCherry -418,ShapeBaseball -419,ShapeBaseballBat -420,ShapeBanana -421,ShapeApple -422,ShapeCashLarge -423,ShapeCashMedium -424,ShapeCashSmall -425,ShapeFootballColored -426,ShapeLemonSmall -427,ShapeOrangeSmall -428,ShapeTreasureChestOpen -429,ShapeTreasureChestClosed -430,ShapeWatermelonSmall -431,UnbuildableRocksDestructible -432,UnbuildableBricksDestructible -433,UnbuildablePlatesDestructible -434,Debris2x2NonConjoined -435,EnemyPathingBlocker1x1 -436,EnemyPathingBlocker2x2 -437,EnemyPathingBlocker4x4 -438,EnemyPathingBlocker8x8 -439,EnemyPathingBlocker16x16 -440,ScopeTest -456,CollapsibleTerranTowerDebris -457,DebrisRampLeft -458,DebrisRampRight -459,MothershipCore -463,LocustMP -464,CollapsibleRockTowerDebris -465,NydusCanalAttacker -466,NydusCanalCreeper -467,SwarmHostBurrowedMP -468,SwarmHostMP -469,Oracle -470,Tempest -471,WarHound -472,WidowMine -473,Viper -474,WidowMineBurrowed -475,LurkerMPEgg -476,LurkerMP -477,LurkerMPBurrowed -478,LurkerDenMP -479,ExtendingBridgeNEWide8Out -480,ExtendingBridgeNEWide8 -481,ExtendingBridgeNWWide8Out -482,ExtendingBridgeNWWide8 -483,ExtendingBridgeNEWide10Out -484,ExtendingBridgeNEWide10 -485,ExtendingBridgeNWWide10Out -486,ExtendingBridgeNWWide10 -487,ExtendingBridgeNEWide12Out -488,ExtendingBridgeNEWide12 -489,ExtendingBridgeNWWide12Out -490,ExtendingBridgeNWWide12 -492,CollapsibleRockTowerDebrisRampRight -493,CollapsibleRockTowerDebrisRampLeft -494,XelNaga_Caverns_DoorE -495,XelNaga_Caverns_DoorEOpened -496,XelNaga_Caverns_DoorN -497,XelNaga_Caverns_DoorNE -498,XelNaga_Caverns_DoorNEOpened -499,XelNaga_Caverns_DoorNOpened -500,XelNaga_Caverns_DoorNW -501,XelNaga_Caverns_DoorNWOpened -502,XelNaga_Caverns_DoorS -503,XelNaga_Caverns_DoorSE -504,XelNaga_Caverns_DoorSEOpened -505,XelNaga_Caverns_DoorSOpened -506,XelNaga_Caverns_DoorSW -507,XelNaga_Caverns_DoorSWOpened -508,XelNaga_Caverns_DoorW -509,XelNaga_Caverns_DoorWOpened -510,XelNaga_Caverns_Floating_BridgeNE8Out -511,XelNaga_Caverns_Floating_BridgeNE8 -512,XelNaga_Caverns_Floating_BridgeNW8Out -513,XelNaga_Caverns_Floating_BridgeNW8 -514,XelNaga_Caverns_Floating_BridgeNE10Out -515,XelNaga_Caverns_Floating_BridgeNE10 -516,XelNaga_Caverns_Floating_BridgeNW10Out -517,XelNaga_Caverns_Floating_BridgeNW10 -518,XelNaga_Caverns_Floating_BridgeNE12Out -519,XelNaga_Caverns_Floating_BridgeNE12 -520,XelNaga_Caverns_Floating_BridgeNW12Out -521,XelNaga_Caverns_Floating_BridgeNW12 -522,XelNaga_Caverns_Floating_BridgeH8Out -523,XelNaga_Caverns_Floating_BridgeH8 -524,XelNaga_Caverns_Floating_BridgeV8Out -525,XelNaga_Caverns_Floating_BridgeV8 -526,XelNaga_Caverns_Floating_BridgeH10Out -527,XelNaga_Caverns_Floating_BridgeH10 -528,XelNaga_Caverns_Floating_BridgeV10Out -529,XelNaga_Caverns_Floating_BridgeV10 -530,XelNaga_Caverns_Floating_BridgeH12Out -531,XelNaga_Caverns_Floating_BridgeH12 -532,XelNaga_Caverns_Floating_BridgeV12Out -533,XelNaga_Caverns_Floating_BridgeV12 -536,CollapsibleTerranTowerPushUnitRampLeft -537,CollapsibleTerranTowerPushUnitRampRight -540,CollapsibleRockTowerPushUnit -541,CollapsibleTerranTowerPushUnit -542,CollapsibleRockTowerPushUnitRampRight -543,CollapsibleRockTowerPushUnitRampLeft -544,DigesterCreepSprayTargetUnit -545,DigesterCreepSprayUnit -546,NydusCanalAttackerWeapon -547,ViperConsumeStructureWeapon -550,ResourceBlocker -551,TempestWeapon -552,YoinkMissile -556,YoinkVikingAirMissile -558,YoinkVikingGroundMissile -560,YoinkSiegeTankMissile -562,WarHoundWeapon -564,EyeStalkWeapon -567,WidowMineWeapon -568,WidowMineAirWeapon -569,MothershipCoreWeaponWeapon -570,TornadoMissileWeapon -571,TornadoMissileDummyWeapon -572,TalonsMissileWeapon -573,CreepTumorMissile -574,LocustMPEggAMissileWeapon -575,LocustMPEggBMissileWeapon -576,LocustMPWeapon -578,RepulsorCannonWeapon -579,ExtendingBridge -580,PhysicsPrimitiveParent -581,XelNaga_Caverns_Door -582,CollapsibleRockTowerDiagonal -583,CollapsibleTerranTowerDiagonal -584,CollapsibleTerranTowerRampLeft -585,CollapsibleTerranTowerRampRight -586,Ice2x2NonConjoined -587,IceProtossCrates -588,ProtossCrates -589,TowerMine -590,PickupPalletGas -591,PickupPalletMinerals -592,PickupScrapSalvage1x1 -593,PickupScrapSalvage2x2 -594,PickupScrapSalvage3x3 -595,RoughTerrain -596,UnbuildableBricksSmallUnit -597,UnbuildablePlatesSmallUnit -598,UnbuildablePlatesUnit -599,UnbuildableRocksSmallUnit -600,XelNagaHealingShrine -601,InvisibleTargetDummy -602,ProtossVespeneGeyser -603,CollapsibleRockTower -604,CollapsibleTerranTower -605,ThornLizard -606,CleaningBot -607,DestructibleRock6x6Weak -608,ProtossSnakeSegmentDemo -609,PhysicsCapsule -610,PhysicsCube -611,PhysicsCylinder -612,PhysicsKnot -613,PhysicsL -614,PhysicsPrimitives -615,PhysicsSphere -616,PhysicsStar -617,CreepBlocker4x4 -618,DestructibleCityDebris2x4Vertical -619,DestructibleCityDebris2x4Horizontal -620,DestructibleCityDebris2x6Vertical -621,DestructibleCityDebris2x6Horizontal -622,DestructibleCityDebris4x4 -623,DestructibleCityDebris6x6 -624,DestructibleCityDebrisHugeDiagonalBLUR -625,DestructibleCityDebrisHugeDiagonalULBR -626,TestZerg -627,PathingBlockerRadius1 -628,DestructibleRockEx12x4Vertical -629,DestructibleRockEx12x4Horizontal -630,DestructibleRockEx12x6Vertical -631,DestructibleRockEx12x6Horizontal -632,DestructibleRockEx14x4 -633,DestructibleRockEx16x6 -634,DestructibleRockEx1DiagonalHugeULBR -635,DestructibleRockEx1DiagonalHugeBLUR -636,DestructibleRockEx1VerticalHuge -637,DestructibleRockEx1HorizontalHuge -638,DestructibleIce2x4Vertical -639,DestructibleIce2x4Horizontal -640,DestructibleIce2x6Vertical -641,DestructibleIce2x6Horizontal -642,DestructibleIce4x4 -643,DestructibleIce6x6 -644,DestructibleIceDiagonalHugeULBR -645,DestructibleIceDiagonalHugeBLUR -646,DestructibleIceVerticalHuge -647,DestructibleIceHorizontalHuge -648,DesertPlanetSearchlight -649,DesertPlanetStreetlight -650,UnbuildableBricksUnit -651,UnbuildableRocksUnit -652,ZerusDestructibleArch -653,Artosilope -654,Anteplott -655,LabBot -656,Crabeetle -657,CollapsibleRockTowerRampRight -658,CollapsibleRockTowerRampLeft -659,LabMineralField -675,RavagerCocoon -676,Ravager -677,RavagerBurrowed -679,ThorAP -680,LocustMPFlying -681,Disruptor -682,Adept -683,AiurTempleBridgeNE8Out -685,AiurTempleBridgeNE10Out -687,AiurTempleBridgeNE12Out -689,AiurTempleBridgeNW8Out -691,AiurTempleBridgeNW10Out -693,AiurTempleBridgeNW12Out -695,VoidMPImmortalReviveCorpse -696,GuardianCocoonMP -697,GuardianMP -698,DevourerCocoonMP -699,DevourerMP -700,DefilerMPBurrowed -701,DefilerMP -702,OracleStasisTrap -703,DisruptorPhased -704,LiberatorAG -705,Liberator -709,LocustMPPrecursor -710,ReleaseInterceptorsBeacon -711,AdeptPhaseShift -712,RavagerCorrosiveBileMissile -713,HydraliskImpaleMissile -714,CycloneMissile -715,ThorAALance -716,OracleWeapon -717,TempestWeaponGround -718,RavagerWeaponMissile -719,ScoutMPAirWeaponLeft -720,ScoutMPAirWeaponRight -721,ArbiterMPWeaponMissile -722,GuardianMPWeapon -723,DevourerMPWeaponMissile -724,QueenMPEnsnareMissile -725,QueenMPSpawnBroodlingsMissile -726,LightningBombWeapon -727,HERCPlacement -728,GrappleWeapon -731,CausticSprayMissile -732,ParasiticBombMissile -733,ParasiticBombDummy -734,AdeptWeapon -735,AdeptUpgradeWeapon -736,LiberatorMissile -737,LiberatorDamageMissile -738,LiberatorAGMissile -739,KD8Charge -740,KD8ChargeWeapon -742,XelNagaDestructibleRampBlocker -743,HERC -744,SeekerMissile -746,FlyoverUnit -747,ScoutMP -748,ScourgeMP -749,QueenMP -750,XelNagaDestructibleRampBlocker6S -751,XelNagaDestructibleRampBlocker6SE -752,XelNagaDestructibleRampBlocker6E -753,XelNagaDestructibleRampBlocker6NE -754,XelNagaDestructibleRampBlocker6N -755,XelNagaDestructibleRampBlocker6NW -756,XelNagaDestructibleRampBlocker6W -757,XelNagaDestructibleRampBlocker6SW -758,XelNagaDestructibleRampBlocker8S -759,XelNagaDestructibleRampBlocker8SE -760,XelNagaDestructibleRampBlocker8E -761,XelNagaDestructibleRampBlocker8NE -762,XelNagaDestructibleRampBlocker8N -763,XelNagaDestructibleRampBlocker8NW -764,XelNagaDestructibleRampBlocker8W -765,XelNagaDestructibleRampBlocker8SW -766,MineralField750 -767,RichMineralField750 -768,LabMineralField750 -769,TransportOverlordCocoon -770,OverlordTransport -771,BypassArmorDrone -772,CorrosiveParasiteWeapon diff --git a/sc2reader/data/WoL/16117_abilities.csv b/sc2reader/data/WoL/16117_abilities.csv deleted file mode 100644 index 5306e02..0000000 --- a/sc2reader/data/WoL/16117_abilities.csv +++ /dev/null @@ -1,258 +0,0 @@ -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -41,attack -42,TerranAddOns -43,TerranBuildingLiftOff -44,TerranBuildingLand -45,Refund -46,Salvage -47,DisguiseChangeling -48,Corruption -49,GhostHoldFire -50,GhostWeaponsFree -51,MorphToInfestedTerran -52,Explode -53,FleetBeaconResearch -54,FungalGrowth -55,GuardianShield -56,MULERepair -57,MorphZerglingToBaneling -58,NexusTrainMothership -59,Feedback -60,MassRecall -61,PlacePointDefenseDrone -62,HallucinationArchon -63,HallucinationColossus -64,HallucinationHighTemplar -65,HallucinationImmortal -66,HallucinationPhoenix -67,HallucinationProbe -68,HallucinationStalker -69,HallucinationVoidRay -70,HallucinationWarpPrism -71,HallucinationZealot -72,MULEGather -73,SeekerMissile -74,CalldownMULE -75,GravitonBeam -76,BuildinProgressNydusCanal -77,Siphon -78,Leech -79,SpawnChangeling -80,DisguiseAsZealot -81,DisguiseAsMarineWithShield -82,DisguiseAsMarineWithoutShield -83,DisguiseAsZerglingWithWings -84,DisguiseAsZerglingWithoutWings -85,PhaseShift -86,Rally -87,ProgressRally -88,RallyCommand -89,RallyNexus -90,RallyHatchery -91,RoachWarrenResearch -92,SapStructure -93,InfestedTerrans -94,NeuralParasite -95,SpawnLarva -96,StimpackMarauder -97,SupplyDrop -98,250mmStrikeCannons -99,TemporalRift -100,TimeWarp -101,UltraliskCavernResearch -102,WormholeTransit -103,SCVHarvest -104,ProbeHarvest -105,AttackWarpPrism -106,que1 -107,que5 -108,que5LongBlend -109,que5Passive -110,BuildInProgress -111,Repair -112,TerranBuild -113,RavenBuild -114,Stimpack -115,GhostCloak -116,Snipe -117,MedivacHeal -118,SiegeMode -119,Unsiege -120,BansheeCloak -121,MedivacTransport -122,ScannerSweep -123,Yamato -124,AssaultMode -125,FighterMode -126,BunkerTransport -127,CommandCenterTransport -128,CommandCenterLiftOff -129,CommandCenterLand -130,BarracksAddOns -131,BarracksLiftOff -132,FactoryAddOns -133,FactoryLiftOff -134,StarportAddOns -135,StarportLiftOff -136,FactoryLand -137,StarportLand -138,CommandCenterTrain -139,BarracksLand -140,SupplyDepotLower -141,SupplyDepotRaise -142,BarracksTrain -143,FactoryTrain -144,StarportTrain -145,EngineeringBayResearch -146,MercCompoundResearch -147,ArmSiloWithNuke -148,BarracksTechLabResearch -149,FactoryTechLabResearch -150,StarportTechLabResearch -151,GhostAcademyResearch -152,ArmoryResearch -153,ProtossBuild -154,WarpPrismTransport -155,GatewayTrain -156,StargateTrain -157,RoboticsFacilityTrain -158,NexusTrain -159,PsiStorm -160,HangarQueue5 -161,BroodLordQueue2 -162,CarrierHangar -163,ForgeResearch -164,RoboticsBayResearch -165,TemplarArchivesResearch -166,ZergBuild -167,DroneHarvest -168,evolutionchamberresearch -169,UpgradeToLair -170,UpgradeToHive -171,UpgradeToGreaterSpire -172,LairResearch -173,SpawningPoolResearch -174,HydraliskDenResearch -175,SpireResearch -176,LarvaTrain -177,MorphToBroodLord -178,BurrowBanelingDown -179,BurrowBanelingUp -180,BurrowDroneDown -181,BurrowDroneUp -182,BurrowHydraliskDown -183,BurrowHydraliskUp -184,BurrowRoachDown -185,BurrowRoachUp -186,BurrowZerglingDown -187,BurrowZerglingUp -188,BurrowInfestorTerranDown -189,BurrowInfestorTerranUp -190,RedstoneLavaCritterBurrow -191,RedstoneLavaCritterInjuredBurrow -192,RedstoneLavaCritterUnburrow -193,RedstoneLavaCritterInjuredUnburrow -194,OverlordTransport -195,Mergeable -196,Warpable -197,WarpGateTrain -198,BurrowQueenDown -199,BurrowQueenUp -200,NydusCanalTransport -201,Blink -202,BurrowInfestorDown -203,BurrowInfestorUp -204,MorphToOverseer -205,UpgradeToPlanetaryFortress -206,InfestationPitResearch -207,BanelingNestResearch -208,BurrowUltraliskDown -209,BurrowUltraliskUp -210,UpgradeToOrbital -211,UpgradeToWarpGate -212,MorphBackToGateway -213,OrbitalLiftOff -214,OrbitalCommandLand -215,ForceField -216,PhasingMode -217,TransportMode -218,FusionCoreResearch -219,CyberneticsCoreResearch -220,TwilightCouncilResearch -221,TacNukeStrike -222,SalvageBunkerRefund -223,SalvageBunker -224,EMP -225,Vortex -226,TrainQueen -227,BurrowCreepTumorDown -228,Transfusion -229,TechLabMorph -230,BarracksTechLabMorph -231,FactoryTechLabMorph -232,StarportTechLabMorph -233,ReactorMorph -234,BarracksReactorMorph -235,FactoryReactorMorph -236,StarportReactorMorph -237,AttackRedirect -238,StimpackRedirect -239,StimpackMarauderRedirect -240,burrowedStop -241,StopRedirect -242,GenerateCreep -243,QueenBuild -244,SpineCrawlerUproot -245,SporeCrawlerUproot -246,SpineCrawlerRoot -247,SporeCrawlerRoot -248,CreepTumorBuild -249,BuildAutoTurret -250,ArchonWarp -251,BuildNydusCanal -252,BroodLordHangar -253,Charge -254,TowerCapture -255,HerdInteract -256,Frenzy -257,Contaminate -258,Shatter -259,InfestedTerransLayEgg diff --git a/sc2reader/data/WoL/16117_units.csv b/sc2reader/data/WoL/16117_units.csv deleted file mode 100644 index 6a186ec..0000000 --- a/sc2reader/data/WoL/16117_units.csv +++ /dev/null @@ -1,350 +0,0 @@ -4,BeaconRally -5,BeaconAttack -6,BeaconDefend -7,BeaconDetect -8,BeaconExpand -9,BeaconHarass -10,BeaconScout -12,BeaconQQQ -13,DESTRUCTIBLE -14,ITEM -15,POWERUP -16,SMCAMERA -17,SMCHARACTER -18,STARMAP -19,SMSET -20,MISSILE -21,MISSILE_INVULNERABLE -22,MISSILE_HALFLIFE -23,PLACEHOLDER -24,PLACEHOLDER_AIR -25,PATHINGBLOCKER -26,BEACON -27,Ball -28,StereoscopicOptionsUnit -29,Colossus -30,TechLab -31,Reactor -33,InfestorTerran -34,BanelingCocoon -35,Baneling -36,Mothership -37,PointDefenseDrone -38,Changeling -39,ChangelingZealot -40,ChangelingMarineShield -41,ChangelingMarine -42,ChangelingZerglingWings -43,ChangelingZergling -45,CommandCenter -46,SupplyDepot -47,Refinery -48,Barracks -49,EngineeringBay -50,MissileTurret -51,Bunker -52,SensorTower -53,GhostAcademy -54,Factory -55,Starport -57,Armory -58,FusionCore -59,AutoTurret -60,SiegeTankSieged -61,SiegeTank -62,VikingFighter -63,VikingAssault -64,CommandCenterFlying -65,BarracksTechLab -66,BarracksReactor -67,FactoryTechLab -68,FactoryReactor -69,StarportTechLab -70,StarportReactor -71,FactoryFlying -72,StarportFlying -73,SCV -74,BarracksFlying -75,SupplyDepotLowered -76,Marine -77,Reaper -78,Ghost -79,Marauder -80,Thor -81,Hellion -82,Medivac -83,Banshee -84,Raven -85,Battlecruiser -86,Nuke -87,Nexus -88,Pylon -89,Assimilator -90,Gateway -91,Forge -92,FleetBeacon -93,TwilightCouncil -94,PhotonCannon -95,Stargate -96,TemplarArchive -97,DarkShrine -98,RoboticsBay -99,RoboticsFacility -100,CyberneticsCore -101,Zealot -102,Stalker -103,HighTemplar -104,DarkTemplar -105,Sentry -106,Phoenix -107,Carrier -108,VoidRay -109,WarpPrism -110,Observer -111,Immortal -112,Probe -113,Interceptor -114,Hatchery -115,CreepTumor -116,Extractor -117,SpawningPool -118,EvolutionChamber -119,HydraliskDen -120,Spire -121,UltraliskCavern -122,InfestationPit -123,NydusNetwork -124,BanelingNest -125,RoachWarren -126,SpineCrawler -127,SporeCrawler -128,Lair -129,Hive -130,GreaterSpire -131,Egg -132,Drone -133,Zergling -134,Overlord -135,Hydralisk -136,Mutalisk -137,Ultralisk -138,Roach -139,Infestor -140,Corruptor -141,BroodLordCocoon -142,BroodLord -143,BanelingBurrowed -144,DroneBurrowed -145,HydraliskBurrowed -146,RoachBurrowed -147,ZerglingBurrowed -148,InfestorTerranBurrowed -149,RedstoneLavaCritterBurrowed -150,RedstoneLavaCritterInjuredBurrowed -151,RedstoneLavaCritter -152,RedstoneLavaCritterInjured -153,QueenBurrowed -154,Queen -155,InfestorBurrowed -156,OverlordCocoon -157,Overseer -158,PlanetaryFortress -159,UltraliskBurrowed -160,OrbitalCommand -161,WarpGate -162,OrbitalCommandFlying -163,ForceField -164,WarpPrismPhasing -165,CreepTumorBurrowed -166,SpineCrawlerUprooted -167,SporeCrawlerUprooted -168,Archon -169,NydusCanal -170,BroodlingEscort -171,RichMineralField -173,XelNagaTower -176,InfestedTerransEgg -177,Larva -178,ReaperPlaceholder -179,NeedleSpinesWeapon -180,CorruptionWeapon -181,InfestedTerransWeapon -182,NeuralParasiteWeapon -183,PointDefenseDroneReleaseWeapon -184,HunterSeekerWeapon -185,MULE -187,ThorAAWeapon -188,PunisherGrenadesLMWeapon -189,VikingFighterWeapon -190,ATALaserBatteryLMWeapon -191,ATSLaserBatteryLMWeapon -192,LongboltMissileWeapon -193,D8ChargeWeapon -194,YamatoWeapon -195,IonCannonsWeapon -196,AcidSalivaWeapon -197,SpineCrawlerWeapon -198,SporeCrawlerWeapon -199,GlaiveWurmWeapon -200,GlaiveWurmM2Weapon -201,GlaiveWurmM3Weapon -202,StalkerWeapon -203,EMP2Weapon -204,BacklashRocketsLMWeapon -205,PhotonCannonWeapon -206,ParasiteSporeWeapon -207,Broodling -210,AutoTurretReleaseWeapon -211,LarvaReleaseMissile -212,AcidSpinesWeapon -213,FrenzyWeapon -214,ContaminateWeapon -215,BroodlingDefault -216,Critter -217,FungalGrowthMissile -218,NeuralParasiteTentacleMissile -219,Beacon_Protoss -220,Beacon_ProtossSmall -221,Beacon_Terran -222,Beacon_TerranSmall -223,Beacon_Zerg -224,Beacon_ZergSmall -225,Lyote -226,CarrionBird -227,KarakMale -228,KarakFemale -229,UrsadakMale -230,UrsadakFemale -231,UrsadakCalf -232,UrsadakMaleExotic -233,UrsadakFemaleExotic -234,UtilityBot -235,Scantipede -236,Dog -237,Sheep -238,Cow -239,InfestedTerransEggPlacement -240,InfestorTerransWeapon -241,MineralField -242,VespeneGeyser -243,SpacePlatformGeyser -244,RichVespeneGeyser -245,DestructibleSearchlight -246,DestructibleBullhornLights -247,DestructibleStreetlight -248,DestructibleSpacePlatformSign -249,DestructibleStoreFrontCityProps -250,DestructibleBillboardTall -251,DestructibleBillboardScrollingText -252,DestructibleSpacePlatformBarrier -253,DestructibleSignsDirectional -254,DestructibleSignsConstruction -255,DestructibleSignsFunny -256,DestructibleSignsIcons -257,DestructibleSignsWarning -258,DestructibleGarage -259,DestructibleGarageLarge -260,DestructibleTrafficSignal -261,TrafficSignal -262,BraxisAlphaDestructible1x1 -263,BraxisAlphaDestructible2x2 -264,DestructibleDebris4x4 -265,DestructibleDebris6x6 -266,DestructibleRock2x4Vertical -267,DestructibleRock2x4Horizontal -268,DestructibleRock2x6Vertical -269,DestructibleRock2x6Horizontal -270,DestructibleRock4x4 -271,DestructibleRock6x6 -272,DestructibleRampDiagonalHugeULBR -273,DestructibleRampDiagonalHugeBLUR -274,MengskStatueAlone -275,MengskStatue -276,WolfStatue -277,GlobeStatue -278,Weapon -279,BroodLordWeapon -280,CreepBlocker1x1 -281,PathingBlocker1x1 -282,PathingBlocker2x2 -283,AutoTestAttackTargetGround -284,AutoTestAttackTargetAir -285,AutoTestAttacker -286,HelperEmitterSelectionArrow -287,MultiKillObject -288,ShapeGolfball -289,ShapeCone -290,ShapeCube -291,ShapeCylinder -292,ShapeDodecahedron -293,ShapeIcosahedron -294,ShapeOctahedron -295,ShapePyramid -296,ShapeRoundedCube -297,ShapeSphere -298,ShapeTetrahedron -299,ShapeThickTorus -300,ShapeThinTorus -301,ShapeTorus -302,Shape4PointStar -303,Shape5PointStar -304,Shape6PointStar -305,Shape8PointStar -306,ShapeArrowPointer -307,ShapeBowl -308,ShapeBox -309,ShapeCapsule -310,ShapeCrescentMoon -311,ShapeDecahedron -312,ShapeDiamond -313,ShapeFootball -314,ShapeGemstone -315,ShapeHeart -316,ShapeJack -317,ShapePlusSign -318,ShapeShamrock -319,ShapeSpade -320,ShapeTube -321,ShapeEgg -322,ShapeYenSign -323,ShapeX -324,ShapeWatermelon -325,ShapeWonSign -326,ShapeTennisball -327,ShapeStrawberry -328,ShapeSmileyFace -329,ShapeSoccerball -330,ShapeRainbow -331,ShapeSadFace -332,ShapePoundSign -333,ShapePear -334,ShapePineapple -335,ShapeOrange -336,ShapePeanut -337,ShapeO -338,ShapeLemon -339,ShapeMoneyBag -340,ShapeHorseshoe -341,ShapeHockeyStick -342,ShapeHockeyPuck -343,ShapeHand -344,ShapeGolfClub -345,ShapeGrape -346,ShapeEuroSign -347,ShapeDollarSign -348,ShapeBasketball -349,ShapeCarrot -350,ShapeCherry -351,ShapeBaseball -352,ShapeBaseballBat -353,ShapeBanana -354,ShapeApple -355,ShapeCashLarge -356,ShapeCashMedium -357,ShapeCashSmall -358,ShapeFootballColored -359,ShapeLemonSmall -360,ShapeOrangeSmall -361,ShapeTreasureChestOpen -362,ShapeTreasureChestClosed -363,ShapeWatermelonSmall \ No newline at end of file diff --git a/sc2reader/data/WoL/17326_abilities.csv b/sc2reader/data/WoL/17326_abilities.csv deleted file mode 100644 index 5913a33..0000000 --- a/sc2reader/data/WoL/17326_abilities.csv +++ /dev/null @@ -1,259 +0,0 @@ -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -42,attack -43,TerranAddOns -44,TerranBuildingLiftOff -45,TerranBuildingLand -46,Refund -47,Salvage -48,DisguiseChangeling -49,Corruption -50,GhostHoldFire -51,GhostWeaponsFree -52,MorphToInfestedTerran -53,Explode -54,FleetBeaconResearch -55,FungalGrowth -56,GuardianShield -57,MULERepair -58,MorphZerglingToBaneling -59,NexusTrainMothership -60,Feedback -61,MassRecall -62,PlacePointDefenseDrone -63,HallucinationArchon -64,HallucinationColossus -65,HallucinationHighTemplar -66,HallucinationImmortal -67,HallucinationPhoenix -68,HallucinationProbe -69,HallucinationStalker -70,HallucinationVoidRay -71,HallucinationWarpPrism -72,HallucinationZealot -73,MULEGather -74,SeekerMissile -75,CalldownMULE -76,GravitonBeam -77,BuildinProgressNydusCanal -78,Siphon -79,Leech -80,SpawnChangeling -81,DisguiseAsZealot -82,DisguiseAsMarineWithShield -83,DisguiseAsMarineWithoutShield -84,DisguiseAsZerglingWithWings -85,DisguiseAsZerglingWithoutWings -86,PhaseShift -87,Rally -88,ProgressRally -89,RallyCommand -90,RallyNexus -91,RallyHatchery -92,RoachWarrenResearch -93,SapStructure -94,InfestedTerrans -95,NeuralParasite -96,SpawnLarva -97,StimpackMarauder -98,SupplyDrop -99,250mmStrikeCannons -100,TemporalRift -101,TimeWarp -102,UltraliskCavernResearch -103,WormholeTransit -104,SCVHarvest -105,ProbeHarvest -106,AttackWarpPrism -107,que1 -108,que5 -109,que5LongBlend -110,que5Passive -111,que5Addon -112,BuildInProgress -113,Repair -114,TerranBuild -115,RavenBuild -116,Stimpack -117,GhostCloak -118,Snipe -119,MedivacHeal -120,SiegeMode -121,Unsiege -122,BansheeCloak -123,MedivacTransport -124,ScannerSweep -125,Yamato -126,AssaultMode -127,FighterMode -128,BunkerTransport -129,CommandCenterTransport -130,CommandCenterLiftOff -131,CommandCenterLand -132,BarracksAddOns -133,BarracksLiftOff -134,FactoryAddOns -135,FactoryLiftOff -136,StarportAddOns -137,StarportLiftOff -138,FactoryLand -139,StarportLand -140,CommandCenterTrain -141,BarracksLand -142,SupplyDepotLower -143,SupplyDepotRaise -144,BarracksTrain -145,FactoryTrain -146,StarportTrain -147,EngineeringBayResearch -148,MercCompoundResearch -149,ArmSiloWithNuke -150,BarracksTechLabResearch -151,FactoryTechLabResearch -152,StarportTechLabResearch -153,GhostAcademyResearch -154,ArmoryResearch -155,ProtossBuild -156,WarpPrismTransport -157,GatewayTrain -158,StargateTrain -159,RoboticsFacilityTrain -160,NexusTrain -161,PsiStorm -162,HangarQueue5 -163,BroodLordQueue2 -164,CarrierHangar -165,ForgeResearch -166,RoboticsBayResearch -167,TemplarArchivesResearch -168,ZergBuild -169,DroneHarvest -170,evolutionchamberresearch -171,UpgradeToLair -172,UpgradeToHive -173,UpgradeToGreaterSpire -174,LairResearch -175,SpawningPoolResearch -176,HydraliskDenResearch -177,SpireResearch -178,LarvaTrain -179,MorphToBroodLord -180,BurrowBanelingDown -181,BurrowBanelingUp -182,BurrowDroneDown -183,BurrowDroneUp -184,BurrowHydraliskDown -185,BurrowHydraliskUp -186,BurrowRoachDown -187,BurrowRoachUp -188,BurrowZerglingDown -189,BurrowZerglingUp -190,BurrowInfestorTerranDown -191,BurrowInfestorTerranUp -192,RedstoneLavaCritterBurrow -193,RedstoneLavaCritterInjuredBurrow -194,RedstoneLavaCritterUnburrow -195,RedstoneLavaCritterInjuredUnburrow -196,OverlordTransport -197,Mergeable -198,Warpable -199,WarpGateTrain -200,BurrowQueenDown -201,BurrowQueenUp -202,NydusCanalTransport -203,Blink -204,BurrowInfestorDown -205,BurrowInfestorUp -206,MorphToOverseer -207,UpgradeToPlanetaryFortress -208,InfestationPitResearch -209,BanelingNestResearch -210,BurrowUltraliskDown -211,BurrowUltraliskUp -212,UpgradeToOrbital -213,UpgradeToWarpGate -214,MorphBackToGateway -215,OrbitalLiftOff -216,OrbitalCommandLand -217,ForceField -218,PhasingMode -219,TransportMode -220,FusionCoreResearch -221,CyberneticsCoreResearch -222,TwilightCouncilResearch -223,TacNukeStrike -224,SalvageBunkerRefund -225,SalvageBunker -226,EMP -227,Vortex -228,TrainQueen -229,BurrowCreepTumorDown -230,Transfusion -231,TechLabMorph -232,BarracksTechLabMorph -233,FactoryTechLabMorph -234,StarportTechLabMorph -235,ReactorMorph -236,BarracksReactorMorph -237,FactoryReactorMorph -238,StarportReactorMorph -239,AttackRedirect -240,StimpackRedirect -241,StimpackMarauderRedirect -242,burrowedStop -243,StopRedirect -244,GenerateCreep -245,QueenBuild -246,SpineCrawlerUproot -247,SporeCrawlerUproot -248,SpineCrawlerRoot -249,SporeCrawlerRoot -250,CreepTumorBuild -251,BuildAutoTurret -252,ArchonWarp -253,BuildNydusCanal -254,BroodLordHangar -255,Charge -256,TowerCapture -257,HerdInteract -258,Frenzy -259,Contaminate -260,Shatter -261,InfestedTerransLayEgg diff --git a/sc2reader/data/WoL/17326_units.csv b/sc2reader/data/WoL/17326_units.csv deleted file mode 100644 index 1477ad8..0000000 --- a/sc2reader/data/WoL/17326_units.csv +++ /dev/null @@ -1,353 +0,0 @@ -4,BeaconRally -5,BeaconAttack -6,BeaconDefend -7,BeaconDetect -8,BeaconExpand -9,BeaconHarass -10,BeaconScout -12,BeaconQQQ -13,DESTRUCTIBLE -14,ITEM -15,POWERUP -16,SMCAMERA -17,SMCHARACTER -18,STARMAP -19,SMSET -20,MISSILE -21,MISSILE_INVULNERABLE -22,MISSILE_HALFLIFE -23,PLACEHOLDER -24,PLACEHOLDER_AIR -25,PATHINGBLOCKER -26,BEACON -27,Ball -28,StereoscopicOptionsUnit -29,Colossus -30,TechLab -31,Reactor -33,InfestorTerran -34,BanelingCocoon -35,Baneling -36,Mothership -37,PointDefenseDrone -38,Changeling -39,ChangelingZealot -40,ChangelingMarineShield -41,ChangelingMarine -42,ChangelingZerglingWings -43,ChangelingZergling -45,CommandCenter -46,SupplyDepot -47,Refinery -48,Barracks -49,EngineeringBay -50,MissileTurret -51,Bunker -52,SensorTower -53,GhostAcademy -54,Factory -55,Starport -57,Armory -58,FusionCore -59,AutoTurret -60,SiegeTankSieged -61,SiegeTank -62,VikingFighter -63,VikingAssault -64,CommandCenterFlying -65,BarracksTechLab -66,BarracksReactor -67,FactoryTechLab -68,FactoryReactor -69,StarportTechLab -70,StarportReactor -71,FactoryFlying -72,StarportFlying -73,SCV -74,BarracksFlying -75,SupplyDepotLowered -76,Marine -77,Reaper -78,Ghost -79,Marauder -80,Thor -81,Hellion -82,Medivac -83,Banshee -84,Raven -85,Battlecruiser -86,Nuke -87,Nexus -88,Pylon -89,Assimilator -90,Gateway -91,Forge -92,FleetBeacon -93,TwilightCouncil -94,PhotonCannon -95,Stargate -96,TemplarArchive -97,DarkShrine -98,RoboticsBay -99,RoboticsFacility -100,CyberneticsCore -101,Zealot -102,Stalker -103,HighTemplar -104,DarkTemplar -105,Sentry -106,Phoenix -107,Carrier -108,VoidRay -109,WarpPrism -110,Observer -111,Immortal -112,Probe -113,Interceptor -114,Hatchery -115,CreepTumor -116,Extractor -117,SpawningPool -118,EvolutionChamber -119,HydraliskDen -120,Spire -121,UltraliskCavern -122,InfestationPit -123,NydusNetwork -124,BanelingNest -125,RoachWarren -126,SpineCrawler -127,SporeCrawler -128,Lair -129,Hive -130,GreaterSpire -131,Egg -132,Drone -133,Zergling -134,Overlord -135,Hydralisk -136,Mutalisk -137,Ultralisk -138,Roach -139,Infestor -140,Corruptor -141,BroodLordCocoon -142,BroodLord -143,BanelingBurrowed -144,DroneBurrowed -145,HydraliskBurrowed -146,RoachBurrowed -147,ZerglingBurrowed -148,InfestorTerranBurrowed -149,RedstoneLavaCritterBurrowed -150,RedstoneLavaCritterInjuredBurrowed -151,RedstoneLavaCritter -152,RedstoneLavaCritterInjured -153,QueenBurrowed -154,Queen -155,InfestorBurrowed -156,OverlordCocoon -157,Overseer -158,PlanetaryFortress -159,UltraliskBurrowed -160,OrbitalCommand -161,WarpGate -162,OrbitalCommandFlying -163,ForceField -164,WarpPrismPhasing -165,CreepTumorBurrowed -166,SpineCrawlerUprooted -167,SporeCrawlerUprooted -168,Archon -169,NydusCanal -170,BroodlingEscort -171,RichMineralField -173,XelNagaTower -176,InfestedTerransEgg -177,Larva -178,ReaperPlaceholder -179,NeedleSpinesWeapon -180,CorruptionWeapon -181,InfestedTerransWeapon -182,NeuralParasiteWeapon -183,PointDefenseDroneReleaseWeapon -184,HunterSeekerWeapon -185,MULE -187,ThorAAWeapon -188,PunisherGrenadesLMWeapon -189,VikingFighterWeapon -190,ATALaserBatteryLMWeapon -191,ATSLaserBatteryLMWeapon -192,LongboltMissileWeapon -193,D8ChargeWeapon -194,YamatoWeapon -195,IonCannonsWeapon -196,AcidSalivaWeapon -197,SpineCrawlerWeapon -198,SporeCrawlerWeapon -199,GlaiveWurmWeapon -200,GlaiveWurmM2Weapon -201,GlaiveWurmM3Weapon -202,StalkerWeapon -203,EMP2Weapon -204,BacklashRocketsLMWeapon -205,PhotonCannonWeapon -206,ParasiteSporeWeapon -207,Broodling -210,AutoTurretReleaseWeapon -211,LarvaReleaseMissile -212,AcidSpinesWeapon -213,FrenzyWeapon -214,ContaminateWeapon -215,BroodlingDefault -216,Critter -217,FungalGrowthMissile -218,NeuralParasiteTentacleMissile -219,Beacon_Protoss -220,Beacon_ProtossSmall -221,Beacon_Terran -222,Beacon_TerranSmall -223,Beacon_Zerg -224,Beacon_ZergSmall -225,Lyote -226,CarrionBird -227,KarakMale -228,KarakFemale -229,UrsadakMale -230,UrsadakFemale -231,UrsadakCalf -232,UrsadakMaleExotic -233,UrsadakFemaleExotic -234,UtilityBot -235,Scantipede -236,Dog -237,Sheep -238,Cow -239,InfestedTerransEggPlacement -240,InfestorTerransWeapon -241,MineralField -242,VespeneGeyser -243,SpacePlatformGeyser -244,RichVespeneGeyser -245,DestructibleSearchlight -246,DestructibleBullhornLights -247,DestructibleStreetlight -248,DestructibleSpacePlatformSign -249,DestructibleStoreFrontCityProps -250,DestructibleBillboardTall -251,DestructibleBillboardScrollingText -252,DestructibleSpacePlatformBarrier -253,DestructibleSignsDirectional -254,DestructibleSignsConstruction -255,DestructibleSignsFunny -256,DestructibleSignsIcons -257,DestructibleSignsWarning -258,DestructibleGarage -259,DestructibleGarageLarge -260,DestructibleTrafficSignal -261,TrafficSignal -262,BraxisAlphaDestructible1x1 -263,BraxisAlphaDestructible2x2 -264,DestructibleDebris4x4 -265,DestructibleDebris6x6 -266,DestructibleRock2x4Vertical -267,DestructibleRock2x4Horizontal -268,DestructibleRock2x6Vertical -269,DestructibleRock2x6Horizontal -270,DestructibleRock4x4 -271,DestructibleRock6x6 -272,DestructibleRampDiagonalHugeULBR -273,DestructibleRampDiagonalHugeBLUR -274,DestructibleRampVerticalHuge -275,DestructibleRampHorizontalHuge -276,MengskStatueAlone -277,MengskStatue -278,WolfStatue -279,GlobeStatue -280,Weapon -281,GlaiveWurmBounceWeapon -282,BroodLordWeapon -283,CreepBlocker1x1 -284,PathingBlocker1x1 -285,PathingBlocker2x2 -286,AutoTestAttackTargetGround -287,AutoTestAttackTargetAir -288,AutoTestAttacker -289,HelperEmitterSelectionArrow -290,MultiKillObject -291,ShapeGolfball -292,ShapeCone -293,ShapeCube -294,ShapeCylinder -295,ShapeDodecahedron -296,ShapeIcosahedron -297,ShapeOctahedron -298,ShapePyramid -299,ShapeRoundedCube -300,ShapeSphere -301,ShapeTetrahedron -302,ShapeThickTorus -303,ShapeThinTorus -304,ShapeTorus -305,Shape4PointStar -306,Shape5PointStar -307,Shape6PointStar -308,Shape8PointStar -309,ShapeArrowPointer -310,ShapeBowl -311,ShapeBox -312,ShapeCapsule -313,ShapeCrescentMoon -314,ShapeDecahedron -315,ShapeDiamond -316,ShapeFootball -317,ShapeGemstone -318,ShapeHeart -319,ShapeJack -320,ShapePlusSign -321,ShapeShamrock -322,ShapeSpade -323,ShapeTube -324,ShapeEgg -325,ShapeYenSign -326,ShapeX -327,ShapeWatermelon -328,ShapeWonSign -329,ShapeTennisball -330,ShapeStrawberry -331,ShapeSmileyFace -332,ShapeSoccerball -333,ShapeRainbow -334,ShapeSadFace -335,ShapePoundSign -336,ShapePear -337,ShapePineapple -338,ShapeOrange -339,ShapePeanut -340,ShapeO -341,ShapeLemon -342,ShapeMoneyBag -343,ShapeHorseshoe -344,ShapeHockeyStick -345,ShapeHockeyPuck -346,ShapeHand -347,ShapeGolfClub -348,ShapeGrape -349,ShapeEuroSign -350,ShapeDollarSign -351,ShapeBasketball -352,ShapeCarrot -353,ShapeCherry -354,ShapeBaseball -355,ShapeBaseballBat -356,ShapeBanana -357,ShapeApple -358,ShapeCashLarge -359,ShapeCashMedium -360,ShapeCashSmall -361,ShapeFootballColored -362,ShapeLemonSmall -363,ShapeOrangeSmall -364,ShapeTreasureChestOpen -365,ShapeTreasureChestClosed -366,ShapeWatermelonSmall diff --git a/sc2reader/data/WoL/18092_abilities.csv b/sc2reader/data/WoL/18092_abilities.csv deleted file mode 100644 index 5913a33..0000000 --- a/sc2reader/data/WoL/18092_abilities.csv +++ /dev/null @@ -1,259 +0,0 @@ -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -42,attack -43,TerranAddOns -44,TerranBuildingLiftOff -45,TerranBuildingLand -46,Refund -47,Salvage -48,DisguiseChangeling -49,Corruption -50,GhostHoldFire -51,GhostWeaponsFree -52,MorphToInfestedTerran -53,Explode -54,FleetBeaconResearch -55,FungalGrowth -56,GuardianShield -57,MULERepair -58,MorphZerglingToBaneling -59,NexusTrainMothership -60,Feedback -61,MassRecall -62,PlacePointDefenseDrone -63,HallucinationArchon -64,HallucinationColossus -65,HallucinationHighTemplar -66,HallucinationImmortal -67,HallucinationPhoenix -68,HallucinationProbe -69,HallucinationStalker -70,HallucinationVoidRay -71,HallucinationWarpPrism -72,HallucinationZealot -73,MULEGather -74,SeekerMissile -75,CalldownMULE -76,GravitonBeam -77,BuildinProgressNydusCanal -78,Siphon -79,Leech -80,SpawnChangeling -81,DisguiseAsZealot -82,DisguiseAsMarineWithShield -83,DisguiseAsMarineWithoutShield -84,DisguiseAsZerglingWithWings -85,DisguiseAsZerglingWithoutWings -86,PhaseShift -87,Rally -88,ProgressRally -89,RallyCommand -90,RallyNexus -91,RallyHatchery -92,RoachWarrenResearch -93,SapStructure -94,InfestedTerrans -95,NeuralParasite -96,SpawnLarva -97,StimpackMarauder -98,SupplyDrop -99,250mmStrikeCannons -100,TemporalRift -101,TimeWarp -102,UltraliskCavernResearch -103,WormholeTransit -104,SCVHarvest -105,ProbeHarvest -106,AttackWarpPrism -107,que1 -108,que5 -109,que5LongBlend -110,que5Passive -111,que5Addon -112,BuildInProgress -113,Repair -114,TerranBuild -115,RavenBuild -116,Stimpack -117,GhostCloak -118,Snipe -119,MedivacHeal -120,SiegeMode -121,Unsiege -122,BansheeCloak -123,MedivacTransport -124,ScannerSweep -125,Yamato -126,AssaultMode -127,FighterMode -128,BunkerTransport -129,CommandCenterTransport -130,CommandCenterLiftOff -131,CommandCenterLand -132,BarracksAddOns -133,BarracksLiftOff -134,FactoryAddOns -135,FactoryLiftOff -136,StarportAddOns -137,StarportLiftOff -138,FactoryLand -139,StarportLand -140,CommandCenterTrain -141,BarracksLand -142,SupplyDepotLower -143,SupplyDepotRaise -144,BarracksTrain -145,FactoryTrain -146,StarportTrain -147,EngineeringBayResearch -148,MercCompoundResearch -149,ArmSiloWithNuke -150,BarracksTechLabResearch -151,FactoryTechLabResearch -152,StarportTechLabResearch -153,GhostAcademyResearch -154,ArmoryResearch -155,ProtossBuild -156,WarpPrismTransport -157,GatewayTrain -158,StargateTrain -159,RoboticsFacilityTrain -160,NexusTrain -161,PsiStorm -162,HangarQueue5 -163,BroodLordQueue2 -164,CarrierHangar -165,ForgeResearch -166,RoboticsBayResearch -167,TemplarArchivesResearch -168,ZergBuild -169,DroneHarvest -170,evolutionchamberresearch -171,UpgradeToLair -172,UpgradeToHive -173,UpgradeToGreaterSpire -174,LairResearch -175,SpawningPoolResearch -176,HydraliskDenResearch -177,SpireResearch -178,LarvaTrain -179,MorphToBroodLord -180,BurrowBanelingDown -181,BurrowBanelingUp -182,BurrowDroneDown -183,BurrowDroneUp -184,BurrowHydraliskDown -185,BurrowHydraliskUp -186,BurrowRoachDown -187,BurrowRoachUp -188,BurrowZerglingDown -189,BurrowZerglingUp -190,BurrowInfestorTerranDown -191,BurrowInfestorTerranUp -192,RedstoneLavaCritterBurrow -193,RedstoneLavaCritterInjuredBurrow -194,RedstoneLavaCritterUnburrow -195,RedstoneLavaCritterInjuredUnburrow -196,OverlordTransport -197,Mergeable -198,Warpable -199,WarpGateTrain -200,BurrowQueenDown -201,BurrowQueenUp -202,NydusCanalTransport -203,Blink -204,BurrowInfestorDown -205,BurrowInfestorUp -206,MorphToOverseer -207,UpgradeToPlanetaryFortress -208,InfestationPitResearch -209,BanelingNestResearch -210,BurrowUltraliskDown -211,BurrowUltraliskUp -212,UpgradeToOrbital -213,UpgradeToWarpGate -214,MorphBackToGateway -215,OrbitalLiftOff -216,OrbitalCommandLand -217,ForceField -218,PhasingMode -219,TransportMode -220,FusionCoreResearch -221,CyberneticsCoreResearch -222,TwilightCouncilResearch -223,TacNukeStrike -224,SalvageBunkerRefund -225,SalvageBunker -226,EMP -227,Vortex -228,TrainQueen -229,BurrowCreepTumorDown -230,Transfusion -231,TechLabMorph -232,BarracksTechLabMorph -233,FactoryTechLabMorph -234,StarportTechLabMorph -235,ReactorMorph -236,BarracksReactorMorph -237,FactoryReactorMorph -238,StarportReactorMorph -239,AttackRedirect -240,StimpackRedirect -241,StimpackMarauderRedirect -242,burrowedStop -243,StopRedirect -244,GenerateCreep -245,QueenBuild -246,SpineCrawlerUproot -247,SporeCrawlerUproot -248,SpineCrawlerRoot -249,SporeCrawlerRoot -250,CreepTumorBuild -251,BuildAutoTurret -252,ArchonWarp -253,BuildNydusCanal -254,BroodLordHangar -255,Charge -256,TowerCapture -257,HerdInteract -258,Frenzy -259,Contaminate -260,Shatter -261,InfestedTerransLayEgg diff --git a/sc2reader/data/WoL/18092_units.csv b/sc2reader/data/WoL/18092_units.csv deleted file mode 100644 index 9c31b05..0000000 --- a/sc2reader/data/WoL/18092_units.csv +++ /dev/null @@ -1,360 +0,0 @@ -4,BeaconRally -5,BeaconAttack -6,BeaconDefend -7,BeaconDetect -8,BeaconExpand -9,BeaconHarass -10,BeaconScout -12,BeaconQQQ -13,DESTRUCTIBLE -14,ITEM -15,POWERUP -16,SMCAMERA -17,SMCHARACTER -18,STARMAP -19,SMSET -20,MISSILE -21,MISSILE_INVULNERABLE -22,MISSILE_HALFLIFE -23,PLACEHOLDER -24,PLACEHOLDER_AIR -25,PATHINGBLOCKER -26,BEACON -27,Ball -28,StereoscopicOptionsUnit -29,Colossus -30,TechLab -31,Reactor -33,InfestorTerran -34,BanelingCocoon -35,Baneling -36,Mothership -37,PointDefenseDrone -38,Changeling -39,ChangelingZealot -40,ChangelingMarineShield -41,ChangelingMarine -42,ChangelingZerglingWings -43,ChangelingZergling -45,CommandCenter -46,SupplyDepot -47,Refinery -48,Barracks -49,EngineeringBay -50,MissileTurret -51,Bunker -52,SensorTower -53,GhostAcademy -54,Factory -55,Starport -57,Armory -58,FusionCore -59,AutoTurret -60,SiegeTankSieged -61,SiegeTank -62,VikingFighter -63,VikingAssault -64,CommandCenterFlying -65,BarracksTechLab -66,BarracksReactor -67,FactoryTechLab -68,FactoryReactor -69,StarportTechLab -70,StarportReactor -71,FactoryFlying -72,StarportFlying -73,SCV -74,BarracksFlying -75,SupplyDepotLowered -76,Marine -77,Reaper -78,Ghost -79,Marauder -80,Thor -81,Hellion -82,Medivac -83,Banshee -84,Raven -85,Battlecruiser -86,Nuke -87,Nexus -88,Pylon -89,Assimilator -90,Gateway -91,Forge -92,FleetBeacon -93,TwilightCouncil -94,PhotonCannon -95,Stargate -96,TemplarArchive -97,DarkShrine -98,RoboticsBay -99,RoboticsFacility -100,CyberneticsCore -101,Zealot -102,Stalker -103,HighTemplar -104,DarkTemplar -105,Sentry -106,Phoenix -107,Carrier -108,VoidRay -109,WarpPrism -110,Observer -111,Immortal -112,Probe -113,Interceptor -114,Hatchery -115,CreepTumor -116,Extractor -117,SpawningPool -118,EvolutionChamber -119,HydraliskDen -120,Spire -121,UltraliskCavern -122,InfestationPit -123,NydusNetwork -124,BanelingNest -125,RoachWarren -126,SpineCrawler -127,SporeCrawler -128,Lair -129,Hive -130,GreaterSpire -131,Egg -132,Drone -133,Zergling -134,Overlord -135,Hydralisk -136,Mutalisk -137,Ultralisk -138,Roach -139,Infestor -140,Corruptor -141,BroodLordCocoon -142,BroodLord -143,BanelingBurrowed -144,DroneBurrowed -145,HydraliskBurrowed -146,RoachBurrowed -147,ZerglingBurrowed -148,InfestorTerranBurrowed -149,RedstoneLavaCritterBurrowed -150,RedstoneLavaCritterInjuredBurrowed -151,RedstoneLavaCritter -152,RedstoneLavaCritterInjured -153,QueenBurrowed -154,Queen -155,InfestorBurrowed -156,OverlordCocoon -157,Overseer -158,PlanetaryFortress -159,UltraliskBurrowed -160,OrbitalCommand -161,WarpGate -162,OrbitalCommandFlying -163,ForceField -164,WarpPrismPhasing -165,CreepTumorBurrowed -166,SpineCrawlerUprooted -167,SporeCrawlerUprooted -168,Archon -169,NydusCanal -170,BroodlingEscort -171,RichMineralField -173,XelNagaTower -176,InfestedTerransEgg -177,Larva -178,ReaperPlaceholder -179,NeedleSpinesWeapon -180,CorruptionWeapon -181,InfestedTerransWeapon -182,NeuralParasiteWeapon -183,PointDefenseDroneReleaseWeapon -184,HunterSeekerWeapon -185,MULE -187,ThorAAWeapon -188,PunisherGrenadesLMWeapon -189,VikingFighterWeapon -190,ATALaserBatteryLMWeapon -191,ATSLaserBatteryLMWeapon -192,LongboltMissileWeapon -193,D8ChargeWeapon -194,YamatoWeapon -195,IonCannonsWeapon -196,AcidSalivaWeapon -197,SpineCrawlerWeapon -198,SporeCrawlerWeapon -199,GlaiveWurmWeapon -200,GlaiveWurmM2Weapon -201,GlaiveWurmM3Weapon -202,StalkerWeapon -203,EMP2Weapon -204,BacklashRocketsLMWeapon -205,PhotonCannonWeapon -206,ParasiteSporeWeapon -208,Broodling -209,BroodLordBWeapon -212,AutoTurretReleaseWeapon -213,LarvaReleaseMissile -214,AcidSpinesWeapon -215,FrenzyWeapon -216,ContaminateWeapon -217,BroodlingDefault -218,Critter -219,Shape -220,FungalGrowthMissile -221,NeuralParasiteTentacleMissile -222,Beacon_Protoss -223,Beacon_ProtossSmall -224,Beacon_Terran -225,Beacon_TerranSmall -226,Beacon_Zerg -227,Beacon_ZergSmall -228,Lyote -229,CarrionBird -230,KarakMale -231,KarakFemale -232,UrsadakMale -233,UrsadakFemale -234,UrsadakCalf -235,UrsadakMaleExotic -236,UrsadakFemaleExotic -237,UtilityBot -238,CommentatorBot1 -239,CommentatorBot2 -240,CommentatorBot3 -241,CommentatorBot4 -242,Scantipede -243,Dog -244,Sheep -245,Cow -246,InfestedTerransEggPlacement -247,InfestorTerransWeapon -248,MineralField -249,VespeneGeyser -250,SpacePlatformGeyser -251,RichVespeneGeyser -252,DestructibleSearchlight -253,DestructibleBullhornLights -254,DestructibleStreetlight -255,DestructibleSpacePlatformSign -256,DestructibleStoreFrontCityProps -257,DestructibleBillboardTall -258,DestructibleBillboardScrollingText -259,DestructibleSpacePlatformBarrier -260,DestructibleSignsDirectional -261,DestructibleSignsConstruction -262,DestructibleSignsFunny -263,DestructibleSignsIcons -264,DestructibleSignsWarning -265,DestructibleGarage -266,DestructibleGarageLarge -267,DestructibleTrafficSignal -268,TrafficSignal -269,BraxisAlphaDestructible1x1 -270,BraxisAlphaDestructible2x2 -271,DestructibleDebris4x4 -272,DestructibleDebris6x6 -273,DestructibleRock2x4Vertical -274,DestructibleRock2x4Horizontal -275,DestructibleRock2x6Vertical -276,DestructibleRock2x6Horizontal -277,DestructibleRock4x4 -278,DestructibleRock6x6 -279,DestructibleRampDiagonalHugeULBR -280,DestructibleRampDiagonalHugeBLUR -281,DestructibleRampVerticalHuge -282,DestructibleRampHorizontalHuge -283,MengskStatueAlone -284,MengskStatue -285,WolfStatue -286,GlobeStatue -287,Weapon -288,GlaiveWurmBounceWeapon -289,BroodLordWeapon -290,BroodLordAWeapon -291,CreepBlocker1x1 -292,PathingBlocker1x1 -293,PathingBlocker2x2 -294,AutoTestAttackTargetGround -295,AutoTestAttackTargetAir -296,AutoTestAttacker -297,HelperEmitterSelectionArrow -298,MultiKillObject -299,ShapeGolfball -300,ShapeCone -301,ShapeCube -302,ShapeCylinder -303,ShapeDodecahedron -304,ShapeIcosahedron -305,ShapeOctahedron -306,ShapePyramid -307,ShapeRoundedCube -308,ShapeSphere -309,ShapeTetrahedron -310,ShapeThickTorus -311,ShapeThinTorus -312,ShapeTorus -313,Shape4PointStar -314,Shape5PointStar -315,Shape6PointStar -316,Shape8PointStar -317,ShapeArrowPointer -318,ShapeBowl -319,ShapeBox -320,ShapeCapsule -321,ShapeCrescentMoon -322,ShapeDecahedron -323,ShapeDiamond -324,ShapeFootball -325,ShapeGemstone -326,ShapeHeart -327,ShapeJack -328,ShapePlusSign -329,ShapeShamrock -330,ShapeSpade -331,ShapeTube -332,ShapeEgg -333,ShapeYenSign -334,ShapeX -335,ShapeWatermelon -336,ShapeWonSign -337,ShapeTennisball -338,ShapeStrawberry -339,ShapeSmileyFace -340,ShapeSoccerball -341,ShapeRainbow -342,ShapeSadFace -343,ShapePoundSign -344,ShapePear -345,ShapePineapple -346,ShapeOrange -347,ShapePeanut -348,ShapeO -349,ShapeLemon -350,ShapeMoneyBag -351,ShapeHorseshoe -352,ShapeHockeyStick -353,ShapeHockeyPuck -354,ShapeHand -355,ShapeGolfClub -356,ShapeGrape -357,ShapeEuroSign -358,ShapeDollarSign -359,ShapeBasketball -360,ShapeCarrot -361,ShapeCherry -362,ShapeBaseball -363,ShapeBaseballBat -364,ShapeBanana -365,ShapeApple -366,ShapeCashLarge -367,ShapeCashMedium -368,ShapeCashSmall -369,ShapeFootballColored -370,ShapeLemonSmall -371,ShapeOrangeSmall -372,ShapeTreasureChestOpen -373,ShapeTreasureChestClosed -374,ShapeWatermelonSmall diff --git a/sc2reader/data/WoL/19458_abilities.csv b/sc2reader/data/WoL/19458_abilities.csv deleted file mode 100644 index 2472401..0000000 --- a/sc2reader/data/WoL/19458_abilities.csv +++ /dev/null @@ -1,261 +0,0 @@ -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -42,attack -43,TerranAddOns -44,TerranBuildingLiftOff -45,TerranBuildingLand -46,Refund -47,Salvage -48,DisguiseChangeling -49,SalvageShared -50,Corruption -51,GhostHoldFire -52,GhostWeaponsFree -53,MorphToInfestedTerran -54,Explode -55,FleetBeaconResearch -56,FungalGrowth -57,GuardianShield -58,MULERepair -59,MorphZerglingToBaneling -60,NexusTrainMothership -61,Feedback -62,MassRecall -63,PlacePointDefenseDrone -64,HallucinationArchon -65,HallucinationColossus -66,HallucinationHighTemplar -67,HallucinationImmortal -68,HallucinationPhoenix -69,HallucinationProbe -70,HallucinationStalker -71,HallucinationVoidRay -72,HallucinationWarpPrism -73,HallucinationZealot -74,MULEGather -75,SeekerMissile -76,CalldownMULE -77,GravitonBeam -78,BuildinProgressNydusCanal -79,Siphon -80,Leech -81,SpawnChangeling -82,DisguiseAsZealot -83,DisguiseAsMarineWithShield -84,DisguiseAsMarineWithoutShield -85,DisguiseAsZerglingWithWings -86,DisguiseAsZerglingWithoutWings -87,PhaseShift -88,Rally -89,ProgressRally -90,RallyCommand -91,RallyNexus -92,RallyHatchery -93,RoachWarrenResearch -94,SapStructure -95,InfestedTerrans -96,NeuralParasite -97,SpawnLarva -98,StimpackMarauder -99,SupplyDrop -100,250mmStrikeCannons -101,TemporalRift -102,TimeWarp -103,UltraliskCavernResearch -104,WormholeTransit -105,SCVHarvest -106,ProbeHarvest -107,AttackWarpPrism -108,que1 -109,que5 -110,que5LongBlend -111,que5Passive -112,que5Addon -113,BuildInProgress -114,Repair -115,TerranBuild -116,RavenBuild -117,Stimpack -118,GhostCloak -119,Snipe -120,MedivacHeal -121,SiegeMode -122,Unsiege -123,BansheeCloak -124,MedivacTransport -125,ScannerSweep -126,Yamato -127,AssaultMode -128,FighterMode -129,BunkerTransport -130,CommandCenterTransport -131,CommandCenterLiftOff -132,CommandCenterLand -133,BarracksAddOns -134,BarracksLiftOff -135,FactoryAddOns -136,FactoryLiftOff -137,StarportAddOns -138,StarportLiftOff -139,FactoryLand -140,StarportLand -141,CommandCenterTrain -142,BarracksLand -143,SupplyDepotLower -144,SupplyDepotRaise -145,BarracksTrain -146,FactoryTrain -147,StarportTrain -148,EngineeringBayResearch -149,MercCompoundResearch -150,ArmSiloWithNuke -151,BarracksTechLabResearch -152,FactoryTechLabResearch -153,StarportTechLabResearch -154,GhostAcademyResearch -155,ArmoryResearch -156,ProtossBuild -157,WarpPrismTransport -158,GatewayTrain -159,StargateTrain -160,RoboticsFacilityTrain -161,NexusTrain -162,PsiStorm -163,HangarQueue5 -164,BroodLordQueue2 -165,CarrierHangar -166,ForgeResearch -167,RoboticsBayResearch -168,TemplarArchivesResearch -169,ZergBuild -170,DroneHarvest -171,evolutionchamberresearch -172,UpgradeToLair -173,UpgradeToHive -174,UpgradeToGreaterSpire -175,LairResearch -176,SpawningPoolResearch -177,HydraliskDenResearch -178,SpireResearch -179,LarvaTrain -180,MorphToBroodLord -181,BurrowBanelingDown -182,BurrowBanelingUp -183,BurrowDroneDown -184,BurrowDroneUp -185,BurrowHydraliskDown -186,BurrowHydraliskUp -187,BurrowRoachDown -188,BurrowRoachUp -189,BurrowZerglingDown -190,BurrowZerglingUp -191,BurrowInfestorTerranDown -192,BurrowInfestorTerranUp -193,RedstoneLavaCritterBurrow -194,RedstoneLavaCritterInjuredBurrow -195,RedstoneLavaCritterUnburrow -196,RedstoneLavaCritterInjuredUnburrow -197,OverlordTransport -198,Mergeable -199,Warpable -200,WarpGateTrain -201,BurrowQueenDown -202,BurrowQueenUp -203,NydusCanalTransport -204,Blink -205,BurrowInfestorDown -206,BurrowInfestorUp -207,MorphToOverseer -208,UpgradeToPlanetaryFortress -209,InfestationPitResearch -210,BanelingNestResearch -211,BurrowUltraliskDown -212,BurrowUltraliskUp -213,UpgradeToOrbital -214,UpgradeToWarpGate -215,MorphBackToGateway -216,OrbitalLiftOff -217,OrbitalCommandLand -218,ForceField -219,PhasingMode -220,TransportMode -221,FusionCoreResearch -222,CyberneticsCoreResearch -223,TwilightCouncilResearch -224,TacNukeStrike -225,SalvageBunkerRefund -226,SalvageBunker -227,EMP -228,Vortex -229,TrainQueen -230,BurrowCreepTumorDown -231,Transfusion -232,TechLabMorph -233,BarracksTechLabMorph -234,FactoryTechLabMorph -235,StarportTechLabMorph -236,ReactorMorph -237,BarracksReactorMorph -238,FactoryReactorMorph -239,StarportReactorMorph -240,AttackRedirect -241,StimpackRedirect -242,StimpackMarauderRedirect -243,burrowedStop -244,StopRedirect -245,GenerateCreep -246,QueenBuild -247,SpineCrawlerUproot -248,SporeCrawlerUproot -249,SpineCrawlerRoot -250,SporeCrawlerRoot -251,CreepTumorBuild -252,BuildAutoTurret -253,ArchonWarp -254,BuildNydusCanal -255,BroodLordHangar -256,Charge -257,TowerCapture -258,HerdInteract -259,Frenzy -260,Contaminate -261,Shatter -262,InfestedTerransLayEgg -284,VolatileBurstBuilding diff --git a/sc2reader/data/WoL/19458_units.csv b/sc2reader/data/WoL/19458_units.csv deleted file mode 100644 index a7d1645..0000000 --- a/sc2reader/data/WoL/19458_units.csv +++ /dev/null @@ -1,362 +0,0 @@ -4,BeaconRally -5,BeaconAttack -6,BeaconDefend -7,BeaconDetect -8,BeaconExpand -9,BeaconHarass -10,BeaconScout -12,BeaconQQQ -13,DESTRUCTIBLE -14,ITEM -15,POWERUP -16,SMCAMERA -17,SMCHARACTER -18,STARMAP -19,SMSET -20,MISSILE -21,MISSILE_INVULNERABLE -22,MISSILE_HALFLIFE -23,PLACEHOLDER -24,PLACEHOLDER_AIR -25,PATHINGBLOCKER -26,BEACON -27,Ball -28,StereoscopicOptionsUnit -29,Colossus -30,TechLab -31,Reactor -33,InfestorTerran -34,BanelingCocoon -35,Baneling -36,Mothership -37,PointDefenseDrone -38,Changeling -39,ChangelingZealot -40,ChangelingMarineShield -41,ChangelingMarine -42,ChangelingZerglingWings -43,ChangelingZergling -45,CommandCenter -46,SupplyDepot -47,Refinery -48,Barracks -49,EngineeringBay -50,MissileTurret -51,Bunker -52,SensorTower -53,GhostAcademy -54,Factory -55,Starport -57,Armory -58,FusionCore -59,AutoTurret -60,SiegeTankSieged -61,SiegeTank -62,VikingFighter -63,VikingAssault -64,CommandCenterFlying -65,BarracksTechLab -66,BarracksReactor -67,FactoryTechLab -68,FactoryReactor -69,StarportTechLab -70,StarportReactor -71,FactoryFlying -72,StarportFlying -73,SCV -74,BarracksFlying -75,SupplyDepotLowered -76,Marine -77,Reaper -78,Ghost -79,Marauder -80,Thor -81,Hellion -82,Medivac -83,Banshee -84,Raven -85,Battlecruiser -86,Nuke -87,Nexus -88,Pylon -89,Assimilator -90,Gateway -91,Forge -92,FleetBeacon -93,TwilightCouncil -94,PhotonCannon -95,Stargate -96,TemplarArchive -97,DarkShrine -98,RoboticsBay -99,RoboticsFacility -100,CyberneticsCore -101,Zealot -102,Stalker -103,HighTemplar -104,DarkTemplar -105,Sentry -106,Phoenix -107,Carrier -108,VoidRay -109,WarpPrism -110,Observer -111,Immortal -112,Probe -113,Interceptor -114,Hatchery -115,CreepTumor -116,Extractor -117,SpawningPool -118,EvolutionChamber -119,HydraliskDen -120,Spire -121,UltraliskCavern -122,InfestationPit -123,NydusNetwork -124,BanelingNest -125,RoachWarren -126,SpineCrawler -127,SporeCrawler -128,Lair -129,Hive -130,GreaterSpire -131,Egg -132,Drone -133,Zergling -134,Overlord -135,Hydralisk -136,Mutalisk -137,Ultralisk -138,Roach -139,Infestor -140,Corruptor -141,BroodLordCocoon -142,BroodLord -143,BanelingBurrowed -144,DroneBurrowed -145,HydraliskBurrowed -146,RoachBurrowed -147,ZerglingBurrowed -148,InfestorTerranBurrowed -149,RedstoneLavaCritterBurrowed -150,RedstoneLavaCritterInjuredBurrowed -151,RedstoneLavaCritter -152,RedstoneLavaCritterInjured -153,QueenBurrowed -154,Queen -155,InfestorBurrowed -156,OverlordCocoon -157,Overseer -158,PlanetaryFortress -159,UltraliskBurrowed -160,OrbitalCommand -161,WarpGate -162,OrbitalCommandFlying -163,ForceField -164,WarpPrismPhasing -165,CreepTumorBurrowed -166,SpineCrawlerUprooted -167,SporeCrawlerUprooted -168,Archon -169,NydusCanal -170,BroodlingEscort -171,RichMineralField -173,XelNagaTower -176,InfestedTerransEgg -177,Larva -178,ReaperPlaceholder -179,NeedleSpinesWeapon -180,CorruptionWeapon -181,InfestedTerransWeapon -182,NeuralParasiteWeapon -183,PointDefenseDroneReleaseWeapon -184,HunterSeekerWeapon -185,MULE -187,ThorAAWeapon -188,PunisherGrenadesLMWeapon -189,VikingFighterWeapon -190,ATALaserBatteryLMWeapon -191,ATSLaserBatteryLMWeapon -192,LongboltMissileWeapon -193,D8ChargeWeapon -194,YamatoWeapon -195,IonCannonsWeapon -196,AcidSalivaWeapon -197,SpineCrawlerWeapon -198,SporeCrawlerWeapon -199,GlaiveWurmWeapon -200,GlaiveWurmM2Weapon -201,GlaiveWurmM3Weapon -202,StalkerWeapon -203,EMP2Weapon -204,BacklashRocketsLMWeapon -205,PhotonCannonWeapon -206,ParasiteSporeWeapon -208,Broodling -209,BroodLordBWeapon -212,AutoTurretReleaseWeapon -213,LarvaReleaseMissile -214,AcidSpinesWeapon -215,FrenzyWeapon -216,ContaminateWeapon -217,BroodlingDefault -218,Critter -219,Shape -220,FungalGrowthMissile -221,NeuralParasiteTentacleMissile -222,Beacon_Protoss -223,Beacon_ProtossSmall -224,Beacon_Terran -225,Beacon_TerranSmall -226,Beacon_Zerg -227,Beacon_ZergSmall -228,Lyote -229,CarrionBird -230,KarakMale -231,KarakFemale -232,UrsadakMale -233,UrsadakFemale -234,UrsadakCalf -235,UrsadakMaleExotic -236,UrsadakFemaleExotic -237,UtilityBot -238,CommentatorBot1 -239,CommentatorBot2 -240,CommentatorBot3 -241,CommentatorBot4 -242,Scantipede -243,Dog -244,Sheep -245,Cow -246,InfestedTerransEggPlacement -247,InfestorTerransWeapon -248,MineralField -249,VespeneGeyser -250,SpacePlatformGeyser -251,RichVespeneGeyser -252,DestructibleSearchlight -253,DestructibleBullhornLights -254,DestructibleStreetlight -255,DestructibleSpacePlatformSign -256,DestructibleStoreFrontCityProps -257,DestructibleBillboardTall -258,DestructibleBillboardScrollingText -259,DestructibleSpacePlatformBarrier -260,DestructibleSignsDirectional -261,DestructibleSignsConstruction -262,DestructibleSignsFunny -263,DestructibleSignsIcons -264,DestructibleSignsWarning -265,DestructibleGarage -266,DestructibleGarageLarge -267,DestructibleTrafficSignal -268,TrafficSignal -269,BraxisAlphaDestructible1x1 -270,BraxisAlphaDestructible2x2 -271,DestructibleDebris4x4 -272,DestructibleDebris6x6 -273,DestructibleRock2x4Vertical -274,DestructibleRock2x4Horizontal -275,DestructibleRock2x6Vertical -276,DestructibleRock2x6Horizontal -277,DestructibleRock4x4 -278,DestructibleRock6x6 -279,DestructibleRampDiagonalHugeULBR -280,DestructibleRampDiagonalHugeBLUR -281,DestructibleRampVerticalHuge -282,DestructibleRampHorizontalHuge -283,DestructibleDebrisRampDiagonalHugeULBR -284,DestructibleDebrisRampDiagonalHugeBLUR -285,MengskStatueAlone -286,MengskStatue -287,WolfStatue -288,GlobeStatue -289,Weapon -290,GlaiveWurmBounceWeapon -291,BroodLordWeapon -292,BroodLordAWeapon -293,CreepBlocker1x1 -294,PathingBlocker1x1 -295,PathingBlocker2x2 -296,AutoTestAttackTargetGround -297,AutoTestAttackTargetAir -298,AutoTestAttacker -299,HelperEmitterSelectionArrow -300,MultiKillObject -301,ShapeGolfball -302,ShapeCone -303,ShapeCube -304,ShapeCylinder -305,ShapeDodecahedron -306,ShapeIcosahedron -307,ShapeOctahedron -308,ShapePyramid -309,ShapeRoundedCube -310,ShapeSphere -311,ShapeTetrahedron -312,ShapeThickTorus -313,ShapeThinTorus -314,ShapeTorus -315,Shape4PointStar -316,Shape5PointStar -317,Shape6PointStar -318,Shape8PointStar -319,ShapeArrowPointer -320,ShapeBowl -321,ShapeBox -322,ShapeCapsule -323,ShapeCrescentMoon -324,ShapeDecahedron -325,ShapeDiamond -326,ShapeFootball -327,ShapeGemstone -328,ShapeHeart -329,ShapeJack -330,ShapePlusSign -331,ShapeShamrock -332,ShapeSpade -333,ShapeTube -334,ShapeEgg -335,ShapeYenSign -336,ShapeX -337,ShapeWatermelon -338,ShapeWonSign -339,ShapeTennisball -340,ShapeStrawberry -341,ShapeSmileyFace -342,ShapeSoccerball -343,ShapeRainbow -344,ShapeSadFace -345,ShapePoundSign -346,ShapePear -347,ShapePineapple -348,ShapeOrange -349,ShapePeanut -350,ShapeO -351,ShapeLemon -352,ShapeMoneyBag -353,ShapeHorseshoe -354,ShapeHockeyStick -355,ShapeHockeyPuck -356,ShapeHand -357,ShapeGolfClub -358,ShapeGrape -359,ShapeEuroSign -360,ShapeDollarSign -361,ShapeBasketball -362,ShapeCarrot -363,ShapeCherry -364,ShapeBaseball -365,ShapeBaseballBat -366,ShapeBanana -367,ShapeApple -368,ShapeCashLarge -369,ShapeCashMedium -370,ShapeCashSmall -371,ShapeFootballColored -372,ShapeLemonSmall -373,ShapeOrangeSmall -374,ShapeTreasureChestOpen -375,ShapeTreasureChestClosed -376,ShapeWatermelonSmall diff --git a/sc2reader/data/WoL/22612_abilities.csv b/sc2reader/data/WoL/22612_abilities.csv deleted file mode 100644 index 0cadc2e..0000000 --- a/sc2reader/data/WoL/22612_abilities.csv +++ /dev/null @@ -1,268 +0,0 @@ -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -40,ReviveSelf -41,ReviveSelfAtTarget -42,ReviveSelfReplaceTarget -43,ReviveSelfOnCreep -46,attack -47,MetalGateDefaultLower -48,MetalGateDefaultRaise -49,TerranAddOns -50,TerranBuildingLiftOff -51,TerranBuildingLand -52,Refund -53,Salvage -54,DisguiseChangeling -55,SalvageShared -56,Corruption -57,GhostHoldFire -58,GhostWeaponsFree -59,MorphToInfestedTerran -60,Explode -61,FleetBeaconResearch -62,FungalGrowth -63,GuardianShield -64,MULERepair -65,MorphZerglingToBaneling -66,NexusTrainMothership -67,Feedback -68,MassRecall -69,PlacePointDefenseDrone -70,HallucinationArchon -71,HallucinationColossus -72,HallucinationHighTemplar -73,HallucinationImmortal -74,HallucinationPhoenix -75,HallucinationProbe -76,HallucinationStalker -77,HallucinationVoidRay -78,HallucinationWarpPrism -79,HallucinationZealot -80,MULEGather -81,SeekerMissile -82,CalldownMULE -83,GravitonBeam -84,BuildinProgressNydusCanal -85,Siphon -86,Leech -87,SpawnChangeling -88,DisguiseAsZealot -89,DisguiseAsMarineWithShield -90,DisguiseAsMarineWithoutShield -91,DisguiseAsZerglingWithWings -92,DisguiseAsZerglingWithoutWings -93,PhaseShift -94,Rally -95,ProgressRally -96,RallyCommand -97,RallyNexus -98,RallyHatchery -99,RoachWarrenResearch -100,SapStructure -101,InfestedTerrans -102,NeuralParasite -103,SpawnLarva -104,StimpackMarauder -105,SupplyDrop -106,250mmStrikeCannons -107,TemporalRift -108,TimeWarp -109,UltraliskCavernResearch -110,WormholeTransit -111,SCVHarvest -112,ProbeHarvest -113,AttackWarpPrism -114,que1 -115,que5 -116,que5CancelToSelection -117,que5LongBlend -118,que5Addon -119,BuildInProgress -120,Repair -121,TerranBuild -122,RavenBuild -123,Stimpack -124,GhostCloak -125,Snipe -126,MedivacHeal -127,SiegeMode -128,Unsiege -129,BansheeCloak -130,MedivacTransport -131,ScannerSweep -132,Yamato -133,AssaultMode -134,FighterMode -135,BunkerTransport -136,CommandCenterTransport -137,CommandCenterLiftOff -138,CommandCenterLand -139,BarracksAddOns -140,BarracksLiftOff -141,FactoryAddOns -142,FactoryLiftOff -143,StarportAddOns -144,StarportLiftOff -145,FactoryLand -146,StarportLand -147,CommandCenterTrain -148,BarracksLand -149,SupplyDepotLower -150,SupplyDepotRaise -151,BarracksTrain -152,FactoryTrain -153,StarportTrain -154,EngineeringBayResearch -155,MercCompoundResearch -156,ArmSiloWithNuke -157,BarracksTechLabResearch -158,FactoryTechLabResearch -159,StarportTechLabResearch -160,GhostAcademyResearch -161,ArmoryResearch -162,ProtossBuild -163,WarpPrismTransport -164,GatewayTrain -165,StargateTrain -166,RoboticsFacilityTrain -167,NexusTrain -168,PsiStorm -169,HangarQueue5 -170,BroodLordQueue2 -171,CarrierHangar -172,ForgeResearch -173,RoboticsBayResearch -174,TemplarArchivesResearch -175,ZergBuild -176,DroneHarvest -177,evolutionchamberresearch -178,UpgradeToLair -179,UpgradeToHive -180,UpgradeToGreaterSpire -181,LairResearch -182,SpawningPoolResearch -183,HydraliskDenResearch -184,SpireResearch -185,LarvaTrain -186,MorphToBroodLord -187,BurrowBanelingDown -188,BurrowBanelingUp -189,BurrowDroneDown -190,BurrowDroneUp -191,BurrowHydraliskDown -192,BurrowHydraliskUp -193,BurrowRoachDown -194,BurrowRoachUp -195,BurrowZerglingDown -196,BurrowZerglingUp -197,BurrowInfestorTerranDown -198,BurrowInfestorTerranUp -199,RedstoneLavaCritterBurrow -200,RedstoneLavaCritterInjuredBurrow -201,RedstoneLavaCritterUnburrow -202,RedstoneLavaCritterInjuredUnburrow -203,OverlordTransport -204,Mergeable -205,Warpable -206,WarpGateTrain -207,BurrowQueenDown -208,BurrowQueenUp -209,NydusCanalTransport -210,Blink -211,BurrowInfestorDown -212,BurrowInfestorUp -213,MorphToOverseer -214,UpgradeToPlanetaryFortress -215,InfestationPitResearch -216,BanelingNestResearch -217,BurrowUltraliskDown -218,BurrowUltraliskUp -219,UpgradeToOrbital -220,UpgradeToWarpGate -221,MorphBackToGateway -222,OrbitalLiftOff -223,OrbitalCommandLand -224,ForceField -225,PhasingMode -226,TransportMode -227,FusionCoreResearch -228,CyberneticsCoreResearch -229,TwilightCouncilResearch -230,TacNukeStrike -231,SalvageBunkerRefund -232,SalvageBunker -233,EMP -234,Vortex -235,TrainQueen -236,BurrowCreepTumorDown -237,Transfusion -238,TechLabMorph -239,BarracksTechLabMorph -240,FactoryTechLabMorph -241,StarportTechLabMorph -242,ReactorMorph -243,BarracksReactorMorph -244,FactoryReactorMorph -245,StarportReactorMorph -246,AttackRedirect -247,StimpackRedirect -248,StimpackMarauderRedirect -249,burrowedStop -250,StopRedirect -251,GenerateCreep -252,QueenBuild -253,SpineCrawlerUproot -254,SporeCrawlerUproot -255,SpineCrawlerRoot -256,SporeCrawlerRoot -257,CreepTumorBuild -258,BuildAutoTurret -259,ArchonWarp -260,BuildNydusCanal -261,BroodLordHangar -262,Charge -263,TowerCapture -264,HerdInteract -265,Frenzy -266,Contaminate -267,Shatter -268,InfestedTerransLayEgg -269,que5Passive -270,que5PassiveCancelToSelection diff --git a/sc2reader/data/WoL/22612_units.csv b/sc2reader/data/WoL/22612_units.csv deleted file mode 100644 index 3684a7b..0000000 --- a/sc2reader/data/WoL/22612_units.csv +++ /dev/null @@ -1,364 +0,0 @@ -1,System_Snapshot_Dummy -5,BeaconRally -6,BeaconAttack -7,BeaconDefend -8,BeaconDetect -9,BeaconExpand -10,BeaconHarass -11,BeaconScout -13,BeaconQQQ -14,DESTRUCTIBLE -15,ITEM -16,POWERUP -17,SMCAMERA -18,SMCHARACTER -19,STARMAP -20,SMSET -21,MISSILE -22,MISSILE_INVULNERABLE -23,MISSILE_HALFLIFE -24,PLACEHOLDER -25,PLACEHOLDER_AIR -26,PATHINGBLOCKER -27,BEACON -28,Ball -29,StereoscopicOptionsUnit -30,Colossus -33,TechLab -34,Reactor -36,InfestorTerran -37,BanelingCocoon -38,Baneling -39,Mothership -40,PointDefenseDrone -41,Changeling -42,ChangelingZealot -43,ChangelingMarineShield -44,ChangelingMarine -45,ChangelingZerglingWings -46,ChangelingZergling -48,CommandCenter -49,SupplyDepot -50,Refinery -51,Barracks -52,EngineeringBay -53,MissileTurret -54,Bunker -55,SensorTower -56,GhostAcademy -57,Factory -58,Starport -60,Armory -61,FusionCore -62,AutoTurret -63,SiegeTankSieged -64,SiegeTank -65,VikingFighter -66,VikingAssault -67,CommandCenterFlying -68,BarracksTechLab -69,BarracksReactor -70,FactoryTechLab -71,FactoryReactor -72,StarportTechLab -73,StarportReactor -74,FactoryFlying -75,StarportFlying -76,SCV -77,BarracksFlying -78,SupplyDepotLowered -79,Marine -80,Reaper -81,Ghost -82,Marauder -83,Thor -84,Hellion -85,Medivac -86,Banshee -87,Raven -88,Battlecruiser -89,Nuke -90,Nexus -91,Pylon -92,Assimilator -93,Gateway -94,Forge -95,FleetBeacon -96,TwilightCouncil -97,PhotonCannon -98,Stargate -99,TemplarArchive -100,DarkShrine -101,RoboticsBay -102,RoboticsFacility -103,CyberneticsCore -104,Zealot -105,Stalker -106,HighTemplar -107,DarkTemplar -108,Sentry -109,Phoenix -110,Carrier -111,VoidRay -112,WarpPrism -113,Observer -114,Immortal -115,Probe -116,Interceptor -117,Hatchery -118,CreepTumor -119,Extractor -120,SpawningPool -121,EvolutionChamber -122,HydraliskDen -123,Spire -124,UltraliskCavern -125,InfestationPit -126,NydusNetwork -127,BanelingNest -128,RoachWarren -129,SpineCrawler -130,SporeCrawler -131,Lair -132,Hive -133,GreaterSpire -134,Egg -135,Drone -136,Zergling -137,Overlord -138,Hydralisk -139,Mutalisk -140,Ultralisk -141,Roach -142,Infestor -143,Corruptor -144,BroodLordCocoon -145,BroodLord -146,BanelingBurrowed -147,DroneBurrowed -148,HydraliskBurrowed -149,RoachBurrowed -150,ZerglingBurrowed -151,InfestorTerranBurrowed -152,RedstoneLavaCritterBurrowed -153,RedstoneLavaCritterInjuredBurrowed -154,RedstoneLavaCritter -155,RedstoneLavaCritterInjured -156,QueenBurrowed -157,Queen -158,InfestorBurrowed -159,OverlordCocoon -160,Overseer -161,PlanetaryFortress -162,UltraliskBurrowed -163,OrbitalCommand -164,WarpGate -165,OrbitalCommandFlying -166,ForceField -167,WarpPrismPhasing -168,CreepTumorBurrowed -169,SpineCrawlerUprooted -170,SporeCrawlerUprooted -171,Archon -172,NydusCanal -173,BroodlingEscort -174,RichMineralField -176,XelNagaTower -180,InfestedTerransEgg -181,Larva -182,ReaperPlaceholder -183,NeedleSpinesWeapon -184,CorruptionWeapon -185,InfestedTerransWeapon -186,NeuralParasiteWeapon -187,PointDefenseDroneReleaseWeapon -188,HunterSeekerWeapon -189,MULE -191,ThorAAWeapon -192,PunisherGrenadesLMWeapon -193,VikingFighterWeapon -194,ATALaserBatteryLMWeapon -195,ATSLaserBatteryLMWeapon -196,LongboltMissileWeapon -197,D8ChargeWeapon -198,YamatoWeapon -199,IonCannonsWeapon -200,AcidSalivaWeapon -201,SpineCrawlerWeapon -202,SporeCrawlerWeapon -203,GlaiveWurmWeapon -204,GlaiveWurmM2Weapon -205,GlaiveWurmM3Weapon -206,StalkerWeapon -207,EMP2Weapon -208,BacklashRocketsLMWeapon -209,PhotonCannonWeapon -210,ParasiteSporeWeapon -212,Broodling -213,BroodLordBWeapon -216,AutoTurretReleaseWeapon -217,LarvaReleaseMissile -218,AcidSpinesWeapon -219,FrenzyWeapon -220,ContaminateWeapon -221,BroodlingDefault -222,Critter -223,CritterStationary -224,Shape -225,FungalGrowthMissile -226,NeuralParasiteTentacleMissile -227,Beacon_Protoss -228,Beacon_ProtossSmall -229,Beacon_Terran -230,Beacon_TerranSmall -231,Beacon_Zerg -232,Beacon_ZergSmall -233,Lyote -234,CarrionBird -235,KarakMale -236,KarakFemale -237,UrsadakMale -238,UrsadakFemale -239,UrsadakCalf -240,UrsadakMaleExotic -241,UrsadakFemaleExotic -242,UtilityBot -243,CommentatorBot1 -244,CommentatorBot2 -245,CommentatorBot3 -246,CommentatorBot4 -247,Scantipede -248,Dog -249,Sheep -250,Cow -251,InfestedTerransEggPlacement -252,InfestorTerransWeapon -253,MineralField -254,VespeneGeyser -255,SpacePlatformGeyser -256,RichVespeneGeyser -257,DestructibleSearchlight -258,DestructibleBullhornLights -259,DestructibleStreetlight -260,DestructibleSpacePlatformSign -261,DestructibleStoreFrontCityProps -262,DestructibleBillboardTall -263,DestructibleBillboardScrollingText -264,DestructibleSpacePlatformBarrier -265,DestructibleSignsDirectional -266,DestructibleSignsConstruction -267,DestructibleSignsFunny -268,DestructibleSignsIcons -269,DestructibleSignsWarning -270,DestructibleGarage -271,DestructibleGarageLarge -272,DestructibleTrafficSignal -273,TrafficSignal -274,BraxisAlphaDestructible1x1 -275,BraxisAlphaDestructible2x2 -276,DestructibleDebris4x4 -277,DestructibleDebris6x6 -278,DestructibleRock2x4Vertical -279,DestructibleRock2x4Horizontal -280,DestructibleRock2x6Vertical -281,DestructibleRock2x6Horizontal -282,DestructibleRock4x4 -283,DestructibleRock6x6 -284,DestructibleRampDiagonalHugeULBR -285,DestructibleRampDiagonalHugeBLUR -286,DestructibleRampVerticalHuge -287,DestructibleRampHorizontalHuge -288,DestructibleDebrisRampDiagonalHugeULBR -289,DestructibleDebrisRampDiagonalHugeBLUR -290,MengskStatueAlone -291,MengskStatue -292,WolfStatue -293,GlobeStatue -294,Weapon -295,GlaiveWurmBounceWeapon -296,BroodLordWeapon -297,BroodLordAWeapon -298,CreepBlocker1x1 -299,PathingBlocker1x1 -300,PathingBlocker2x2 -301,AutoTestAttackTargetGround -302,AutoTestAttackTargetAir -303,AutoTestAttacker -304,HelperEmitterSelectionArrow -305,MultiKillObject -306,ShapeGolfball -307,ShapeCone -308,ShapeCube -309,ShapeCylinder -310,ShapeDodecahedron -311,ShapeIcosahedron -312,ShapeOctahedron -313,ShapePyramid -314,ShapeRoundedCube -315,ShapeSphere -316,ShapeTetrahedron -317,ShapeThickTorus -318,ShapeThinTorus -319,ShapeTorus -320,Shape4PointStar -321,Shape5PointStar -322,Shape6PointStar -323,Shape8PointStar -324,ShapeArrowPointer -325,ShapeBowl -326,ShapeBox -327,ShapeCapsule -328,ShapeCrescentMoon -329,ShapeDecahedron -330,ShapeDiamond -331,ShapeFootball -332,ShapeGemstone -333,ShapeHeart -334,ShapeJack -335,ShapePlusSign -336,ShapeShamrock -337,ShapeSpade -338,ShapeTube -339,ShapeEgg -340,ShapeYenSign -341,ShapeX -342,ShapeWatermelon -343,ShapeWonSign -344,ShapeTennisball -345,ShapeStrawberry -346,ShapeSmileyFace -347,ShapeSoccerball -348,ShapeRainbow -349,ShapeSadFace -350,ShapePoundSign -351,ShapePear -352,ShapePineapple -353,ShapeOrange -354,ShapePeanut -355,ShapeO -356,ShapeLemon -357,ShapeMoneyBag -358,ShapeHorseshoe -359,ShapeHockeyStick -360,ShapeHockeyPuck -361,ShapeHand -362,ShapeGolfClub -363,ShapeGrape -364,ShapeEuroSign -365,ShapeDollarSign -366,ShapeBasketball -367,ShapeCarrot -368,ShapeCherry -369,ShapeBaseball -370,ShapeBaseballBat -371,ShapeBanana -372,ShapeApple -373,ShapeCashLarge -374,ShapeCashMedium -375,ShapeCashSmall -376,ShapeFootballColored -377,ShapeLemonSmall -378,ShapeOrangeSmall -379,ShapeTreasureChestOpen -380,ShapeTreasureChestClosed -381,ShapeWatermelonSmall diff --git a/sc2reader/data/WoL/24944_abilities.csv b/sc2reader/data/WoL/24944_abilities.csv deleted file mode 100644 index 3d4857b..0000000 --- a/sc2reader/data/WoL/24944_abilities.csv +++ /dev/null @@ -1,269 +0,0 @@ -0,CAbil -1,CAbilEffect -2,CAbilQueueable -3,CAbilProgress -4,CAbilRedirect -5,CAbilArmMagazine -6,CAbilAttack -7,CAbilAugment -8,CAbilBattery -9,CAbilBeacon -10,CAbilBehavior -11,CAbilBuild -12,CAbilBuildable -13,CAbilEffectInstant -14,CAbilEffectTarget -15,CAbilHarvest -16,CAbilInteract -17,CAbilInventory -18,CAbilLearn -19,CAbilMerge -20,CAbilMergeable -21,CAbilMorph -22,CAbilMorphPlacement -23,CAbilMove -24,CAbilPawn -25,CAbilQueue -26,CAbilRally -27,CAbilResearch -28,CAbilRevive -29,CAbilSpecialize -30,CAbilStop -31,CAbilTrain -32,CAbilTransport -33,CAbilWarpable -34,CAbilWarpTrain -35,Taunt -36,stop -37,HoldFire -38,move -39,Beacon -40,ReviveSelf -41,ReviveSelfAtTarget -42,ReviveSelfReplaceTarget -43,ReviveSelfOnCreep -45,attack -47,MetalGateDefaultLower -48,MetalGateDefaultRaise -49,TerranAddOns -50,TerranBuildingLiftOff -51,TerranBuildingLand -52,Refund -53,Salvage -54,DisguiseChangeling -55,SalvageShared -56,Corruption -57,GhostHoldFire -58,GhostWeaponsFree -59,MorphToInfestedTerran -60,Explode -61,FleetBeaconResearch -62,FungalGrowth -63,GuardianShield -64,MULERepair -65,MorphZerglingToBaneling -66,NexusTrainMothership -67,Feedback -68,MassRecall -69,PlacePointDefenseDrone -70,HallucinationArchon -71,HallucinationColossus -72,HallucinationHighTemplar -73,HallucinationImmortal -74,HallucinationPhoenix -75,HallucinationProbe -76,HallucinationStalker -77,HallucinationVoidRay -78,HallucinationWarpPrism -79,HallucinationZealot -80,MULEGather -81,SeekerMissile -82,CalldownMULE -83,GravitonBeam -84,BuildinProgressNydusCanal -85,Siphon -86,Leech -87,SpawnChangeling -88,DisguiseAsZealot -89,DisguiseAsMarineWithShield -90,DisguiseAsMarineWithoutShield -91,DisguiseAsZerglingWithWings -92,DisguiseAsZerglingWithoutWings -93,PhaseShift -94,Rally -95,ProgressRally -96,RallyCommand -97,RallyNexus -98,RallyHatchery -99,RoachWarrenResearch -100,SapStructure -101,InfestedTerrans -102,NeuralParasite -103,SpawnLarva -104,StimpackMarauder -105,SupplyDrop -106,250mmStrikeCannons -107,TemporalRift -108,TimeWarp -109,UltraliskCavernResearch -110,WormholeTransit -111,SCVHarvest -112,ProbeHarvest -113,AttackWarpPrism -114,que1 -115,que5 -116,que5CancelToSelection -117,que5LongBlend -118,que5Addon -119,BuildInProgress -120,Repair -121,TerranBuild -122,RavenBuild -123,Stimpack -124,GhostCloak -125,Snipe -126,MedivacHeal -127,SiegeMode -128,Unsiege -129,BansheeCloak -130,MedivacTransport -131,ScannerSweep -132,Yamato -133,AssaultMode -134,FighterMode -135,BunkerTransport -136,CommandCenterTransport -137,CommandCenterLiftOff -138,CommandCenterLand -139,BarracksAddOns -140,BarracksLiftOff -141,FactoryAddOns -142,FactoryLiftOff -143,StarportAddOns -144,StarportLiftOff -145,FactoryLand -146,StarportLand -147,CommandCenterTrain -148,BarracksLand -149,SupplyDepotLower -150,SupplyDepotRaise -151,BarracksTrain -152,FactoryTrain -153,StarportTrain -154,EngineeringBayResearch -155,MercCompoundResearch -156,ArmSiloWithNuke -157,BarracksTechLabResearch -158,FactoryTechLabResearch -159,StarportTechLabResearch -160,GhostAcademyResearch -161,ArmoryResearch -162,ProtossBuild -163,WarpPrismTransport -164,GatewayTrain -165,StargateTrain -166,RoboticsFacilityTrain -167,NexusTrain -168,PsiStorm -169,HangarQueue5 -170,BroodLordQueue2 -171,CarrierHangar -172,ForgeResearch -173,RoboticsBayResearch -174,TemplarArchivesResearch -175,ZergBuild -176,DroneHarvest -177,evolutionchamberresearch -178,UpgradeToLair -179,UpgradeToHive -180,UpgradeToGreaterSpire -181,LairResearch -182,SpawningPoolResearch -183,HydraliskDenResearch -184,SpireResearch -185,LarvaTrain -186,MorphToBroodLord -187,BurrowBanelingDown -188,BurrowBanelingUp -189,BurrowDroneDown -190,BurrowDroneUp -191,BurrowHydraliskDown -192,BurrowHydraliskUp -193,BurrowRoachDown -194,BurrowRoachUp -195,BurrowZerglingDown -196,BurrowZerglingUp -197,BurrowInfestorTerranDown -198,BurrowInfestorTerranUp -199,RedstoneLavaCritterBurrow -200,RedstoneLavaCritterInjuredBurrow -201,RedstoneLavaCritterUnburrow -202,RedstoneLavaCritterInjuredUnburrow -203,OverlordTransport -204,Mergeable -205,Warpable -206,WarpGateTrain -207,BurrowQueenDown -208,BurrowQueenUp -209,NydusCanalTransport -210,Blink -211,BurrowInfestorDown -212,BurrowInfestorUp -213,MorphToOverseer -214,UpgradeToPlanetaryFortress -215,InfestationPitResearch -216,BanelingNestResearch -217,BurrowUltraliskDown -218,BurrowUltraliskUp -219,UpgradeToOrbital -220,UpgradeToWarpGate -221,MorphBackToGateway -222,OrbitalLiftOff -223,OrbitalCommandLand -224,ForceField -225,PhasingMode -226,TransportMode -227,FusionCoreResearch -228,CyberneticsCoreResearch -229,TwilightCouncilResearch -230,TacNukeStrike -231,SalvageBunkerRefund -232,SalvageBunker -233,EMP -234,Vortex -235,TrainQueen -236,BurrowCreepTumorDown -237,Transfusion -238,TechLabMorph -239,BarracksTechLabMorph -240,FactoryTechLabMorph -241,StarportTechLabMorph -242,ReactorMorph -243,BarracksReactorMorph -244,FactoryReactorMorph -245,StarportReactorMorph -246,AttackRedirect -247,StimpackRedirect -248,StimpackMarauderRedirect -249,burrowedStop -250,StopRedirect -251,GenerateCreep -252,QueenBuild -253,SpineCrawlerUproot -254,SporeCrawlerUproot -255,SpineCrawlerRoot -256,SporeCrawlerRoot -257,CreepTumorBuild -258,BuildAutoTurret -259,ArchonWarp -260,BuildNydusCanal -261,BroodLordHangar -262,Charge -263,TowerCapture -264,HerdInteract -265,Frenzy -266,Contaminate -267,Shatter -268,InfestedTerransLayEgg -269,que5Passive -270,que5PassiveCancelToSelection \ No newline at end of file diff --git a/sc2reader/data/WoL/24944_units.csv b/sc2reader/data/WoL/24944_units.csv deleted file mode 100644 index 19e3139..0000000 --- a/sc2reader/data/WoL/24944_units.csv +++ /dev/null @@ -1,375 +0,0 @@ -1,System_Snapshot_Dummy -5,BeaconRally -6,BeaconArmy -7,BeaconAttack -8,BeaconDefend -9,BeaconHarass -10,BeaconIdle -11,BeaconAuto -12,BeaconDetect -13,BeaconScout -14,BeaconClaim -15,BeaconExpand -16,BeaconCustom1 -17,BeaconCustom2 -18,BeaconCustom3 -19,BeaconCustom4 -22,DESTRUCTIBLE -23,ITEM -24,POWERUP -25,SMCAMERA -26,SMCHARACTER -27,STARMAP -28,SMSET -29,MISSILE -30,MISSILE_INVULNERABLE -31,MISSILE_HALFLIFE -32,PLACEHOLDER -33,PLACEHOLDER_AIR -34,PATHINGBLOCKER -35,BEACON -36,Ball -37,StereoscopicOptionsUnit -38,Colossus -39,TechLab -40,Reactor -42,InfestorTerran -43,BanelingCocoon -44,Baneling -45,Mothership -46,PointDefenseDrone -47,Changeling -48,ChangelingZealot -49,ChangelingMarineShield -50,ChangelingMarine -51,ChangelingZerglingWings -52,ChangelingZergling -54,CommandCenter -55,SupplyDepot -56,Refinery -57,Barracks -58,EngineeringBay -59,MissileTurret -60,Bunker -61,SensorTower -62,GhostAcademy -63,Factory -64,Starport -66,Armory -67,FusionCore -68,AutoTurret -69,SiegeTankSieged -70,SiegeTank -71,VikingAssault -72,VikingFighter -73,CommandCenterFlying -74,BarracksTechLab -75,BarracksReactor -76,FactoryTechLab -77,FactoryReactor -78,StarportTechLab -79,StarportReactor -80,FactoryFlying -81,StarportFlying -82,SCV -83,BarracksFlying -84,SupplyDepotLowered -85,Marine -86,Reaper -87,Ghost -88,Marauder -89,Thor -90,Hellion -91,Medivac -92,Banshee -93,Raven -94,Battlecruiser -95,Nuke -96,Nexus -97,Pylon -98,Assimilator -99,Gateway -100,Forge -101,FleetBeacon -102,TwilightCouncil -103,PhotonCannon -104,Stargate -105,TemplarArchive -106,DarkShrine -107,RoboticsBay -108,RoboticsFacility -109,CyberneticsCore -110,Zealot -111,Stalker -112,HighTemplar -113,DarkTemplar -114,Sentry -115,Phoenix -116,Carrier -117,VoidRay -118,WarpPrism -119,Observer -120,Immortal -121,Probe -122,Interceptor -123,Hatchery -124,CreepTumor -125,Extractor -126,SpawningPool -127,EvolutionChamber -128,HydraliskDen -129,Spire -130,UltraliskCavern -131,InfestationPit -132,NydusNetwork -133,BanelingNest -134,RoachWarren -135,SpineCrawler -136,SporeCrawler -137,Lair -138,Hive -139,GreaterSpire -140,Egg -141,Drone -142,Zergling -143,Overlord -144,Hydralisk -145,Mutalisk -146,Ultralisk -147,Roach -148,Infestor -149,Corruptor -150,BroodLordCocoon -151,BroodLord -152,BanelingBurrowed -153,DroneBurrowed -154,HydraliskBurrowed -155,RoachBurrowed -156,ZerglingBurrowed -157,InfestorTerranBurrowed -158,RedstoneLavaCritterBurrowed -159,RedstoneLavaCritterInjuredBurrowed -160,RedstoneLavaCritter -161,RedstoneLavaCritterInjured -162,QueenBurrowed -163,Queen -164,InfestorBurrowed -165,OverlordCocoon -166,Overseer -167,PlanetaryFortress -168,UltraliskBurrowed -169,OrbitalCommand -170,WarpGate -171,OrbitalCommandFlying -172,ForceField -173,WarpPrismPhasing -174,CreepTumorBurrowed -175,CreepTumorQueen -176,SpineCrawlerUprooted -177,SporeCrawlerUprooted -178,Archon -179,NydusCanal -180,BroodlingEscort -181,RichMineralField -183,XelNagaTower -187,InfestedTerransEgg -188,Larva -189,ReaperPlaceholder -190,NeedleSpinesWeapon -191,CorruptionWeapon -192,InfestedTerransWeapon -193,NeuralParasiteWeapon -194,PointDefenseDroneReleaseWeapon -195,HunterSeekerWeapon -196,MULE -198,ThorAAWeapon -199,PunisherGrenadesLMWeapon -200,VikingFighterWeapon -201,ATALaserBatteryLMWeapon -202,ATSLaserBatteryLMWeapon -203,LongboltMissileWeapon -204,D8ChargeWeapon -205,YamatoWeapon -206,IonCannonsWeapon -207,AcidSalivaWeapon -208,SpineCrawlerWeapon -209,SporeCrawlerWeapon -210,GlaiveWurmWeapon -211,GlaiveWurmM2Weapon -212,GlaiveWurmM3Weapon -213,StalkerWeapon -214,EMP2Weapon -215,BacklashRocketsLMWeapon -216,PhotonCannonWeapon -217,ParasiteSporeWeapon -219,Broodling -220,BroodLordBWeapon -223,AutoTurretReleaseWeapon -224,LarvaReleaseMissile -225,AcidSpinesWeapon -226,FrenzyWeapon -227,ContaminateWeapon -228,BroodlingDefault -229,Critter -230,CritterStationary -231,Shape -232,FungalGrowthMissile -233,NeuralParasiteTentacleMissile -234,Beacon_Protoss -235,Beacon_ProtossSmall -236,Beacon_Terran -237,Beacon_TerranSmall -238,Beacon_Zerg -239,Beacon_ZergSmall -240,Lyote -241,CarrionBird -242,KarakMale -243,KarakFemale -244,UrsadakFemaleExotic -245,UrsadakMale -246,UrsadakFemale -247,UrsadakCalf -248,UrsadakMaleExotic -249,UtilityBot -250,CommentatorBot1 -251,CommentatorBot2 -252,CommentatorBot3 -253,CommentatorBot4 -254,Scantipede -255,Dog -256,Sheep -257,Cow -258,InfestedTerransEggPlacement -259,InfestorTerransWeapon -260,MineralField -261,VespeneGeyser -262,SpacePlatformGeyser -263,RichVespeneGeyser -264,DestructibleSearchlight -265,DestructibleBullhornLights -266,DestructibleStreetlight -267,DestructibleSpacePlatformSign -268,DestructibleStoreFrontCityProps -269,DestructibleBillboardTall -270,DestructibleBillboardScrollingText -271,DestructibleSpacePlatformBarrier -272,DestructibleSignsDirectional -273,DestructibleSignsConstruction -274,DestructibleSignsFunny -275,DestructibleSignsIcons -276,DestructibleSignsWarning -277,DestructibleGarage -278,DestructibleGarageLarge -279,DestructibleTrafficSignal -280,TrafficSignal -281,BraxisAlphaDestructible1x1 -282,BraxisAlphaDestructible2x2 -283,DestructibleDebris4x4 -284,DestructibleDebris6x6 -285,DestructibleRock2x4Vertical -286,DestructibleRock2x4Horizontal -287,DestructibleRock2x6Vertical -288,DestructibleRock2x6Horizontal -289,DestructibleRock4x4 -290,DestructibleRock6x6 -291,DestructibleRampDiagonalHugeULBR -292,DestructibleRampDiagonalHugeBLUR -293,DestructibleRampVerticalHuge -294,DestructibleRampHorizontalHuge -295,DestructibleDebrisRampDiagonalHugeULBR -296,DestructibleDebrisRampDiagonalHugeBLUR -297,MengskStatueAlone -298,MengskStatue -299,WolfStatue -300,GlobeStatue -301,Weapon -302,GlaiveWurmBounceWeapon -303,BroodLordWeapon -304,BroodLordAWeapon -305,CreepBlocker1x1 -306,PathingBlocker1x1 -307,PathingBlocker2x2 -308,AutoTestAttackTargetGround -309,AutoTestAttackTargetAir -310,AutoTestAttacker -311,HelperEmitterSelectionArrow -312,MultiKillObject -313,ShapeGolfball -314,ShapeCone -315,ShapeCube -316,ShapeCylinder -317,ShapeDodecahedron -318,ShapeIcosahedron -319,ShapeOctahedron -320,ShapePyramid -321,ShapeRoundedCube -322,ShapeSphere -323,ShapeTetrahedron -324,ShapeThickTorus -325,ShapeThinTorus -326,ShapeTorus -327,Shape4PointStar -328,Shape5PointStar -329,Shape6PointStar -330,Shape8PointStar -331,ShapeArrowPointer -332,ShapeBowl -333,ShapeBox -334,ShapeCapsule -335,ShapeCrescentMoon -336,ShapeDecahedron -337,ShapeDiamond -338,ShapeFootball -339,ShapeGemstone -340,ShapeHeart -341,ShapeJack -342,ShapePlusSign -343,ShapeShamrock -344,ShapeSpade -345,ShapeTube -346,ShapeEgg -347,ShapeYenSign -348,ShapeX -349,ShapeWatermelon -350,ShapeWonSign -351,ShapeTennisball -352,ShapeStrawberry -353,ShapeSmileyFace -354,ShapeSoccerball -355,ShapeRainbow -356,ShapeSadFace -357,ShapePoundSign -358,ShapePear -359,ShapePineapple -360,ShapeOrange -361,ShapePeanut -362,ShapeO -363,ShapeLemon -364,ShapeMoneyBag -365,ShapeHorseshoe -366,ShapeHockeyStick -367,ShapeHockeyPuck -368,ShapeHand -369,ShapeGolfClub -370,ShapeGrape -371,ShapeEuroSign -372,ShapeDollarSign -373,ShapeBasketball -374,ShapeCarrot -375,ShapeCherry -376,ShapeBaseball -377,ShapeBaseballBat -378,ShapeBanana -379,ShapeApple -380,ShapeCashLarge -381,ShapeCashMedium -382,ShapeCashSmall -383,ShapeFootballColored -384,ShapeLemonSmall -385,ShapeOrangeSmall -386,ShapeTreasureChestOpen -387,ShapeTreasureChestClosed -388,ShapeWatermelonSmall -389,UnbuildableRocksDestructible -390,UnbuildableBricksDestructible -391,UnbuildablePlatesDestructible \ No newline at end of file diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py deleted file mode 100644 index 7a3d4ec..0000000 --- a/sc2reader/data/__init__.py +++ /dev/null @@ -1,417 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import json -import pkgutil - -try: - from collections import OrderedDict -except ImportError as e: - from ordereddict import OrderedDict - -from sc2reader.log_utils import loggable - -try: - cmp # Python 2 -except NameError: - cmp = lambda a, b: (a > b) - (a < b) # noqa Python 3 - -ABIL_LOOKUP = dict() -for entry in pkgutil.get_data('sc2reader.data', 'ability_lookup.csv').decode('utf8').split('\n'): - if not entry: - continue - str_id, abilities = entry.split(',', 1) - ABIL_LOOKUP[str_id] = abilities.split(',') - -UNIT_LOOKUP = dict() -for entry in pkgutil.get_data('sc2reader.data', 'unit_lookup.csv').decode('utf8').split('\n'): - if not entry: - continue - str_id, title = entry.strip().split(',') - UNIT_LOOKUP[str_id] = title - -unit_data = pkgutil.get_data('sc2reader.data', 'unit_info.json').decode('utf8') -unit_lookup = json.loads(unit_data) - -command_data = pkgutil.get_data('sc2reader.data', 'train_commands.json').decode('utf8') -train_commands = json.loads(command_data) - - -class Unit(object): - """Represents an in-game unit.""" - def __init__(self, unit_id): - #: A reference to the player that currently owns this unit. Only available for 2.0.8+ replays. - self.owner = None - - #: The frame the unit was started at. Only available for 2.0.8+ replays. - #: Specifically, it is the frame the :class:`~sc2reader.events.tracker.UnitInitEvent` is received. For units - #: that are born and not initiated this will be the same as :attr:`finished_at`. - self.started_at = None - - #: The frame the unit was finished at. Only available for 2.0.8+ replays. - #: Specifically, it is the frame that the :class:`~sc2reader.events.tracker.UnitDoneEvent` is received. For units - #: that are born and not initiated this will be the frame that the :class:`~sc2reader.events.tracker.UnitBornEvent` - #: is received. - self.finished_at = None - - #: The frame the unit died at. Only available for 2.0.8+ replays. - #: Specifically, it is the frame that the :class:`~sc2reader.events.tracker.UnitDiedEvent` is received. - self.died_at = None - - #: Deprecated, see :attr:`self.killing_player` - self.killed_by = None - - #: A reference to the player that killed this unit. Only available for 2.0.8+ replays. - #: This value is not set if the killer is unknown or not relevant (morphed into a - #: different unit or used to create a building, etc) - self.killing_player = None - - #: A reference to the unit that killed this unit. Only available for 2.1+ replays. - #: This value is not set if the killer is unknown or not relevant (morphed into a - #: different unit or used to create a building, etc). If the killing unit dies before - #: the killed unit dies, a bug may cause the killing unit to be None. This can occur - #: due because of projectile speeds. - self.killing_unit = None - - #: A list of units that this unit has killed. Only available for 2.1+ replays. - #: The unit only gets credit for the kills that it gets the final blow on. - self.killed_units = list() - - #: The unique in-game id for this unit. The id can sometimes be zero because - #: TargetUnitCommandEvents will create a new unit with id zero when a unit - #: behind the fog of war is targetted. - self.id = unit_id - - #: A reference to the unit type this unit is current in. - #: e.g. SeigeTank is a different type than SeigeTankSeiged - self._type_class = None - - #: A history of all the unit types this unit has had stored - #: in order by frame the type was acquired. - self.type_history = OrderedDict() - - #: Is this unit type a hallucinated one? - self.hallucinated = False - - self.flags = 0 - - def apply_flags(self, flags): - self.flags = flags - self.hallucinated = flags & 2 == 2 - - def set_type(self, unit_type, frame): - self._type_class = unit_type - self.type_history[frame] = unit_type - - def is_type(self, unit_type, strict=True): - if strict: - if isinstance(unit_type, int): - if self._type_class: - return unit_type == self._type_class.id - else: - return unit_type == 0 - elif isinstance(unit_type, Unit): - return self._type_class == unit_type - else: - if self._type_class: - return unit_type == self._type_class.str_id - else: - return unit_type is None - else: - if isinstance(unit_type, int): - if self._type_class: - return unit_type in [utype.id for utype in self.type_history.values()] - else: - return unit_type == 0 - elif isinstance(unit_type, Unit): - return unit_type in self.type_history.values() - else: - if self._type_class: - return unit_type in [utype.str_id for utype in self.type_history.values()] - else: - return unit_type is None - - @property - def name(self): - """The name of the unit type currently active. None if no type is assigned""" - return self._type_class.name if self._type_class else None - - @property - def title(self): - return self._type_class.title if self._type_class else None - - @property - def type(self): - """ The internal type id of the current unit type of this unit. None if no type is assigned""" - return self._type_class.id if self._type_class else None - - @property - def race(self): - """ The race of this unit. One of Terran, Protoss, Zerg, Neutral, or None""" - return self._type_class.race if self._type_class else None - - @property - def minerals(self): - """ The mineral cost of the unit. None if no type is assigned""" - return self._type_class.minerals if self._type_class else None - - @property - def vespene(self): - """ The vespene cost of the unit. None if no type is assigned""" - return self._type_class.vespene if self._type_class else None - - @property - def supply(self): - """ The supply used by this unit. Negative for supply providers. None if no type is assigned """ - return self._type_class.supply if self._type_class else None - - @property - def is_worker(self): - """ Boolean flagging units as worker units. SCV, MULE, Drone, Probe """ - return self._type_class.is_worker if self._type_class else False - - @property - def is_building(self): - """ Boolean flagging units as buildings. """ - return self._type_class.is_building if self._type_class else False - - @property - def is_army(self): - """ Boolean flagging units as army units. """ - return self._type_class.is_army if self._type_class else False - - def __str__(self): - return "{0} [{1:X}]".format(self.name, self.id) - - def __cmp__(self, other): - return cmp(self.id, other.id) - - def __lt__(self, other): - return self.id < other.id - - def __le__(self, other): - return self.id <= other.id - - def __eq__(self, other): - return self.id == other.id - - def __ne__(self, other): - return self.id != other.id - - def __gt__(self, other): - return self.id > other.id - - def __ge__(self, other): - return self.id >= other.id - - def __hash__(self): - return hash(self.id) - - def __repr__(self): - return str(self) - - -class UnitType(object): - """ Represents an in game unit type """ - def __init__(self, type_id, str_id=None, name=None, title=None, race=None, minerals=0, - vespene=0, supply=0, is_building=False, is_worker=False, is_army=False): - #: The internal integer id representing this unit type - self.id = type_id - - #: The internal string id representing this unit type - self.str_id = str_id - - #: The name of this unit type - self.name = name - - #: The printable title of this unit type; has spaces and possibly punctuation - self.title = title - - #: The race this unit type belongs to - self.race = race - - #: The mineral cost of this unit type - self.minerals = minerals - - #: The vespene cost of this unit type - self.vespene = vespene - - #: The supply cost of this unit type - self.supply = supply - - #: Boolean flagging this unit type as a building - self.is_building = is_building - - #: Boolean flagging this unit type as a worker - self.is_worker = is_worker - - #: Boolean flagging this unit type as an army unit - self.is_army = is_army - - -class Ability(object): - """ Represents an in-game ability """ - def __init__(self, id, name=None, title=None, is_build=False, build_time=0, build_unit=None): - #: The internal integer id representing this ability. - self.id = id - - #: The name of this ability - self.name = name - - #: The printable title of this ability; has spaces and possibly punctuation. - self.title = title - - #: Boolean flagging this ability as creating a new unit. - self.is_build = is_build - - #: The number of seconds required to build this unit. 0 if not ``is_build``. - self.build_time = build_time - - #: A reference to the :class:`UnitType` type built by this ability. Default to None. - self.build_unit = build_unit - - -@loggable -class Build(object): - """ - :param build_id: The build number identifying this dataset. - - The datapack for a particualr group of builds. Maps internal integer ids - to :class:`Unit` and :class:`Ability` types. Also contains builder methods - for creating new units and changing their types. - - All build data is valid for standard games only. For arcade maps milage - may vary. - """ - def __init__(self, build_id): - #: The integer id of the build - self.id = build_id - - #: A dictionary mapping integer ids to available unit types. - self.units = dict() - - #: A dictionary mapping integer ids to available abilities. - self.abilities = dict() - - def create_unit(self, unit_id, unit_type, frame): - """ - :param unit_id: The unique id of this unit. - :param unit_type: The unit type to assign to the new unit - - Creates a new unit and assigns it to the specified type. - """ - unit = Unit(unit_id) - self.change_type(unit, unit_type, frame) - return unit - - def change_type(self, unit, new_type, frame): - """ - :param unit: The changing types. - :param unit_type: The unit type to assign to this unit - - Assigns the given type to a unit. - """ - if new_type in self.units: - unit_type = self.units[new_type] - unit.set_type(unit_type, frame) - else: - self.logger.error("Unable to change type of {0} to {1} [frame {2}]; unit type not found in build {3}".format(unit, new_type, frame, self.id)) - - def add_ability(self, ability_id, name, title=None, is_build=False, build_time=None, build_unit=None): - ability = Ability( - ability_id, - name=name, - title=title or name, - is_build=is_build, - build_time=build_time, - build_unit=build_unit - ) - setattr(self, name, ability) - self.abilities[ability_id] = ability - - def add_unit_type(self, type_id, str_id, name, title=None, race='Neutral', minerals=0, vespene=0, supply=0, is_building=False, is_worker=False, is_army=False): - unit = UnitType( - type_id, - str_id=str_id, - name=name, - title=title or name, - race=race, - minerals=minerals, - vespene=vespene, - supply=supply, - is_building=is_building, - is_worker=is_worker, - is_army=is_army, - ) - setattr(self, name, unit) - self.units[type_id] = unit - self.units[str_id] = unit - - -def load_build(expansion, version): - build = Build(version) - - unit_file = '{0}/{1}_units.csv'.format(expansion, version) - for entry in pkgutil.get_data('sc2reader.data', unit_file).decode('utf8').split('\n'): - if not entry: - continue - int_id, str_id = entry.strip().split(',') - unit_type = int(int_id, 10) - title = UNIT_LOOKUP[str_id] - - values = dict(type_id=unit_type, str_id=str_id, name=title) - for race in ('Protoss', 'Terran', 'Zerg'): - if title.lower() in unit_lookup[race]: - values.update(unit_lookup[race][title.lower()]) - values['race'] = race - break - - build.add_unit_type(**values) - - abil_file = '{0}/{1}_abilities.csv'.format(expansion, version) - build.add_ability(ability_id=0, name='RightClick', title='Right Click') - for entry in pkgutil.get_data('sc2reader.data', abil_file).decode('utf8').split('\n'): - if not entry: - continue - int_id_base, str_id = entry.strip().split(',') - int_id_base = int(int_id_base, 10) << 5 - - abils = ABIL_LOOKUP[str_id] - real_abils = [(i, abil) for i, abil in enumerate(abils) if abil.strip() != ''] - - if len(real_abils) == 0: - real_abils = [(0, str_id)] - - for index, ability_name in real_abils: - unit_name, build_time = train_commands.get(ability_name, ('', 0)) - if 'Hallucinated' in unit_name: # Not really sure how to handle hallucinations - unit_name = unit_name[12:] - - build.add_ability( - ability_id=int_id_base | index, - name=ability_name, - is_build=bool(unit_name), - build_unit=getattr(build, unit_name, None), - build_time=build_time - ) - - return build - -# Load the WoL Data -wol_builds = dict() -for version in ('16117', '17326', '18092', '19458', '22612', '24944'): - wol_builds[version] = load_build('WoL', version) - -# Load HotS Data -hots_builds = dict() -for version in ('base', '23925', '24247', '24764'): - hots_builds[version] = load_build('HotS', version) -hots_builds['38215'] = load_build('LotV', 'base') -hots_builds['38215'].id = '38215' - -# Load LotV Data -lotv_builds = dict() -for version in ('base', '44401', '47185', '48258', '53644', '54724', '59587', '70154'): - lotv_builds[version] = load_build('LotV', version) - -datapacks = builds = {'WoL': wol_builds, 'HotS': hots_builds, 'LotV': lotv_builds} diff --git a/sc2reader/data/ability_lookup.csv b/sc2reader/data/ability_lookup.csv deleted file mode 100644 index 09b6917..0000000 --- a/sc2reader/data/ability_lookup.csv +++ /dev/null @@ -1,863 +0,0 @@ -250mmStrikeCannons,250mmStrikeCannons,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Cancel250mmStrikeCannons, -ArchonWarp,ArchonWarpSelection,ArchonWarpTarget,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ArmSiloWithNuke,BuildNuke,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelNuke, -ArmoryResearch,,,UpgradeVehiclePlating1,UpgradeVehiclePlating2,UpgradeVehiclePlating3,UpgradeVehicleWeapons1,UpgradeVehicleWeapons2,UpgradeVehicleWeapons3,UpgradeShipPlating1,UpgradeShipPlating2,UpgradeShipPlating3,UpgradeShipWeapons1,UpgradeShipWeapons2,UpgradeShipWeapons3,ResearchTerranVehicleAndShipArmorsLevel1,ResearchTerranVehicleAndShipArmorsLevel2,ResearchTerranVehicleAndShipArmorsLevel3,,,,,,,,,,,,,,CancelArmoryResearch, -AssaultMode,AssaultMode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -AttackRedirect,Attack,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -AttackWarpPrism,AttackWarpPrism,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BanelingNestResearch,EvolveCentrifugalHooks,EvolveTunnelingJaws,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelBanelingNestResearch, -BansheeCloak,CloakBanshee,DecloakBanshee,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BarracksAddOns,TechLabBarracks,ReactorBarracks,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelBarracksAddon, -BarracksLand,LandBarracks,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BarracksLiftOff,LiftBarracks,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BarracksReactorMorph,BuildReactorBarracks,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BarracksTechLabMorph,BuildTechLabBarracks,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BarracksTechLabResearch,ResearchStimpack,ResearchCombatShield,ResearchConcussiveShells,ResearchCombatDrugs,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelBarracksTechLabResearch, -BarracksTrain,TrainMarine,TrainReaper,TrainGhost,TrainMarauder,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelBarracksTrain, -Beacon,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Blink,Blink,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BridgeExtend,BridgeExtend,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BridgeRetract,BridgeRetract,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BroodLordHangar,BuildBroodling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BroodLordQueue2,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BuildAutoTurret,BuildAutoTurret,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BuildInProgress,CancelBuilding,HaltBuilding,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BuildNydusCanal,BuildNydusWorm,SummonNydusDestroyer,SummonCreepTower,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelNydusNetworkBuild, -BuildinProgressNydusCanal,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BuildingShield,BuildingShield,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BuildingStasis,PhaseShift,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BunkerTransport,LoadTargetBunker,UnloadAllBunker,UnloadTargetBunker,UnloadUnitBunker,LoadAllBunker,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowBanelingDown,BurrowBaneling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowBanelingUp,UnburrowBaneling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowChargeMP,BurrowCharge,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowChargeRevD,BurrowCharge,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowChargeTrial,BurrowCharge,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowCreepTumorDown,BurrowCreepTumor,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowDroneDown,BurrowDrone,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowDroneUp,UnburrowDrone,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowHydraliskDown,BurrowHydralisk,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowHydraliskUp,UnburrowHydralisk,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowInfestorDown,BurrowInfestor,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowInfestorTerranDown,BurrowInfestedTerran,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowInfestorTerranUp,UnburrowInfestedTerran,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowInfestorUp,UnburrowInfestor,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowProtector,BlindingCloud,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowQueenDown,BurrowQueen,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowQueenUp,UnburrowQueen,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowRoachDown,BurrowRoach,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowRoachUp,UnburrowRoach,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowUltraliskDown,BurrowUltralisk,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowUltraliskUp,UnburrowUltralisk,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowZerglingDown,BurrowZergling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowZerglingUp,UnburrowZergling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilArmMagazine,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilAttack,Attack,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilAugment,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilBattery,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilBeacon,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilBehavior,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilBuild,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelCAbilBuild, -CAbilBuildable,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,HaltCAbilBuildable, -CAbilEffect,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilEffectInstant,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilEffectTarget,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilHarvest,Gather,ReturnCargo,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilInteract,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilInventory,DropItem,MoveItem,TakeItem,UseItemInstant,UseItemTarget,CancelItem,PawnItemInstant,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilLearn,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilMerge,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilMergeable,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilMorph,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilMorphPlacement,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilMove,Move,Patrol,HoldPosition,ScanMove,Turn,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilPawn,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilProgress,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilQueue,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilQueueable,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilRally,SetRallyPoint,SetRallyPointExtra1,SetRallyPointExtra2,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilRedirect,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilResearch,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilRevive,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilSpecialize,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilStop,Stop,HoldFire,Cheer,Dance,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilTrain,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilTransport,LoadTarget,UnloadAll,UnloadTarget,UnloadUnit,LoadAll,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilWarpTrain,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbilWarpable,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CalldownMULE,CalldownMULE,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CarrierHangar,BuildInterceptor,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Charge,Charge,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Clone,Clone,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CommandCenterLand,LandCommandCenter,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CommandCenterLiftOff,LiftCommandCenter,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CommandCenterTrain,TrainSCV,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelCommandCenterTrain, -CommandCenterTransport,LoadTargetCommandCenter,UnloadAllCommandCenter,UnloadTargetCommandCenter,UnloadUnitCommandCenter,LoadAllCommandCenter,,,,,,,,,,,,,,,,,,,,,,,,,,, -Contaminate,Contaminate,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Corruption,Corruption,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelCorruption, -CreepTumorBuild,BuildCreepTumor,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelCreepTumor, -CritterFlee,CritterFlee,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CyberneticsCoreResearch,UpgradeAirWeapons1,UpgradeAirWeapons2,UpgradeAirWeapons3,UpgradeAirArmor1,UpgradeAirArmor2,UpgradeAirArmor3,ResearchWarpGate,,,ResearchHallucination,,,,,,,,,,,,,,,,,,,,,CancelCyberneticsCoreResearch, -DigesterCreepSpray,CreepSpray,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -DigesterTransport,LoadTargetDigester,UnloadAllDigester,UnloadTargetDigester,UnloadUnitDigester,LoadAllDigester,,,,,,,,,,,,,,,,,,,,,,,,,,, -DisguiseAsMarineWithShield,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -DisguiseAsMarineWithoutShield,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -DisguiseAsZealot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -DisguiseAsZerglingWithWings,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -DisguiseAsZerglingWithoutWings,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -DisguiseChangeling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -DroneHarvest,Gather,ReturnCargo,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -EMP,EMPRound,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -EngineeringBayResearch,ResearchHiSecAutoTracking,UpgradeStructureArmor,UpgradeTerranInfantryWeapons1,UpgradeTerranInfantryWeapons2,UpgradeTerranInfantryWeapons3,ResearchNeosteelFrame,UpgradeTerranInfantryArmor1,UpgradeTerranInfantryArmor2,UpgradeTerranInfantryArmor3,,,,,,,,,,,,,,,,,,,,,,CancelEngineeringBayResearch, -Explode,Explode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNEWide10,ExtendingBridgeNEWide10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNEWide10Out,ExtendingBridgeNEWide10Out,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNEWide12,ExtendingBridgeNEWide12,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNEWide12Out,ExtendingBridgeNEWide12Out,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNEWide8,ExtendingBridgeNEWide8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNEWide8Out,ExtendingBridgeNEWide8Out,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNWWide10,ExtendingBridgeNWWide10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNWWide10Out,ExtendingBridgeNWWide10Out,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNWWide12,ExtendingBridgeNWWide12,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNWWide12Out,ExtendingBridgeNWWide12Out,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNWWide8,ExtendingBridgeNWWide8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExtendingBridgeNWWide8Out,ExtendingBridgeNWWide8Out,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -EyeStalk,EyeStalk,CancelEyeStalk,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -FactoryAddOns,BuildTechLabFactory,BuildReactorFactory,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelFactoryAddOn, -FactoryLand,LandFactory,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -FactoryLiftOff,LiftFactory,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -FactoryReactorMorph,BuildReactorFactory,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -FactoryTechLabMorph,BuildTechLabFactory,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -FactoryTechLabResearch,ResearchSiegeTech,ResearchInfernalPreIgniter,Research250mmStrikeCannons,ResearchTransformationServos,ResearchDrillingClaws,,ResearchSmartServos,,ResearchCycloneRapidFireLaunchers,,,,,,,,,,,,,,,,,,,,,,CancelFactoryTechLabResearch, -FactoryTrain,,BuildSiegeTank,,,BuildThor,BuildHellion,BuildBattleHellion,TrainCyclone,,,,,BuildWarHound,,,,,,,,,,,,BuildWidowMine,,,,,,CancelFactoryTrain, -Feedback,Feedback,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -FighterMode,FighterMode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -FleetBeaconResearch,ResearchFluxVanes,ResearchGravitonCatapult,ResearchAnionPulseCrystals,,ResearchBosonicCore,ResearchGravitySling,,,,,,,,,,,,,,,,,,,,,,,,,CancelFleetBeaconResearch, -FlyerShield,FlyerShield,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ForceField,ForceField,CancelForceField,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ForgeResearch,UpgradeGroundWeapons1,UpgradeGroundWeapons2,UpgradeGroundWeapons3,UpgradeGroundArmor1,UpgradeGroundArmor2,UpgradeGroundArmor3,UpgradeShields1,UpgradeShields2,UpgradesShields3,,,,,,,,,,,,,,,,,,,,,,CancelForgeResearch, -Frenzy,Frenzy,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -FungalGrowth,FungalGrowth,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -FusionCoreResearch,ResearchWeaponRefit,ResearchBehemothReactor,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelFusionCoreResearch, -GatewayTrain,TrainZealot,TrainStalker,,TrainHighTemplar,TrainDarkTemplar,TrainSentry,TrainAdept,,,,,,,,,,,,,,,,,,,,,,,,CancelGatewayTrain, -GenerateCreep,GenerateCreep,StopGenerateCreep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -GhostAcademyResearch,ResearchPersonalCloaking,ResearchMoebiusReactor,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelGhostAcademyResearch, -GhostCloak,CloakGhost,DecloakGhost,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -GhostHoldFire,HoldFireGhost,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -GhostWeaponsFree,GWeaponsFreeGhost,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -GravitonBeam,GravitonBeam,CancelGravitonBeam,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -GuardianShield,GuardianShield,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationArchon,HallucinateArchon,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationColossus,HallucinateColossus,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationHighTemplar,HallucinateHighTemplar,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationImmortal,HallucinateImmortal,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationOracle,HallucinateOracle,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationPhoenix,HallucinatePhoenix,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationProbe,HallucinateProbe,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationStalker,HallucinateStalker,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationVoidRay,HallucinateVoidRay,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationWarpPrism,HallucinateWarpPrism,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HallucinationZealot,HallucinateZealot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HangarQueue5,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HerdInteract,Herd,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HoldFire,Stop,HoldFire,Cheer,Dance,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HydraliskDenResearch,ResearchEvolveGroovedSpines,ResearchEvolveMuscularAugments,EvolveGroovedSpines,EvolveMuscularAugments,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelHydraliskDenResearch, -InfestationPitResearch,,,EvolvePathogenGlands,EvolveNeuralParasite,EvolveEnduringLocusts,,,,,,,,,,,,,,,,,,,,,,,,,,CancelInfestationPitResearch, -InfestedTerrans,SpawnInfestedTerran,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -InfestedTerransLayEgg,SpawnInfestedTerran,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -InvulnerabilityShield,InvulnerabilityShield,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -LairResearch,,EvolvePneumatizedCarapace,EvolveVentralSacs,EvolveBurrow,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelLairResearch, -LarvaTrain,MorphDrone,MorphZergling,MorphOverlord,MorphHydralisk,MorphMutalisk,,MorphUltralisk,,,MorphRoach,MorphInfestor,MorphCorruptor,MorphViper,,MorphSwarmHost,,,,,,,,,,,,,,,,CancelLarvaTrain, -Leech,Leech,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -LocustTrain,SpawnLocusts,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MULEGather,Gather,ReturnCargo,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MULERepair,MULERepair,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MassRecall,MassRecallMothership,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MassiveKnockover,MassiveKnockover,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MaxiumThrust,MaxiumThrust,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MedivacHeal,HealMedivac,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MedivacSpeedBoost,MedivacSpeedBoost,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MedivacTransport,LoadTargetMedivac,UnloadAllMedivac,UnloadTargetMedivac,UnloadUnitMedivac,LoadAllMedivac,,,,,,,,,,,,,,,,,,,,,,,,,,, -MercCompoundResearch,,,,ResearchNitroPacks,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Mergeable,Cancel,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MetalGateDefaultLower,MetalGateDefaultLower,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MetalGateDefaultRaise,MetalGateDefaultRaise,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphBackToGateway,TransformToGateway,CancelTransformToGateway,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToBroodLord,MorphToBroodLord,CancelMorph,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToCollapsibleRockTowerDebris,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToHellion,StrikeMode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToHellionTank,BattleMode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToInfestedTerran,MorphToInfestedTerran,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToMothership,UpgradeToMothership,CancelUpgradeToMothership,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToOverseer,MorphToOverseer,CancelMorphToOverseer,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToSwarmHostBurrowedMP,BurrowSwarmHost,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToSwarmHostMP,UnburrowSwarmHost,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphZerglingToBaneling,MorphToBaneling,CancelMorphToBaneling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MothershipCoreEnergize,Energize,CancelEnergize,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MothershipCoreMassRecall,MassRecallMothershipCore,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MothershipCoreTeleport,Teleport,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MothershipCoreWeapon,Purify,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MothershipStasis,Stasis,CancelStasis,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -NeuralParasite,InfestorNeuralParasite,Cancel,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -NexusInvulnerability,InvulnerabilityNexus,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -NexusPhaseShift,PhaseShiftNexus,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -NexusTrain,TrainProbe,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelTrainProbe, -NexusTrainMothership,TrainMothership,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelTrainMothership, -NexusTrainMothershipCore,TrainMothershipCore,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelTrainMothershipCore, -NydusCanalTransport,LoadTargetNydus,UnloadAllNydus,UnloadTargetNydus,UnloadUnitNydus,LoadAllNydus,,,,,,,,,,,,,,,,,,,,,,,,,,, -OracleCloakField,CloakField,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -OracleNormalMode,FlightMode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -OracleRevelation,Revelation,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -OracleRevelationMode,RevelationMode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -OrbitalCommandLand,LandOrbitalCommand,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -OrbitalLiftOff,LiftOrbitalCommand,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -OverlordTransport,LoadTargetOverlord,UnloadAllOverlord,UnloadTargetOverlord,UnloadUnitOverlord,LoadAllOverlord,,,,,,,,,,,,,,,,,,,,,,,,,,, -PhaseShield,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PhaseShift,PhaseShiftNexus,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PhasingMode,PhasingMode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PickupPalletGas,PickupPalletGas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PickupPalletMinerals,PickupPalletMinerals,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PickupScrapLarge,PickupScrapLarge,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PickupScrapMedium,PickupScrapMedium,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PickupScrapSmall,PickupScrapSmall,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PlacePointDefenseDrone,BuildPointDefenseDrone,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ProbeHarvest,Gather,ReturnCargo,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ProgressRally,SetRallyPoint,SetRallyPointExtra1,SetRallyPointExtra2,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ProtossBuild,BuildNexus,BuildPylon,BuildAssimilator,BuildGateway,BuildForge,BuildFleetBeacon,BuildTwilightCouncil,BuildPhotonCannon,,BuildStargate,BuildTemplarArchive,BuildDarkShrine,BuildRoboticsBay,BuildRoboticsFacility,BuildCyberneticsCore,BuildShieldBattery,,,,,,,,,,,,,,,CancelProtossBuild, -ProtossBuildingQueue,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PsiStorm,PsionicStorm,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -QueenBuild,CreepTumor,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelCreepTumor, -QueenFly,QueenFly,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -QueenLand,QueenLand,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Rally,SetRallyPoint,SetRallyPointExtra1,SetRallyPointExtra2,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -RallyCommand,SetWorkerRally,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -RallyHatchery,SetUnitRally,SetWorkerRally,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -RallyNexus,SetWorkerRally,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -RavenBuild,BuildAutoTurret,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelRavenBuild, -ReactorMorph,ReactorMorph,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -RedstoneLavaCritterBurrow,BurrowRedstoneLavaCritter,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -RedstoneLavaCritterInjuredBurrow,BurrowRedstoneLavaCritterInjured,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -RedstoneLavaCritterInjuredUnburrow,UnburrowRedstoneLavaCritterInjured,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -RedstoneLavaCritterUnburrow,UnburrowRedstoneLavaCritter,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Refund,Salvage,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Repair,SCVRepair,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ResourceBlocker,MineralShield,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ResourceStun,Entomb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -RestoreShields,RestoreShields,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ReviveSelf,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ReviveSelfAtTarget,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ReviveSelfOnCreep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ReviveSelfReplaceTarget,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -RoachWarrenResearch,,EvolveGlialReconstitution,EvolveTunnelingClaws,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelRoachWarrenResearch, -RoboticsBayResearch,,ResearchGraviticBoosters,ResearchGraviticDrive,,,ResearchExtendedThermalLance,,,,,,,,,,,,,,,,,,,,,,,,,CancelRoboticsBayResearch, -RoboticsFacilityTrain,TrainWarpPrism,TrainObserver,TrainColossus,TrainImmortal,,,,,,,,,,,,,,,TrainDisruptor,,,,,,,,,,,,CancelRoboticsFacilityTrain, -SCVHarvest,Gather,ReturnCargo,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Sacrifice,Sacrifice,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Salvage,Salvage,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageBaneling,SalvageBaneling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageBanelingRefund,SalvageBanelingRefund,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageBunker,SalvageBunker,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageBunkerRefund,SalvageBunkerRefund,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageDrone,SalvageDrone,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageDroneRefund,SalvageDroneRefund,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageHydralisk,SalvageHydralisk,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageHydraliskRefund,SalvageHydraliskRefund,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageInfestor,SalvageInfestor,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageInfestorRefund,SalvageInfestorRefund,SalvageInfestorRefund,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageQueen,SalvageQueen,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageQueenRefund,SalvageQueenRefund,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageRoach,SalvageRoach,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageRoachRefund,SalvageRoachRefund,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageShared,SalvageShared,Off,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageSwarmHost,SalvageSwarmHost,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageSwarmHostRefund,SalvageSwarmHostRefund,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageUltralisk,SalvageUltralisk,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageUltraliskRefund,SalvageUltraliskRefund,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageZergling,SalvageZergling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SalvageZerglingRefund,SalvageZerglingRefund,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SapStructure,SapStructureBaneling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ScannerSweep,ScannerSweep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Scryer,Preordain,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SeekerMissile,SeekerMissile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Shatter,Shatter,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SiegeMode,SiegeMode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SingleRecall,SingleRecall,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Siphon,SiphonLife,CancelSiphonLife,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Snipe,SniperRound,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SnipeDoT,SnipeDoT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SpawnChangeling,SpawnChangeling,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SpawnChangelingTarget,SpawnChangelingTarget,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SpawnInfestedTerran,SpawnLocusts,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SpawnLarva,SpawnLarva,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SpawningPoolResearch,EvolveAdrenalGlands,EvolveMetabolicBoost,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelSpawningPoolResearch, -SpectreShield,SpectreShield,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SpineCrawlerRoot,RootSpineCrawler,CancelRootSpineCrawler,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SpineCrawlerUproot,UprootSpineCrawler,CancelUprootSpineCrawler,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SpireResearch,EvolveFlyerAttacks1,EvolveFlyerAttacks2,EvolveFlyerAttacks3,EvolveFlyerCarapace1,EvolveFlyerCarapace2,EvolveFlyerCarapace3,,,,,,,,,,,,,,,,,,,,,,,,,CancelSpireResearch, -SporeCrawlerRoot,RootSporeCrawler,Cancel,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelRootSporeCrawler, -SporeCrawlerUproot,UprootSporeCrawler,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelUprootSporeCrawler, -StargateTrain,TrainPhoenix,TrainCarrier,TrainCarrier,,TrainVoidRay,,,,TrainOracle,TrainTempest,,,,,,,,,,,,,,,,,,,,,CancelStargateTrain, -StarportAddOns,BuildTechLabStarport,BuildReactorStarport,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelStarportAddon, -StarportLand,LandStarport,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -StarportLiftOff,LiftStarport,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -StarportReactorMorph,StarportReactorMorph,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -StarportTechLabMorph,StarportTechLabMorph,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -StarportTechLabResearch,ResearchCloakingField,,ResearchCaduceusReactor,ResearchCorvidReactor,,,ResearchSeekerMissile,ResearchDurableMaterials,,ResearchBansheeSpeed,,,,ResearchRavenRecalibratedExplosives,ResearchMedivacIncreaseSpeedBoost,ResearchLiberatorAGRangeUpgrade,ResearchRavenEnhancedMunitions,,,,,,,,,,,,,,CancelStarportTechLabResearch, -StarportTrain,TrainMedivac,TrainBanshee,TrainRaven,TrainBattlecruiser,TrainViking,,TrainLiberator,,,,,,,,,,,,,,,,,,,,,,,,CancelStarportTrain, -Stimpack,UseStimpack,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -StimpackMarauder,UseStimpack,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -StimpackMarauderRedirect,StimpackMarauderRedirect,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -StimpackRedirect,StimpackRedirect,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -StopRedirect,StopRedirect,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SupplyDepotLower,LowerSupplyDepot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SupplyDepotRaise,RaiseSupplyDepot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SupplyDrop,ExtraSupplies,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SwarmHostSpawnLocusts,SpawnLocusts,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TacNukeStrike,TacticalNukeStrike,CancelTacticalNukeStrike,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Taunt,Taunt,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TechLabMorph,TechLabMorph,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TemplarArchivesResearch,ResearchKhaydarinAmulet,,,,ResearchPsiStorm,,,,,,,,,,,,,,,,,,,,,,,,,,CancelTemplarArchivesResearch, -TemporalRift,TemporalRift,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TerranAddOns,BuildTechLab,BuildReactor,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelBuilding, -TerranBuild,BuildCommandCenter,BuildSupplyDepot,BuildRefinery,BuildBarracks,BuildEngineeringBay,BuildMissileTurret,BuildBunker,,BuildSensorTower,BuildGhostAcademy,BuildFactory,BuildStarport,,BuildArmory,,BuildFusionCore,,,,,,,,,,,,,,,CancelTerranBuilding, -TerranBuildingLand,LandTerranBuilding,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TerranBuildingLiftOff,LiftTerranBuilding,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TestZerg,TestZerg,CancelTestZerg,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TimeWarp,ChronoBoost,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TornadoMissile,HaywireMissiles,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TowerCapture,TowerCapture,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TrainQueen,TrainQueen,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelTrainQueen, -Transfusion,QueenTransfusion,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TransportMode,TransportMode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TwilightCouncilResearch,ResearchCharge,ResearchBlink,ResearchAdeptPiercingAttack,,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelTwilightCouncilResearch, -UltraliskCavernResearch,,,EvolveChitinousPlating,EvolveBurrowCharge,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelUltraliskCavernResearch, -UltraliskWeaponCooldown,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Unsiege,TankMode,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -UpgradeToGreaterSpire,MorphToGreaterSpire,CancelMorphToGreaterSpire,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -UpgradeToHive,UpgradeToHive,CancelUpgradeToHive,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -UpgradeToLair,UpgradeToLair,CancelUpgradeToLair,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -UpgradeToOrbital,UpgradeToOrbitalCommand,CancelUpgradeToOrbitalCommand,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -UpgradeToPlanetaryFortress,UpgradeToPlanetaryFortress,CancelUpgradeToPlanetaryFortress,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -UpgradeToWarpGate,TransformToWarpGate,CancelTransformToWarpGate,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ViperConsumeStructure,Consume,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -VolatileBurstBuilding,DisableVolatileBurst,EnableVolatileBurst,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Vortex,Vortex,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -WarpGateTrain,WarpInZealot,WarpInStalker,,WarpInHighTemplar,WarpInDarkTemplar,WarpInSentry,TrainAdept,,,,,,,,,,,,,,,,,,,,,,,,CancelWarpIn, -WarpPrismTransport,LoadTarget,UnloadAllWarpPrism,UnloadTargetWarpPrism,UnloadUnitWarpPrism,LoadAllWarpPrism,,,,,,,,,,,,,,,,,,,,,,,,,,, -Warpable,CancelWarpIn,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -WidowMineAttack,AttackWidowMine,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -WidowMineBurrow,BurrowWidowMine,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -WidowMineUnburrow,UnburrowWidowMine,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -WormholeTransit,WormholeTransit,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -XelNagaHealingShrine,XelNagaHealingShrine,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Yamato,YamatoGun,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -Yoink,Abduct,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ZergBuild,BuildHatchery,CreepTumor,BuildExtractor,BuildSpawningPool,BuildEvolutionChamber,BuildHydraliskDen,BuildSpire,BuildUltraliskCavern,BuildInfestationPit,BuildNydusNetwork,BuildBanelingNest,BuildLurkerDenMP,,BuildRoachWarren,BuildSpineCrawler,BuildSporeCrawler,,,,,Digester,,,,,,,,,,CancelZergBuild, -attack,Attack,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -attackProtossBuilding,Attack,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -burrowedBanelingStop,Stop,HoldFire,Cheer,Dance,,,,,,,,,,,,,,,,,,,,,,,,,,,, -burrowedStop,Stop,HoldFire,Cheer,Dance,,,,,,,,,,,,,,,,,,,,,,,,,,,, -evolutionchamberresearch,EvolveMeleeAttacks1,EvolveMeleeAttacks2,EvolveMeleeAttacks3,EvolveGroundCarapace1,EvolveGroundCarapace2,EvolveGroundCarapace3,EvolveMissileAttacks1,EvolveMissileAttacks2,EvolveMissileAttacks3,,,,,,,,,,,,,,,,,,,,,,CancelEvolutionChamberResearch, -move,Move,Patrol,HoldPosition,ScanMove,Turn,,,,,,,,,,,,,,,,,,,,,,,,,,, -que1,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -que5,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -que5Addon,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -que5CancelToSelection,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -que5LongBlend,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -que5Passive,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -que5PassiveCancelToSelection,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -que8,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -stop,Stop,HoldFire,Cheer,Dance,,,,,,,,,,,,,,,,,,,,,,,,,,,, -stopProtossBuilding,Stop,HoldFire,Cheer,Dance,,,,,,,,,,,,,,,,,,,,,,,,,,,, -CAbil,CAbil,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToCollapsibleTerranTowerDebris,MorphToCollapsibleTerranTowerDebris,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToCollapsibleTerranTowerDebrisRampLeft,MorphToCollapsibleTerranTowerDebrisRampLeft,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToCollapsibleTerranTowerDebrisRampRight,MorphToCollapsibleTerranTowerDebrisRampRight,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -LeechResources,LeechResources,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BlindingCloud,BlindingCloud,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ViperConsume,ViperConsume,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ViperConsumeMinerals,ViperConsumeMinerals,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -LurkerAspectMPFromHydraliskBurrowed,LurkerAspectMPFromHydraliskBurrowed,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -LurkerAspectMP,LurkerAspect,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowLurkerMPDown,BurrowLurker,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -BurrowLurkerMPUp,UnburrowLurker,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -UpgradeToLurkerDenMP,UpgradeToLurkerDenMP,Cancel,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToCollapsibleRockTowerDebrisRampRight,MorphToCollapsibleRockTowerDebrisRampRight,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MorphToCollapsibleRockTowerDebrisRampLeft,MorphToCollapsibleRockTowerDebrisRampLeft,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -VoidSiphon,VoidSiphon,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MothershipCorePurifyNexusCancel,MothershipCorePurifyNexusCancel,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MothershipCorePurifyNexus,MothershipCorePurifyNexus,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -TemporalField,TemporalField,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ArmoryResearchSwarm,,,,VehicleAndShipPlating1,VehicleAndShipPlating2,VehicleAndShipPlating3,,,,,,,,,,,,,,,,,,,,,,,,,CancelArmoryResearch, -ArmorpiercingMissiles,ArmorpiercingMissiles,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -ExplosiveMissiles,ExplosiveMissiles,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -LightofAiur,Envision,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -MothershipMassRecall,MothershipMassRecall,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -OracleWeapon,OracleWeapon,OracleWeaponOff,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PulsarBeam,PulsarBeam,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -PulsarCannon,PulsarCannon,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -VoidRaySwarmDamageBoost,PrismaticAlignment,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SeekerDummyChannel,SeekerDummyChannel,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -XelNaga_Caverns_DoorDefaultOpen,XelNaga_Caverns_DoorDefaultOpen -XelNaga_Caverns_DoorDefaultClose,XelNaga_Caverns_DoorDefaultClose -XelNaga_Caverns_DoorE,XelNaga_Caverns_DoorE -XelNaga_Caverns_DoorEOpened,XelNaga_Caverns_DoorEOpened -XelNaga_Caverns_DoorN,XelNaga_Caverns_DoorN -XelNaga_Caverns_DoorNE,XelNaga_Caverns_DoorNE -XelNaga_Caverns_DoorNEOpened,XelNaga_Caverns_DoorNEOpened -XelNaga_Caverns_DoorNOpened,XelNaga_Caverns_DoorNOpened -XelNaga_Caverns_DoorNW,XelNaga_Caverns_DoorNW -XelNaga_Caverns_DoorNWOpened,XelNaga_Caverns_DoorNWOpened -XelNaga_Caverns_DoorS,XelNaga_Caverns_DoorS -XelNaga_Caverns_DoorSE,XelNaga_Caverns_DoorSE -XelNaga_Caverns_DoorSEOpened,XelNaga_Caverns_DoorSEOpened -XelNaga_Caverns_DoorSOpened,XelNaga_Caverns_DoorSOpened -XelNaga_Caverns_DoorSW,XelNaga_Caverns_DoorSW -XelNaga_Caverns_DoorSWOpened,XelNaga_Caverns_DoorSWOpened -XelNaga_Caverns_DoorW,XelNaga_Caverns_DoorW -XelNaga_Caverns_DoorWOpened,XelNaga_Caverns_DoorWOpened -XelNaga_Caverns_Floating_BridgeNE8Out,XelNaga_Caverns_Floating_BridgeNE8Out -XelNaga_Caverns_Floating_BridgeNE8,XelNaga_Caverns_Floating_BridgeNE8 -XelNaga_Caverns_Floating_BridgeNW8Out,XelNaga_Caverns_Floating_BridgeNW8Out -XelNaga_Caverns_Floating_BridgeNW8,XelNaga_Caverns_Floating_BridgeNW8 -XelNaga_Caverns_Floating_BridgeNE10Out,XelNaga_Caverns_Floating_BridgeNE10Out -XelNaga_Caverns_Floating_BridgeNE10,XelNaga_Caverns_Floating_BridgeNE10 -XelNaga_Caverns_Floating_BridgeNW10Out,XelNaga_Caverns_Floating_BridgeNW10Out -XelNaga_Caverns_Floating_BridgeNW10,XelNaga_Caverns_Floating_BridgeNW10 -XelNaga_Caverns_Floating_BridgeNE12Out,XelNaga_Caverns_Floating_BridgeNE12Out -XelNaga_Caverns_Floating_BridgeNE12,XelNaga_Caverns_Floating_BridgeNE12 -XelNaga_Caverns_Floating_BridgeNW12Out,XelNaga_Caverns_Floating_BridgeNW12Out -XelNaga_Caverns_Floating_BridgeNW12,XelNaga_Caverns_Floating_BridgeNW12 -XelNaga_Caverns_Floating_BridgeH8Out,XelNaga_Caverns_Floating_BridgeH8Out -XelNaga_Caverns_Floating_BridgeH8,XelNaga_Caverns_Floating_BridgeH8 -XelNaga_Caverns_Floating_BridgeV8Out,XelNaga_Caverns_Floating_BridgeV8Out -XelNaga_Caverns_Floating_BridgeV8,XelNaga_Caverns_Floating_BridgeV8 -XelNaga_Caverns_Floating_BridgeH10Out,XelNaga_Caverns_Floating_BridgeH10Out -XelNaga_Caverns_Floating_BridgeH10,XelNaga_Caverns_Floating_BridgeH10 -XelNaga_Caverns_Floating_BridgeV10Out,XelNaga_Caverns_Floating_BridgeV10Out -XelNaga_Caverns_Floating_BridgeV10,XelNaga_Caverns_Floating_BridgeV10 -XelNaga_Caverns_Floating_BridgeH12Out,XelNaga_Caverns_Floating_BridgeH12Out -XelNaga_Caverns_Floating_BridgeH12,XelNaga_Caverns_Floating_BridgeH12 -XelNaga_Caverns_Floating_BridgeV12Out,XelNaga_Caverns_Floating_BridgeV12Out -XelNaga_Caverns_Floating_BridgeV12,XelNaga_Caverns_Floating_BridgeV12 -CausticSpray,CausticSpray -OracleCloakingFieldTargeted,OracleCloakingFieldTargeted -ImmortalOverload,ImmortalOverload -MorphToRavager,MorphToRavager,Cancel -MorphToLurker,MorphToLurker,Cancel -OraclePhaseShift,OraclePhaseShift -ReleaseInterceptors,ReleaseInterceptors -RavagerCorrosiveBile,RavagerCorrosiveBile -BurrowRavagerDown,BurrowRavagerDown -BurrowRavagerUp,BurrowRavagerUp -PurificationNova,PurificationNova -Impale,Impale -LockOn,LockOn -LockOnCancel,LockOnCancel -CorruptionBomb,CorruptionBomb -Hyperjump,Hyperjump -Overcharge,Overcharge -ThorAPMode,ThorAPMode -ThorNormalMode,ThorNormalMode,Cancel -NydusWormTransport,NydusWormTransport,UnloadAll -VoidSwarmHostSpawnLocust,VoidSwarmHostSpawnLocust -LocustMPFlyingMorphToGround,LocustMPFlyingMorphToGround -LocustMPMorphToAir,LocustMPMorphToAir -LocustMPFlyingSwoop,LocustMPFlyingSwoop -HallucinationDisruptor,HallucinationDisruptor -HallucinationAdept,HallucinationAdept -AiurTempleBridgeNE8Out,AiurTempleBridgeNE8Out -AiurTempleBridgeNE8,AiurTempleBridgeNE8 -AiurTempleBridgeNE10Out,AiurTempleBridgeNE10Out -AiurTempleBridgeNE10,AiurTempleBridgeNE10 -AiurTempleBridgeNE12Out,AiurTempleBridgeNE12Out -AiurTempleBridgeNE12,AiurTempleBridgeNE12 -AiurTempleBridgeNW8Out,AiurTempleBridgeNW8Out -AiurTempleBridgeNW8,AiurTempleBridgeNW8 -AiurTempleBridgeNW10Out,AiurTempleBridgeNW10Out -AiurTempleBridgeNW10,AiurTempleBridgeNW10 -AiurTempleBridgeNW12Out,AiurTempleBridgeNW12Out -AiurTempleBridgeNW12,AiurTempleBridgeNW12 -VoidMPImmortalReviveRebuild,VoidMPImmortalReviveRebuild -VoidMPImmortalReviveDeath,VoidMPImmortalReviveDeath -ArbiterMPStasisField,ArbiterMPStasisField -ArbiterMPRecall,ArbiterMPRecall -CorsairMPDisruptionWeb,CorsairMPDisruptionWeb -MorphToGuardianMP,MorphToGuardianMP,Cancel -MorphToDevourerMP,MorphToDevourerMP,Cancel -DefilerMPConsume,DefilerMPConsume -DefilerMPDarkSwarm,DefilerMPDarkSwarm -DefilerMPPlague,DefilerMPPlague -DefilerMPBurrow,DefilerMPBurrow -DefilerMPUnburrow,DefilerMPUnburrow -QueenMPEnsnare,QueenMPEnsnare -QueenMPSpawnBroodlings,QueenMPSpawnBroodlings -QueenMPInfestCommandCenter,QueenMPInfestCommandCenter -LightningBomb,LightningBomb -Grapple,Grapple -OracleStasisTrap,OracleStasisTrap -OracleStasisTrapBuild,OracleStasisTrapBuild -OracleStasisTrapActivate,OracleStasisTrapActivate -SelfRepair,SelfRepair -ParasiticBomb,ParasiticBomb -AdeptPhaseShift,AdeptPhaseShift -PurificationNovaMorph,PurificationNovaMorph -PurificationNovaMorphBack,PurificationNovaMorphBack -LurkerHoldFire,LurkerHoldFire -LurkerRemoveHoldFire,LurkerRemoveHoldFire -LiberatorMorphtoAG,LiberatorMorphtoAG -LiberatorMorphtoAA,LiberatorMorphtoAA -LiberatorAGTarget,LiberatorAGTarget -LiberatorAATarget,LiberatorAATarget -TimeStop,TimeStop -KD8Charge,KD8Charge -AdeptPhaseShiftCancel,AdeptPhaseShiftCancel -AdeptShadePhaseShiftCancel,AdeptShadePhaseShiftCancel -LaunchInterceptors,LaunchInterceptors -SpawnLocustsTargeted,SpawnLocustsTargeted -LocustMPFlyingSwoopAttack,LocustMPFlyingSwoopAttack -MorphToTransportOverlord,MorphToTransportOverlord,Cancel -BypassArmor,BypassArmor -BypassArmorDroneCU,BypassArmorDroneCU -ChannelSnipe,ChannelSnipe -LockOnAir,LockOnAir -PurificationNovaTargetted,PurificationNovaTargetted -SnowRefinery_Terran_ExtendingBridgeNEShort8Out,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -SnowRefinery_Terran_ExtendingBridgeNEShort8,SnowRefinery_Terran_ExtendingBridgeNEShort8 -SnowRefinery_Terran_ExtendingBridgeNWShort8Out,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -SnowRefinery_Terran_ExtendingBridgeNWShort8,SnowRefinery_Terran_ExtendingBridgeNWShort8 -PurificationNovaTargeted,PurificationNovaTargeted -AiurLightBridgeNE8Out,AiurLightBridgeNE8Out -AiurLightBridgeNE8,AiurLightBridgeNE8 -AiurLightBridgeNE10Out,AiurLightBridgeNE10Out -AiurLightBridgeNE10,AiurLightBridgeNE10 -AiurLightBridgeNE12Out,AiurLightBridgeNE12Out -AiurLightBridgeNE12,AiurLightBridgeNE12 -AiurLightBridgeNW8Out,AiurLightBridgeNW8Out -AiurLightBridgeNW8,AiurLightBridgeNW8 -AiurLightBridgeNW10Out,AiurLightBridgeNW10Out -AiurLightBridgeNW10,AiurLightBridgeNW10 -AiurLightBridgeNW12Out,AiurLightBridgeNW12Out -AiurLightBridgeNW12,AiurLightBridgeNW12 -ShakurasLightBridgeNE8Out,ShakurasLightBridgeNE8Out -ShakurasLightBridgeNE8,ShakurasLightBridgeNE8 -ShakurasLightBridgeNE10Out,ShakurasLightBridgeNE10Out -ShakurasLightBridgeNE10,ShakurasLightBridgeNE10 -ShakurasLightBridgeNE12Out,ShakurasLightBridgeNE12Out -ShakurasLightBridgeNE12,ShakurasLightBridgeNE12 -ShakurasLightBridgeNW8Out,ShakurasLightBridgeNW8Out -ShakurasLightBridgeNW8,ShakurasLightBridgeNW8 -ShakurasLightBridgeNW10Out,ShakurasLightBridgeNW10Out -ShakurasLightBridgeNW10,ShakurasLightBridgeNW10 -ShakurasLightBridgeNW12Out,ShakurasLightBridgeNW12Out -ShakurasLightBridgeNW12,ShakurasLightBridgeNW12 -AiurLightBridgeAbandonedNE8Out,AiurLightBridgeAbandonedNE8Out -AiurLightBridgeAbandonedNE8,AiurLightBridgeAbandonedNE8 -AiurLightBridgeAbandonedNE10Out,AiurLightBridgeAbandonedNE10Out -AiurLightBridgeAbandonedNE10,AiurLightBridgeAbandonedNE10 -AiurLightBridgeAbandonedNE12Out,AiurLightBridgeAbandonedNE12Out -AiurLightBridgeAbandonedNE12,AiurLightBridgeAbandonedNE12 -AiurLightBridgeAbandonedNW8Out,AiurLightBridgeAbandonedNW8Out -AiurLightBridgeAbandonedNW8,AiurLightBridgeAbandonedNW8 -AiurLightBridgeAbandonedNW10Out,AiurLightBridgeAbandonedNW10Out -AiurLightBridgeAbandonedNW10,AiurLightBridgeAbandonedNW10 -AiurLightBridgeAbandonedNW12Out,AiurLightBridgeAbandonedNW12Out -AiurLightBridgeAbandonedNW12,AiurLightBridgeAbandonedNW12 -SlaynElementalGrab,SlaynElementalGrab -PowerSourceFast,PowerSourceFast -WidowMineArmed,WidowMineArmed -IsTransportOverlord,IsTransportOverlord -ActivateStasisWard,ActivateStasisWard -AdeptPiercingUpgrade,AdeptPiercingUpgrade -BurrowedMove,BurrowedMove -CliffWalk,CliffWalk -CloakingField,CloakingField -CombatDrugs,CombatDrugs -ConcussiveGrenade,ConcussiveGrenade -CycloneLockOnDamageUpgrade,CycloneLockOnDamageUpgrade -Detector,Detector -Disguise,Disguise -ExplosiveShrapnelShells,ExplosiveShrapnelShells -FlyingLocusts,FlyingLocusts -Frenzied,Frenzied -GravitonCatapult,GravitonCatapult -HighCapacityFuelTanks,HighCapacityFuelTanks -ImprovedEnergy,ImprovedEnergy -JetPack,JetPack -LiberatorAGRangeUpgrade,LiberatorAGRangeUpgrade -MutaliskRegeneration,MutaliskRegeneration -PermanentlyCloaked,PermanentlyCloaked -PermanentlyCloakedObserver,PermanentlyCloakedObserver -PermanentlyCloakedStasis,PermanentlyCloakedStasis -PointDefense,PointDefense -RadarField,RadarField -RapidRegeneration,RapidRegeneration -SwarmSeeds,SwarmSeeds -WidowMineBioSplash,WidowMineBioSplash -SprayTerran,SprayTerran -SprayZerg,SprayZerg -SprayProtoss,SprayProtoss -PortCity_Bridge_UnitNE8Out,PortCity_Bridge_UnitNE8Out -PortCity_Bridge_UnitNE8,PortCity_Bridge_UnitNE8 -PortCity_Bridge_UnitSE8Out,PortCity_Bridge_UnitSE8Out -PortCity_Bridge_UnitSE8,PortCity_Bridge_UnitSE8 -PortCity_Bridge_UnitNW8Out,PortCity_Bridge_UnitNW8Out -PortCity_Bridge_UnitNW8,PortCity_Bridge_UnitNW8 -PortCity_Bridge_UnitSW8Out,PortCity_Bridge_UnitSW8Out -PortCity_Bridge_UnitSW8,PortCity_Bridge_UnitSW8 -PortCity_Bridge_UnitNE10Out,PortCity_Bridge_UnitNE10Out -PortCity_Bridge_UnitNE10,PortCity_Bridge_UnitNE10 -PortCity_Bridge_UnitSE10Out,PortCity_Bridge_UnitSE10Out -PortCity_Bridge_UnitSE10,PortCity_Bridge_UnitSE10 -PortCity_Bridge_UnitNW10Out,PortCity_Bridge_UnitNW10Out -PortCity_Bridge_UnitNW10,PortCity_Bridge_UnitNW10 -PortCity_Bridge_UnitSW10Out,PortCity_Bridge_UnitSW10Out -PortCity_Bridge_UnitSW10,PortCity_Bridge_UnitSW10 -PortCity_Bridge_UnitNE12Out,PortCity_Bridge_UnitNE12Out -PortCity_Bridge_UnitNE12,PortCity_Bridge_UnitNE12 -PortCity_Bridge_UnitSE12Out,PortCity_Bridge_UnitSE12Out -PortCity_Bridge_UnitSE12,PortCity_Bridge_UnitSE12 -PortCity_Bridge_UnitNW12Out,PortCity_Bridge_UnitNW12Out -PortCity_Bridge_UnitNW12,PortCity_Bridge_UnitNW12 -PortCity_Bridge_UnitSW12Out,PortCity_Bridge_UnitSW12Out -PortCity_Bridge_UnitSW12,PortCity_Bridge_UnitSW12 -PortCity_Bridge_UnitN8Out,PortCity_Bridge_UnitN8Out -PortCity_Bridge_UnitN8,PortCity_Bridge_UnitN8 -PortCity_Bridge_UnitS8Out,PortCity_Bridge_UnitS8Out -PortCity_Bridge_UnitS8,PortCity_Bridge_UnitS8 -PortCity_Bridge_UnitE8Out,PortCity_Bridge_UnitE8Out -PortCity_Bridge_UnitE8,PortCity_Bridge_UnitE8 -PortCity_Bridge_UnitW8Out,PortCity_Bridge_UnitW8Out -PortCity_Bridge_UnitW8,PortCity_Bridge_UnitW8 -PortCity_Bridge_UnitN10Out,PortCity_Bridge_UnitN10Out -PortCity_Bridge_UnitN10,PortCity_Bridge_UnitN10 -PortCity_Bridge_UnitS10Out,PortCity_Bridge_UnitS10Out -PortCity_Bridge_UnitS10,PortCity_Bridge_UnitS10 -PortCity_Bridge_UnitE10Out,PortCity_Bridge_UnitE10Out -PortCity_Bridge_UnitE10,PortCity_Bridge_UnitE10 -PortCity_Bridge_UnitW10Out,PortCity_Bridge_UnitW10Out -PortCity_Bridge_UnitW10,PortCity_Bridge_UnitW10 -PortCity_Bridge_UnitN12Out,PortCity_Bridge_UnitN12Out -PortCity_Bridge_UnitN12,PortCity_Bridge_UnitN12 -PortCity_Bridge_UnitS12Out,PortCity_Bridge_UnitS12Out -PortCity_Bridge_UnitS12,PortCity_Bridge_UnitS12 -PortCity_Bridge_UnitE12Out,PortCity_Bridge_UnitE12Out -PortCity_Bridge_UnitE12,PortCity_Bridge_UnitE12 -PortCity_Bridge_UnitW12Out,PortCity_Bridge_UnitW12Out -PortCity_Bridge_UnitW12,PortCity_Bridge_UnitW12 -CarrierLaunchSpeedUpgrade,CarrierLaunchSpeedUpgrade -PhoenixRangeUpgrade,PhoenixRangeUpgrade -Baneling,Baneling -GlialReconstitution,GlialReconstitution -TunnelingClaws,TunnelingClaws -ChitinousPlating,ChitinousPlating -Armory,Armory -Barracks,Barracks -Bunker,Bunker -CommandCenter,CommandCenter -EngineeringBay,EngineeringBay -Factory,Factory -FusionCore,FusionCore -GhostAcademy,GhostAcademy -MissileTurret,MissileTurret -Refinery,Refinery -SensorTower,SensorTower -Starport,Starport -SupplyDepot,SupplyDepot -BarracksReactor,BarracksReactor -BarracksTechLab,BarracksTechLab -FactoryReactor,FactoryReactor -FactoryTechLab,FactoryTechLab -StarportReactor,StarportReactor -StarportTechLab,StarportTechLab -SCV,SCV -Ghost,Ghost -Marauder,Marauder -Marine,Marine -Reaper,Reaper -Cyclone,Cyclone -Hellion,Hellion -HellionTank,HellionTank -SiegeTank,SiegeTank -Thor,Thor -WidowMine,WidowMine -Banshee,Banshee -Battlecruiser,Battlecruiser -Liberator,Liberator -Medivac,Medivac -Raven,Raven -VikingFighter,VikingFighter -HiSecAutoTracking,HiSecAutoTracking -NeosteelFrame,NeosteelFrame -TerranBuildingArmor,TerranBuildingArmor -TerranInfantryArmorsLevel1,TerranInfantryArmorsLevel1 -TerranInfantryArmorsLevel2,TerranInfantryArmorsLevel2 -TerranInfantryArmorsLevel3,TerranInfantryArmorsLevel3 -TerranInfantryWeaponsLevel1,TerranInfantryWeaponsLevel1 -TerranInfantryWeaponsLevel2,TerranInfantryWeaponsLevel2 -TerranInfantryWeaponsLevel3,TerranInfantryWeaponsLevel3 -Nuke,Nuke -PunisherGrenades,PunisherGrenades -ShieldWall,ShieldWall -DrillClaws,DrillClaws -HighCapacityBarrels,HighCapacityBarrels -BansheeSpeed,BansheeSpeed -MedivacIncreaseSpeedBoost,MedivacIncreaseSpeedBoost -RavenCorvidReactor,RavenCorvidReactor -RavenRecalibratedExplosives,RavenRecalibratedExplosives -PersonalCloaking,PersonalCloaking -TerranShipWeaponsLevel1,TerranShipWeaponsLevel1 -TerranShipWeaponsLevel2,TerranShipWeaponsLevel2 -TerranShipWeaponsLevel3,TerranShipWeaponsLevel3 -TerranVehicleAndShipArmorsLevel1,TerranVehicleAndShipArmorsLevel1 -TerranVehicleAndShipArmorsLevel2,TerranVehicleAndShipArmorsLevel2 -TerranVehicleAndShipArmorsLevel3,TerranVehicleAndShipArmorsLevel3 -TerranVehicleWeaponsLevel1,TerranVehicleWeaponsLevel1 -TerranVehicleWeaponsLevel2,TerranVehicleWeaponsLevel2 -TerranVehicleWeaponsLevel3,TerranVehicleWeaponsLevel3 -Assimilator,Assimilator -CyberneticsCore,CyberneticsCore -DarkShrine,DarkShrine -FleetBeacon,FleetBeacon -Forge,Forge -Gateway,Gateway -Nexus,Nexus -PhotonCannon,PhotonCannon -Pylon,Pylon -RoboticsBay,RoboticsBay -RoboticsFacility,RoboticsFacility -Stargate,Stargate -TemplarArchive,TemplarArchive -TwilightCouncil,TwilightCouncil -Adept,Adept -DarkTemplar,DarkTemplar -HighTemplar,HighTemplar -Sentry,Sentry -Stalker,Stalker -Zealot,Zealot -Carrier,Carrier -Oracle,Oracle -Phoenix,Phoenix -Tempest,Tempest -VoidRay,VoidRay -Colossus,Colossus -Disruptor,Disruptor -Immortal,Immortal -Observer,Observer -WarpPrism,WarpPrism -Probe,Probe -Interceptor,Interceptor -ProtossGroundArmorsLevel1,ProtossGroundArmorsLevel1 -ProtossGroundArmorsLevel2,ProtossGroundArmorsLevel2 -ProtossGroundArmorsLevel3,ProtossGroundArmorsLevel3 -ProtossGroundWeaponsLevel1,ProtossGroundWeaponsLevel1 -ProtossGroundWeaponsLevel2,ProtossGroundWeaponsLevel2 -ProtossGroundWeaponsLevel3,ProtossGroundWeaponsLevel3 -ProtossShieldsLevel1,ProtossShieldsLevel1 -ProtossShieldsLevel2,ProtossShieldsLevel2 -ProtossShieldsLevel3,ProtossShieldsLevel3 -ExtendedThermalLance,ExtendedThermalLance -GraviticDrive,GraviticDrive -ObserverGraviticBooster,ObserverGraviticBooster -PsiStormTech,PsiStormTech -BanelingNest,BanelingNest -EvolutionChamber,EvolutionChamber -Extractor,Extractor -Hatchery,Hatchery -HydraliskDen,HydraliskDen -InfestationPit,InfestationPit -NydusNetwork,NydusNetwork -RoachWarren,RoachWarren -SpawningPool,SpawningPool -SpineCrawler,SpineCrawler -Spire,Spire -SporeCrawler,SporeCrawler -UltraliskCavern,UltraliskCavern -ZergGroundArmorsLevel1,ZergGroundArmorsLevel1 -ZergGroundArmorsLevel2,ZergGroundArmorsLevel2 -ZergGroundArmorsLevel3,ZergGroundArmorsLevel3 -ZergMeleeWeaponsLevel1,ZergMeleeWeaponsLevel1 -ZergMeleeWeaponsLevel2,ZergMeleeWeaponsLevel2 -ZergMeleeWeaponsLevel3,ZergMeleeWeaponsLevel3 -ZergMissileWeaponsLevel1,ZergMissileWeaponsLevel1 -ZergMissileWeaponsLevel2,ZergMissileWeaponsLevel2 -ZergMissileWeaponsLevel3,ZergMissileWeaponsLevel3 -Burrow,Burrow -overlordspeed,overlordspeed -zerglingattackspeed,zerglingattackspeed -zerglingmovementspeed,zerglingmovementspeed -EvolveMuscularAugments,EvolveMuscularAugments -ZergFlyerArmorsLevel1,ZergFlyerArmorsLevel1 -ZergFlyerArmorsLevel2,ZergFlyerArmorsLevel2 -ZergFlyerArmorsLevel3,ZergFlyerArmorsLevel3 -ZergFlyerWeaponsLevel1,ZergFlyerWeaponsLevel1 -ZergFlyerWeaponsLevel2,ZergFlyerWeaponsLevel2 -ZergFlyerWeaponsLevel3,ZergFlyerWeaponsLevel3 -Corruptor,Corruptor -Drone,Drone -Hydralisk,Hydralisk -Infestor,Infestor -Mutalisk,Mutalisk -Overlord,Overlord -Roach,Roach -SwarmHostMP,SwarmHostMP -Ultralisk,Ultralisk -Viper,Viper -Zergling,Zergling -InfestorEnergyUpgrade,InfestorEnergyUpgrade -CentrificalHooks,CentrificalHooks -BattlecruiserEnableSpecializations,BattlecruiserEnableSpecializations -ProtossAirArmorsLevel1,ProtossAirArmorsLevel1 -ProtossAirArmorsLevel2,ProtossAirArmorsLevel2 -ProtossAirArmorsLevel3,ProtossAirArmorsLevel3 -ProtossAirWeaponsLevel1,ProtossAirWeaponsLevel1 -ProtossAirWeaponsLevel2,ProtossAirWeaponsLevel2 -ProtossAirWeaponsLevel3,ProtossAirWeaponsLevel3 -WarpGateResearch,WarpGateResearch -AdeptPiercingAttack,AdeptPiercingAttack -BlinkTech,BlinkTech -Queen,Queen -CreepTumorQueen,CreepTumorQueen -CreepTumor,CreepTumor -NydusCanal,NydusCanal -MothershipCore,MothershipCore -DarkTemplarBlink,DarkTemplarBlink -DarkTemplarBlinkUpgrade,DarkTemplarBlinkUpgrade -CarrierTrain,TrainInterceptor -PlanetaryFortressTrain,TrainSCV -LurkerDenMPResearch,ResearchDiggingClaws,ResearchEvolveMuscularAugments -FactoryBuild,BuildFactoryTechLab,BuildFactoryReactor -LairTrain,TrainQueen -HiveTrain,TrainQueen -OrbitalCommandTrain,TrainSCV -HatcheryTrain,TrainQueen -StarportBuild,BuildStarportTechLab,BuildStarportReactor -BarracksBuild,BuildBarracksTechLab,BuildBarracksReactor -FactoryFlyingBuild,BuildFactoryTechLab,BuildFactoryReactor -StarportFlyingBuild,BuildStarportTechLab,BuildStarportReactor -GhostAcademyTrain,TrainNuke -EvolutionChamberResearch,ResearchZergMeleeWeaponsLevel1,ResearchZergMeleeWeaponsLevel2,ResearchZergMeleeWeaponsLevel3,ResearchZergGroundArmorsLevel1,ResearchZergGroundArmorsLevel2,ResearchZergGroundArmorsLevel3,ResearchZergMissileWeaponsLevel1,ResearchZergMissileWeaponsLevel2,ResearchZergMissileWeaponsLevel3 -HiveResearch,,Researchoverlordspeed,,ResearchBurrow -OracleBuild,BuildOracleStasisTrap -GreaterSpireResearch,ResearchZergFlyerWeaponsLevel1,ResearchZergFlyerWeaponsLevel2,ResearchZergFlyerWeaponsLevel3,ResearchZergFlyerArmorsLevel1,ResearchZergFlyerArmorsLevel2,ResearchZergFlyerArmorsLevel3 -DarkShrineResearch,ResearchDarkTemplarBlinkUpgrade -CreepTumorBurrowedBuild,BuildCreepTumor -TemplarArchiveResearch,,,,,ResearchPsiStormTech -VoidRaySwarmDamageBoostCancel,VoidRaySwarmDamageBoostCancel -ZerglingTrain,TrainBaneling -HatcheryResearch,,Researchoverlordspeed,,ResearchBurrow -BarracksFlyingBuild,BuildBarracksTechLab,BuildBarracksReactor -NydusNetworkBuild,BuildNydusCanal -RavenShredderMissile,RavenShredderMissile -RavenRepairDrone,RavenRepairDrone -ObserverSiegeMorphtoObserver,ObserverSiegeMorphtoObserver -OverseerMorphtoOverseerSiegeMode,OverseerMorphtoOverseerSiegeMode -RavenScramblerMissile,RavenScramblerMissile -ShieldBatteryRechargeChanneled,ShieldBatteryRechargeChanneled -OverseerSiegeModeMorphtoOverseer,OverseerSiegeModeMorphtoOverseer -ChronoBoostEnergyCost,ChronoBoostEnergyCost -ObserverMorphtoObserverSiege,ObserverMorphtoObserverSiege -RavenRepairDroneHeal,RavenRepairDroneHeal -NexusMassRecall,NexusMassRecall -OverlordSingleTransport,Load,,UnloadAt -ParasiticBombRelayDodge,ParasiticBombRelayDodge -ViperParasiticBombRelay,ViperParasiticBombRelay diff --git a/sc2reader/data/attributes.json b/sc2reader/data/attributes.json deleted file mode 100644 index 773be8c..0000000 --- a/sc2reader/data/attributes.json +++ /dev/null @@ -1,1574 +0,0 @@ -{ - "attributes": { - "0500": [ - "Controller", - { - "Clsd": "Closed", - "Comp": "Computer", - "Humn": "User", - "Open": "Open" - } - ], - "1000": [ - "Rules", - { - "Dflt": "Default" - } - ], - "1001": [ - "Premade Game", - { - "no": "No", - "yes": "Yes" - } - ], - "2000": [ - "Teams", - { - "CuTa": "Custom Teams Archon", - "Cust": "Custom Teams", - "FFA": "Free For All", - "FFAT": "Free For All Archon", - "t1": "1 Team", - "t10": "10 Teams", - "t11": "11 Teams", - "t2": "2 Teams", - "t3": "3 Teams", - "t4": "4 Teams", - "t5": "5 Teams", - "t6": "6 Teams", - "t7": "7 Teams", - "t8": "8 Teams", - "t9": "9 Teams" - } - ], - "2001": [ - "Teams", - { - "1v1": "1v1", - "2v2": "2v2", - "3v3": "3v3", - "4v4": "4v4", - "5v5": "5v5", - "6v6": "6v6", - "FFA": "FFA" - } - ], - "2002": [ - "Teams1v1", - { - "T1": "Team 1", - "T2": "Team 2" - } - ], - "2003": [ - "Teams2v2", - { - "T1": "Team 1", - "T2": "Team 2" - } - ], - "2004": [ - "Teams3v3", - { - "T1": "Team 1", - "T2": "Team 2" - } - ], - "2005": [ - "Teams4v4", - { - "T1": "Team 1", - "T2": "Team 2" - } - ], - "2006": [ - "TeamsFFA", - { - "T1": "Team 1", - "T10": "Team 10", - "T11": "Team 11", - "T12": "Team 12", - "T13": "Team 13", - "T14": "Team 14", - "T15": "Team 15", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", - "T9": "Team 9" - } - ], - "2007": [ - "Teams5v5", - { - "T1": "Team 1", - "T2": "Team 2" - } - ], - "2008": [ - "Teams6v6", - { - "T1": "Team 1", - "T2": "Team 2" - } - ], - "2010": [ - "Team", - { - "T1": "Team 1" - } - ], - "2011": [ - "Teams7v7", - { - "T1": "Team 1", - "T2": "Team 2" - } - ], - "2012": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3" - } - ], - "2013": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4" - } - ], - "2014": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5" - } - ], - "2015": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6" - } - ], - "2016": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7" - } - ], - "2017": [ - "Team", - { - "T1": "Team 1", - "T10": "Team 10", - "T11": "Team 11", - "T12": "Team 12", - "T13": "Team 13", - "T14": "Team 14", - "T15": "Team 15", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", - "T9": "Team 9" - } - ], - "2018": [ - "Team", - { - "T1": "Team 1", - "T10": "Team 10", - "T11": "Team 11", - "T12": "Team 12", - "T13": "Team 13", - "T14": "Team 14", - "T15": "Team 15", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", - "T9": "Team 9" - } - ], - "2019": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8" - } - ], - "2020": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", - "T9": "Team 9" - } - ], - "2021": [ - "Team", - { - "T1": "Team 1", - "T10": "Team 10", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", - "T9": "Team 9" - } - ], - "2022": [ - "Team", - { - "T1": "Team 1", - "T10": "Team 10", - "T11": "Team 11", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", - "T9": "Team 9" - } - ], - "2023": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6" - } - ], - "2024": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", - "T9": "Team 9", - "T10": "Team 10", - "T11": "Team 11" - } - ], - "3000": [ - "Game Speed", - { - "Fasr": "Faster", - "Fast": "Fast", - "Norm": "Normal", - "Slor": "Slower", - "Slow": "Slow" - } - ], - "3001": [ - "Race", - { - "Prot": "Protoss", - "RAND": "Random", - "Terr": "Terran", - "Zerg": "Zerg" - } - ], - "3002": [ - "Color", - { - "tc01": "Red", - "tc02": "Blue", - "tc03": "Teal", - "tc04": "Purple", - "tc05": "Yellow", - "tc06": "Orange", - "tc07": "Green", - "tc08": "Light Pink", - "tc09": "Violet", - "tc10": "Light Grey", - "tc11": "Dark Green", - "tc12": "Brown", - "tc13": "Light Green", - "tc14": "Dark Grey", - "tc15": "Pink", - "tc16": "??" - } - ], - "3003": [ - "Handicap", - { - "100": "100%", - "50": "50%", - "60": "60%", - "70": "70%", - "80": "80%", - "90": "90%" - } - ], - "3004": [ - "Difficulty", - { - "ChRe": "Cheater 2 (Resources)", - "ChVi": "Cheater 1 (Vision)", - "Easy": "Easy", - "Hard": "Harder", - "HdVH": "Very Hard", - "Insa": "Insane", - "MdHd": "Hard", - "Medi": "Medium", - "VyEy": "Very Easy", - "VyHd": "Elite" - } - ], - "3006": [ - "Lobby Delay", - { - "10": "10", - "15": "15", - "20": "20", - "25": "25", - "3": "3", - "30": "30", - "5": "5", - "7": "7" - } - ], - "3007": [ - "Participant Role", - { - "Part": "Participant", - "Watc": "Observer" - } - ], - "3008": [ - "Observer Type", - { - "Obs": "Spectator", - "Ref": "Referee" - } - ], - "3009": [ - "Game Mode", - { - "": "Single Player", - "Amm": "Ladder", - "Priv": "Private", - "Pub": "Public" - } - ], - "3010": [ - "Locked Alliances", - { - "no": "No", - "yes": "Yes" - } - ], - "3011": [ - "Player Logo Index", - { - "0": "0", - "1": "1", - "10": "10", - "100": "100", - "101": "101", - "102": "102", - "103": "103", - "104": "104", - "105": "105", - "106": "106", - "107": "107", - "108": "108", - "109": "109", - "11": "11", - "110": "110", - "111": "111", - "112": "112", - "113": "113", - "114": "114", - "115": "115", - "116": "116", - "117": "117", - "118": "118", - "119": "119", - "12": "12", - "120": "120", - "121": "121", - "122": "122", - "123": "123", - "124": "124", - "125": "125", - "126": "126", - "127": "127", - "128": "128", - "129": "129", - "13": "13", - "130": "130", - "131": "131", - "132": "132", - "133": "133", - "134": "134", - "135": "135", - "136": "136", - "137": "137", - "138": "138", - "139": "139", - "14": "14", - "140": "140", - "141": "141", - "142": "142", - "143": "143", - "144": "144", - "145": "145", - "146": "146", - "147": "147", - "148": "148", - "149": "149", - "15": "15", - "150": "150", - "151": "151", - "152": "152", - "153": "153", - "154": "154", - "155": "155", - "156": "156", - "157": "157", - "158": "158", - "159": "159", - "16": "16", - "160": "160", - "161": "161", - "162": "162", - "163": "163", - "164": "164", - "165": "165", - "166": "166", - "167": "167", - "168": "168", - "169": "169", - "17": "17", - "170": "170", - "171": "171", - "172": "172", - "173": "173", - "174": "174", - "175": "175", - "176": "176", - "177": "177", - "178": "178", - "179": "179", - "18": "18", - "180": "180", - "181": "181", - "182": "182", - "183": "183", - "184": "184", - "185": "185", - "186": "186", - "187": "187", - "188": "188", - "189": "189", - "19": "19", - "190": "190", - "191": "191", - "192": "192", - "193": "193", - "194": "194", - "195": "195", - "196": "196", - "197": "197", - "198": "198", - "199": "199", - "2": "2", - "20": "20", - "200": "200", - "201": "201", - "202": "202", - "203": "203", - "204": "204", - "205": "205", - "206": "206", - "207": "207", - "208": "208", - "209": "209", - "21": "21", - "210": "210", - "211": "211", - "212": "212", - "213": "213", - "214": "214", - "215": "215", - "216": "216", - "217": "217", - "218": "218", - "219": "219", - "22": "22", - "220": "220", - "221": "221", - "222": "222", - "223": "223", - "224": "224", - "225": "225", - "226": "226", - "227": "227", - "228": "228", - "229": "229", - "23": "23", - "230": "230", - "231": "231", - "232": "232", - "233": "233", - "234": "234", - "235": "235", - "236": "236", - "237": "237", - "238": "238", - "239": "239", - "24": "24", - "240": "240", - "241": "241", - "242": "242", - "243": "243", - "244": "244", - "245": "245", - "246": "246", - "247": "247", - "248": "248", - "249": "249", - "25": "25", - "250": "250", - "251": "251", - "252": "252", - "253": "253", - "254": "254", - "255": "255", - "26": "26", - "27": "27", - "28": "28", - "29": "29", - "3": "3", - "30": "30", - "31": "31", - "32": "32", - "33": "33", - "34": "34", - "35": "35", - "36": "36", - "37": "37", - "38": "38", - "39": "39", - "4": "4", - "40": "40", - "41": "41", - "42": "42", - "43": "43", - "44": "44", - "45": "45", - "46": "46", - "47": "47", - "48": "48", - "49": "49", - "5": "5", - "50": "50", - "51": "51", - "52": "52", - "53": "53", - "54": "54", - "55": "55", - "56": "56", - "57": "57", - "58": "58", - "59": "59", - "6": "6", - "60": "60", - "61": "61", - "62": "62", - "63": "63", - "64": "64", - "65": "65", - "66": "66", - "67": "67", - "68": "68", - "69": "69", - "7": "7", - "70": "70", - "71": "71", - "72": "72", - "73": "73", - "74": "74", - "75": "75", - "76": "76", - "77": "77", - "78": "78", - "79": "79", - "8": "8", - "80": "80", - "81": "81", - "82": "82", - "83": "83", - "84": "84", - "85": "85", - "86": "86", - "87": "87", - "88": "88", - "89": "89", - "9": "9", - "90": "90", - "91": "91", - "92": "92", - "93": "93", - "94": "94", - "95": "95", - "96": "96", - "97": "97", - "98": "98", - "99": "99" - } - ], - "3012": [ - "Tandem Leader Slot", - { - "0": "0", - "1": "1", - "10": "10", - "11": "11", - "12": "12", - "13": "13", - "14": "14", - "15": "15", - "2": "2", - "22": "None", - "3": "3", - "4": "4", - "5": "5", - "6": "6", - "7": "7", - "8": "8", - "9": "9" - } - ], - "3013": [ - "Commander", - { - "": "Pick Commander", - "Abat": "Abathur", - "Alar": "Alarak", - "Arta": "Artanis", - "Deha": "Dehaka", - "Feni": "Fenix", - "Horn": "Horner", - "Kara": "Karax", - "Kerr": "Kerrigan", - "Nova": "Nova", - "Rayn": "Raynor", - "Stuk": "Stukov", - "Swan": "Swann", - "Tych": "Tychus", - "Vora": "Vorazun", - "Zaga": "Zagara", - "Zera": "Zeratul" - } - ], - "3014": [ - "Commander Level", - { - "1": "1", - "10": "10", - "11": "11", - "12": "12", - "13": "13", - "14": "14", - "15": "15", - "16": "16", - "17": "17", - "18": "18", - "19": "19", - "2": "2", - "20": "20", - "3": "3", - "4": "4", - "5": "5", - "6": "6", - "7": "7", - "8": "8", - "9": "9" - } - ], - "3015": [ - "Game Duration", - { - "0": "Infinite", - "120": "120 Minutes", - "15": "15 Minutes", - "25": "25 Minutes", - "30": "30 Minutes", - "45": "45 Minutes", - "5": "5 Minutes", - "60": "60 Minutes", - "90": "90 Minutes" - } - ], - "3102": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3103": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3104": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3105": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3106": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3107": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3108": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3109": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3110": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3111": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3134": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3135": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3136": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3137": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3138": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3139": [ - "AI Build (Terran)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB43": "MarineStim (Timing)", - "AB44": "MarauderHellion (Timing)", - "AB45": "MarineSiege (Timing)", - "AB46": "CloakBanshee (Timing)", - "AB48": "MMM (Aggressive)", - "AB49": "MarineSiege (Aggressive)", - "AB50": "SiegeBanshee (Aggressive)", - "AB51": "HellionSiege (Aggressive)", - "AB52": "SiegeThor (Aggressive)", - "AB54": "BioMMM (Economic)", - "AB55": "Mech (Economic)", - "AB56": "ThorBC (Economic)", - "T070": "MarineStim (Timing)", - "T071": "MarauderHellion (Timing)", - "T072": "MarineSiege (Timing)", - "T073": "CloakBanshee (Timing)", - "T080": "MMM (Aggressive)", - "T081": "MarineSiege (Aggressive)", - "T082": "SiegeBanshee (Aggressive)", - "T083": "HellionSiege (Aggressive)", - "T084": "SiegeThor (Aggressive)", - "T090": "BioMMM (Economic)", - "T091": "Mech (Economic)", - "T092": "ThorBC (Economic)" - } - ], - "3140": [ - "AI Build (Terran)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB43": "MarineStim (Timing)", - "AB44": "MarauderHellion (Timing)", - "AB45": "MarineSiege (Timing)", - "AB46": "CloakBanshee (Timing)", - "AB48": "MMM (Aggressive)", - "AB49": "MarineSiege (Aggressive)", - "AB50": "SiegeBanshee (Aggressive)", - "AB51": "HellionSiege (Aggressive)", - "AB52": "SiegeThor (Aggressive)", - "AB54": "BioMMM (Economic)", - "AB55": "Mech (Economic)", - "AB56": "ThorBC (Economic)", - "T070": "MarineStim (Timing)", - "T071": "MarauderHellion (Timing)", - "T072": "MarineSiege (Timing)", - "T073": "CloakBanshee (Timing)", - "T080": "MMM (Aggressive)", - "T081": "MarineSiege (Aggressive)", - "T082": "SiegeBanshee (Aggressive)", - "T083": "HellionSiege (Aggressive)", - "T084": "SiegeThor (Aggressive)", - "T090": "BioMMM (Economic)", - "T091": "Mech (Economic)", - "T092": "ThorBC (Economic)" - } - ], - "3141": [ - "AI Build (Terran)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB43": "MarineStim (Timing)", - "AB44": "MarauderHellion (Timing)", - "AB45": "MarineSiege (Timing)", - "AB46": "CloakBanshee (Timing)", - "AB48": "MMM (Aggressive)", - "AB49": "MarineSiege (Aggressive)", - "AB50": "SiegeBanshee (Aggressive)", - "AB51": "HellionSiege (Aggressive)", - "AB52": "SiegeThor (Aggressive)", - "AB54": "BioMMM (Economic)", - "AB55": "Mech (Economic)", - "AB56": "ThorBC (Economic)", - "T070": "MarineStim (Timing)", - "T071": "MarauderHellion (Timing)", - "T072": "MarineSiege (Timing)", - "T073": "CloakBanshee (Timing)", - "T080": "MMM (Aggressive)", - "T081": "MarineSiege (Aggressive)", - "T082": "SiegeBanshee (Aggressive)", - "T083": "HellionSiege (Aggressive)", - "T084": "SiegeThor (Aggressive)", - "T090": "BioMMM (Economic)", - "T091": "Mech (Economic)", - "T092": "ThorBC (Economic)" - } - ], - "3142": [ - "AI Build (Terran)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB43": "MarineStim (Timing)", - "AB44": "MarauderHellion (Timing)", - "AB45": "MarineSiege (Timing)", - "AB46": "CloakBanshee (Timing)", - "AB48": "MMM (Aggressive)", - "AB49": "MarineSiege (Aggressive)", - "AB50": "SiegeBanshee (Aggressive)", - "AB51": "HellionSiege (Aggressive)", - "AB52": "SiegeThor (Aggressive)", - "AB54": "BioMMM (Economic)", - "AB55": "Mech (Economic)", - "AB56": "ThorBC (Economic)", - "T070": "MarineStim (Timing)", - "T071": "MarauderHellion (Timing)", - "T072": "MarineSiege (Timing)", - "T073": "CloakBanshee (Timing)", - "T080": "MMM (Aggressive)", - "T081": "MarineSiege (Aggressive)", - "T082": "SiegeBanshee (Aggressive)", - "T083": "HellionSiege (Aggressive)", - "T084": "SiegeThor (Aggressive)", - "T090": "BioMMM (Economic)", - "T091": "Mech (Economic)", - "T092": "ThorBC (Economic)" - } - ], - "3143": [ - "AI Build (Terran)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB43": "MarineStim (Timing)", - "AB44": "MarauderHellion (Timing)", - "AB45": "MarineSiege (Timing)", - "AB46": "CloakBanshee (Timing)", - "AB48": "MMM (Aggressive)", - "AB49": "MarineSiege (Aggressive)", - "AB50": "SiegeBanshee (Aggressive)", - "AB51": "HellionSiege (Aggressive)", - "AB52": "SiegeThor (Aggressive)", - "AB54": "BioMMM (Economic)", - "AB55": "Mech (Economic)", - "AB56": "ThorBC (Economic)", - "T070": "MarineStim (Timing)", - "T071": "MarauderHellion (Timing)", - "T072": "MarineSiege (Timing)", - "T073": "CloakBanshee (Timing)", - "T080": "MMM (Aggressive)", - "T081": "MarineSiege (Aggressive)", - "T082": "SiegeBanshee (Aggressive)", - "T083": "HellionSiege (Aggressive)", - "T084": "SiegeThor (Aggressive)", - "T090": "BioMMM (Economic)", - "T091": "Mech (Economic)", - "T092": "ThorBC (Economic)" - } - ], - "3166": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3167": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3168": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3169": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3170": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3171": [ - "AI Build (Protoss)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB64": "FourGate (Timing)", - "AB65": "StalkerRobo (Timing)", - "AB66": "Blink Stalker (Timing)", - "AB67": "Dark Templar Rush (Timing)", - "AB69": "SevenGate (Aggressive)", - "AB70": "ArchonImmortal (Aggressive)", - "AB71": "Colossi (Aggressive)", - "AB72": "GatewayAir (Aggressive)", - "AB73": "VoidPhoenix (Aggressive)", - "AB75": "GateImmortal (Economic)", - "AB76": "Colossi (Economic)", - "AB77": "GatewayAir (Economic)", - "P110": "WarpGate (Timing)", - "P112": "StalkerRobo (Timing)", - "P113": "Blink Stalker (Timing)", - "P114": "Dark Templar Rush (Timing)", - "P120": "SevenGate (Aggressive)", - "P121": "GateImmortal (Aggressive)", - "P122": "Colossi (Aggressive)", - "P123": "GatewayAir (Aggressive)", - "P124": "VoidPhoenix (Aggressive)", - "P130": "GateImmortal (Economic)", - "P131": "Colossi (Economic)", - "P132": "GatewayAir (Economic)" - } - ], - "3172": [ - "AI Build (Protoss)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB64": "FourGate (Timing)", - "AB65": "StalkerRobo (Timing)", - "AB66": "Blink Stalker (Timing)", - "AB67": "Dark Templar Rush (Timing)", - "AB69": "SevenGate (Aggressive)", - "AB70": "ArchonImmortal (Aggressive)", - "AB71": "Colossi (Aggressive)", - "AB72": "GatewayAir (Aggressive)", - "AB73": "VoidPhoenix (Aggressive)", - "AB75": "GateImmortal (Economic)", - "AB76": "Colossi (Economic)", - "AB77": "GatewayAir (Economic)", - "P110": "WarpGate (Timing)", - "P112": "StalkerRobo (Timing)", - "P113": "Blink Stalker (Timing)", - "P114": "Dark Templar Rush (Timing)", - "P120": "SevenGate (Aggressive)", - "P121": "GateImmortal (Aggressive)", - "P122": "Colossi (Aggressive)", - "P123": "GatewayAir (Aggressive)", - "P124": "VoidPhoenix (Aggressive)", - "P130": "GateImmortal (Economic)", - "P131": "Colossi (Economic)", - "P132": "GatewayAir (Economic)" - } - ], - "3173": [ - "AI Build (Protoss)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB64": "FourGate (Timing)", - "AB65": "StalkerRobo (Timing)", - "AB66": "Blink Stalker (Timing)", - "AB67": "Dark Templar Rush (Timing)", - "AB69": "SevenGate (Aggressive)", - "AB70": "ArchonImmortal (Aggressive)", - "AB71": "Colossi (Aggressive)", - "AB72": "GatewayAir (Aggressive)", - "AB73": "VoidPhoenix (Aggressive)", - "AB75": "GateImmortal (Economic)", - "AB76": "Colossi (Economic)", - "AB77": "GatewayAir (Economic)", - "P110": "WarpGate (Timing)", - "P112": "StalkerRobo (Timing)", - "P113": "Blink Stalker (Timing)", - "P114": "Dark Templar Rush (Timing)", - "P120": "SevenGate (Aggressive)", - "P121": "GateImmortal (Aggressive)", - "P122": "Colossi (Aggressive)", - "P123": "GatewayAir (Aggressive)", - "P124": "VoidPhoenix (Aggressive)", - "P130": "GateImmortal (Economic)", - "P131": "Colossi (Economic)", - "P132": "GatewayAir (Economic)" - } - ], - "3174": [ - "AI Build (Protoss)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB64": "FourGate (Timing)", - "AB65": "StalkerRobo (Timing)", - "AB66": "Blink Stalker (Timing)", - "AB67": "Dark Templar Rush (Timing)", - "AB69": "SevenGate (Aggressive)", - "AB70": "ArchonImmortal (Aggressive)", - "AB71": "Colossi (Aggressive)", - "AB72": "GatewayAir (Aggressive)", - "AB73": "VoidPhoenix (Aggressive)", - "AB75": "GateImmortal (Economic)", - "AB76": "Colossi (Economic)", - "AB77": "GatewayAir (Economic)", - "P110": "WarpGate (Timing)", - "P112": "StalkerRobo (Timing)", - "P113": "Blink Stalker (Timing)", - "P114": "Dark Templar Rush (Timing)", - "P120": "SevenGate (Aggressive)", - "P121": "GateImmortal (Aggressive)", - "P122": "Colossi (Aggressive)", - "P123": "GatewayAir (Aggressive)", - "P124": "VoidPhoenix (Aggressive)", - "P130": "GateImmortal (Economic)", - "P131": "Colossi (Economic)", - "P132": "GatewayAir (Economic)" - } - ], - "3175": [ - "AI Build (Protoss)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB64": "FourGate (Timing)", - "AB65": "StalkerRobo (Timing)", - "AB66": "Blink Stalker (Timing)", - "AB67": "Dark Templar Rush (Timing)", - "AB69": "SevenGate (Aggressive)", - "AB70": "ArchonImmortal (Aggressive)", - "AB71": "Colossi (Aggressive)", - "AB72": "GatewayAir (Aggressive)", - "AB73": "VoidPhoenix (Aggressive)", - "AB75": "GateImmortal (Economic)", - "AB76": "Colossi (Economic)", - "AB77": "GatewayAir (Economic)", - "P110": "WarpGate (Timing)", - "P112": "StalkerRobo (Timing)", - "P113": "Blink Stalker (Timing)", - "P114": "Dark Templar Rush (Timing)", - "P120": "SevenGate (Aggressive)", - "P121": "GateImmortal (Aggressive)", - "P122": "Colossi (Aggressive)", - "P123": "GatewayAir (Aggressive)", - "P124": "VoidPhoenix (Aggressive)", - "P130": "GateImmortal (Economic)", - "P131": "Colossi (Economic)", - "P132": "GatewayAir (Economic)" - } - ], - "3198": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3199": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3200": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3201": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3202": [ - "AI Build", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air" - } - ], - "3203": [ - "AI Build (Zerg)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB23": "BaneLing Bust (Timing)", - "AB24": "Roach Rush (Timing)", - "AB25": "LingRoach (Timing)", - "AB27": "Pure Mutalisk (Aggressive)", - "AB28": "MutaLing (Aggressive)", - "AB29": "RoachAttack (Aggressive)", - "AB30": "RoachInfestor (Aggressive)", - "AB31": "RoachHydra (Aggressive)", - "AB34": "Infestor (Economic)", - "AB35": "Ultralisk (Economic)", - "AB36": "Brood Lord (Economic)", - "Z030": "BaneLing Bust (Timing)", - "Z031": "Roach Rush (Timing)", - "Z032": "LingRoach (Timing)", - "Z040": "Mutalisk (Aggressive)", - "Z041": "MutaLing (Aggressive)", - "Z042": "RoachAttack (Aggressive)", - "Z043": "RoachInfestor (Aggressive)", - "Z044": "RoachHydra (Aggressive)", - "Z050": "Infestor (Economic)", - "Z052": "Ultralisk (Economic)", - "Z053": "Brood Lord (Economic)" - } - ], - "3204": [ - "AI Build (Zerg)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB23": "BaneLing Bust (Timing)", - "AB24": "Roach Rush (Timing)", - "AB25": "LingRoach (Timing)", - "AB27": "Pure Mutalisk (Aggressive)", - "AB28": "MutaLing (Aggressive)", - "AB29": "RoachAttack (Aggressive)", - "AB30": "RoachInfestor (Aggressive)", - "AB31": "RoachHydra (Aggressive)", - "AB34": "Infestor (Economic)", - "AB35": "Ultralisk (Economic)", - "AB36": "Brood Lord (Economic)", - "Z030": "BaneLing Bust (Timing)", - "Z031": "Roach Rush (Timing)", - "Z032": "LingRoach (Timing)", - "Z040": "Mutalisk (Aggressive)", - "Z041": "MutaLing (Aggressive)", - "Z042": "RoachAttack (Aggressive)", - "Z043": "RoachInfestor (Aggressive)", - "Z044": "RoachHydra (Aggressive)", - "Z050": "Infestor (Economic)", - "Z052": "Ultralisk (Economic)", - "Z053": "Brood Lord (Economic)" - } - ], - "3205": [ - "AI Build (Zerg)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB23": "BaneLing Bust (Timing)", - "AB24": "Roach Rush (Timing)", - "AB25": "LingRoach (Timing)", - "AB27": "Pure Mutalisk (Aggressive)", - "AB28": "MutaLing (Aggressive)", - "AB29": "RoachAttack (Aggressive)", - "AB30": "RoachInfestor (Aggressive)", - "AB31": "RoachHydra (Aggressive)", - "AB34": "Infestor (Economic)", - "AB35": "Ultralisk (Economic)", - "AB36": "Brood Lord (Economic)", - "Z030": "BaneLing Bust (Timing)", - "Z031": "Roach Rush (Timing)", - "Z032": "LingRoach (Timing)", - "Z040": "Mutalisk (Aggressive)", - "Z041": "MutaLing (Aggressive)", - "Z042": "RoachAttack (Aggressive)", - "Z043": "RoachInfestor (Aggressive)", - "Z044": "RoachHydra (Aggressive)", - "Z050": "Infestor (Economic)", - "Z052": "Ultralisk (Economic)", - "Z053": "Brood Lord (Economic)" - } - ], - "3206": [ - "AI Build (Zerg)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB23": "BaneLing Bust (Timing)", - "AB24": "Roach Rush (Timing)", - "AB25": "LingRoach (Timing)", - "AB27": "Pure Mutalisk (Aggressive)", - "AB28": "MutaLing (Aggressive)", - "AB29": "RoachAttack (Aggressive)", - "AB30": "RoachInfestor (Aggressive)", - "AB31": "RoachHydra (Aggressive)", - "AB34": "Infestor (Economic)", - "AB35": "Ultralisk (Economic)", - "AB36": "Brood Lord (Economic)", - "Z030": "BaneLing Bust (Timing)", - "Z031": "Roach Rush (Timing)", - "Z032": "LingRoach (Timing)", - "Z040": "Mutalisk (Aggressive)", - "Z041": "MutaLing (Aggressive)", - "Z042": "RoachAttack (Aggressive)", - "Z043": "RoachInfestor (Aggressive)", - "Z044": "RoachHydra (Aggressive)", - "Z050": "Infestor (Economic)", - "Z052": "Ultralisk (Economic)", - "Z053": "Brood Lord (Economic)" - } - ], - "3207": [ - "AI Build (Zerg)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB23": "BaneLing Bust (Timing)", - "AB24": "Roach Rush (Timing)", - "AB25": "LingRoach (Timing)", - "AB27": "Pure Mutalisk (Aggressive)", - "AB28": "MutaLing (Aggressive)", - "AB29": "RoachAttack (Aggressive)", - "AB30": "RoachInfestor (Aggressive)", - "AB31": "RoachHydra (Aggressive)", - "AB34": "Infestor (Economic)", - "AB35": "Ultralisk (Economic)", - "AB36": "Brood Lord (Economic)", - "Z030": "BaneLing Bust (Timing)", - "Z031": "Roach Rush (Timing)", - "Z032": "LingRoach (Timing)", - "Z040": "Mutalisk (Aggressive)", - "Z041": "MutaLing (Aggressive)", - "Z042": "RoachAttack (Aggressive)", - "Z043": "RoachInfestor (Aggressive)", - "Z044": "RoachHydra (Aggressive)", - "Z050": "Infestor (Economic)", - "Z052": "Ultralisk (Economic)", - "Z053": "Brood Lord (Economic)" - } - ], - "4000": [ - "Game Privacy", - { - "NoBO": "No Build Order", - "NoMH": "No Match History", - "Norm": "Normal" - } - ], - "4001": [ - "Using Custom Observer UI", - { - "no": "Not Using Custom Observer UI", - "yes": "Using Custom Observer UI" - } - ], - "4005": [ - "Ready", - { - "no": "Not Ready", - "yes": "Ready" - } - ] - }, - "decisions": "(dp0\nc__builtin__\nfrozenset\np1\n((lp2\nS'Hard'\np3\naVHarder\np4\na(I3004\nS'Hard'\np5\ntp6\natp7\nRp8\ng4\nsg1\n((lp9\n(I2001\nS'1v1'\np10\ntp11\naS'1 v 1'\np12\naV1v1\np13\natp14\nRp15\ng13\nsg1\n((lp16\n(I3104\nS'AB04'\np17\ntp18\naS'Agressive Push'\np19\naVAggressive Push\np20\natp21\nRp22\ng20\nsg1\n((lp23\nS'Agressive Push'\np24\naVAggressive Push\np25\na(I3199\nS'AB04'\np26\ntp27\natp28\nRp29\ng25\nsg1\n((lp30\nV6v6\np31\naS'6 v 6'\np32\na(I2001\nS'6v6'\np33\ntp34\natp35\nRp36\ng31\nsg1\n((lp37\nS'Agressive Push'\np38\na(I3102\nS'AB04'\np39\ntp40\naVAggressive Push\np41\natp42\nRp43\ng41\nsg1\n((lp44\nI2003\naVTeams2v2\np45\naS'Team'\np46\natp47\nRp48\ng45\nsg1\n((lp49\nVLadder\np50\naS'Automated Match Making'\np51\na(I3009\nS'Amm'\np52\ntp53\natp54\nRp55\ng50\nsg1\n((lp56\n(I2001\nS'5v5'\np57\ntp58\naS'5 v 5'\np59\naV5v5\np60\natp61\nRp62\ng60\nsg1\n((lp63\nVFree For All Teams\np64\naS'Free For All Archon'\np65\na(I2000\nVFFAT\np66\ntp67\natp68\nRp69\ng65\nsg1\n((lp70\nI3141\naVAI Build (Terran)\np71\naS'AI Build'\np72\natp73\nRp74\ng71\nsg1\n((lp75\n(I2001\nS'3v3'\np76\ntp77\naS'3 v 3'\np78\naV3v3\np79\natp80\nRp81\ng79\nsg1\n((lp82\n(I3168\nS'AB04'\np83\ntp84\naS'Agressive Push'\np85\naVAggressive Push\np86\natp87\nRp88\ng86\nsg1\n((lp89\n(I3200\nS'AB04'\np90\ntp91\naS'Agressive Push'\np92\naVAggressive Push\np93\natp94\nRp95\ng93\nsg1\n((lp96\nVAI Build (Protoss)\np97\naI3174\naS'AI Build'\np98\natp99\nRp100\ng97\nsg1\n((lp101\nS'Very Hard'\np102\naVElite\np103\na(I3004\nS'VyHd'\np104\ntp105\natp106\nRp107\ng103\nsg1\n((lp108\nS'Agressive Push'\np109\naVAggressive Push\np110\na(I3167\nS'AB04'\np111\ntp112\natp113\nRp114\ng110\nsg1\n((lp115\nI3204\naS'AI Build'\np116\naVAI Build (Zerg)\np117\natp118\nRp119\ng117\nsg1\n((lp120\nVInsane\np121\naS'Cheater 3 (Insane)'\np122\na(I3004\nS'Insa'\np123\ntp124\natp125\nRp126\ng121\nsg1\n((lp127\n(I3007\nS'Watc'\np128\ntp129\naS'Observer'\np130\naS'Watcher'\np131\natp132\nRp133\ng130\nsg1\n((lp134\nI3205\naVAI Build (Zerg)\np135\naS'AI Build'\np136\natp137\nRp138\ng135\nsg1\n((lp139\nVTeams5v5\np140\naS'Team'\np141\naI2007\natp142\nRp143\ng140\nsg1\n((lp144\nI3171\naVAI Build (Protoss)\np145\naS'AI Build'\np146\natp147\nRp148\ng145\nsg1\n((lp149\nS'Unknown'\np150\naI2012\naS'Team'\np151\natp152\nRp153\ng151\nsg1\n((lp154\nI3173\naS'AI Build'\np155\naVAI Build (Protoss)\np156\natp157\nRp158\ng156\nsg1\n((lp159\nVAI Build (Terran)\np160\naI3142\naS'AI Build'\np161\natp162\nRp163\ng160\nsg1\n((lp164\nI3172\naVAI Build (Protoss)\np165\naS'AI Build'\np166\natp167\nRp168\ng165\nsg1\n((lp169\nS'Level 1 (Very Easy)'\np170\na(I3004\nS'VyEy'\np171\ntp172\naVVery Easy\np173\natp174\nRp175\ng173\nsg1\n((lp176\nS'Agressive Push'\np177\naVAggressive Push\np178\na(I3135\nS'AB04'\np179\ntp180\natp181\nRp182\ng178\nsg1\n((lp183\nV2v2\np184\naS'2 v 2'\np185\na(I2001\nS'2v2'\np186\ntp187\natp188\nRp189\ng184\nsg1\n((lp190\nS'Agressive Push'\np191\na(I3166\nS'AB04'\np192\ntp193\naVAggressive Push\np194\natp195\nRp196\ng194\nsg1\n((lp197\nVTeamsFFA\np198\naI2006\naS'Team'\np199\natp200\nRp201\ng198\nsg1\n((lp202\nS'AI Build'\np203\naVAI Build (Terran)\np204\naI3143\natp205\nRp206\ng204\nsg1\n((lp207\nVTeams7v7\np208\naI2011\naS'Team'\np209\natp210\nRp211\ng208\nsg1\n((lp212\nVMedium\np213\naS'Level 3 (Medium)'\np214\na(I3004\nS'Medi'\np215\ntp216\natp217\nRp218\ng213\nsg1\n((lp219\nI3140\naS'AI Build'\np220\naVAI Build (Terran)\np221\natp222\nRp223\ng221\nsg1\n((lp224\nVTeams4v4\np225\naI2005\naS'Team'\np226\natp227\nRp228\ng225\nsg1\n((lp229\nS'Agressive Push'\np230\na(I3198\nS'AB04'\np231\ntp232\naVAggressive Push\np233\natp234\nRp235\ng233\nsg1\n((lp236\n(I3136\nS'AB04'\np237\ntp238\naS'Agressive Push'\np239\naVAggressive Push\np240\natp241\nRp242\ng240\nsg1\n((lp243\nI2008\naVTeams6v6\np244\naS'Team'\np245\natp246\nRp247\ng244\nsg1\n((lp248\nS'Agressive Push'\np249\naVAggressive Push\np250\na(I3103\nS'AB04'\np251\ntp252\natp253\nRp254\ng250\nsg1\n((lp255\nV4v4\np256\naS'4 v 4'\np257\na(I2001\nS'4v4'\np258\ntp259\natp260\nRp261\ng256\nsg1\n((lp262\nS'Agressive Push'\np263\na(I3134\nS'AB04'\np264\ntp265\naVAggressive Push\np266\natp267\nRp268\ng266\nsg1\n((lp269\nVTeams1v1\np270\naI2002\naS'Team'\np271\natp272\nRp273\ng270\nsg1\n((lp274\nI3139\naS'AI Build'\np275\naVAI Build (Terran)\np276\natp277\nRp278\ng276\nsg1\n((lp279\nS'AI Build'\np280\naVAI Build (Zerg)\np281\naI3207\natp282\nRp283\ng281\nsg1\n((lp284\n(I2001\nS'FFA'\np285\ntp286\naS'Free For All'\np287\naVFFA\np288\natp289\nRp290\ng288\nsg1\n((lp291\nVAI Build (Zerg)\np292\naI3206\naS'AI Build'\np293\natp294\nRp295\ng292\nsg1\n((lp296\nVTeams3v3\np297\naI2004\naS'Team'\np298\natp299\nRp300\ng297\nsg1\n((lp301\nVAI Build (Protoss)\np302\naS'AI Build'\np303\naI3175\natp304\nRp305\ng302\nsg1\n((lp306\nS'Level 2 (Easy)'\np307\na(I3004\nS'Easy'\np308\ntp309\naVEasy\np310\natp311\nRp312\ng310\nsg1\n((lp313\nI3203\naS'AI Build'\np314\naVAI Build (Zerg)\np315\natp316\nRp317\ng315\ns." -} diff --git a/sc2reader/data/command_lookup.csv b/sc2reader/data/command_lookup.csv deleted file mode 100644 index 2eccf21..0000000 --- a/sc2reader/data/command_lookup.csv +++ /dev/null @@ -1,268 +0,0 @@ -CAbilEffect|||||||||||||||||||||||||||||||| -CAbilQueueable|||||||||||||||||||||||||||||||| -CAbilProgress|||||||||||||||||||||||||||||||| -CAbilRedirect|||||||||||||||||||||||||||||||| -CAbilArmMagazine|||||||||||||||||||||||||||||||| -CAbilAttack|||||||||||||||||||||||||||||||| -CAbilAugment|||||||||||||||||||||||||||||||| -CAbilBattery|||||||||||||||||||||||||||||||| -CAbilBeacon|||||||||||||||||||||||||||||||| -CAbilBehavior|||||||||||||||||||||||||||||||| -CAbilBuild|||||||||||||||||||||||||||||||| -CAbilBuildable|||||||||||||||||||||||||||||||| -CAbilEffectInstant|||||||||||||||||||||||||||||||| -CAbilEffectTarget|||||||||||||||||||||||||||||||| -CAbilHarvest|||||||||||||||||||||||||||||||| -CAbilInteract|||||||||||||||||||||||||||||||| -CAbilInventory|||||||||||||||||||||||||||||||| -CAbilLearn|||||||||||||||||||||||||||||||| -CAbilMerge|||||||||||||||||||||||||||||||| -CAbilMergeable|||||||||||||||||||||||||||||||| -CAbilMorph|||||||||||||||||||||||||||||||| -CAbilMorphPlacement|||||||||||||||||||||||||||||||| -CAbilMove|||||||||||||||||||||||||||||||| -CAbilPawn|||||||||||||||||||||||||||||||| -CAbilQueue|||||||||||||||||||||||||||||||| -CAbilRally|||||||||||||||||||||||||||||||| -CAbilResearch|||||||||||||||||||||||||||||||| -CAbilRevive|||||||||||||||||||||||||||||||| -CAbilSpecialize|||||||||||||||||||||||||||||||| -CAbilStop|||||||||||||||||||||||||||||||| -CAbilTrain|||||||||||||||||||||||||||||||| -CAbilTransport|||||||||||||||||||||||||||||||| -CAbilWarpable|||||||||||||||||||||||||||||||| -CAbilWarpTrain|||||||||||||||||||||||||||||||| -Taunt|Taunt|Cancel|||||||||||||||||||||||||||||| -stop|Stop|HoldFire|Taunt|Taunt|||||||||||||||||||||||||||| -HoldFire|Stop|HoldFire|Taunt|Taunt|||||||||||||||||||||||||||| -move|Move|Patrol|HoldPosition|Move|Move||||||||||||||||||||||||||| -Beacon|||||||||||||||||||||||||||||||| -ReviveSelf|||||||||||||||||||||||||||||||| -ReviveSelfAtTarget|||||||||||||||||||||||||||||||| -ReviveSelfReplaceTarget|||||||||||||||||||||||||||||||| -ReviveSelfOnCreep|||||||||||||||||||||||||||||||| -attack|Attack||||||||||||||||||||||||||||||| -MetalGateDefaultLower|||||||||||||||||||||||||||||||| -MetalGateDefaultRaise|||||||||||||||||||||||||||||||| -TerranAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding| -TerranBuildingLiftOff|||||||||||||||||||||||||||||||| -TerranBuildingLand|||||||||||||||||||||||||||||||| -Refund|||||||||||||||||||||||||||||||| -Salvage|||||||||||||||||||||||||||||||| -DisguiseChangeling|||||||||||||||||||||||||||||||| -SalvageShared|||||||||||||||||||||||||||||||| -Corruption|CorruptorCorruption||||||||||||||||||||||||||||||| -GhostHoldFire|GhostHoldFire||||||||||||||||||||||||||||||| -GhostWeaponsFree|GhostWeaponsFree||||||||||||||||||||||||||||||| -MorphToInfestedTerran|||||||||||||||||||||||||||||||| -Explode|BanelingExplode||||||||||||||||||||||||||||||| -FleetBeaconResearch|ResearchFluxVanes|ResearchCarrierWeaponSpeed|ResearchPhoenixRange||||||||||||||||||||||||||||CancelResearch| -FungalGrowth|InfestorFungalGrowth||||||||||||||||||||||||||||||| -GuardianShield|SentryGuardianShield||||||||||||||||||||||||||||||| -MULERepair|MULERepair|CancelChannel|||||||||||||||||||||||||||||| -MorphZerglingToBaneling|MorphToBaneling|CancelMorph|||||||||||||||||||||||||||||| -NexusTrainMothership|TrainMothership||||||||||||||||||||||||||||||CancelTrain| -Feedback|HighTemplarFeedback||||||||||||||||||||||||||||||| -MassRecall|MothershipMassRecall||||||||||||||||||||||||||||||| -PlacePointDefenseDrone|RavenBuildPointDefenseDrone||||||||||||||||||||||||||||||| -HallucinationArchon|SentryHallucinationArchon||||||||||||||||||||||||||||||| -HallucinationColossus|SentryHallucinationColossus||||||||||||||||||||||||||||||| -HallucinationHighTemplar|SentryHallucinationHighTemplar||||||||||||||||||||||||||||||| -HallucinationImmortal|SentryHallucinationImmortal||||||||||||||||||||||||||||||| -HallucinationPhoenix|SentryHallucinationPhoenix||||||||||||||||||||||||||||||| -HallucinationProbe|SentryHallucinationProbe||||||||||||||||||||||||||||||| -HallucinationStalker|SentryHallucinationStalker||||||||||||||||||||||||||||||| -HallucinationVoidRay|SentryHallucinationVoidRay||||||||||||||||||||||||||||||| -HallucinationWarpPrism|SentryHallucinationWarpPrism||||||||||||||||||||||||||||||| -HallucinationZealot|SentryHallucinationZealot||||||||||||||||||||||||||||||| -MULEGather|Gather|ReturnCargo|Cancel||||||||||||||||||||||||||||| -SeekerMissile|RavenSeekerMissile||||||||||||||||||||||||||||||| -CalldownMULE|CalldownMULE||||||||||||||||||||||||||||||| -GravitonBeam|PhoenixGravitonBeam|CancelChannel|||||||||||||||||||||||||||||| -BuildinProgressNydusCanal|CancelBuilding|CancelBuilding|||||||||||||||||||||||||||||| -Siphon|||||||||||||||||||||||||||||||| -Leech|||||||||||||||||||||||||||||||| -SpawnChangeling|OverseerSpawnChangeling||||||||||||||||||||||||||||||| -DisguiseAsZealot|||||||||||||||||||||||||||||||| -DisguiseAsMarineWithShield|||||||||||||||||||||||||||||||| -DisguiseAsMarineWithoutShield|||||||||||||||||||||||||||||||| -DisguiseAsZerglingWithWings|||||||||||||||||||||||||||||||| -DisguiseAsZerglingWithoutWings|||||||||||||||||||||||||||||||| -PhaseShift|||||||||||||||||||||||||||||||| -Rally|SetUnitRally||||||||||||||||||||||||||||||| -ProgressRally|SetUnitRally||||||||||||||||||||||||||||||| -RallyCommand|SetWorkerRally||||||||||||||||||||||||||||||| -RallyNexus|SetUnitRally||||||||||||||||||||||||||||||| -RallyHatchery|SetUnitRally|SetWorkerRally|||||||||||||||||||||||||||||| -RoachWarrenResearch|Unknown|ResearchRoachSpeed|ResearchRoachTunnelingClaws||||||||||||||||||||||||||||| -SapStructure|||||||||||||||||||||||||||||||| -InfestedTerrans|InfestorSpawnInfestedTerran||||||||||||||||||||||||||||||| -NeuralParasite|InfestorNeuralParasite||||||||||||||||||||||||||||||| -SpawnLarva|QueenSpawnLarva||||||||||||||||||||||||||||||| -StimpackMarauder|UseStimpack||||||||||||||||||||||||||||||| -SupplyDrop|CalldownSupply||||||||||||||||||||||||||||||| -250mmStrikeCannons|ThorStrikeCannons||||||||||||||||||||||||||||||| -TemporalRift|||||||||||||||||||||||||||||||| -TimeWarp|NexusChronoBoost||||||||||||||||||||||||||||||| -UltraliskCavernResearch|Unknown|Unknown|ResearchUltraliskArmor||||||||||||||||||||||||||||| -WormholeTransit|||||||||||||||||||||||||||||||| -SCVHarvest|Gather|ReturnCargo|Cancel||||||||||||||||||||||||||||| -ProbeHarvest|Gather|ReturnCargo|Cancel||||||||||||||||||||||||||||| -AttackWarpPrism|Attack||||||||||||||||||||||||||||||| -que1|CancelQueue|CancelQueue|||||||||||||||||||||||||||||| -que5|CancelQueue|CancelQueue|||||||||||||||||||||||||||||| -que5CancelToSelection|||||||||||||||||||||||||||||||| -que5LongBlend|CancelQueue|CancelQueue|||||||||||||||||||||||||||||| -que5Addon|CancelQueue|CancelQueue|||||||||||||||||||||||||||||| -BuildInProgress|CancelBuilding|CancelBuilding|||||||||||||||||||||||||||||| -Repair|SCVRepair||||||||||||||||||||||||||||||| -TerranBuild|BuildCommandCenter|BuildSupplyDepot|BuildRefinery|BuildBarracks|BuildEngineeringBay|BuildMissileTurret|BuildBunker||BuildSensorTower|BuildGhostAcademy|BuildFactory|BuildStarport||BuildArmory||BuildFusionCore|||||||||||||||CancelBuilding| -RavenBuild|RavenBuildAutoTurret||||||||||||||||||||||||||||||CancelBuilding| -Stimpack|UseStimpack||||||||||||||||||||||||||||||| -GhostCloak|GhostCloak|GhostDecloak|||||||||||||||||||||||||||||| -Snipe|GhostSnipe||||||||||||||||||||||||||||||| -MedivacHeal|MedivacHeal||||||||||||||||||||||||||||||| -SiegeMode|SiegeTankSiege||||||||||||||||||||||||||||||| -Unsiege|SiegeTankUnsiege||||||||||||||||||||||||||||||| -BansheeCloak|BansheeCloak|BansheeDecloak|||||||||||||||||||||||||||||| -MedivacTransport|MedivacLoad|MedivacUnloadAll|MedivacUnloadAll|MedivacUnload|MedivacLoad||||||||||||||||||||||||||| -ScannerSweep|CalldownScannerSweep||||||||||||||||||||||||||||||| -Yamato|BattlecruiserYamato||||||||||||||||||||||||||||||| -AssaultMode|VikingLand||||||||||||||||||||||||||||||| -FighterMode|VikingLift||||||||||||||||||||||||||||||| -BunkerTransport|BunkerLoad|BunkerUnloadAll|BunkerUnload|BunkerUnload|BunkerLoad||||||||||||||||||||||||||| -CommandCenterTransport|CommandCenterLoad|CommandCenterUnloadAll|CommandCenterUnload|CommandCenterUnload|CommandCenterLoad||||||||||||||||||||||||||| -CommandCenterLiftOff|LiftCommandCenter||||||||||||||||||||||||||||||| -CommandCenterLand|LandCommandCenter||||||||||||||||||||||||||||||| -BarracksAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding| -BarracksLiftOff|LiftBarracks||||||||||||||||||||||||||||||| -FactoryAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding| -FactoryLiftOff|LiftFactory||||||||||||||||||||||||||||||| -StarportAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding| -StarportLiftOff|LiftStarport||||||||||||||||||||||||||||||| -FactoryLand|LandFactory||||||||||||||||||||||||||||||| -StarportLand|LandStarport||||||||||||||||||||||||||||||| -CommandCenterTrain|TrainSCV||||||||||||||||||||||||||||||CancelTrain| -BarracksLand|LandBarracks||||||||||||||||||||||||||||||| -SupplyDepotLower|SupplyDepotLower||||||||||||||||||||||||||||||| -SupplyDepotRaise|SupplyDepotRaise||||||||||||||||||||||||||||||| -BarracksTrain|TrainMarine|TrainReaper|TrainGhost|TrainMarauder|||||||||||||||||||||||||||CancelTrain| -FactoryTrain|Unknown|TrainSiegeTank|||TrainThor|TrainHellion|||||||||||||||||||||||||CancelTrain| -StarportTrain|TrainMedivac|TrainBanshee|TrainRaven|TrainBattlecruiser|TrainViking||||||||||||||||||||||||||CancelTrain| -EngineeringBayResearch|ResearchHiSecAutoTracking|ResearchTerranBuildingArmor|ResearchTerranInfantryWeapons1|ResearchTerranInfantryWeapons2|ResearchTerranInfantryWeapons3|ResearchNeosteelFrame|ResearchTerranInfantryArmors1|ResearchTerranInfantryArmors2|ResearchTerranInfantryArmors3||||||||||||||||||||||CancelResearch| -MercCompoundResearch|||||||||||||||||||||||||||||||| -ArmSiloWithNuke|ArmNuke||||||||||||||||||||||||||||||| -BarracksTechLabResearch|ResearchStimpack|ResearchCombatShields|ResearchPunisherGrenades||||||||||||||||||||||||||||CancelResearch| -FactoryTechLabResearch|ResearchSiegeTech|ResearchBlueFlame|ResearchStrikeCannons||||||||||||||||||||||||||||CancelResearch| -StarportTechLabResearch|ResearchBansheeCloak||ResearchMedivacEnergy|ResearchRavenEnergy|||ResearchSeekerMissile|ResearchDurableMaterials|||||||||||||||||||||||CancelResearch| -GhostAcademyResearch|ResearchGhostCloak|ResearchGhostEnergy|||||||||||||||||||||||||||||CancelResearch| -ArmoryResearch|||ResearchTerranVehicleArmors1|ResearchTerranVehicleArmors2|ResearchTerranVehicleArmors3|ResearchTerranVehicleWeapons1|ResearchTerranVehicleWeapons2|ResearchTerranVehicleWeapons3|ResearchTerranShipArmors1|ResearchTerranShipArmors2|ResearchTerranShipArmors3|ResearchTerranShipWeapons1|ResearchTerranShipWeapons2|ResearchTerranShipWeapons3|||||||||||||||||CancelResearch| -ProtossBuild|BuildNexus|BuildPylon|BuildAssimilator|BuildGateway|BuildForge|BuildFleetBeacon|BuildTwilightCouncil|BuildPhotonCannon||BuildStargate|BuildTemplarArchive|BuildDarkShrine|BuildRoboticsBay|BuildRoboticsFacility|BuildCyberneticsCore||||||||||||||||CancelBuilding| -WarpPrismTransport|WarpPrismLoad|WarpPrismUnloadAll|WarpPrismUnloadAll|WarpPrismUnload|WarpPrismLoad||||||||||||||||||||||||||| -GatewayTrain|TrainZealot|TrainStalker||TrainHighTemplar|TrainDarkTemplar|TrainSentry|||||||||||||||||||||||||CancelTrain| -StargateTrain|TrainPhoenix||TrainCarrier||TrainVoidRay||||||||||||||||||||||||||CancelTrain| -RoboticsFacilityTrain|TrainWarpPrism|TrainObserver|TrainColossus|TrainImmortal|||||||||||||||||||||||||||CancelTrain| -NexusTrain|TrainProbe||||||||||||||||||||||||||||||CancelTrain| -PsiStorm|HighTemplarPsiStorm||||||||||||||||||||||||||||||| -HangarQueue5|CancelQueue|CancelQueue|||||||||||||||||||||||||||||| -BroodLordQueue2|CancelQueue|CancelQueue|||||||||||||||||||||||||||||| -CarrierHangar|ArmInterceptor||||||||||||||||||||||||||||||| -ForgeResearch|ResearchProtossGroundWeapons1|ResearchProtossGroundWeapons2|ResearchProtossGroundWeapons3|ResearchProtossGroundArmors1|ResearchProtossGroundArmors2|ResearchProtossGroundArmors3|ResearchProtossShields1|ResearchProtossShields2|ResearchProtossShields3||||||||||||||||||||||CancelResearch| -RoboticsBayResearch||ResearchObserverSpeed|ResearchWarpPrismSpeed|||ResearchExtendedThermalLance|||||||||||||||||||||||||CancelResearch| -TemplarArchivesResearch||||ResearchKhaydarinAmulet|ResearchPsiStorm||||||||||||||||||||||||||CancelResearch| -ZergBuild|BuildHatchery||BuildExtractor|BuildSpawningPool|BuildEvolutionChamber|BuildHydraliskDen|BuildSpire|BuildUltraliskCavern|BuildInfestationPit|BuildNydusNetwork|BuildBanelingNest|||BuildRoachWarren|BuildSpineCrawler|BuildSporeCrawler|||||||||||||||CancelBuilding| -DroneHarvest|Gather|ReturnCargo|Cancel||||||||||||||||||||||||||||| -evolutionchamberresearch|ResearchZergMeleeWeapons1|ResearchZergMeleeWeapons2|ResearchZergMeleeWeapons3|ResearchZergGroundArmors1|ResearchZergGroundArmors2|ResearchZergGroundArmors3|ResearchZergMissileWeapons1|ResearchZergMissileWeapons2|ResearchZergMissileWeapons3||||||||||||||||||||||CancelResearch| -UpgradeToLair|MorphToLair|CancelMorph|||||||||||||||||||||||||||||| -UpgradeToHive|MorphToHive|CancelMorph|||||||||||||||||||||||||||||| -UpgradeToGreaterSpire|MorphToGreaterSpire|CancelMorph|||||||||||||||||||||||||||||| -LairResearch||ResearchOverlordSpeed|ResearchVentralSacs|ResearchBurrow|||||||||||||||||||||||||||CancelResearch| -SpawningPoolResearch|ResearchZerglingAttackSpeed|ResearchZerglingMovementSpeed|||||||||||||||||||||||||||||CancelResearch| -HydraliskDenResearch|||ResearchHydraliskSpeed||||||||||||||||||||||||||||CancelResearch| -SpireResearch|ResearchZergFlyerWeapons1|ResearchZergFlyerWeapons2|ResearchZergFlyerWeapons3|ResearchZergFlyerArmors1|ResearchZergFlyerArmors2|ResearchZergFlyerArmors3|||||||||||||||||||||||||CancelResearch| -LarvaTrain|TrainDrone|TrainZergling|TrainOverlord|TrainHydralisk|TrainMutalisk||TrainUltralisk|||TrainRoach|TrainInfestor|TrainCorruptor|||||||||||||||||||CancelTrain| -MorphToBroodLord|MorphToBroodLord|CancelMorph|||||||||||||||||||||||||||||| -BurrowBanelingDown|BurrowBaneling||||||||||||||||||||||||||||||| -BurrowBanelingUp|UnburrowBaneling||||||||||||||||||||||||||||||| -BurrowDroneDown|BurrowDrone||||||||||||||||||||||||||||||| -BurrowDroneUp|UnburrowDrone||||||||||||||||||||||||||||||| -BurrowHydraliskDown|BurrowHydralisk||||||||||||||||||||||||||||||| -BurrowHydraliskUp|UnburrowHydralisk||||||||||||||||||||||||||||||| -BurrowRoachDown|BurrowRoach||||||||||||||||||||||||||||||| -BurrowRoachUp|UnburrowRoach||||||||||||||||||||||||||||||| -BurrowZerglingDown|BurrowZergling||||||||||||||||||||||||||||||| -BurrowZerglingUp|UnburrowZergling||||||||||||||||||||||||||||||| -BurrowInfestorTerranDown|BurrowInfestedTerran||||||||||||||||||||||||||||||| -BurrowInfestorTerranUp|UnburrowInfestedTerran||||||||||||||||||||||||||||||| -RedstoneLavaCritterBurrow|||||||||||||||||||||||||||||||| -RedstoneLavaCritterInjuredBurrow|||||||||||||||||||||||||||||||| -RedstoneLavaCritterUnburrow|||||||||||||||||||||||||||||||| -RedstoneLavaCritterInjuredUnburrow|||||||||||||||||||||||||||||||| -OverlordTransport|OverlordLoad|OverlordUnloadAll|OverlordUnloadAll|OverlordUnload|OverlordLoad||||||||||||||||||||||||||| -Mergeable|Cancel||||||||||||||||||||||||||||||| -Warpable|CancelWarpIn||||||||||||||||||||||||||||||| -WarpGateTrain|WarpInZealot|WarpInStalker||WarpInHighTemplar|WarpInDarkTemplar|WarpInSentry|||||||||||||||||||||||||CancelWarpIn| -BurrowQueenDown|BurrowQueen||||||||||||||||||||||||||||||| -BurrowQueenUp|UnburrowQueen||||||||||||||||||||||||||||||| -NydusCanalTransport|NydusLoad|NydusUnloadAll|NydusUnloadAll|NydusUnload|NydusLoad||||||||||||||||||||||||||| -Blink|StalkerBlink||||||||||||||||||||||||||||||| -BurrowInfestorDown|BurrowInfestor||||||||||||||||||||||||||||||| -BurrowInfestorUp|UnburrowInfestor||||||||||||||||||||||||||||||| -MorphToOverseer|MorphToOverseer|CancelMorph|||||||||||||||||||||||||||||| -UpgradeToPlanetaryFortress|MorphToPlanetaryFortress|CancelMorph|||||||||||||||||||||||||||||| -InfestationPitResearch|||ResearchInfestorEnergy|ResearchNeuralParasite|||||||||||||||||||||||||||CancelResearch| -BanelingNestResearch|ResearchBanelingSpeed||||||||||||||||||||||||||||||CancelResearch| -BurrowUltraliskDown|BurrowUltralisk||||||||||||||||||||||||||||||| -BurrowUltraliskUp|UnburrowUltralisk||||||||||||||||||||||||||||||| -UpgradeToOrbital|MorphToOrbitalCommand|CancelMorph|||||||||||||||||||||||||||||| -UpgradeToWarpGate|MorphToWarpGate|CancelMorph|||||||||||||||||||||||||||||| -MorphBackToGateway|MorphToGateway|CancelMorph|||||||||||||||||||||||||||||| -OrbitalLiftOff|LiftOrbitalCommand||||||||||||||||||||||||||||||| -OrbitalCommandLand|LandOrbitalCommand||||||||||||||||||||||||||||||| -ForceField|SentryForceField||||||||||||||||||||||||||||||| -PhasingMode|WarpPrismPhasing||||||||||||||||||||||||||||||| -TransportMode|WarpPrismTransport||||||||||||||||||||||||||||||| -FusionCoreResearch|ResearchYamatoCannon|ResearchBattlecruiserEnergy|||||||||||||||||||||||||||||CancelResearch| -CyberneticsCoreResearch|ResearchProtossAirWeapons1|ResearchProtossAirWeapons2|ResearchProtossAirWeapons3|ResearchProtossAirArmors1|ResearchProtossAirArmors2|ResearchProtossAirArmors3|ResearchWarpGate|||ResearchHallucination|||||||||||||||||||||CancelResearch| -TwilightCouncilResearch|ResearchCharge|ResearchBlink|||||||||||||||||||||||||||||CancelResearch| -TacNukeStrike|GhostNuke||||||||||||||||||||||||||||||| -SalvageBunkerRefund|||||||||||||||||||||||||||||||| -SalvageBunker|BunkerSalvage||||||||||||||||||||||||||||||| -EMP|GhostEMP||||||||||||||||||||||||||||||| -Vortex|MothershipVortex||||||||||||||||||||||||||||||| -TrainQueen|TrainQueen||||||||||||||||||||||||||||||CancelTrain| -BurrowCreepTumorDown|CancelMorph||||||||||||||||||||||||||||||| -Transfusion|QueenTransfusion||||||||||||||||||||||||||||||| -TechLabMorph|||||||||||||||||||||||||||||||| -BarracksTechLabMorph|||||||||||||||||||||||||||||||| -FactoryTechLabMorph|||||||||||||||||||||||||||||||| -StarportTechLabMorph|||||||||||||||||||||||||||||||| -ReactorMorph|||||||||||||||||||||||||||||||| -BarracksReactorMorph|||||||||||||||||||||||||||||||| -FactoryReactorMorph|||||||||||||||||||||||||||||||| -StarportReactorMorph|||||||||||||||||||||||||||||||| -AttackRedirect|||||||||||||||||||||||||||||||| -StimpackRedirect|||||||||||||||||||||||||||||||| -StimpackMarauderRedirect|||||||||||||||||||||||||||||||| -burrowedStop|Stop|HoldFire|Taunt|Taunt|||||||||||||||||||||||||||| -StopRedirect|||||||||||||||||||||||||||||||| -GenerateCreep|OverlordGenerateCreep|OverlordStopGenerateCreep|||||||||||||||||||||||||||||| -QueenBuild|QueenBuildCreepTumor||||||||||||||||||||||||||||||CancelBuilding| -SpineCrawlerUproot|UprootSpineCrawler||||||||||||||||||||||||||||||| -SporeCrawlerUproot|UprootSporeCrawler||||||||||||||||||||||||||||||| -SpineCrawlerRoot|RootSpineCrawler||||||||||||||||||||||||||||||| -SporeCrawlerRoot|RootSporeCrawler||||||||||||||||||||||||||||||| -CreepTumorBuild|CreepTumorBuildCreepTumor||||||||||||||||||||||||||||||CancelBuilding| -BuildAutoTurret|RavenBuildAutoTurret|CancelBuilding|||||||||||||||||||||||||||||| -ArchonWarp|MergeArchon|MergeArchon|||||||||||||||||||||||||||||| -BuildNydusCanal|BuildNydusCanal||||||||||||||||||||||||||||||CancelBuilding| -BroodLordHangar|ArmBroodling||||||||||||||||||||||||||||||| -Charge|ZealotCharge||||||||||||||||||||||||||||||| -TowerCapture|||||||||||||||||||||||||||||||| -HerdInteract|||||||||||||||||||||||||||||||| -Frenzy|||||||||||||||||||||||||||||||| -Contaminate|OverseerContaminate||||||||||||||||||||||||||||||| -Shatter|||||||||||||||||||||||||||||||| -InfestedTerransLayEgg|InfestorSpawnInfestedTerran||||||||||||||||||||||||||||||| -que5Passive|CancelQueue|CancelQueue|||||||||||||||||||||||||||||| -que5PassiveCancelToSelection|||||||||||||||||||||||||||||||| diff --git a/sc2reader/data/create_lookup.py b/sc2reader/data/create_lookup.py deleted file mode 100644 index 7362383..0000000 --- a/sc2reader/data/create_lookup.py +++ /dev/null @@ -1,14 +0,0 @@ -abilities = dict() -with open('hots_abilities.csv', 'r') as f: - for line in f: - num, ability = line.strip('\r\n ').split(',') - abilities[ability] = [""]*32 - -with open('command_lookup.csv', 'r') as f: - for line in f: - ability, commands = line.strip('\r\n ').split('|', 1) - abilities[ability] = commands.split('|') - -with open('new_lookup.csv', 'w') as out: - for ability, commands in sorted(abilities.items()): - out.write(','.join([ability]+commands)+'\n') diff --git a/sc2reader/data/train_commands.json b/sc2reader/data/train_commands.json deleted file mode 100644 index 3e5a46e..0000000 --- a/sc2reader/data/train_commands.json +++ /dev/null @@ -1,478 +0,0 @@ -{ - "HallucinateZealot": [ - "HallucinatedZealot", - 0 - ], - "MorphToGreaterSpire": [ - "GreaterSpire", - 100 - ], - "MorphToBaneling": [ - "Baneling", - 20 - ], - "BuildSporeCrawler": [ - "SporeCrawler", - 30 - ], - "BuildNydusWorm": [ - "NydusWorm", - 20 - ], - "BuildRoachWarren": [ - "RoachWarren", - 55 - ], - "BuildBarracks": [ - "Barracks", - 65 - ], - "HallucinateHighTemplar": [ - "HallucinatedHighTemplar", - 0 - ], - "HallucinateArchon": [ - "HallucinatedArchon", - 0 - ], - "WarpInZealot": [ - "Zealot", - 28 - ], - "MorphHydralisk": [ - "Hydralisk", - 33 - ], - "TrainTempest": [ - "Tempest", - 75 - ], - "BuildInterceptor": [ - "Interceptor", - 8 - ], - "MorphSwarmHost": [ - "SwarmHost", - 40 - ], - "TrainSCV": [ - "SCV", - 17 - ], - "BuildSpawningPool": [ - "SpawningPool", - 65 - ], - "BuildFusionCore": [ - "FusionCore", - 65 - ], - "TrainRaven": [ - "Raven", - 60 - ], - "HallucinateStalker": [ - "HallucinatedStalker", - 0 - ], - "TrainMothership": [ - "Mothership", - 160 - ], - "UpgradeToOrbitalCommand": [ - "OrbitalCommand", - 35 - ], - "WarpInDarkTemplar": [ - "DarkTemplar", - 30 - ], - "TrainColossus": [ - "Colossus", - 75 - ], - "MorphUltralisk": [ - "Ultralisk", - 55 - ], - "BuildThor": [ - "Thor", - 60 - ], - "TrainCarrier": [ - "Carrier", - 120 - ], - "BuildInfestationPit": [ - "InfestationPit", - 50 - ], - "UpgradeToLair": [ - "Lair", - 80 - ], - "TrainObserver": [ - "Observer", - 30 - ], - "MorphMutalisk": [ - "Mutalisk", - 33 - ], - "BuildUltraliskCavern": [ - "UltraliskCavern", - 65 - ], - "TrainViking": [ - "Viking", - 42 - ], - "TrainReaper": [ - "Reaper", - 45 - ], - "MorphDrone": [ - "Drone", - 17 - ], - "BuildTemplarArchive": [ - "TemplarArchive", - 50 - ], - "BuildBattleHellion": [ - "Hellion", - 30 - ], - "HallucinateProbe": [ - "HallucinatedProbe", - 0 - ], - "BuildSpire": [ - "Spire", - 100 - ], - "BuildRoboticsBay": [ - "RoboticsBay", - 65 - ], - "BuildStargate": [ - "Stargate", - 60 - ], - "TrainStalker": [ - "Stalker", - 42 - ], - "UpgradeToPlanetaryFortress": [ - "PlanetaryFortress", - 50 - ], - "TrainBattlecruiser": [ - "Battlecruiser", - 90 - ], - "MorphToBroodLord": [ - "BroodLord", - 34 - ], - "TrainQueen": [ - "Queen", - 50 - ], - "BuildSensorTower": [ - "SensorTower", - 25 - ], - "TrainMarauder": [ - "Marauder", - 30 - ], - "TrainBanshee": [ - "Banshee", - 60 - ], - "TrainMothershipCore": [ - "MothershipCore", - 30 - ], - "BuildNydusNetwork": [ - "NydusNetwork", - 50 - ], - "MorphInfestor": [ - "Infestor", - 50 - ], - "BuildAutoTurret": [ - "AutoTurret", - 0 - ], - "BuildFleetBeacon": [ - "FleetBeacon", - 60 - ], - "CalldownMULE": [ - "MULE", - 0 - ], - "TrainHighTemplar": [ - "HighTemplar", - 55 - ], - "BuildWidowMine": [ - "WidowMine", - 40 - ], - "MorphCorruptor": [ - "Corruptor", - 40 - ], - "TrainZealot": [ - "Zealot", - 38 - ], - "MorphToOverseer": [ - "Overseer", - 17 - ], - "BuildGateway": [ - "Gateway", - 65 - ], - "BuildBanelingNest": [ - "BanelingNest", - 60 - ], - "BuildEngineeringBay": [ - "EngineeringBay", - 35 - ], - "HallucinateWarpPrism": [ - "HallucinatedWarpPrism", - 0 - ], - "BuildFactory": [ - "Factory", - 60 - ], - "BuildRefinery": [ - "Refinery", - 30 - ], - "BuildDarkShrine": [ - "DarkShrine", - 100 - ], - "BuildForge": [ - "Forge", - 45 - ], - "HallucinateVoidRay": [ - "HallucinatedVoidRay", - 0 - ], - "TrainProbe": [ - "Probe", - 17 - ], - "BuildEvolutionChamber": [ - "EvolutionChamber", - 35 - ], - "MorphZergling": [ - "Zergling", - 24 - ], - "TrainDarkTemplar": [ - "DarkTemplar", - 55 - ], - "BuildCreepTumor": [ - "CreepTumor", - 15 - ], - "TrainMarine": [ - "Marine", - 25 - ], - "MorphViper": [ - "Viper", - 40 - ], - "BuildArmory": [ - "Armory", - 65 - ], - "BuildAssimilator": [ - "Assimilator", - 30 - ], - "BuildGhostAcademy": [ - "GhostAcademy", - 40 - ], - "TrainImmortal": [ - "Immortal", - 55 - ], - "BuildExtractor": [ - "Extractor", - 30 - ], - "BuildBunker": [ - "Bunker", - 40 - ], - "TransformToWarpGate": [ - "WarpGate", - 10 - ], - "BuildPylon": [ - "Pylon", - 25 - ], - "TrainPhoenix": [ - "Phoenix", - 35 - ], - "SpawnChangeling": [ - "Changeling", - 0 - ], - "TrainSentry": [ - "Sentry", - 37 - ], - "BuildCommandCenter": [ - "CommandCenter", - 100 - ], - "HallucinateColossus": [ - "HallucinatedColossus", - 0 - ], - "BuildStarport": [ - "Starport", - 50 - ], - "BuildCyberneticsCore": [ - "CyberneticsCore", - 50 - ], - "BuildSiegeTank": [ - "SiegeTank", - 45 - ], - "BuildSpineCrawler": [ - "SpineCrawler", - 50 - ], - "BuildHellion": [ - "Hellion", - 30 - ], - "SpawnInfestedTerran": [ - "InfestedTerran", - 5 - ], - "BuildMissileTurret": [ - "MissileTurret", - 25 - ], - "HallucinateImmortal": [ - "HallucinatedImmortal", - 0 - ], - "BuildRoboticsFacility": [ - "RoboticsFacility", - 65 - ], - "TrainOracle": [ - "Oracle", - 60 - ], - "TrainWarpPrism": [ - "WarpPrism", - 50 - ], - "TrainMedivac": [ - "Medivac", - 42 - ], - "TrainGhost": [ - "Ghost", - 40 - ], - "UpgradeToHive": [ - "Hive", - 100 - ], - "WarpInHighTemplar": [ - "HighTemplar", - 30 - ], - "BuildNexus": [ - "Nexus", - 100 - ], - "BuildPhotonCannon": [ - "PhotonCannon", - 40 - ], - "BuildHatchery": [ - "Hatchery", - 100 - ], - "BuildHydraliskDen": [ - "HydraliskDen", - 40 - ], - "HallucinatePhoenix": [ - "HallucinatedPhoenix", - 0 - ], - "TrainVoidRay": [ - "VoidRay", - 60 - ], - "BuildSupplyDepot": [ - "SupplyDepot", - 30 - ], - "WarpInStalker": [ - "Stalker", - 21.3 - ], - "ArchonWarpTarget": [ - "Archon", - 12 - ], - "MorphRoach": [ - "Roach", - 27 - ], - "MorphOverlord": [ - "Overlord", - 25 - ], - "BuildWarHound": [ - "WarHound", - 45 - ], - "BuildTwilightCouncil": [ - "TwilightCouncil", - 50 - ], - "BuildPointDefenseDrone": [ - "PointDefenseDrone", - 0 - ], - "ArchonWarpSelection": [ - "Archon", - 12 - ], - "WarpInSentry": [ - "Sentry", - 21.3 - ] -} \ No newline at end of file diff --git a/sc2reader/data/unit_info.json b/sc2reader/data/unit_info.json deleted file mode 100644 index 81cf866..0000000 --- a/sc2reader/data/unit_info.json +++ /dev/null @@ -1,866 +0,0 @@ -{ - "Zerg": { - "baneling": { - "is_army": true, - "minerals": 50, - "vespene": 25, - "supply": 0.5 - }, - "banelingburrowed": { - "is_army": true, - "minerals": 50, - "vespene": 25, - "supply": 0.5 - }, - "banelingcocoon": { - "is_army": true, - "minerals": 50, - "vespene": 25, - "supply": 0.5 - }, - "banelingnest": { - "minerals": 150, - "vespene": 50, - "supply": 0, - "is_building": true - }, - "broodling": { - "is_army": true, - "minerals": 0, - "vespene": 0, - "supply": 0 - }, - "broodlord": { - "is_army": true, - "minerals": 300, - "vespene": 250, - "supply": 4 - }, - "broodlordcocoon": { - "is_army": true, - "minerals": 300, - "vespene": 250, - "supply": 4 - }, - "corruptor": { - "is_army": true, - "minerals": 150, - "vespene": 100, - "supply": 2 - }, - "creeptumor": { - "minerals": 0, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "creeptumorburrowed": { - "minerals": 0, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "drone": { - "minerals": 50, - "vespene": 0, - "supply": 1, - "is_worker": true - }, - "droneburrowed": { - "minerals": 50, - "vespene": 0, - "supply": 1, - "is_worker": true - }, - "evolutionchamber": { - "minerals": 125, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "extractor": { - "minerals": 75, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "greaterspire": { - "minerals": 350, - "vespene": 350, - "supply": 0, - "is_building": true - }, - "hatchery": { - "minerals": 350, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "hive": { - "minerals": 700, - "vespene": 250, - "supply": 0, - "is_building": true - }, - "hydralisk": { - "is_army": true, - "minerals": 100, - "vespene": 50, - "supply": 2 - }, - "hydraliskburrowed": { - "is_army": true, - "minerals": 100, - "vespene": 50, - "supply": 2 - }, - "hydraliskden": { - "minerals": 150, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "infestationpit": { - "minerals": 150, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "infestedterran": { - "is_army": true, - "minerals": 0, - "vespene": 0, - "supply": 0 - }, - "infestedterranburrowed": { - "is_army": true, - "minerals": 0, - "vespene": 0, - "supply": 0 - }, - "infestor": { - "is_army": true, - "minerals": 100, - "vespene": 150, - "supply": 2 - }, - "infestorburrowed": { - "is_army": true, - "minerals": 100, - "vespene": 150, - "supply": 2 - }, - "lair": { - "minerals": 500, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "locust": { - "is_army": true, - "minerals": 0, - "vespene": 0, - "supply": 0 - }, - "lurker": { - "is_army": true, - "minerals": 150, - "vespene": 150, - "supply": 3 - }, - "lurkerden": { - "minerals": 250, - "vespene": 250, - "supply": 0, - "is_building": true - }, - "mutalisk": { - "is_army": true, - "minerals": 100, - "vespene": 100, - "supply": 2 - }, - "nydusnetwork": { - "minerals": 200, - "vespene": 200, - "supply": 0, - "is_building": true - }, - "nydusworm": { - "minerals": 100, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "overlord": { - "is_army": true, - "minerals": 100, - "vespene": 0, - "supply": 0 - }, - "overseer": { - "is_army": true, - "minerals": 150, - "vespene": 50, - "supply": 0 - }, - "overseercocoon": { - "is_army": true, - "minerals": 150, - "vespene": 50, - "supply": 0 - }, - "queen": { - "is_army": true, - "minerals": 150, - "vespene": 0, - "supply": 2 - }, - "queenburrowed": { - "is_army": true, - "minerals": 150, - "vespene": 0, - "supply": 2 - }, - "ravager": { - "is_army": true, - "minerals": 75, - "vespene": 25, - "supply": 2 - }, - "roach": { - "is_army": true, - "minerals": 75, - "vespene": 25, - "supply": 2 - }, - "roachburrowed": { - "is_army": true, - "minerals": 75, - "vespene": 25, - "supply": 2 - }, - "roachwarren": { - "minerals": 200, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "spawningpool": { - "minerals": 250, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "spinecrawler": { - "minerals": 150, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "spinecrawleruprooted": { - "minerals": 150, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "spire": { - "minerals": 250, - "vespene": 200, - "supply": 0, - "is_building": true - }, - "sporecrawler": { - "minerals": 125, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "sporecrawleruprooted": { - "minerals": 125, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "swarmhost": { - "is_army": true, - "minerals": 200, - "vespene": 100, - "supply": 3 - }, - "swarmhostburrowed": { - "is_army": true, - "minerals": 200, - "vespene": 100, - "supply": 3 - }, - "ultralisk": { - "is_army": true, - "minerals": 300, - "vespene": 200, - "supply": 6 - }, - "ultraliskburrowed": { - "is_army": true, - "minerals": 300, - "vespene": 200, - "supply": 6 - }, - "ultraliskcavern": { - "minerals": 200, - "vespene": 200, - "supply": 0, - "is_building": true - }, - "viper": { - "is_army": true, - "minerals": 100, - "vespene": 200, - "supply": 3 - }, - "zergling": { - "is_army": true, - "minerals": 25, - "vespene": 0, - "supply": 0.5 - }, - "zerglingburrowed": { - "is_army": true, - "minerals": 25, - "vespene": 0, - "supply": 0.5 - } - }, - "Protoss": { - "adept": { - "is_army": true, - "minerals": 100, - "vespene": 25, - "supply": 2 - }, - "archon": { - "is_army": true, - "minerals": 175, - "vespene": 275, - "supply": 4 - }, - "assimilator": { - "minerals": 75, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "carrier": { - "is_army": true, - "minerals": 350, - "vespene": 250, - "supply": 6 - }, - "colossus": { - "is_army": true, - "minerals": 300, - "vespene": 200, - "supply": 6 - }, - "cyberneticscore": { - "minerals": 150, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "darkshrine": { - "minerals": 150, - "vespene": 150, - "supply": 0, - "is_building": true - }, - "darktemplar": { - "is_army": true, - "minerals": 125, - "vespene": 125, - "supply": 2 - }, - "disruptor": { - "is_army": true, - "minerals": 150, - "vespene": 150, - "supply": 3 - }, - "fleetbeacon": { - "minerals": 300, - "vespene": 200, - "supply": 0, - "is_building": true - }, - "forge": { - "minerals": 150, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "gateway": { - "minerals": 150, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "hightemplar": { - "is_army": true, - "minerals": 50, - "vespene": 150, - "supply": 2 - }, - "immortal": { - "is_army": true, - "minerals": 250, - "vespene": 100, - "supply": 4 - }, - "interceptor": { - "is_army": true, - "minerals": 10, - "vespene": 0, - "supply": 0 - }, - "mothership": { - "is_army": true, - "minerals": 400, - "vespene": 400, - "supply": 8 - }, - "mothershipcore": { - "is_army": true, - "minerals": 100, - "vespene": 100, - "supply": 2 - }, - "nexus": { - "minerals": 400, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "observer": { - "is_army": true, - "minerals": 25, - "vespene": 75, - "supply": 1 - }, - "oracle": { - "is_army": true, - "minerals": 150, - "vespene": 150, - "supply": 3 - }, - "phoenix": { - "is_army": true, - "minerals": 150, - "vespene": 100, - "supply": 2 - }, - "photoncannon": { - "minerals": 150, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "probe": { - "minerals": 50, - "vespene": 0, - "supply": 1, - "is_worker": true - }, - "pylon": { - "minerals": 100, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "reactor": { - "minerals": 50, - "vespene": 50, - "supply": 0, - "is_building": true - }, - "roboticsbay": { - "minerals": 200, - "vespene": 200, - "supply": 0, - "is_building": true - }, - "roboticsfacility": { - "minerals": 200, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "sentry": { - "is_army": true, - "minerals": 50, - "vespene": 100, - "supply": 2 - }, - "stalker": { - "is_army": true, - "minerals": 125, - "vespene": 50, - "supply": 2 - }, - "stargate": { - "minerals": 150, - "vespene": 150, - "supply": 0, - "is_building": true - }, - "tempest": { - "is_army": true, - "minerals": 300, - "vespene": 200, - "supply": 4 - }, - "templararchive": { - "minerals": 150, - "vespene": 200, - "supply": 0, - "is_building": true - }, - "twilightcouncil": { - "minerals": 150, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "voidray": { - "is_army": true, - "minerals": 250, - "vespene": 150, - "supply": 4 - }, - "warpgate": { - "minerals": 150, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "warpprism": { - "is_army": true, - "minerals": 200, - "vespene": 0, - "supply": 2 - }, - "warpprismphasing": { - "is_army": true, - "minerals": 200, - "vespene": 0, - "supply": 2 - }, - "zealot": { - "is_army": true, - "minerals": 100, - "vespene": 0, - "supply": 2 - } - }, - "Terran": { - "armory": { - "minerals": 150, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "autoturret": { - "is_army": true, - "minerals": 0, - "vespene": 0, - "supply": 0 - }, - "banshee": { - "is_army": true, - "minerals": 150, - "vespene": 100, - "supply": 3 - }, - "barracks": { - "minerals": 150, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "barrackstechlab": { - "minerals": 50, - "vespene": 25, - "supply": 0, - "is_building": true - }, - "barracksreactor": { - "minerals": 50, - "vespene": 50, - "supply": 0, - "is_building": true - }, - "barracksflying": { - "minerals": 150, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "battlecruiser": { - "is_army": true, - "minerals": 400, - "vespene": 300, - "supply": 6 - }, - "battlehellion": { - "is_army": true, - "minerals": 100, - "vespene": 0, - "supply": 2 - }, - "bunker": { - "minerals": 100, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "commandcenter": { - "minerals": 400, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "commandcenterflying": { - "minerals": 400, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "cyclone": { - "is_army": true, - "minerals": 150, - "vespene": 100, - "supply": 3 - }, - "engineeringbay": { - "minerals": 125, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "factory": { - "minerals": 150, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "factoryflying": { - "minerals": 150, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "factoryreactor": { - "minerals": 50, - "vespene": 50, - "supply": 0, - "is_building": true - }, - "factorytechlab": { - "minerals": 50, - "vespene": 25, - "supply": 0, - "is_building": true - }, - "fusioncore": { - "minerals": 150, - "vespene": 150, - "supply": 0, - "is_building": true - }, - "ghost": { - "is_army": true, - "minerals": 200, - "vespene": 100, - "supply": 2 - }, - "ghostacademy": { - "minerals": 150, - "vespene": 50, - "supply": 0, - "is_building": true - }, - "hellion": { - "is_army": true, - "minerals": 100, - "vespene": 0, - "supply": 2 - }, - "marauder": { - "is_army": true, - "minerals": 100, - "vespene": 25, - "supply": 2 - }, - "marine": { - "is_army": true, - "minerals": 50, - "vespene": 0, - "supply": 1 - }, - "medivac": { - "is_army": true, - "minerals": 100, - "vespene": 100, - "supply": 2 - }, - "missileturret": { - "minerals": 100, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "mule": { - "minerals": 0, - "vespene": 0, - "supply": 0, - "is_worker": true - }, - "orbitalcommand": { - "minerals": 550, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "orbitalcommandflying": { - "minerals": 550, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "planetaryfortress": { - "minerals": 150, - "vespene": 150, - "supply": 0, - "is_building": true - }, - "raven": { - "is_army": true, - "minerals": 100, - "vespene": 200, - "supply": 2 - }, - "reaper": { - "is_army": true, - "minerals": 50, - "vespene": 50, - "supply": 1 - }, - "refinery": { - "minerals": 75, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "scv": { - "minerals": 50, - "vespene": 0, - "supply": 1, - "is_worker": true - }, - "sensortower": { - "minerals": 125, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "siegetank": { - "is_army": true, - "minerals": 150, - "vespene": 125, - "supply": 3 - }, - "siegetanksieged": { - "is_army": true, - "minerals": 150, - "vespene": 125, - "supply": 3 - }, - "starport": { - "minerals": 150, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "starportflying": { - "minerals": 150, - "vespene": 100, - "supply": 0, - "is_building": true - }, - "starportreactor": { - "minerals": 50, - "vespene": 50, - "supply": 0, - "is_building": true - }, - "starporttechlab": { - "minerals": 50, - "vespene": 25, - "supply": 0, - "is_building": true - }, - "supplydepot": { - "minerals": 100, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "supplydepotlowered": { - "minerals": 100, - "vespene": 0, - "supply": 0, - "is_building": true - }, - "techlab": { - "minerals": 50, - "vespene": 25, - "supply": 0, - "is_building": true - }, - "thor": { - "is_army": true, - "minerals": 300, - "vespene": 200, - "supply": 6 - }, - "viking": { - "is_army": true, - "minerals": 150, - "vespene": 75, - "supply": 2 - }, - "vikingassault": { - "is_army": true, - "minerals": 150, - "vespene": 75, - "supply": 2 - }, - "warhound": { - "is_army": true, - "minerals": 150, - "vespene": 75, - "supply": 2 - }, - "widowmine": { - "is_army": true, - "minerals": 75, - "vespene": 25, - "supply": 2 - }, - "widowmineburrowed": { - "is_army": true, - "minerals": 75, - "vespene": 25, - "supply": 2 - } - } -} diff --git a/sc2reader/data/unit_lookup.csv b/sc2reader/data/unit_lookup.csv deleted file mode 100644 index 7327ef0..0000000 --- a/sc2reader/data/unit_lookup.csv +++ /dev/null @@ -1,1022 +0,0 @@ -System_Snapshot_Dummy,System_Snapshot_Dummy -BeaconRally,BeaconRally -BeaconAttack,BeaconAttack -BeaconDefend,BeaconDefend -BeaconHarass,BeaconHarass -BeaconIdle,BeaconIdle -BeaconAuto,BeaconAuto -BeaconDetect,BeaconDetect -BeaconScout,BeaconScout -BeaconClaim,BeaconClaim -BeaconExpand,BeaconExpand -BeaconCustom1,BeaconCustom1 -BeaconCustom2,BeaconCustom2 -BeaconCustom3,BeaconCustom3 -BeaconCustom4,BeaconCustom4 -DESTRUCTIBLE,DESTRUCTIBLE -ITEM,ITEM -POWERUP,POWERUP -SMCAMERA,SMCAMERA -SMCHARACTER,SMCHARACTER -STARMAP,STARMAP -SMSET,SMSET -MISSILE,MISSILE -MISSILE_INVULNERABLE,MISSILE_INVULNERABLE -MISSILE_HALFLIFE,MISSILE_HALFLIFE -PLACEHOLDER,PLACEHOLDER -PLACEHOLDER_AIR,PLACEHOLDER_AIR -PATHINGBLOCKER,PATHINGBLOCKER -BEACON,BEACON -Ball,Ball -StereoscopicOptionsUnit,StereoscopicOptionsUnit -Colossus,Colossus -TechLab,TechLab -Reactor,Reactor -InfestorTerran,InfestedTerran -BanelingCocoon,BanelingCocoon -Baneling,Baneling -Mothership,Mothership -PointDefenseDrone,PointDefenseDrone -Changeling,Changeling -ChangelingZealot,ChangelingZealot -ChangelingMarineShield,ChangelingMarineShield -ChangelingMarine,ChangelingMarine -ChangelingZerglingWings,ChangelingZerglingWings -ChangelingZergling,ChangelingZergling -CommandCenter,CommandCenter -SupplyDepot,SupplyDepot -Refinery,Refinery -Barracks,Barracks -EngineeringBay,EngineeringBay -MissileTurret,MissileTurret -Bunker,Bunker -SensorTower,SensorTower -GhostAcademy,GhostAcademy -Factory,Factory -Starport,Starport -Armory,Armory -FusionCore,FusionCore -AutoTurret,AutoTurret -SiegeTankSieged,SiegeTankSieged -SiegeTank,SiegeTank -VikingFighter,Viking -VikingAssault,VikingAssault -CommandCenterFlying,CommandCenterFlying -BarracksTechLab,BarracksTechLab -BarracksReactor,BarracksReactor -FactoryTechLab,FactoryTechLab -FactoryReactor,FactoryReactor -StarportTechLab,StarportTechLab -StarportReactor,StarportReactor -FactoryFlying,FactoryFlying -StarportFlying,StarportFlying -SCV,SCV -BarracksFlying,BarracksFlying -SupplyDepotLowered,SupplyDepotLowered -Marine,Marine -Reaper,Reaper -Ghost,Ghost -Marauder,Marauder -Thor,Thor -Hellion,Hellion -Medivac,Medivac -Banshee,Banshee -Raven,Raven -Battlecruiser,Battlecruiser -Nuke,Nuke -Nexus,Nexus -Pylon,Pylon -Assimilator,Assimilator -Gateway,Gateway -Forge,Forge -FleetBeacon,FleetBeacon -TwilightCouncil,TwilightCouncil -PhotonCannon,PhotonCannon -Stargate,Stargate -TemplarArchive,TemplarArchive -DarkShrine,DarkShrine -RoboticsBay,RoboticsBay -RoboticsFacility,RoboticsFacility -CyberneticsCore,CyberneticsCore -Zealot,Zealot -Stalker,Stalker -HighTemplar,HighTemplar -DarkTemplar,DarkTemplar -Sentry,Sentry -Phoenix,Phoenix -Carrier,Carrier -VoidRay,VoidRay -WarpPrism,WarpPrism -Observer,Observer -Immortal,Immortal -Probe,Probe -Interceptor,Interceptor -Hatchery,Hatchery -CreepTumor,CreepTumor -Extractor,Extractor -SpawningPool,SpawningPool -EvolutionChamber,EvolutionChamber -HydraliskDen,HydraliskDen -Spire,Spire -UltraliskCavern,UltraliskCavern -InfestationPit,InfestationPit -NydusNetwork,NydusNetwork -BanelingNest,BanelingNest -RoachWarren,RoachWarren -SpineCrawler,SpineCrawler -SporeCrawler,SporeCrawler -Lair,Lair -Hive,Hive -GreaterSpire,GreaterSpire -Egg,Egg -Drone,Drone -Zergling,Zergling -Overlord,Overlord -Hydralisk,Hydralisk -Mutalisk,Mutalisk -Ultralisk,Ultralisk -Roach,Roach -Infestor,Infestor -Corruptor,Corruptor -BroodLordCocoon,BroodLordCocoon -BroodLord,BroodLord -BanelingBurrowed,BanelingBurrowed -DroneBurrowed,DroneBurrowed -HydraliskBurrowed,HydraliskBurrowed -RoachBurrowed,RoachBurrowed -ZerglingBurrowed,ZerglingBurrowed -InfestorTerranBurrowed,InfestedTerranBurrowed -RedstoneLavaCritterBurrowed,RedstoneLavaCritterBurrowed -RedstoneLavaCritterInjuredBurrowed,RedstoneLavaCritterInjuredBurrowed -RedstoneLavaCritter,RedstoneLavaCritter -RedstoneLavaCritterInjured,RedstoneLavaCritterInjured -QueenBurrowed,QueenBurrowed -Queen,Queen -InfestorBurrowed,InfestorBurrowed -OverlordCocoon,OverseerCocoon -Overseer,Overseer -PlanetaryFortress,PlanetaryFortress -UltraliskBurrowed,UltraliskBurrowed -OrbitalCommand,OrbitalCommand -WarpGate,WarpGate -OrbitalCommandFlying,OrbitalCommandFlying -ForceField,ForceField -WarpPrismPhasing,WarpPrismPhasing -CreepTumorBurrowed,CreepTumorBurrowed -CreepTumorQueen,CreepTumorQueen -SpineCrawlerUprooted,SpineCrawlerUprooted -SporeCrawlerUprooted,SporeCrawlerUprooted -Archon,Archon -NydusCanal,NydusWorm -BroodlingEscort,BroodlingEscort -RichMineralField,RichMineralField -XelNagaTower,XelNagaTower -InfestedTerransEgg,InfestedTerransEgg -Larva,Larva -ReaperPlaceholder,ReaperPlaceholder -NeedleSpinesWeapon,NeedleSpinesWeapon -CorruptionWeapon,CorruptionWeapon -InfestedTerransWeapon,InfestedTerransWeapon -NeuralParasiteWeapon,NeuralParasiteWeapon -PointDefenseDroneReleaseWeapon,PointDefenseDroneReleaseWeapon -HunterSeekerWeapon,HunterSeekerWeapon -MULE,MULE -ThorAAWeapon,ThorAAWeapon -PunisherGrenadesLMWeapon,PunisherGrenadesLMWeapon -VikingFighterWeapon,VikingFighterWeapon -ATALaserBatteryLMWeapon,ATALaserBatteryLMWeapon -ATSLaserBatteryLMWeapon,ATSLaserBatteryLMWeapon -LongboltMissileWeapon,LongboltMissileWeapon -D8ChargeWeapon,D8ChargeWeapon -YamatoWeapon,YamatoWeapon -IonCannonsWeapon,IonCannonsWeapon -AcidSalivaWeapon,AcidSalivaWeapon -SpineCrawlerWeapon,SpineCrawlerWeapon -SporeCrawlerWeapon,SporeCrawlerWeapon -GlaiveWurmWeapon,GlaiveWurmWeapon -GlaiveWurmM2Weapon,GlaiveWurmM2Weapon -GlaiveWurmM3Weapon,GlaiveWurmM3Weapon -StalkerWeapon,StalkerWeapon -EMP2Weapon,EMP2Weapon -BacklashRocketsLMWeapon,BacklashRocketsLMWeapon -PhotonCannonWeapon,PhotonCannonWeapon -ParasiteSporeWeapon,ParasiteSporeWeapon -Broodling,Broodling -BroodLordBWeapon,BroodLordBWeapon -AutoTurretReleaseWeapon,AutoTurretReleaseWeapon -LarvaReleaseMissile,LarvaReleaseMissile -AcidSpinesWeapon,AcidSpinesWeapon -FrenzyWeapon,FrenzyWeapon -ContaminateWeapon,ContaminateWeapon -BroodlingDefault,BroodlingDefault -Critter,Critter -CritterStationary,CritterStationary -Shape,Shape -FungalGrowthMissile,FungalGrowthMissile -NeuralParasiteTentacleMissile,NeuralParasiteTentacleMissile -Beacon_Protoss,Beacon_Protoss -Beacon_ProtossSmall,Beacon_ProtossSmall -Beacon_Terran,Beacon_Terran -Beacon_TerranSmall,Beacon_TerranSmall -Beacon_Zerg,Beacon_Zerg -Beacon_ZergSmall,Beacon_ZergSmall -Lyote,Lyote -CarrionBird,CarrionBird -KarakMale,KarakMale -KarakFemale,KarakFemale -UrsadakMale,UrsadakMale -UrsadakFemale,UrsadakFemale -UrsadakCalf,UrsadakCalf -UrsadakMaleExotic,UrsadakMaleExotic -UrsadakFemaleExotic,UrsadakFemaleExotic -UtilityBot,UtilityBot -CommentatorBot1,CommentatorBot1 -CommentatorBot2,CommentatorBot2 -CommentatorBot3,CommentatorBot3 -CommentatorBot4,CommentatorBot4 -Scantipede,Scantipede -Dog,Dog -Sheep,Sheep -Cow,Cow -InfestedTerransEggPlacement,InfestedTerransEggPlacement -InfestorTerransWeapon,InfestorTerransWeapon -MineralField,MineralField -VespeneGeyser,VespeneGeyser -SpacePlatformGeyser,SpacePlatformGeyser -RichVespeneGeyser,RichVespeneGeyser -DestructibleSearchlight,DestructibleSearchlight -DestructibleBullhornLights,DestructibleBullhornLights -DestructibleStreetlight,DestructibleStreetlight -DestructibleSpacePlatformSign,DestructibleSpacePlatformSign -DestructibleStoreFrontCityProps,DestructibleStoreFrontCityProps -DestructibleBillboardTall,DestructibleBillboardTall -DestructibleBillboardScrollingText,DestructibleBillboardScrollingText -DestructibleSpacePlatformBarrier,DestructibleSpacePlatformBarrier -DestructibleSignsDirectional,DestructibleSignsDirectional -DestructibleSignsConstruction,DestructibleSignsConstruction -DestructibleSignsFunny,DestructibleSignsFunny -DestructibleSignsIcons,DestructibleSignsIcons -DestructibleSignsWarning,DestructibleSignsWarning -DestructibleGarage,DestructibleGarage -DestructibleGarageLarge,DestructibleGarageLarge -DestructibleTrafficSignal,DestructibleTrafficSignal -TrafficSignal,TrafficSignal -BraxisAlphaDestructible1x1,BraxisAlphaDestructible1x1 -BraxisAlphaDestructible2x2,BraxisAlphaDestructible2x2 -DestructibleDebris4x4,DestructibleDebris4x4 -DestructibleDebris6x6,DestructibleDebris6x6 -DestructibleRock2x4Vertical,DestructibleRock2x4Vertical -DestructibleRock2x4Horizontal,DestructibleRock2x4Horizontal -DestructibleRock2x6Vertical,DestructibleRock2x6Vertical -DestructibleRock2x6Horizontal,DestructibleRock2x6Horizontal -DestructibleRock4x4,DestructibleRock4x4 -DestructibleRock6x6,DestructibleRock6x6 -DestructibleRampDiagonalHugeULBR,DestructibleRampDiagonalHugeULBR -DestructibleRampDiagonalHugeBLUR,DestructibleRampDiagonalHugeBLUR -DestructibleRampVerticalHuge,DestructibleRampVerticalHuge -DestructibleRampHorizontalHuge,DestructibleRampHorizontalHuge -DestructibleDebrisRampDiagonalHugeULBR,DestructibleDebrisRampDiagonalHugeULBR -DestructibleDebrisRampDiagonalHugeBLUR,DestructibleDebrisRampDiagonalHugeBLUR -MengskStatueAlone,MengskStatueAlone -MengskStatue,MengskStatue -WolfStatue,WolfStatue -GlobeStatue,GlobeStatue -Weapon,Weapon -GlaiveWurmBounceWeapon,GlaiveWurmBounceWeapon -BroodLordWeapon,BroodLordWeapon -BroodLordAWeapon,BroodLordAWeapon -CreepBlocker1x1,CreepBlocker1x1 -PathingBlocker1x1,PathingBlocker1x1 -PathingBlocker2x2,PathingBlocker2x2 -AutoTestAttackTargetGround,AutoTestAttackTargetGround -AutoTestAttackTargetAir,AutoTestAttackTargetAir -AutoTestAttacker,AutoTestAttacker -HelperEmitterSelectionArrow,HelperEmitterSelectionArrow -MultiKillObject,MultiKillObject -ShapeGolfball,ShapeGolfball -ShapeCone,ShapeCone -ShapeCube,ShapeCube -ShapeCylinder,ShapeCylinder -ShapeDodecahedron,ShapeDodecahedron -ShapeIcosahedron,ShapeIcosahedron -ShapeOctahedron,ShapeOctahedron -ShapePyramid,ShapePyramid -ShapeRoundedCube,ShapeRoundedCube -ShapeSphere,ShapeSphere -ShapeTetrahedron,ShapeTetrahedron -ShapeThickTorus,ShapeThickTorus -ShapeThinTorus,ShapeThinTorus -ShapeTorus,ShapeTorus -Shape4PointStar,Shape4PointStar -Shape5PointStar,Shape5PointStar -Shape6PointStar,Shape6PointStar -Shape8PointStar,Shape8PointStar -ShapeArrowPointer,ShapeArrowPointer -ShapeBowl,ShapeBowl -ShapeBox,ShapeBox -ShapeCapsule,ShapeCapsule -ShapeCrescentMoon,ShapeCrescentMoon -ShapeDecahedron,ShapeDecahedron -ShapeDiamond,ShapeDiamond -ShapeFootball,ShapeFootball -ShapeGemstone,ShapeGemstone -ShapeHeart,ShapeHeart -ShapeJack,ShapeJack -ShapePlusSign,ShapePlusSign -ShapeShamrock,ShapeShamrock -ShapeSpade,ShapeSpade -ShapeTube,ShapeTube -ShapeEgg,ShapeEgg -ShapeYenSign,ShapeYenSign -ShapeX,ShapeX -ShapeWatermelon,ShapeWatermelon -ShapeWonSign,ShapeWonSign -ShapeTennisball,ShapeTennisball -ShapeStrawberry,ShapeStrawberry -ShapeSmileyFace,ShapeSmileyFace -ShapeSoccerball,ShapeSoccerball -ShapeRainbow,ShapeRainbow -ShapeSadFace,ShapeSadFace -ShapePoundSign,ShapePoundSign -ShapePear,ShapePear -ShapePineapple,ShapePineapple -ShapeOrange,ShapeOrange -ShapePeanut,ShapePeanut -ShapeO,ShapeO -ShapeLemon,ShapeLemon -ShapeMoneyBag,ShapeMoneyBag -ShapeHorseshoe,ShapeHorseshoe -ShapeHockeyStick,ShapeHockeyStick -ShapeHockeyPuck,ShapeHockeyPuck -ShapeHand,ShapeHand -ShapeGolfClub,ShapeGolfClub -ShapeGrape,ShapeGrape -ShapeEuroSign,ShapeEuroSign -ShapeDollarSign,ShapeDollarSign -ShapeBasketball,ShapeBasketball -ShapeCarrot,ShapeCarrot -ShapeCherry,ShapeCherry -ShapeBaseball,ShapeBaseball -ShapeBaseballBat,ShapeBaseballBat -ShapeBanana,ShapeBanana -ShapeApple,ShapeApple -ShapeCashLarge,ShapeCashLarge -ShapeCashMedium,ShapeCashMedium -ShapeCashSmall,ShapeCashSmall -ShapeFootballColored,ShapeFootballColored -ShapeLemonSmall,ShapeLemonSmall -ShapeOrangeSmall,ShapeOrangeSmall -ShapeTreasureChestOpen,ShapeTreasureChestOpen -ShapeTreasureChestClosed,ShapeTreasureChestClosed -ShapeWatermelonSmall,ShapeWatermelonSmall -MothershipCore,MothershipCore -LocustMP,Locust -CollapsibleRockTowerDebris,CollapsibleRockTowerDebris -HellionTank,BattleHellion -NydusCanalAttacker,NydusCanalAttacker -NydusCanalCreeper,NydusCanalCreeper -SwarmHostBurrowedMP,SwarmHostBurrowed -SwarmHostMP,SwarmHost -Oracle,Oracle -Tempest,Tempest -WarHound,WarHound -WidowMine,WidowMine -Viper,Viper -WidowMineBurrowed,WidowMineBurrowed -ExtendingBridgeNEWide8Out,ExtendingBridgeNEWide8Out -ExtendingBridgeNEWide8,ExtendingBridgeNEWide8 -ExtendingBridgeNWWide8Out,ExtendingBridgeNWWide8Out -ExtendingBridgeNWWide8,ExtendingBridgeNWWide8 -ExtendingBridgeNEWide10Out,ExtendingBridgeNEWide10Out -ExtendingBridgeNEWide10,ExtendingBridgeNEWide10 -ExtendingBridgeNWWide10Out,ExtendingBridgeNWWide10Out -ExtendingBridgeNWWide10,ExtendingBridgeNWWide10 -ExtendingBridgeNEWide12Out,ExtendingBridgeNEWide12Out -ExtendingBridgeNEWide12,ExtendingBridgeNEWide12 -ExtendingBridgeNWWide12Out,ExtendingBridgeNWWide12Out -ExtendingBridgeNWWide12,ExtendingBridgeNWWide12 -CollapsibleRockTowerPushUnit,CollapsibleRockTowerPushUnit -CollapsibleTerranTowerPushUnit,CollapsibleTerranTowerPushUnit -CollapsibleTerranTowerDebris,CollapsibleTerranTowerDebris -DigesterCreepSprayTargetUnit,DigesterCreepSprayTargetUnit -DigesterCreepSprayUnit,DigesterCreepSprayUnit -NydusCanalAttackerWeapon,NydusCanalAttackerWeapon -ViperConsumeStructureWeapon,ViperConsumeStructureWeapon -ResourceBlocker,ResourceBlocker -TempestWeapon,TempestWeapon -YoinkMissile,AbductMissile -WarHoundWeapon,WarHoundWeapon -EyeStalkWeapon,EyeStalkWeapon -WidowMineWeapon,WidowMineWeapon -WidowMineAirWeapon,WidowMineAirWeapon -MothershipCoreWeaponWeapon,MothershipCoreWeaponWeapon -TornadoMissileWeapon,TornadoMissileWeapon -TornadoMissileDummyWeapon,TornadoMissileDummyWeapon -TalonsMissileWeapon,TalonsMissileWeapon -CreepTumorMissile,CreepTumorMissile -LocustMPEggAMissileWeapon,LocustMPEggAMissileWeapon -LocustMPEggBMissileWeapon,LocustMPEggBMissileWeapon -LocustMPWeapon,LocustMPWeapon -ExtendingBridge,ExtendingBridge -PhysicsPrimitiveParent,PhysicsPrimitiveParent -IceProtossCrates,IceProtossCrates -ProtossCrates,ProtossCrates -TowerMine,TowerMine -PickupPalletGas,PickupPalletGas -PickupPalletMinerals,PickupPalletMinerals -PickupScrapSalvage1x1,PickupScrapSalvage1x1 -PickupScrapSalvage2x2,PickupScrapSalvage2x2 -PickupScrapSalvage3x3,PickupScrapSalvage3x3 -RoughTerrain,RoughTerrain -UnbuildableBricksSmallUnit,UnbuildableBricksSmallUnit -UnbuildablePlatesSmallUnit,UnbuildablePlatesSmallUnit -UnbuildablePlatesUnit,UnbuildablePlatesUnit -UnbuildableRocksSmallUnit,UnbuildableRocksSmallUnit -XelNagaHealingShrine,XelNagaHealingShrine -InvisibleTargetDummy,InvisibleTargetDummy -CollapsibleRockTowerDoubleWide,CollapsibleRockTowerDoubleWide -CollapsibleRockTower,CollapsibleRockTower -CollapsibleRockTowerDiagonal,CollapsibleRockTowerDiagonal -CollapsibleTerranTower,CollapsibleTerranTower -CollapsibleTerranTowerDiagonal,CollapsibleTerranTowerDiagonal -ZerglingFly,ZerglingFly -ThornLizard,ThornLizard -CleaningBot,CleaningBot -DestructibleRock6x6Weak,DestructibleRock6x6Weak -ProtossSnakeSegmentDemo,ProtossSnakeSegmentDemo -PhysicsPrimitives,PhysicsPrimitives -PhysicsCube,PhysicsCube -PhysicsSphere,PhysicsSphere -PhysicsCylinder,PhysicsCylinder -PhysicsCapsule,PhysicsCapsule -PhysicsStar,PhysicsStar -PhysicsKnot,PhysicsKnot -PhysicsL,PhysicsL -CreepBlocker4x4,CreepBlocker4x4 -DestructibleCityDebris2x4Vertical,DestructibleCityDebris2x4Vertical -DestructibleCityDebris2x4Horizontal,DestructibleCityDebris2x4Horizontal -DestructibleCityDebris2x6Vertical,DestructibleCityDebris2x6Vertical -DestructibleCityDebris2x6Horizontal,DestructibleCityDebris2x6Horizontal -DestructibleCityDebris4x4,DestructibleCityDebris4x4 -DestructibleCityDebris6x6,DestructibleCityDebris6x6 -DestructibleCityDebrisHugeDiagonalBLUR,DestructibleCityDebrisHugeDiagonalBLUR -DestructibleCityDebrisHugeDiagonalULBR,DestructibleCityDebrisHugeDiagonalULBR -TestZerg,TestZerg -PathingBlockerRadius1,PathingBlockerRadius1 -DestructibleRockEx12x4Vertical,DestructibleRockEx12x4Vertical -DestructibleRockEx12x4Horizontal,DestructibleRockEx12x4Horizontal -DestructibleRockEx12x6Vertical,DestructibleRockEx12x6Vertical -DestructibleRockEx12x6Horizontal,DestructibleRockEx12x6Horizontal -DestructibleRockEx14x4,DestructibleRockEx14x4 -DestructibleRockEx16x6,DestructibleRockEx16x6 -DestructibleRockEx1DiagonalHugeULBR,DestructibleRockEx1DiagonalHugeULBR -DestructibleRockEx1DiagonalHugeBLUR,DestructibleRockEx1DiagonalHugeBLUR -DestructibleRockEx1VerticalHuge,DestructibleRockEx1VerticalHuge -DestructibleRockEx1HorizontalHuge,DestructibleRockEx1HorizontalHuge -DestructibleIce2x4Vertical,DestructibleIce2x4Vertical -DestructibleIce2x4Horizontal,DestructibleIce2x4Horizontal -DestructibleIce2x6Vertical,DestructibleIce2x6Vertical -DestructibleIce2x6Horizontal,DestructibleIce2x6Horizontal -DestructibleIce4x4,DestructibleIce4x4 -DestructibleIce6x6,DestructibleIce6x6 -DestructibleIceDiagonalHugeULBR,DestructibleIceDiagonalHugeULBR -DestructibleIceDiagonalHugeBLUR,DestructibleIceDiagonalHugeBLUR -DestructibleIceVerticalHuge,DestructibleIceVerticalHuge -DestructibleIceHorizontalHuge,DestructibleIceHorizontalHuge -DesertPlanetSearchlight,DesertPlanetSearchlight -DesertPlanetStreetlight,DesertPlanetStreetlight -UnbuildableBricksUnit,UnbuildableBricksUnit -UnbuildableRocksUnit,UnbuildableRocksUnit -Artosilope,Artosilope -Anteplott,Anteplott -LabBot,LabBot -Crabeetle,Crabeetle -BeaconQQQ,BeaconQQQ -BeaconArmy,BeaconArmy -LurkerMPEgg,LurkerEgg -LurkerMP,Lurker -LurkerMPBurrowed,LurkerBurrowed -LurkerDenMP,LurkerDen -CollapsibleRockTowerDebrisRampRight,CollapsibleRockTowerDebrisRampRight -CollapsibleRockTowerDebrisRampLeft,CollapsibleRockTowerDebrisRampLeft -CollapsibleRockTowerPushUnitRampRight,CollapsibleRockTowerPushUnitRampRight -CollapsibleRockTowerPushUnitRampLeft,CollapsibleRockTowerPushUnitRampLeft -YoinkVikingAirMissile,AbductVikingAirMissile -YoinkVikingGroundMissile,YoinkVikingGroundMissile -RepulsorCannonWeapon,RepulsorCannonWeapon -ZerusDestructibleArch,ZerusDestructibleArch -CollapsibleRockTowerRampRight,CollapsibleRockTowerRampRight -CollapsibleRockTowerRampLeft,CollapsibleRockTowerRampLeft -UnbuildableRocksDestructible,UnbuildableRocksDestructible -UnbuildableBricksDestructible,UnbuildableBricksDestructible -UnbuildablePlatesDestructible,UnbuildablePlatesDestructible -DebrisRampLeft,DebrisRampLeft -DebrisRampRight,DebrisRampRight -CollapsibleTerranTowerPushUnitRampLeft,CollapsibleTerranTowerPushUnitRampLeft -CollapsibleTerranTowerPushUnitRampRight,CollapsibleTerranTowerPushUnitRampRight -CollapsibleTerranTowerRampLeft,CollapsibleTerranTowerRampLeft -CollapsibleTerranTowerRampRight,CollapsibleTerranTowerRampRight -LabMineralField,LabMineralField -ThorAALance,ThorAALance -OracleWeapon,OracleWeapon -TempestWeaponGround,TempestWeaponGround -SeekerMissile,SeekerMissile -ProtossVespeneGeyser,ProtossVespeneGeyser -Cyclone,Cyclone -Rocks2x2NonConjoined,Rocks2x2NonConjoined -OverlordGenerateCreepKeybind,OverlordGenerateCreepKeybind -Debris2x2NonConjoined,Debris2x2NonConjoined -EnemyPathingBlocker1x1,EnemyPathingBlocker1x1 -EnemyPathingBlocker2x2,EnemyPathingBlocker2x2 -EnemyPathingBlocker4x4,EnemyPathingBlocker4x4 -EnemyPathingBlocker8x8,EnemyPathingBlocker8x8 -EnemyPathingBlocker16x16,EnemyPathingBlocker16x16 -ScopeTest,ScopeTest -XelNaga_Caverns_DoorE,XelNaga_Caverns_DoorE -XelNaga_Caverns_DoorEOpened,XelNaga_Caverns_DoorEOpened -XelNaga_Caverns_DoorN,XelNaga_Caverns_DoorN -XelNaga_Caverns_DoorNE,XelNaga_Caverns_DoorNE -XelNaga_Caverns_DoorNEOpened,XelNaga_Caverns_DoorNEOpened -XelNaga_Caverns_DoorNOpened,XelNaga_Caverns_DoorNOpened -XelNaga_Caverns_DoorNW,XelNaga_Caverns_DoorNW -XelNaga_Caverns_DoorNWOpened,XelNaga_Caverns_DoorNWOpened -XelNaga_Caverns_DoorS,XelNaga_Caverns_DoorS -XelNaga_Caverns_DoorSE,XelNaga_Caverns_DoorSE -XelNaga_Caverns_DoorSEOpened,XelNaga_Caverns_DoorSEOpened -XelNaga_Caverns_DoorSOpened,XelNaga_Caverns_DoorSOpened -XelNaga_Caverns_DoorSW,XelNaga_Caverns_DoorSW -XelNaga_Caverns_DoorSWOpened,XelNaga_Caverns_DoorSWOpened -XelNaga_Caverns_DoorW,XelNaga_Caverns_DoorW -XelNaga_Caverns_DoorWOpened,XelNaga_Caverns_DoorWOpened -XelNaga_Caverns_Floating_BridgeNE8Out,XelNaga_Caverns_Floating_BridgeNE8Out -XelNaga_Caverns_Floating_BridgeNE8,XelNaga_Caverns_Floating_BridgeNE8 -XelNaga_Caverns_Floating_BridgeNW8Out,XelNaga_Caverns_Floating_BridgeNW8Out -XelNaga_Caverns_Floating_BridgeNW8,XelNaga_Caverns_Floating_BridgeNW8 -XelNaga_Caverns_Floating_BridgeNE10Out,XelNaga_Caverns_Floating_BridgeNE10Out -XelNaga_Caverns_Floating_BridgeNE10,XelNaga_Caverns_Floating_BridgeNE10 -XelNaga_Caverns_Floating_BridgeNW10Out,XelNaga_Caverns_Floating_BridgeNW10Out -XelNaga_Caverns_Floating_BridgeNW10,XelNaga_Caverns_Floating_BridgeNW10 -XelNaga_Caverns_Floating_BridgeNE12Out,XelNaga_Caverns_Floating_BridgeNE12Out -XelNaga_Caverns_Floating_BridgeNE12,XelNaga_Caverns_Floating_BridgeNE12 -XelNaga_Caverns_Floating_BridgeNW12Out,XelNaga_Caverns_Floating_BridgeNW12Out -XelNaga_Caverns_Floating_BridgeNW12,XelNaga_Caverns_Floating_BridgeNW12 -XelNaga_Caverns_Floating_BridgeH8Out,XelNaga_Caverns_Floating_BridgeH8Out -XelNaga_Caverns_Floating_BridgeH8,XelNaga_Caverns_Floating_BridgeH8 -XelNaga_Caverns_Floating_BridgeV8Out,XelNaga_Caverns_Floating_BridgeV8Out -XelNaga_Caverns_Floating_BridgeV8,XelNaga_Caverns_Floating_BridgeV8 -XelNaga_Caverns_Floating_BridgeH10Out,XelNaga_Caverns_Floating_BridgeH10Out -XelNaga_Caverns_Floating_BridgeH10,XelNaga_Caverns_Floating_BridgeH10 -XelNaga_Caverns_Floating_BridgeV10Out,XelNaga_Caverns_Floating_BridgeV10Out -XelNaga_Caverns_Floating_BridgeV10,XelNaga_Caverns_Floating_BridgeV10 -XelNaga_Caverns_Floating_BridgeH12Out,XelNaga_Caverns_Floating_BridgeH12Out -XelNaga_Caverns_Floating_BridgeH12,XelNaga_Caverns_Floating_BridgeH12 -XelNaga_Caverns_Floating_BridgeV12Out,XelNaga_Caverns_Floating_BridgeV12Out -XelNaga_Caverns_Floating_BridgeV12,XelNaga_Caverns_Floating_BridgeV12 -YoinkSiegeTankMissile,YoinkSiegeTankMissile -XelNaga_Caverns_Door,XelNaga_Caverns_Door -Ice2x2NonConjoined,Ice2x2NonConjoined -RavagerCocoon,RavagerCocoon -Ravager,Ravager -RavagerBurrowed,RavagerBurrowed -ThorAP,ThorAP -LocustMPFlying,LocustMPFlying -Disruptor,Disruptor -Adept,Adept -AiurTempleBridgeNE8Out,AiurTempleBridgeNE8Out -AiurTempleBridgeNE10Out,AiurTempleBridgeNE10Out -AiurTempleBridgeNE12Out,AiurTempleBridgeNE12Out -AiurTempleBridgeNW8Out,AiurTempleBridgeNW8Out -AiurTempleBridgeNW10Out,AiurTempleBridgeNW10Out -AiurTempleBridgeNW12Out,AiurTempleBridgeNW12Out -VoidMPImmortalReviveCorpse,VoidMPImmortalReviveCorpse -GuardianCocoonMP,GuardianCocoonMP -GuardianMP,GuardianMP -DevourerCocoonMP,DevourerCocoonMP -DevourerMP,DevourerMP -DefilerMPBurrowed,DefilerMPBurrowed -DefilerMP,DefilerMP -OracleStasisTrap,OracleStasisTrap -DisruptorPhased,DisruptorPhased -LiberatorAG,LiberatorAG -Liberator,Liberator -LocustMPPrecursor,LocustMPPrecursor -ReleaseInterceptorsBeacon,ReleaseInterceptorsBeacon -AdeptPhaseShift,AdeptPhaseShift -RavagerCorrosiveBileMissile,RavagerCorrosiveBileMissile -HydraliskImpaleMissile,HydraliskImpaleMissile -CycloneMissile,CycloneMissile -RavagerWeaponMissile,RavagerWeaponMissile -ScoutMPAirWeaponLeft,ScoutMPAirWeaponLeft -ScoutMPAirWeaponRight,ScoutMPAirWeaponRight -ArbiterMPWeaponMissile,ArbiterMPWeaponMissile -GuardianMPWeapon,GuardianMPWeapon -DevourerMPWeaponMissile,DevourerMPWeaponMissile -QueenMPEnsnareMissile,QueenMPEnsnareMissile -QueenMPSpawnBroodlingsMissile,QueenMPSpawnBroodlingsMissile -LightningBombWeapon,LightningBombWeapon -HERCPlacement,HERCPlacement -GrappleWeapon,GrappleWeapon -CausticSprayMissile,CausticSprayMissile -ParasiticBombMissile,ParasiticBombMissile -ParasiticBombDummy,ParasiticBombDummy -AdeptWeapon,AdeptWeapon -AdeptUpgradeWeapon,AdeptUpgradeWeapon -LiberatorMissile,LiberatorMissile -LiberatorDamageMissile,LiberatorDamageMissile -LiberatorAGMissile,LiberatorAGMissile -KD8Charge,KD8Charge -KD8ChargeWeapon,KD8ChargeWeapon -XelNagaDestructibleRampBlocker,XelNagaDestructibleRampBlocker -HERC,HERC -FlyoverUnit,FlyoverUnit -ScoutMP,ScoutMP -ScourgeMP,ScourgeMP -QueenMP,QueenMP -XelNagaDestructibleRampBlocker6S,XelNagaDestructibleRampBlocker6S -XelNagaDestructibleRampBlocker6SE,XelNagaDestructibleRampBlocker6SE -XelNagaDestructibleRampBlocker6E,XelNagaDestructibleRampBlocker6E -XelNagaDestructibleRampBlocker6NE,XelNagaDestructibleRampBlocker6NE -XelNagaDestructibleRampBlocker6N,XelNagaDestructibleRampBlocker6N -XelNagaDestructibleRampBlocker6NW,XelNagaDestructibleRampBlocker6NW -XelNagaDestructibleRampBlocker6W,XelNagaDestructibleRampBlocker6W -XelNagaDestructibleRampBlocker6SW,XelNagaDestructibleRampBlocker6SW -XelNagaDestructibleRampBlocker8S,XelNagaDestructibleRampBlocker8S -XelNagaDestructibleRampBlocker8SE,XelNagaDestructibleRampBlocker8SE -XelNagaDestructibleRampBlocker8E,XelNagaDestructibleRampBlocker8E -XelNagaDestructibleRampBlocker8NE,XelNagaDestructibleRampBlocker8NE -XelNagaDestructibleRampBlocker8N,XelNagaDestructibleRampBlocker8N -XelNagaDestructibleRampBlocker8NW,XelNagaDestructibleRampBlocker8NW -XelNagaDestructibleRampBlocker8W,XelNagaDestructibleRampBlocker8W -XelNagaDestructibleRampBlocker8SW,XelNagaDestructibleRampBlocker8SW -MineralField750,MineralField750 -RichMineralField750,RichMineralField750 -LabMineralField750,LabMineralField750 -TransportOverlordCocoon,TransportOverlordCocoon -OverlordTransport,OverlordTransport -BypassArmorDrone,BypassArmorDrone -CorrosiveParasiteWeapon,CorrosiveParasiteWeapon -GhostAlternate,GhostAlternate -GhostNova,GhostNova -MarineACGluescreenDummy,MarineACGluescreenDummy -FirebatACGluescreenDummy,FirebatACGluescreenDummy -MedicACGluescreenDummy,MedicACGluescreenDummy -MarauderACGluescreenDummy,MarauderACGluescreenDummy -VultureACGluescreenDummy,VultureACGluescreenDummy -SiegeTankACGluescreenDummy,SiegeTankACGluescreenDummy -VikingACGluescreenDummy,VikingACGluescreenDummy -BansheeACGluescreenDummy,BansheeACGluescreenDummy -BattlecruiserACGluescreenDummy,BattlecruiserACGluescreenDummy -OrbitalCommandACGluescreenDummy,OrbitalCommandACGluescreenDummy -BunkerACGluescreenDummy,BunkerACGluescreenDummy -MissileTurretACGluescreenDummy,MissileTurretACGluescreenDummy -HellbatACGluescreenDummy,HellbatACGluescreenDummy -GoliathACGluescreenDummy,GoliathACGluescreenDummy -CycloneACGluescreenDummy,CycloneACGluescreenDummy -WraithACGluescreenDummy,WraithACGluescreenDummy -ScienceVesselACGluescreenDummy,ScienceVesselACGluescreenDummy -HerculesACGluescreenDummy,HerculesACGluescreenDummy -ThorACGluescreenDummy,ThorACGluescreenDummy -PerditionTurretACGluescreenDummy,PerditionTurretACGluescreenDummy -FlamingBettyACGluescreenDummy,FlamingBettyACGluescreenDummy -DevastationTurretACGluescreenDummy,DevastationTurretACGluescreenDummy -BlasterBillyACGluescreenDummy,BlasterBillyACGluescreenDummy -SpinningDizzyACGluescreenDummy,SpinningDizzyACGluescreenDummy -ZerglingKerriganACGluescreenDummy,ZerglingKerriganACGluescreenDummy -RaptorACGluescreenDummy,RaptorACGluescreenDummy -QueenCoopACGluescreenDummy,QueenCoopACGluescreenDummy -HydraliskACGluescreenDummy,HydraliskACGluescreenDummy -HydraliskLurkerACGluescreenDummy,HydraliskLurkerACGluescreenDummy -MutaliskBroodlordACGluescreenDummy,MutaliskBroodlordACGluescreenDummy -BroodLordACGluescreenDummy,BroodLordACGluescreenDummy -UltraliskACGluescreenDummy,UltraliskACGluescreenDummy -TorrasqueACGluescreenDummy,TorrasqueACGluescreenDummy -OverseerACGluescreenDummy,OverseerACGluescreenDummy -LurkerACGluescreenDummy,LurkerACGluescreenDummy -SpineCrawlerACGluescreenDummy,SpineCrawlerACGluescreenDummy -SporeCrawlerACGluescreenDummy,SporeCrawlerACGluescreenDummy -NydusNetworkACGluescreenDummy,NydusNetworkACGluescreenDummy -OmegaNetworkACGluescreenDummy,OmegaNetworkACGluescreenDummy -ZerglingZagaraACGluescreenDummy,ZerglingZagaraACGluescreenDummy -SwarmlingACGluescreenDummy,SwarmlingACGluescreenDummy -BanelingACGluescreenDummy,BanelingACGluescreenDummy -SplitterlingACGluescreenDummy,SplitterlingACGluescreenDummy -AberrationACGluescreenDummy,AberrationACGluescreenDummy -ScourgeACGluescreenDummy,ScourgeACGluescreenDummy -CorruptorACGluescreenDummy,CorruptorACGluescreenDummy -BileLauncherACGluescreenDummy,BileLauncherACGluescreenDummy -SwarmQueenACGluescreenDummy,SwarmQueenACGluescreenDummy -RoachACGluescreenDummy,RoachACGluescreenDummy -RoachVileACGluescreenDummy,RoachVileACGluescreenDummy -RavagerACGluescreenDummy,RavagerACGluescreenDummy -SwarmHostACGluescreenDummy,SwarmHostACGluescreenDummy -MutaliskACGluescreenDummy,MutaliskACGluescreenDummy -GuardianACGluescreenDummy,GuardianACGluescreenDummy -DevourerACGluescreenDummy,DevourerACGluescreenDummy -ViperACGluescreenDummy,ViperACGluescreenDummy -BrutaliskACGluescreenDummy,BrutaliskACGluescreenDummy -LeviathanACGluescreenDummy,LeviathanACGluescreenDummy -ZealotACGluescreenDummy,ZealotACGluescreenDummy -ZealotAiurACGluescreenDummy,ZealotAiurACGluescreenDummy -DragoonACGluescreenDummy,DragoonACGluescreenDummy -HighTemplarACGluescreenDummy,HighTemplarACGluescreenDummy -ArchonACGluescreenDummy,ArchonACGluescreenDummy -ImmortalACGluescreenDummy,ImmortalACGluescreenDummy -ObserverACGluescreenDummy,ObserverACGluescreenDummy -PhoenixAiurACGluescreenDummy,PhoenixAiurACGluescreenDummy -ReaverACGluescreenDummy,ReaverACGluescreenDummy -TempestACGluescreenDummy,TempestACGluescreenDummy -PhotonCannonACGluescreenDummy,PhotonCannonACGluescreenDummy -ZealotVorazunACGluescreenDummy,ZealotVorazunACGluescreenDummy -ZealotShakurasACGluescreenDummy,ZealotShakurasACGluescreenDummy -StalkerShakurasACGluescreenDummy,StalkerShakurasACGluescreenDummy -DarkTemplarShakurasACGluescreenDummy,DarkTemplarShakurasACGluescreenDummy -CorsairACGluescreenDummy,CorsairACGluescreenDummy -VoidRayACGluescreenDummy,VoidRayACGluescreenDummy -VoidRayShakurasACGluescreenDummy,VoidRayShakurasACGluescreenDummy -OracleACGluescreenDummy,OracleACGluescreenDummy -DarkArchonACGluescreenDummy,DarkArchonACGluescreenDummy -DarkPylonACGluescreenDummy,DarkPylonACGluescreenDummy -ZealotPurifierACGluescreenDummy,ZealotPurifierACGluescreenDummy -SentryPurifierACGluescreenDummy,SentryPurifierACGluescreenDummy -ImmortalKaraxACGluescreenDummy,ImmortalKaraxACGluescreenDummy -ColossusACGluescreenDummy,ColossusACGluescreenDummy -ColossusPurifierACGluescreenDummy,ColossusPurifierACGluescreenDummy -PhoenixPurifierACGluescreenDummy,PhoenixPurifierACGluescreenDummy -CarrierACGluescreenDummy,CarrierACGluescreenDummy -CarrierAiurACGluescreenDummy,CarrierAiurACGluescreenDummy -KhaydarinMonolithACGluescreenDummy,KhaydarinMonolithACGluescreenDummy -ShieldBatteryACGluescreenDummy,ShieldBatteryACGluescreenDummy -PermanentCreepBlocker1x1,PermanentCreepBlocker1x1 -SentryACGluescreenDummy,SentryACGluescreenDummy -SnowRefinery_Terran_ExtendingBridgeNEShort8Out,SnowRefinery_Terran_ExtendingBridgeNEShort8Out -SnowRefinery_Terran_ExtendingBridgeNEShort8,SnowRefinery_Terran_ExtendingBridgeNEShort8 -SnowRefinery_Terran_ExtendingBridgeNWShort8Out,SnowRefinery_Terran_ExtendingBridgeNWShort8Out -SnowRefinery_Terran_ExtendingBridgeNWShort8,SnowRefinery_Terran_ExtendingBridgeNWShort8 -Tarsonis_DoorN,Tarsonis_DoorN -Tarsonis_DoorNLowered,Tarsonis_DoorNLowered -Tarsonis_DoorNE,Tarsonis_DoorNE -Tarsonis_DoorNELowered,Tarsonis_DoorNELowered -Tarsonis_DoorE,Tarsonis_DoorE -Tarsonis_DoorELowered,Tarsonis_DoorELowered -Tarsonis_DoorNW,Tarsonis_DoorNW -Tarsonis_DoorNWLowered,Tarsonis_DoorNWLowered -AiurLightBridgeNE8Out,AiurLightBridgeNE8Out -AiurLightBridgeNE8,AiurLightBridgeNE8 -AiurLightBridgeNE10Out,AiurLightBridgeNE10Out -AiurLightBridgeNE10,AiurLightBridgeNE10 -AiurLightBridgeNE12Out,AiurLightBridgeNE12Out -AiurLightBridgeNE12,AiurLightBridgeNE12 -AiurLightBridgeNW8Out,AiurLightBridgeNW8Out -AiurLightBridgeNW8,AiurLightBridgeNW8 -AiurLightBridgeNW10Out,AiurLightBridgeNW10Out -AiurLightBridgeNW10,AiurLightBridgeNW10 -AiurLightBridgeNW12Out,AiurLightBridgeNW12Out -AiurLightBridgeNW12,AiurLightBridgeNW12 -ShakurasLightBridgeNE8Out,ShakurasLightBridgeNE8Out -ShakurasLightBridgeNE8,ShakurasLightBridgeNE8 -ShakurasLightBridgeNE10Out,ShakurasLightBridgeNE10Out -ShakurasLightBridgeNE10,ShakurasLightBridgeNE10 -ShakurasLightBridgeNE12Out,ShakurasLightBridgeNE12Out -ShakurasLightBridgeNE12,ShakurasLightBridgeNE12 -ShakurasLightBridgeNW8Out,ShakurasLightBridgeNW8Out -ShakurasLightBridgeNW8,ShakurasLightBridgeNW8 -ShakurasLightBridgeNW10Out,ShakurasLightBridgeNW10Out -ShakurasLightBridgeNW10,ShakurasLightBridgeNW10 -ShakurasLightBridgeNW12Out,ShakurasLightBridgeNW12Out -ShakurasLightBridgeNW12,ShakurasLightBridgeNW12 -AiurLightBridgeAbandonedNE8Out,AiurLightBridgeAbandonedNE8Out -AiurLightBridgeAbandonedNE8,AiurLightBridgeAbandonedNE8 -AiurLightBridgeAbandonedNE10Out,AiurLightBridgeAbandonedNE10Out -AiurLightBridgeAbandonedNE10,AiurLightBridgeAbandonedNE10 -AiurLightBridgeAbandonedNE12Out,AiurLightBridgeAbandonedNE12Out -AiurLightBridgeAbandonedNE12,AiurLightBridgeAbandonedNE12 -AiurLightBridgeAbandonedNW8Out,AiurLightBridgeAbandonedNW8Out -AiurLightBridgeAbandonedNW8,AiurLightBridgeAbandonedNW8 -AiurLightBridgeAbandonedNW10Out,AiurLightBridgeAbandonedNW10Out -AiurLightBridgeAbandonedNW10,AiurLightBridgeAbandonedNW10 -AiurLightBridgeAbandonedNW12Out,AiurLightBridgeAbandonedNW12Out -AiurLightBridgeAbandonedNW12,AiurLightBridgeAbandonedNW12 -CollapsiblePurifierTowerDebris,CollapsiblePurifierTowerDebris -PurifierRichMineralField,PurifierRichMineralField -PurifierRichMineralField750,PurifierRichMineralField750 -CollapsiblePurifierTowerPushUnit,CollapsiblePurifierTowerPushUnit -CycloneMissileLargeAir,CycloneMissileLargeAir -CycloneMissileLarge,CycloneMissileLarge -DefilerMPDarkSwarmWeapon,DefilerMPDarkSwarmWeapon -SlaynElementalGrabWeapon,SlaynElementalGrabWeapon -SlaynElementalGrabAirUnit,SlaynElementalGrabAirUnit -SlaynElementalGrabGroundUnit,SlaynElementalGrabGroundUnit -SlaynElementalWeapon,SlaynElementalWeapon -Moopy,Moopy -Replicant,Replicant -AiurTempleBridgeDestructibleNE8Out,AiurTempleBridgeDestructibleNE8Out -AiurTempleBridgeDestructibleNE10Out,AiurTempleBridgeDestructibleNE10Out -AiurTempleBridgeDestructibleNE12Out,AiurTempleBridgeDestructibleNE12Out -AiurTempleBridgeDestructibleNW8Out,AiurTempleBridgeDestructibleNW8Out -AiurTempleBridgeDestructibleNW10Out,AiurTempleBridgeDestructibleNW10Out -AiurTempleBridgeDestructibleNW12Out,AiurTempleBridgeDestructibleNW12Out -AiurTempleBridgeDestructibleSW8Out,AiurTempleBridgeDestructibleSW8Out -AiurTempleBridgeDestructibleSW10Out,AiurTempleBridgeDestructibleSW10Out -AiurTempleBridgeDestructibleSW12Out,AiurTempleBridgeDestructibleSW12Out -AiurTempleBridgeDestructibleSE8Out,AiurTempleBridgeDestructibleSE8Out -AiurTempleBridgeDestructibleSE10Out,AiurTempleBridgeDestructibleSE10Out -AiurTempleBridgeDestructibleSE12Out,AiurTempleBridgeDestructibleSE12Out -CorsairMP,CorsairMP -ArbiterMP,ArbiterMP -DefilerMPPlagueWeapon,DefilerMPPlagueWeapon -ReptileCrate,ReptileCrate -SlaynSwarmHostSpawnFlyer,SlaynSwarmHostSpawnFlyer -SlaynElemental,SlaynElemental -PurifierVespeneGeyser,PurifierVespeneGeyser -ShakurasVespeneGeyser,ShakurasVespeneGeyser -CollapsiblePurifierTowerDiagonal,CollapsiblePurifierTowerDiagonal -CreepOnlyBlocker4x4,CreepOnlyBlocker4x4 -PurifierMineralField,PurifierMineralField -PurifierMineralField750,PurifierMineralField750 -Beacon_Nova,Beacon_Nova -Beacon_NovaSmall,Beacon_NovaSmall -Ursadon,Ursadon -Ursula,Ursula -PylonOvercharged,PylonOvercharged -AdeptPiercingWeapon,AdeptPiercingWeapon -BunkerUpgradedACGluescreenDummy,BunkerUpgradedACGluescreenDummy -EliteMarineACGluescreenDummy,EliteMarineACGluescreenDummy -MarauderCommandoACGluescreenDummy,MarauderCommandoACGluescreenDummy -SpecOpsGhostACGluescreenDummy,SpecOpsGhostACGluescreenDummy -HellbatRangerACGluescreenDummy,HellbatRangerACGluescreenDummy -StrikeGoliathACGluescreenDummy,StrikeGoliathACGluescreenDummy -HeavySiegeTankACGluescreenDummy,HeavySiegeTankACGluescreenDummy -RaidLiberatorACGluescreenDummy,RaidLiberatorACGluescreenDummy -RavenTypeIIACGluescreenDummy,RavenTypeIIACGluescreenDummy -CovertBansheeACGluescreenDummy,CovertBansheeACGluescreenDummy -RailgunTurretACGluescreenDummy,RailgunTurretACGluescreenDummy -BlackOpsMissileTurretACGluescreenDummy,BlackOpsMissileTurretACGluescreenDummy -SupplicantACGluescreenDummy,SupplicantACGluescreenDummy -StalkerTaldarimACGluescreenDummy,StalkerTaldarimACGluescreenDummy -SentryTaldarimACGluescreenDummy,SentryTaldarimACGluescreenDummy -HighTemplarTaldarimACGluescreenDummy,HighTemplarTaldarimACGluescreenDummy -ImmortalTaldarimACGluescreenDummy,ImmortalTaldarimACGluescreenDummy -ColossusTaldarimACGluescreenDummy,ColossusTaldarimACGluescreenDummy -WarpPrismTaldarimACGluescreenDummy,WarpPrismTaldarimACGluescreenDummy -PhotonCannonTaldarimACGluescreenDummy,PhotonCannonTaldarimACGluescreenDummy -PortCity_Bridge_UnitNE8Out,PortCity_Bridge_UnitNE8Out -PortCity_Bridge_UnitNE8,PortCity_Bridge_UnitNE8 -PortCity_Bridge_UnitSE8Out,PortCity_Bridge_UnitSE8Out -PortCity_Bridge_UnitSE8,PortCity_Bridge_UnitSE8 -PortCity_Bridge_UnitNW8Out,PortCity_Bridge_UnitNW8Out -PortCity_Bridge_UnitNW8,PortCity_Bridge_UnitNW8 -PortCity_Bridge_UnitSW8Out,PortCity_Bridge_UnitSW8Out -PortCity_Bridge_UnitSW8,PortCity_Bridge_UnitSW8 -PortCity_Bridge_UnitNE10Out,PortCity_Bridge_UnitNE10Out -PortCity_Bridge_UnitNE10,PortCity_Bridge_UnitNE10 -PortCity_Bridge_UnitSE10Out,PortCity_Bridge_UnitSE10Out -PortCity_Bridge_UnitSE10,PortCity_Bridge_UnitSE10 -PortCity_Bridge_UnitNW10Out,PortCity_Bridge_UnitNW10Out -PortCity_Bridge_UnitNW10,PortCity_Bridge_UnitNW10 -PortCity_Bridge_UnitSW10Out,PortCity_Bridge_UnitSW10Out -PortCity_Bridge_UnitSW10,PortCity_Bridge_UnitSW10 -PortCity_Bridge_UnitNE12Out,PortCity_Bridge_UnitNE12Out -PortCity_Bridge_UnitNE12,PortCity_Bridge_UnitNE12 -PortCity_Bridge_UnitSE12Out,PortCity_Bridge_UnitSE12Out -PortCity_Bridge_UnitSE12,PortCity_Bridge_UnitSE12 -PortCity_Bridge_UnitNW12Out,PortCity_Bridge_UnitNW12Out -PortCity_Bridge_UnitNW12,PortCity_Bridge_UnitNW12 -PortCity_Bridge_UnitSW12Out,PortCity_Bridge_UnitSW12Out -PortCity_Bridge_UnitSW12,PortCity_Bridge_UnitSW12 -PortCity_Bridge_UnitN8Out,PortCity_Bridge_UnitN8Out -PortCity_Bridge_UnitN8,PortCity_Bridge_UnitN8 -PortCity_Bridge_UnitS8Out,PortCity_Bridge_UnitS8Out -PortCity_Bridge_UnitS8,PortCity_Bridge_UnitS8 -PortCity_Bridge_UnitE8Out,PortCity_Bridge_UnitE8Out -PortCity_Bridge_UnitE8,PortCity_Bridge_UnitE8 -PortCity_Bridge_UnitW8Out,PortCity_Bridge_UnitW8Out -PortCity_Bridge_UnitW8,PortCity_Bridge_UnitW8 -PortCity_Bridge_UnitN10Out,PortCity_Bridge_UnitN10Out -PortCity_Bridge_UnitN10,PortCity_Bridge_UnitN10 -PortCity_Bridge_UnitS10Out,PortCity_Bridge_UnitS10Out -PortCity_Bridge_UnitS10,PortCity_Bridge_UnitS10 -PortCity_Bridge_UnitE10Out,PortCity_Bridge_UnitE10Out -PortCity_Bridge_UnitE10,PortCity_Bridge_UnitE10 -PortCity_Bridge_UnitW10Out,PortCity_Bridge_UnitW10Out -PortCity_Bridge_UnitW10,PortCity_Bridge_UnitW10 -PortCity_Bridge_UnitN12Out,PortCity_Bridge_UnitN12Out -PortCity_Bridge_UnitN12,PortCity_Bridge_UnitN12 -PortCity_Bridge_UnitS12Out,PortCity_Bridge_UnitS12Out -PortCity_Bridge_UnitS12,PortCity_Bridge_UnitS12 -PortCity_Bridge_UnitE12Out,PortCity_Bridge_UnitE12Out -PortCity_Bridge_UnitE12,PortCity_Bridge_UnitE12 -PortCity_Bridge_UnitW12Out,PortCity_Bridge_UnitW12Out -PortCity_Bridge_UnitW12,PortCity_Bridge_UnitW12 -DestructibleExpeditionGate6x6,DestructibleExpeditionGate6x6 -DestructibleZergInfestation3x3,DestructibleZergInfestation3x3 -Elsecaro_Colonist_Hut,Elsecaro_Colonist_Hut -CompoundMansion_DoorN,CompoundMansion_DoorN -CompoundMansion_DoorNLowered,CompoundMansion_DoorNLowered -CompoundMansion_DoorNE,CompoundMansion_DoorNE -CompoundMansion_DoorNELowered,CompoundMansion_DoorNELowered -CompoundMansion_DoorE,CompoundMansion_DoorE -CompoundMansion_DoorELowered,CompoundMansion_DoorELowered -CompoundMansion_DoorNW,CompoundMansion_DoorNW -CompoundMansion_DoorNWLowered,CompoundMansion_DoorNWLowered -BattleStationMineralField,BattleStationMineralField -BattleStationMineralField750,BattleStationMineralField750 -ImmortalFenixACGluescreenDummy,ImmortalFenixACGluescreenDummy -XelNagaDestructibleBlocker8NE,XelNagaDestructibleBlocker8NE -SILiberatorACGluescreenDummy,SILiberatorACGluescreenDummy -XelNagaDestructibleBlocker6SW,XelNagaDestructibleBlocker6SW -XelNagaDestructibleBlocker8N,XelNagaDestructibleBlocker8N -StukovInfestedCivilianACGluescreenDummy,StukovInfestedCivilianACGluescreenDummy -ObserverFenixACGluescreenDummy,ObserverFenixACGluescreenDummy -XelNagaDestructibleBlocker6NW,XelNagaDestructibleBlocker6NW -XelNagaDestructibleBlocker8S,XelNagaDestructibleBlocker8S -StukovInfestedDiamondbackACGluescreenDummy,StukovInfestedDiamondbackACGluescreenDummy -SentryFenixACGluescreenDummy,SentryFenixACGluescreenDummy -XelNagaDestructibleBlocker8SE,XelNagaDestructibleBlocker8SE -XelNagaDestructibleBlocker6S,XelNagaDestructibleBlocker6S -XelNagaDestructibleBlocker8W,XelNagaDestructibleBlocker8W -StukovBroodQueenACGluescreenDummy,StukovBroodQueenACGluescreenDummy -XelNagaDestructibleBlocker6SE,XelNagaDestructibleBlocker6SE -SnowGlazeStarterMP,SnowGlazeStarterMP -XelNagaDestructibleBlocker6E,XelNagaDestructibleBlocker6E -StukovInfestedMarineACGluescreenDummy,StukovInfestedMarineACGluescreenDummy -XelNagaDestructibleBlocker6NE,XelNagaDestructibleBlocker6NE -StukovInfestedSiegeTankACGluescreenDummy,StukovInfestedSiegeTankACGluescreenDummy -ZealotFenixACGluescreenDummy,ZealotFenixACGluescreenDummy -DisruptorACGluescreenDummy,DisruptorACGluescreenDummy -XelNagaDestructibleBlocker8SW,XelNagaDestructibleBlocker8SW -ScoutACGluescreenDummy,ScoutACGluescreenDummy -XelNagaDestructibleBlocker8E,XelNagaDestructibleBlocker8E -XelNagaDestructibleBlocker6N,XelNagaDestructibleBlocker6N -AdeptFenixACGluescreenDummy,AdeptFenixACGluescreenDummy -StukovInfestedTrooperACGluescreenDummy,StukovInfestedTrooperACGluescreenDummy -CarrierFenixACGluescreenDummy,CarrierFenixACGluescreenDummy -ColossusFenixACGluescreenDummy,ColossusFenixACGluescreenDummy -StukovInfestedMissileTurretACGluescreenDummy,StukovInfestedMissileTurretACGluescreenDummy -XelNagaDestructibleBlocker8NW,XelNagaDestructibleBlocker8NW -PhotonCannonFenixACGluescreenDummy,PhotonCannonFenixACGluescreenDummy -StukovInfestedBunkerACGluescreenDummy,StukovInfestedBunkerACGluescreenDummy -StukovInfestedBansheeACGluescreenDummy,StukovInfestedBansheeACGluescreenDummy -XelNagaDestructibleBlocker6W,XelNagaDestructibleBlocker6W -VikingSkinPreview,VikingSkinPreview -RavenRepairDrone,RavenRepairDrone -PrimalWurmACGluescreenDummy,PrimalWurmACGluescreenDummy -PrimalImpalerACGluescreenDummy,PrimalImpalerACGluescreenDummy -HHWidowMineACGluescreenDummy,HHWidowMineACGluescreenDummy -PrimalUltraliskACGluescreenDummy,PrimalUltraliskACGluescreenDummy -OverseerZagaraACGluescreenDummy,OverseerZagaraACGluescreenDummy -RavenRepairDroneReleaseWeapon,RavenRepairDroneReleaseWeapon -SiegeTankSkinPreview,SiegeTankSkinPreview -CycloneMissileLargeAirAlternative,CycloneMissileLargeAirAlternative -SNARE_PLACEHOLDER,SNARE_PLACEHOLDER -ShieldBattery,ShieldBattery -HighTemplarSkinPreview,HighTemplarSkinPreview -CreeperHostACGluescreenDummy,CreeperHostACGluescreenDummy -OverseerSiegeMode,OverseerSiegeMode -PrimalRoachACGluescreenDummy,PrimalRoachACGluescreenDummy -InfestedAcidSpinesWeapon,InfestedAcidSpinesWeapon -PrimalZerglingACGluescreenDummy,PrimalZerglingACGluescreenDummy -HHReaperACGluescreenDummy,HHReaperACGluescreenDummy -PrimalSwarmHostACGluescreenDummy,PrimalSwarmHostACGluescreenDummy -HHRavenACGluescreenDummy,HHRavenACGluescreenDummy -RavenShredderMissileWeapon,RavenShredderMissileWeapon -PrimalMutaliskACGluescreenDummy,PrimalMutaliskACGluescreenDummy -FireRoachACGluescreenDummy,FireRoachACGluescreenDummy -HHHellionTankACGluescreenDummy,HHHellionTankACGluescreenDummy -HHBomberPlatformACGluescreenDummy,HHBomberPlatformACGluescreenDummy -LiberatorSkinPreview,LiberatorSkinPreview -ObserverSiegeMode,ObserverSiegeMode -PrimalGuardianACGluescreenDummy,PrimalGuardianACGluescreenDummy -HHWraithACGluescreenDummy,HHWraithACGluescreenDummy -HighTemplarWeaponMissile,HighTemplarWeaponMissile -PrimalHydraliskACGluescreenDummy,PrimalHydraliskACGluescreenDummy -QueenZagaraACGluescreenDummy,QueenZagaraACGluescreenDummy -HHVikingACGluescreenDummy,HHVikingACGluescreenDummy -HHBattlecruiserACGluescreenDummy,HHBattlecruiserACGluescreenDummy -RavenScramblerMissile,RavenScramblerMissile -HHMercStarportACGluescreenDummy,HHMercStarportACGluescreenDummy -RavasaurACGluescreenDummy,RavasaurACGluescreenDummy -TyrannozorACGluescreenDummy,TyrannozorACGluescreenDummy -InfestorEnsnareAttackMissile,InfestorEnsnareAttackMissile -HHMissileTurretACGluescreenDummy,HHMissileTurretACGluescreenDummy -WarpPrismSkinPreview,WarpPrismSkinPreview -ZeratulWarpPrismACGluescreenDummy,ZeratulWarpPrismACGluescreenDummy -TychusMedicACGluescreenDummy,TychusMedicACGluescreenDummy -ParasiticBombRelayDummy,ParasiticBombRelayDummy -ZeratulDisruptorACGluescreenDummy,ZeratulDisruptorACGluescreenDummy -ZeratulImmortalACGluescreenDummy,ZeratulImmortalACGluescreenDummy -TychusHERCACGluescreenDummy,TychusHERCACGluescreenDummy -RenegadeMissileTurret,RenegadeMissileTurret -ZeratulDarkTemplarACGluescreenDummy,ZeratulDarkTemplarACGluescreenDummy -TychusFirebatACGluescreenDummy,TychusFirebatACGluescreenDummy -ZeratulObserverACGluescreenDummy,ZeratulObserverACGluescreenDummy -ZeratulSentryACGluescreenDummy,ZeratulSentryACGluescreenDummy -TychusGhostACGluescreenDummy,TychusGhostACGluescreenDummy -TychusWarhoundACGluescreenDummy,TychusWarhoundACGluescreenDummy -TychusMarauderACGluescreenDummy,TychusMarauderACGluescreenDummy -RenegadeLongboltMissileWeapon,RenegadeLongboltMissileWeapon -TychusSpectreACGluescreenDummy,TychusSpectreACGluescreenDummy -TychusSCVAutoTurretACGluescreenDummy,TychusSCVAutoTurretACGluescreenDummy -ZeratulStalkerACGluescreenDummy,ZeratulStalkerACGluescreenDummy -ZeratulPhotonCannonACGluescreenDummy,ZeratulPhotonCannonACGluescreenDummy -Viking,Viking -TychusReaperACGluescreenDummy,TychusReaperACGluescreenDummy diff --git a/sc2reader/decoders.py b/sc2reader/decoders.py deleted file mode 100644 index b2ff35f..0000000 --- a/sc2reader/decoders.py +++ /dev/null @@ -1,379 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from io import BytesIO - -import struct -import functools - -try: - from collections import OrderedDict -except ImportError as e: - from ordereddict import OrderedDict - - -class ByteDecoder(object): - """ - :param contents: The string or file-like object to decode - :param endian: Either > or <. Indicates the endian the bytes are stored in. - - Used to unpack parse byte aligned files. - """ - - #: The Bytes object used internaly for reading from the - #: decoder contents. cStringIO is faster than managing our - #: own string access in python. For PyPy installations a - #: managed string implementation might be faster. - _buffer = None - - #: The string buffer being decoded. A direct reference - #: is kept around to make read_range and peek faster. - _contents = "" - - def __init__(self, contents, endian): - """ Accepts both strings and files implementing ``read()`` and - decodes them in the specified endian format. - """ - if hasattr(contents, 'read'): - self._contents = contents.read() - else: - self._contents = contents - - self._buffer = BytesIO(self._contents) - self.length = len(self._contents) - - # Expose the basic BytesIO interface - self.read = self._buffer.read - self.seek = self._buffer.seek - self.tell = self._buffer.tell - - # decode the endian value if necessary - self.endian = endian.lower() - if self.endian.lower() == 'little': - self.endian = "<" - elif self.endian.lower() == 'big': - self.endian = ">" - elif self.endian not in ('<', '>'): - raise ValueError("Endian must be one of 'little', '<', 'big', or '>' but was: "+self.endian) - - # Pre-compiling - self._unpack_int = struct.Struct(str(self.endian+'I')).unpack - self._unpack_short = struct.Struct(str(self.endian+'H')).unpack - self._unpack_longlong = struct.Struct(str(self.endian+'Q')).unpack - self._unpack_bytes = lambda bytes: bytes if self.endian == '>' else bytes[::-1] - - def done(self): - """ Returns true when all bytes have been decoded """ - return self.tell() == self.length - - def read_range(self, start, end): - """ Returns the raw byte string from the indicated address range """ - return self._contents[start:end] - - def peek(self, count): - """ Returns the raw byte string for the next ``count`` bytes """ - start = self.tell() - return self._contents[start:start+count] - - def read_uint8(self): - """ Returns the next byte as an unsigned integer """ - return ord(self.read(1)) - - def read_uint16(self): - """ Returns the next two bytes as an unsigned integer """ - return self._unpack_short(self.read(2))[0] - - def read_uint32(self): - """ Returns the next four bytes as an unsigned integer """ - return self._unpack_int(self.read(4))[0] - - def read_uint64(self): - """ Returns the next eight bytes as an unsigned integer """ - return self._unpack_longlong(self.read(8))[0] - - def read_bytes(self, count): - """ Returns the next ``count`` bytes as a byte string """ - return self._unpack_bytes(self.read(count)) - - def read_uint(self, count): - """ Returns the next ``count`` bytes as an unsigned integer """ - unpack = struct.Struct(str(self.endian+'B'*count)).unpack - uint = 0 - for byte in unpack(self.read(count)): - uint = uint << 8 | byte - return uint - - def read_string(self, count, encoding='utf8'): - """ Read a string in given encoding (default utf8) that is ``count`` bytes long """ - return self.read_bytes(count).decode(encoding) - - def read_cstring(self, encoding='utf8'): - """ Read a NULL byte terminated character string decoded with given encoding (default utf8). Ignores endian. """ - cstring = BytesIO() - while True: - c = self.read(1) - if ord(c) == 0: - return cstring.getvalue().decode(encoding) - else: - cstring.write(c) - - -class BitPackedDecoder(object): - """ - :param contents: The string of file-like object to decode - - Extends :class:`ByteDecoder`. Always packed BIG_ENDIAN - - Adds capabilities for parsing files that Blizzard has packed in - bits and not in bytes. - - """ - #: The ByteDecoder used internally to read byte - #: aligned values. - _buffer = None - - #: Tracks the how many bits have already been used - #: from the current byte. - _bit_shift = 0 - - #: Holds the byte, if any, that hasn't had its bits - #: fully used yet. - _next_byte = None - - #: Maps bit shifts to low bit masks used for grabbing - #: the first bits off of the next byte. - _lo_masks = [0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF] - - #: Maps bit shifts to high bit masks used for grabbing - #: the remaining bits off of the previous byte. - _hi_masks = [0xFF ^ mask for mask in _lo_masks] - - #: Maps bit shifts to high and low bit masks. Used for - #: joining bytes when we are not byte aligned. - _bit_masks = list(zip(_lo_masks, _hi_masks)) - - def __init__(self, contents): - self._buffer = ByteDecoder(contents, endian='BIG') - - # Partially expose the ByteBuffer interface - self.length = self._buffer.length - self.tell = self._buffer.tell - self.peek = self._buffer.peek - self.read_range = self._buffer.read_range - - # Reduce the number of lookups required to read - self._read = self._buffer.read - self.read_bool = functools.partial(self.read_bits, 1) - - def done(self): - """ Returns true when all bytes in the buffer have been used""" - return self.tell() == self.length - - def byte_align(self): - """ Moves cursor to the beginning of the next byte """ - self._next_byte = None - self._bit_shift = 0 - - def read_uint8(self): - """ Returns the next 8 bits as an unsigned integer """ - data = ord(self._buffer.read(1)) - - if self._bit_shift != 0: - lo_mask, hi_mask = self._bit_masks[self._bit_shift] - hi_bits = self._next_byte & hi_mask - lo_bits = data & lo_mask - self._next_byte = data - data = hi_bits | lo_bits - - return data - - def read_uint16(self): - """ Returns the next 16 bits as an unsigned integer """ - data = self._buffer.read_uint16() - - if self._bit_shift != 0: - lo_mask, hi_mask = self._bit_masks[self._bit_shift] - hi_bits = (self._next_byte & hi_mask) << 8 - mi_bits = (data & 0xFF00) >> (8-self._bit_shift) - lo_bits = (data & lo_mask) - self._next_byte = data & 0xFF - data = hi_bits | mi_bits | lo_bits - - return data - - def read_uint32(self): - """ Returns the next 32 bits as an unsigned integer """ - data = self._buffer.read_uint32() - - if self._bit_shift != 0: - lo_mask, hi_mask = self._bit_masks[self._bit_shift] - hi_bits = (self._next_byte & hi_mask) << 24 - mi_bits = (data & 0xFFFFFF00) >> (8-self._bit_shift) - lo_bits = (data & lo_mask) - self._next_byte = data & 0xFF - data = hi_bits | mi_bits | lo_bits - - return data - - def read_uint64(self): - """ Returns the next 64 bits as an unsigned integer """ - data = self._buffer.read_uint64() - - if self._bit_shift != 0: - lo_mask, hi_mask = self._bit_masks[self._bit_shift] - hi_bits = (self._next_byte & hi_mask) << 56 - mi_bits = (data & 0xFFFFFFFFFFFFFF00) >> (8-self._bit_shift) - lo_bits = (data & lo_mask) - self._next_byte = data & 0xFF - data = hi_bits | mi_bits | lo_bits - - return data - - def read_vint(self): - """ Reads a signed integer of variable length """ - byte = ord(self._buffer.read(1)) - negative = byte & 0x01 - result = (byte & 0x7F) >> 1 - bits = 6 - while byte & 0x80: - byte = self.read_uint8() - result |= (byte & 0x7F) << bits - bits += 7 - return -result if negative else result - - def read_aligned_bytes(self, count): - """ Skips to the beginning of the next byte and returns the next ``count`` bytes as a byte string """ - self.byte_align() - return self._buffer.read_bytes(count) - - def read_aligned_string(self, count, encoding='utf8'): - """ Skips to the beginning of the next byte and returns the next ``count`` bytes decoded with encoding (default utf8) """ - self.byte_align() - return self._buffer.read_string(count, encoding) - - def read_bytes(self, count): - """ Returns the next ``count*8`` bits as a byte string """ - data = self._buffer.read_bytes(count) - - if self._bit_shift != 0: - temp_buffer = BytesIO() - prev_byte = self._next_byte - lo_mask, hi_mask = self._bit_masks[self._bit_shift] - for next_byte in struct.unpack(str("B")*count, data): - temp_buffer.write(struct.pack(str("B"), prev_byte & hi_mask | next_byte & lo_mask)) - prev_byte = next_byte - - self._next_byte = prev_byte - data = temp_buffer.getvalue() - temp_buffer.truncate(0) - - return data - - def read_bits(self, count): - """ Returns the next ``count`` bits as an unsigned integer """ - result = 0 - bits = count - bit_shift = self._bit_shift - - # If we've got a byte in progress use it first - if bit_shift != 0: - bits_left = 8-bit_shift - - if bits_left < bits: - bits -= bits_left - result = (self._next_byte >> bit_shift) << bits - elif bits_left > bits: - self._bit_shift += bits - return (self._next_byte >> bit_shift) & self._lo_masks[bits] - else: - self._bit_shift = 0 - return self._next_byte >> bit_shift - - # Then grab any additional whole bytes as needed - if bits >= 8: - bytes = int(bits/8) - - if bytes == 1: - bits -= 8 - result |= self._buffer.read_uint8() << bits - - elif bytes == 2: - bits -= 16 - result |= self._buffer.read_uint16() << bits - - elif bytes == 4: - bits -= 32 - result |= self._buffer.read_uint32() << bits - - else: - for byte in struct.unpack(str("B")*bytes, self._read(bytes)): - bits -= 8 - result |= byte << bits - - # Grab any trailing bits from the next byte - if bits != 0: - self._next_byte = ord(self._read(1)) - result |= self._next_byte & self._lo_masks[bits] - - self._bit_shift = bits - return result - - def read_frames(self): - """ Reads a frame count as an unsigned integer """ - byte = self.read_uint8() - time, additional_bytes = byte >> 2, byte & 0x03 - if additional_bytes == 0: - return time - elif additional_bytes == 1: - return time << 8 | self.read_uint8() - elif additional_bytes == 2: - return time << 16 | self.read_uint16() - elif additional_bytes == 3: - return time << 24 | self.read_uint16() << 8 | self.read_uint8() - - def read_struct(self, datatype=None): - """ Reads a nested data structure. If the type is not specified the - first byte is used as the type identifier. - """ - self.byte_align() - datatype = ord(self._buffer.read(1)) if datatype is None else datatype - - if datatype == 0x00: # array - data = [self.read_struct() for i in range(self.read_vint())] - - elif datatype == 0x01: # bitarray, weird alignment requirements - bits = self.read_vint() - data = self.read_bits(bits) - - elif datatype == 0x02: # blob - length = self.read_vint() - data = self._buffer.read_bytes(length) - - elif datatype == 0x03: # choice - flag = self.read_vint() - data = self.read_struct() - - elif datatype == 0x04: # optional - exists = self._buffer.read_uint8() != 0 - data = self.read_struct() if exists else None - - elif datatype == 0x05: # Struct - entries = self.read_vint() - data = dict([(self.read_vint(), self.read_struct()) for i in range(entries)]) - - elif datatype == 0x06: # u8 - data = ord(self._buffer.read(1)) - - elif datatype == 0x07: # u32 - data = self._buffer.read_bytes(4) # self.read_uint32() - - elif datatype == 0x08: # u64 - data = self._buffer.read_uint64() - - elif datatype == 0x09: # vint - data = self.read_vint() - - else: - raise TypeError("Unknown Data Structure: '{0}'".format(datatype)) - - return data diff --git a/sc2reader/engine/__init__.py b/sc2reader/engine/__init__.py deleted file mode 100644 index cd72973..0000000 --- a/sc2reader/engine/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import sys -from sc2reader.engine.engine import GameEngine -from sc2reader.engine.events import PluginExit -from sc2reader.engine.utils import GameState -from sc2reader.engine import plugins - - -def setGameEngine(engine): - module = sys.modules[__name__] - module.run = engine.run - module.plugins = engine.plugins - module.register_plugin = engine.register_plugin - module.register_plugins = engine.register_plugins - -_default_engine = GameEngine() -_default_engine.register_plugin(plugins.GameHeartNormalizer()) -_default_engine.register_plugin(plugins.ContextLoader()) -setGameEngine(_default_engine) diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py deleted file mode 100644 index 65caced..0000000 --- a/sc2reader/engine/engine.py +++ /dev/null @@ -1,216 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import collections -from sc2reader.events import * -from sc2reader.engine.events import InitGameEvent, EndGameEvent, PluginExit - - -class GameEngine(object): - """ GameEngine Specification - -------------------------- - - The game engine runs through all the events for a given replay in - chronological order. For each event, event handlers from registered - plugins are executed in order of plugin registration from most general - to most specific. - - Example Usage:: - - class Plugin1(): - def handleCommandEvent(self, event, replay): - pass - - class Plugin2(): - def handleEvent(self, event, replay): - pass - - def handleTargetUnitCommandEvent(self, event, replay): - pass - - ... - - engine = GameEngine(plugins=[Plugin1(), Plugin2()], **options) - engine.register_plugins(Plugin3(), Plugin(4)) - engine.reigster_plugin(Plugin(5)) - engine.run(replay) - - Calls functions in the following order for a ``TargetUnitCommandEvent``:: - - Plugin1.handleCommandEvent(event, replay) - Plugin2.handleEvent(event, replay) - Plugin2.handleTargetUnitCommandEvent(event, replay) - - - Plugin Specification - ------------------------- - - Plugins can opt in to handle events with methods in the format: - - def handleEventName(self, event, replay) - - In addition to handling specific event types, plugins can also - handle events more generally by handling built-in parent classes - from the list below:: - - * handleEvent - called for every single event of all types - * handleMessageEvent - called for events in replay.message.events - * handleGameEvent - called for events in replay.game.events - * handleTrackerEvent - called for events in replay.tracker.events - * handleCommandEvent - called for all types of command events - * handleControlGroupEvent - called for all player control group events - - Plugins may also handle optional ``InitGame`` and ``EndGame`` events generated - by the GameEngine before and after processing all the events: - - * handleInitGame - is called prior to processing a new replay to provide - an opportunity for the plugin to clear internal state and set up any - replay state necessary. - - * handleEndGame - is called after all events have been processed and - can be used to perform post processing on aggrated data or clean up - intermediate data caches. - - Event handlers can choose to ``yield`` additional events which will be injected - into the event stream directly after the event currently being processed. This - feature allows for message passing between plugins. An ExpansionTracker plugin - could notify all other plugins of a new ExpansionEvent that they could opt to - process:: - - def handleUnitDoneEvent(self, event, replay): - if event.unit.name == 'Nexus': - yield ExpansionEvent(event.frame, event.unit) - .... - - If a plugin wishes to stop processing a replay it can yield a PluginExit event before returning:: - - def handleEvent(self, event, replay): - if len(replay.tracker_events) == 0: - yield PluginExit(self, code=0, details=dict(msg="tracker events required")) - return - ... - - def handleCommandEvent(self, event, replay): - try: - possibly_throwing_error() - catch Error as e: - logger.error(e) - yield PluginExit(self, code=0, details=dict(msg="Unexpected exception")) - - The GameEngine will intercept this event and remove the plugin from the list of - active plugins for this replay. The exit code and details will be available from the - replay:: - - code, details = replay.plugins['MyPlugin'] - - If your plugin depends on another plugin, it is a good idea to implement handlePluginExit - and be alerted if the plugin that you require fails. This way you can exit gracefully. You - can also check to see if the plugin name is in ``replay.plugin_failures``:: - - if 'RequiredPlugin' in replay.plugin_failures: - code, details = replay.plugins['RequiredPlugin'] - message = "RequiredPlugin failed with code: {0}. Cannot continue.".format(code) - yield PluginExit(self, code=1, details=dict(msg=message)) - """ - def __init__(self, plugins=[]): - self._plugins = list() - self.register_plugins(*plugins) - - def register_plugin(self, plugin): - self._plugins.append(plugin) - - def register_plugins(self, *plugins): - for plugin in plugins: - self.register_plugin(plugin) - - def plugins(self): - return self._plugins - - def run(self, replay): - # A map of [event.name] => event handlers in plugin registration order - # ranked from most generic to most specific - handlers = dict() - - # Create a local copy of the plugins list. As plugins exit we can - # remove them from this list and regenerate event handlers. - plugins = list(self._plugins) - - # Create a dict for storing plugin exit codes and details. - replay.plugin_result = replay.plugins = dict() - - # Create a list storing replay.plugins keys for failures. - replay.plugin_failures = list() - - # Fill event event queue with the replay events, bookmarked by Init and End events. - event_queue = collections.deque() - event_queue.append(InitGameEvent()) - event_queue.extend(replay.events) - event_queue.append(EndGameEvent()) - - # Work through the events in the queue, pushing newly emitted events to - # the front of the line for immediate processing. - while len(event_queue) > 0: - event = event_queue.popleft() - - if event.name == 'PluginExit': - # Remove the plugin and reset the handlers. - plugins.remove(event.plugin) - handlers.clear() - replay.plugin_result[event.plugin.name] = (event.code, event.details) - if event.code != 0: - replay.plugin_failures.append(event.plugin.name) - - # If we haven't compiled a list of handlers for this event yet, do so! - if event.name not in handlers: - event_handlers = self._get_event_handlers(event, plugins) - handlers[event.name] = event_handlers - else: - event_handlers = handlers[event.name] - - # Events have the option of yielding one or more additional events - # which get processed after the current event finishes. The new_events - # batch is constructed in reverse order because extendleft reverses - # the order again with a series of appendlefts. - new_events = collections.deque() - for event_handler in event_handlers: - try: - for new_event in (event_handler(event, replay) or []): - if new_event.name == 'PluginExit': - new_events.append(new_event) - break - else: - new_events.appendleft(new_event) - except Exception as e: - if event_handler.__self__.name in ['ContextLoader']: - # Certain built in plugins should probably still cause total failure - raise # Maybe?? - else: - new_event = PluginExit(event_handler.__self__, code=1, details=dict(error=e)) - new_events.append(new_event) - event_queue.extendleft(new_events) - - # For any plugins that didn't yield a PluginExit event or throw unexpected exceptions, - # record a successful completion. - for plugin in plugins: - replay.plugin_result[plugin.name] = (0, dict()) - - def _get_event_handlers(self, event, plugins): - return sum([self._get_plugin_event_handlers(plugin, event) for plugin in plugins], []) - - def _get_plugin_event_handlers(self, plugin, event): - handlers = list() - if isinstance(event, Event) and hasattr(plugin, 'handleEvent'): - handlers.append(getattr(plugin, 'handleEvent', None)) - if isinstance(event, MessageEvent) and hasattr(plugin, 'handleMessageEvent'): - handlers.append(getattr(plugin, 'handleMessageEvent', None)) - if isinstance(event, GameEvent) and hasattr(plugin, 'handleGameEvent'): - handlers.append(getattr(plugin, 'handleGameEvent', None)) - if isinstance(event, TrackerEvent) and hasattr(plugin, 'handleTrackerEvent'): - handlers.append(getattr(plugin, 'handleTrackerEvent', None)) - if isinstance(event, CommandEvent) and hasattr(plugin, 'handleCommandEvent'): - handlers.append(getattr(plugin, 'handleCommandEvent', None)) - if isinstance(event, ControlGroupEvent) and hasattr(plugin, 'handleControlGroupEvent'): - handlers.append(getattr(plugin, 'handleControlGroupEvent', None)) - if hasattr(plugin, 'handle'+event.name): - handlers.append(getattr(plugin, 'handle'+event.name, None)) - return handlers diff --git a/sc2reader/engine/events.py b/sc2reader/engine/events.py deleted file mode 100644 index 44387e5..0000000 --- a/sc2reader/engine/events.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - - -class InitGameEvent(object): - name = 'InitGame' - - -class EndGameEvent(object): - name = 'EndGame' - - -class PluginExit(object): - name = 'PluginExit' - - def __init__(self, plugin, code=0, details=None): - self.plugin = plugin - self.code = code - self.details = details or {} diff --git a/sc2reader/engine/plugins/__init__.py b/sc2reader/engine/plugins/__init__.py deleted file mode 100644 index 15e77ff..0000000 --- a/sc2reader/engine/plugins/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from sc2reader.engine.plugins.apm import APMTracker -from sc2reader.engine.plugins.selection import SelectionTracker -from sc2reader.engine.plugins.context import ContextLoader -from sc2reader.engine.plugins.supply import SupplyTracker -from sc2reader.engine.plugins.creeptracker import CreepTracker -from sc2reader.engine.plugins.gameheart import GameHeartNormalizer - diff --git a/sc2reader/engine/plugins/apm.py b/sc2reader/engine/plugins/apm.py deleted file mode 100644 index 526bf02..0000000 --- a/sc2reader/engine/plugins/apm.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from collections import defaultdict - - -class APMTracker(object): - """ - Builds ``player.aps`` and ``player.apm`` dictionaries where an action is - any Selection, ControlGroup, or Command event. - - Also provides ``player.avg_apm`` which is defined as the sum of all the - above actions divided by the number of seconds played by the player (not - necessarily the whole game) multiplied by 60. - - APM is 0 for games under 1 minute in length. - """ - name = 'APMTracker' - - def handleInitGame(self, event, replay): - for human in replay.humans: - human.apm = defaultdict(int) - human.aps = defaultdict(int) - human.seconds_played = replay.length.seconds - - def handleControlGroupEvent(self, event, replay): - event.player.aps[event.second] += 1.4 - event.player.apm[int(event.second/60)] += 1.4 - - def handleSelectionEvent(self, event, replay): - event.player.aps[event.second] += 1.4 - event.player.apm[int(event.second/60)] += 1.4 - - def handleCommandEvent(self, event, replay): - event.player.aps[event.second] += 1.4 - event.player.apm[int(event.second/60)] += 1.4 - - def handlePlayerLeaveEvent(self, event, replay): - event.player.seconds_played = event.second - - def handleEndGame(self, event, replay): - for human in replay.humans: - if len(human.apm.keys()) > 0: - human.avg_apm = sum(human.aps.values())/float(human.seconds_played)*60 - else: - human.avg_apm = 0 diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py deleted file mode 100644 index 6b5362b..0000000 --- a/sc2reader/engine/plugins/context.py +++ /dev/null @@ -1,306 +0,0 @@ -# -*- coding: utf-8 -*- -# TODO: Dry this up a bit! -from __future__ import absolute_import, print_function, unicode_literals, division - -from sc2reader.log_utils import loggable -from sc2reader.utils import Length - - -@loggable -class ContextLoader(object): - name = 'ContextLoader' - - def handleInitGame(self, event, replay): - replay.units = set() - replay.unit = dict() - - # keep track of last TargetUnitCommandEvent for UpdateTargetUnitCommandEvent - self.last_target_ability_event = {} - - def handleGameEvent(self, event, replay): - self.load_message_game_player(event, replay) - - def handleMessageEvent(self, event, replay): - self.load_message_game_player(event, replay) - - def handleCommandEvent(self, event, replay): - if not replay.datapack: - return - - if event.ability_id not in replay.datapack.abilities: - # safeguard against missing abilities - if event.player.pid in self.last_target_ability_event: - del self.last_target_ability_event[event.player.pid] - - if not getattr(replay, 'marked_error', None): - replay.marked_error = True - event.logger.error(replay.filename) - event.logger.error("Release String: " + replay.release_string) - for player in replay.players: - try: - event.logger.error("\t"+unicode(player).encode('ascii', 'ignore')) - except NameError: # unicode() is not defined in Python 3 - event.logger.error("\t"+player.__str__()) - - self.logger.error("{0}\t{1}\tMissing ability {2:X} from {3}".format(event.frame, event.player.name, event.ability_id, replay.datapack.__class__.__name__)) - - else: - event.ability = replay.datapack.abilities[event.ability_id] - event.ability_name = event.ability.name - - if event.other_unit_id in replay.objects: - event.other_unit = replay.objects[event.other_unit_id] - elif event.other_unit_id is not None: - self.logger.error("Other unit {0} not found".format(event.other_unit_id)) - - def handleTargetUnitCommandEvent(self, event, replay): - self.last_target_ability_event[event.player.pid] = event - - if not replay.datapack: - return - - if event.target_unit_id in replay.objects: - event.target = replay.objects[event.target_unit_id] - if not replay.tracker_events and not event.target.is_type(event.target_unit_type): - replay.datapack.change_type(event.target, event.target_unit_type, event.frame) - else: - # Often when the target_unit_id is not in replay.objects it is 0 because it - # is a target building/destructable hidden by fog of war. Perhaps we can match - # it through the fog using location? - unit = replay.datapack.create_unit(event.target_unit_id, event.target_unit_type, event.frame) - event.target = unit - replay.objects[event.target_unit_id] = unit - - def handleUpdateTargetUnitCommandEvent(self, event, replay): - # We may not find a TargetUnitCommandEvent before finding an - # UpdateTargetUnitCommandEvent, perhaps due to Missing Abilities in the - # datapack - if event.player.pid in self.last_target_ability_event: - # store corresponding TargetUnitCommandEvent data in this event - # currently using for *MacroTracker only, so only need ability name - event.ability_name = self.last_target_ability_event[event.player.pid].ability_name - - self.handleTargetUnitCommandEvent(event, replay) - - def handleSelectionEvent(self, event, replay): - if not replay.datapack: - return - - units = list() - # TODO: Blizzard calls these subgroup flags but that doesn't make sense right now - for (unit_id, unit_type, subgroup_flags, intra_subgroup_flags) in event.new_unit_info: - # If we don't have access to tracker events, use selection events to create - # new units and track unit type changes. It won't be perfect, but it is better - # than nothing. - if not replay.tracker_events: - # Starting at 23925 the default viking mode is assault. Most people expect - # the default viking mode to be figher so fudge it a bit here. - if replay.versions[1] == 2 and replay.build >= 23925 and unit_type == 71: - unit_type = 72 - - if unit_id in replay.objects: - unit = replay.objects[unit_id] - if not unit.is_type(unit_type): - replay.datapack.change_type(unit, unit_type, event.frame) - else: - unit = replay.datapack.create_unit(unit_id, unit_type, event.frame) - replay.objects[unit_id] = unit - - # If we have tracker events, the unit must already exist and must already - # have the correct unit type. - elif unit_id in replay.objects: - unit = replay.objects[unit_id] - - # Except when it doesn't. - else: - unit = replay.datapack.create_unit(unit_id, unit_type, event.frame) - replay.objects[unit_id] = unit - - - # Selection events hold flags on units (like hallucination) - unit.apply_flags(intra_subgroup_flags) - - units.append(unit) - - event.new_units = event.objects = units - - def handleResourceTradeEvent(self, event, replay): - event.sender = event.player - event.recipient = replay.players[event.recipient_id] - - def handleHijackReplayGameEvent(self, event, replay): - replay.resume_from_replay = True - replay.resume_method = event.method - replay.resume_user_info = event.user_infos - - def handlePlayerStatsEvent(self, event, replay): - self.load_tracker_player(event, replay) - - def handleUnitBornEvent(self, event, replay): - self.load_tracker_upkeeper(event, replay) - self.load_tracker_controller(event, replay) - - if not replay.datapack: - return - - if event.unit_id in replay.objects: - # This can happen because game events are done first - event.unit = replay.objects[event.unit_id] - else: - # TODO: How to tell if something is hallucination? - event.unit = replay.datapack.create_unit(event.unit_id, event.unit_type_name, event.frame) - replay.objects[event.unit_id] = event.unit - - replay.active_units[event.unit_id_index] = event.unit - event.unit.location = event.location - event.unit.started_at = event.frame - event.unit.finished_at = event.frame - - if event.unit_upkeeper: - event.unit.owner = event.unit_upkeeper - event.unit.owner.units.append(event.unit) - - def handleUnitDiedEvent(self, event, replay): - if not replay.datapack: - return - - if event.unit_id in replay.objects: - event.unit = replay.objects[event.unit_id] - event.unit.died_at = event.frame - event.unit.location = event.location - if event.unit_id_index in replay.active_units: - del replay.active_units[event.unit_id_index] - else: - self.logger.error("Unable to delete unit index {0} at {1} [{2}], index not active.".format(event.killer_pid, Length(seconds=event.second), event.frame)) - else: - self.logger.error("Unit {0} died at {1} [{2}] before it was born!".format(event.unit_id, Length(seconds=event.second), event.frame)) - - if event.killing_player_id in replay.player: - event.killing_player = event.killer = replay.player[event.killing_player_id] - if event.unit: - event.unit.killing_player = event.unit.killed_by = event.killing_player - event.killing_player.killed_units.append(event.unit) - elif event.killing_player_id: - self.logger.error("Unknown killing player id {0} at {1} [{2}]".format(event.killing_player_id, Length(seconds=event.second), event.frame)) - - if event.killing_unit_id in replay.objects: - event.killing_unit = replay.objects[event.killing_unit_id] - if event.unit: - event.unit.killing_unit = event.killing_unit - event.killing_unit.killed_units.append(event.unit) - elif event.killing_unit_id: - self.logger.error("Unknown killing unit id {0} at {1} [{2}]".format(event.killing_unit_id, Length(seconds=event.second), event.frame)) - - def handleUnitOwnerChangeEvent(self, event, replay): - self.load_tracker_controller(event, replay) - self.load_tracker_upkeeper(event, replay) - - if not replay.datapack: - return - - if event.unit_id in replay.objects: - event.unit = replay.objects[event.unit_id] - else: - self.logger.error("Unit {0} owner changed at {1} [{2}] before it was born!".format(event.unit_id, Length(seconds=event.second), event.frame)) - - if event.unit_upkeeper: - if event.unit.owner: - event.unit.owner.units.remove(event.unit) - event.unit.owner = event.unit_upkeeper - event.unit_upkeeper.units.append(event.unit) - - def handleUnitTypeChangeEvent(self, event, replay): - if not replay.datapack: - return - - if event.unit_id in replay.objects: - event.unit = replay.objects[event.unit_id] - replay.datapack.change_type(event.unit, event.unit_type_name, event.frame) - else: - self.logger.error("Unit {0} type changed at {1} [{2}] before it was born!".format(event.unit_id, Length(seconds=event.second))) - - def handleUpgradeCompleteEvent(self, event, replay): - self.load_tracker_player(event, replay) - # TODO: We don't have upgrade -> ability maps - # TODO: we can probably do the same thing we did for units - - def handleUnitInitEvent(self, event, replay): - self.load_tracker_upkeeper(event, replay) - self.load_tracker_controller(event, replay) - - if not replay.datapack: - return - - if event.unit_id in replay.objects: - event.unit = replay.objects[event.unit_id] - else: - # TODO: How to tell if something is hallucination? - event.unit = replay.datapack.create_unit(event.unit_id, event.unit_type_name, event.frame) - replay.objects[event.unit_id] = event.unit - - replay.active_units[event.unit_id_index] = event.unit - event.unit.location = event.location - event.unit.started_at = event.frame - - if event.unit_upkeeper: - event.unit.owner = event.unit_upkeeper - event.unit.owner.units.append(event.unit) - - def handleUnitDoneEvent(self, event, replay): - if not replay.datapack: - return - - if event.unit_id in replay.objects: - event.unit = replay.objects[event.unit_id] - event.unit.finished_at = event.frame - else: - self.logger.error("Unit {0} done at {1} [{2}] before it was started!".format(event.killer_pid, Length(seconds=event.second), event.frame)) - - def handleUnitPositionsEvent(self, event, replay): - if not replay.datapack: - return - - for unit_index, (x, y) in event.positions: - if unit_index in replay.active_units: - unit = replay.active_units[unit_index] - unit.location = (x, y) - event.units[unit] = unit.location - else: - self.logger.error("Unit at active_unit index {0} moved at {1} [{2}] but it doesn't exist!".format(event.killer_pid, Length(seconds=event.second), event.frame)) - - def load_message_game_player(self, event, replay): - if replay.versions[1] == 1 or (replay.versions[1] == 2 and replay.build < 24247): - if event.pid in replay.entity: - event.player = replay.entity[event.pid] - event.player.events.append(event) - elif event.pid != 16: - self.logger.error("Bad pid ({0}) for event {1} at {2} [{3}].".format(event.pid, event.__class__, Length(seconds=event.second), event.frame)) - else: - pass # This is a global event - - else: # Now event.pid is actually a user id for human entities - if event.pid < len(replay.humans): - event.player = replay.human[event.pid] - event.player.events.append(event) - elif event.pid != 16: - self.logger.error("Bad pid ({0}) for event {1} at {2} [{3}].".format(event.pid, event.__class__, Length(seconds=event.second), event.frame)) - else: - pass # This is a global event - - def load_tracker_player(self, event, replay): - if event.pid in replay.entity: - event.player = replay.entity[event.pid] - else: - self.logger.error("Bad pid ({0}) for event {1} at {2} [{3}].".format(event.pid, event.__class__, Length(seconds=event.second), event.frame)) - - def load_tracker_upkeeper(self, event, replay): - if event.upkeep_pid in replay.entity: - event.unit_upkeeper = replay.entity[event.upkeep_pid] - elif event.upkeep_pid != 0: - self.logger.error("Bad upkeep_pid ({0}) for event {1} at {2} [{3}].".format(event.upkeep_pid, event.__class__, Length(seconds=event.second), event.frame)) - - def load_tracker_controller(self, event, replay): - if event.control_pid in replay.entity: - event.unit_controller = replay.entity[event.control_pid] - elif event.control_pid != 0: - self.logger.error("Bad control_pid ({0}) for event {1} at {2} [{3}].".format(event.control_pid, event.__class__, Length(seconds=event.second), event.frame)) diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py deleted file mode 100644 index 7f35f86..0000000 --- a/sc2reader/engine/plugins/creeptracker.py +++ /dev/null @@ -1,307 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from io import BytesIO - -try: - from sets import Set -except ImportError: - Set = set -try: - # required for CreepTracker, but CreepTracker is optional - from PIL.Image import open as PIL_open - from PIL.Image import ANTIALIAS -except ImportError: - pass -try: - from StringIO import StringIO -except ImportError: - from io import StringIO -from collections import defaultdict -from itertools import tee - -# The creep tracker plugin -class CreepTracker(object): - ''' - The Creep tracker populates player.max_creep_spread and - player.creep_spread by minute - This uses the creep_tracker class to calculate the features - ''' - name = 'CreepTracker' - - def handleInitGame(self, event, replay): - try: - if len( replay.tracker_events) ==0 : - return - if replay.map is None: - replay.load_map() - self.creepTracker = creep_tracker(replay) - for player in replay.players: - if player.play_race[0] == 'Z': - self.creepTracker.init_cgu_lists(player.pid) - except Exception as e: - print("Whoa! {}".format(e)) - pass - - def handleUnitDiedEvent(self, event, replay): - try: - self.creepTracker.remove_from_list(event.unit_id,event.second) - except Exception as e: - print("Whoa! {}".format(e)) - pass - - - def handleUnitInitEvent(self,event,replay): - try: - if event.unit_type_name in ["CreepTumor", "Hatchery","NydusCanal"] : - self.creepTracker.add_to_list(event.control_pid,event.unit_id,\ - (event.x, event.y), event.unit_type_name,event.second) - except Exception as e: - print("Whoa! {}".format(e)) - pass - - def handleUnitBornEvent(self,event,replay): - try: - if event.unit_type_name== "Hatchery": - self.creepTracker.add_to_list(event.control_pid, event.unit_id,\ - (event.x,event.y),event.unit_type_name,event.second) - except Exception as e: - print("Whoa! {}".format(e)) - pass - - def handleEndGame(self, event, replay): - try: - if len( replay.tracker_events) ==0 : - return - for player in replay.players: - if player.play_race[0] == 'Z': - self.creepTracker.reduce_cgu_per_minute(player.pid) - player.creep_spread_by_minute = self.creepTracker.get_creep_spread_area(player.pid) - # note that player.max_creep_spread may be a tuple or an int - if player.creep_spread_by_minute: - player.max_creep_spread = max(player.creep_spread_by_minute.items(),key=lambda x:x[1]) - else: - ## Else statement is for players with no creep spread(ie: not Zerg) - player.max_creep_spread = 0 - except Exception as e: - print("Whoa! {}".format(e)) - pass - - -## The class used to used to calculate the creep spread -class creep_tracker(): - def __init__(self,replay): - #if the debug option is selected, minimaps will be printed to a file - ##and a stringIO containing the minimap image will be saved for - ##every minite in the game and the minimap with creep highlighted - ## will be printed out. - self.debug = replay.opt['debug'] - ##This list contains creep spread area for each player - self.creep_spread_by_minute = dict() - ## this list contains a minimap highlighted with creep spread for each player - if self.debug: - self.creep_spread_image_by_minute = dict() - ## This list contains all the active cgus in every time frame - self.creep_gen_units = dict() - ## Thist list corresponds to creep_gen_units storing the time of each CGU - self.creep_gen_units_times= dict() - ## convert all possible cgu radii into a sets of coordinates centred around the origin, - ## in order to use this with the CGUs, the centre point will be - ## subtracted with coordinates of cgus created in game - self.unit_name_to_radius={'CreepTumor': 10,"Hatchery":8,"NydusCanal": 5} - self.radius_to_coordinates= dict() - for x in self.unit_name_to_radius: - self.radius_to_coordinates[self.unit_name_to_radius[x]] =\ - self.radius_to_map_positions(self.unit_name_to_radius[x]) - #Get map information - replayMap = replay.map - # extract image from replay package - mapsio = BytesIO(replayMap.minimap) - im = PIL_open(mapsio) - ##remove black box around minimap - -# https://github.com/jonomon/sc2reader/commit/2a793475c0358989e7fda4a75642035a810e2274 -# cropped = im.crop(im.getbbox()) -# cropsize = cropped.size - - cropsizeX = replay.map.map_info.camera_right - replay.map.map_info.camera_left - cropsizeY = replay.map.map_info.camera_top - replay.map.map_info.camera_bottom - cropsize = (cropsizeX,cropsizeY) - - self.map_height = 100.0 - # resize height to MAPHEIGHT, and compute new width that - # would preserve aspect ratio - self.map_width = int(cropsize[0] * (float(self.map_height) / cropsize[1])) - self.mapSize =self.map_height * self.map_width - - ## the following parameters are only needed if minimaps have to be printed -# minimapSize = ( self.map_width,int(self.map_height) ) -# self.minimap_image = cropped.resize(minimapSize, ANTIALIAS) - - mapOffsetX= replayMap.map_info.camera_left - mapOffsetY = replayMap.map_info.camera_bottom - mapCenter = [mapOffsetX+ cropsize[0]/2.0, mapOffsetY + cropsize[1]/2.0] - # this is the center of the minimap image, in pixel coordinates - imageCenter = [(self.map_width/2), self.map_height/2] - # this is the scaling factor to go from the SC2 coordinate - # system to pixel coordinates - self.image_scale = float(self.map_height) / cropsize[1] - self.transX =imageCenter[0] + self.image_scale * (mapCenter[0]) - self.transY = imageCenter[1] + self.image_scale * (mapCenter[1]) - - def radius_to_map_positions(self,radius): - ## this function converts all radius into map coordinates - ## centred around the origin that the creep can exist - ## the cgu_radius_to_map_position function will simply - ## substract every coordinate with the centre point of the tumour - output_coordinates = list() - # Sample a square area using the radius - for x in range (-radius,radius): - for y in range (-radius, radius): - if (x**2 + y**2) <= (radius * radius): - output_coordinates.append((x,y)) - return output_coordinates - - def init_cgu_lists(self, player_id): - self.creep_spread_by_minute[player_id] = defaultdict(int) - if self.debug: - self.creep_spread_image_by_minute[player_id] = defaultdict(StringIO) - self.creep_gen_units[player_id] = list() - self.creep_gen_units_times[player_id] = list() - - def add_to_list(self,player_id,unit_id,unit_location,unit_type,event_time): - # This functions adds a new time frame to creep_generating_units_list - # Each time frame contains a list of all CGUs that are alive - length_cgu_list = len(self.creep_gen_units[player_id]) - if length_cgu_list==0: - self.creep_gen_units[player_id].append([(unit_id, unit_location,unit_type)]) - self.creep_gen_units_times[player_id].append(event_time) - else: - #if the list is not empty, take the previous time frame, - # add the new CGU to it and append it as a new time frame - previous_list = self.creep_gen_units[player_id][length_cgu_list-1][:] - previous_list.append((unit_id, unit_location,unit_type)) - self.creep_gen_units[player_id].append(previous_list) - self.creep_gen_units_times[player_id].append(event_time) - - def remove_from_list(self,unit_id,time_frame): - ## This function searches is given a unit ID for every unit who died - ## the unit id will be searched in cgu_gen_units for matches - ## if there are any, that unit will be removed from active CGUs - ## and appended as a new time frame - for player_id in self.creep_gen_units: - length_cgu_list = len(self.creep_gen_units[player_id]) - if length_cgu_list ==0: - break - cgu_per_player = self.creep_gen_units[player_id] [length_cgu_list-1] - creep_generating_died =filter(lambda x:x[0]==unit_id,cgu_per_player) - for creep_generating_died_unit in creep_generating_died: - new_cgu_per_player = list(filter(lambda x:x != creep_generating_died_unit, cgu_per_player )) - self.creep_gen_units[player_id].append(new_cgu_per_player) - self.creep_gen_units_times[player_id].append(time_frame) - - def cgu_gen_times_to_chunks(self,cgu_time_list): - ## this function returns the index and value of every cgu time - maximum_cgu_time = max(cgu_time_list) - for i in range(0, maximum_cgu_time): - a = list(filter(lambda x_y: x_y[1]//60==i , enumerate(cgu_time_list))) - if len(a)>0: - yield a - - def cgu_in_min_to_cgu_units(self,player_id,cgu_in_minutes): - ## this function takes index and value of CGU times and returns - ## the cgu units with the maximum length - for cgu_per_minute in cgu_in_minutes: - indexes = map(lambda x:x[0], cgu_per_minute) - cgu_units = list() - for index in indexes: - cgu_units.append(self.creep_gen_units[player_id][index]) - cgu_max_in_minute = max(cgu_units,key = len) - yield cgu_max_in_minute - - def reduce_cgu_per_minute(self,player_id): - #the creep_gen_units_lists contains every single time frame - #where a CGU is added, - #To reduce the calculations required, the time frame containing - #the most cgus every minute will be used to represent that minute - cgu_per_minute1, cgu_per_minute2 = tee (self.cgu_gen_times_to_chunks(self.creep_gen_units_times[player_id])) - cgu_unit_max_per_minute = self.cgu_in_min_to_cgu_units(player_id,cgu_per_minute1) - minutes = map(lambda x:int(x[0][1]//60)*60, cgu_per_minute2) - self.creep_gen_units[player_id] = list(cgu_unit_max_per_minute) - self.creep_gen_units_times[player_id] = list(minutes) - - def get_creep_spread_area(self,player_id): - ## iterates through all cgus and and calculate the area - for index,cgu_per_player in enumerate(self.creep_gen_units[player_id]): - # convert cgu list into centre of circles and radius - cgu_radius = map(lambda x: (x[1], self.unit_name_to_radius[x[2]]),\ - cgu_per_player) - # convert event coords to minimap coords - cgu_radius = self.convert_cgu_radius_event_to_map_coord(cgu_radius) - creep_area_positions = self.cgu_radius_to_map_positions(cgu_radius,self.radius_to_coordinates) - cgu_event_time = self.creep_gen_units_times[player_id][index] - cgu_event_time_str=str(int(cgu_event_time//60))+":"+str(cgu_event_time%60) - if self.debug: - self.print_image(creep_area_positions,player_id,cgu_event_time_str) - creep_area = len(creep_area_positions) - self.creep_spread_by_minute[player_id][cgu_event_time]=\ - float(creep_area)/self.mapSize*100 - - return self.creep_spread_by_minute[player_id] - - def cgu_radius_to_map_positions(self,cgu_radius,radius_to_coordinates): - ## This function uses the output of radius_to_map_positions - total_points_on_map = Set() - if len(cgu_radius)==0: - return [] - for cgu in cgu_radius: - point = cgu[0] - radius = cgu[1] - ## subtract all radius_to_coordinates with centre of - ## cgu radius to change centre of circle - cgu_map_position = map( lambda x:(x[0]+point[0],x[1]+point[1])\ - ,self.radius_to_coordinates[radius]) - total_points_on_map= total_points_on_map | Set(cgu_map_position) - return total_points_on_map - - def print_image(self,total_points_on_map,player_id,time_stamp): - minimap_copy = self.minimap_image.copy() - # Convert all creeped points to white - for points in total_points_on_map: - x = points[0] - y = points[1] - x,y = self.check_image_pixel_within_boundary(x,y) - minimap_copy.putpixel((x,y) , (255, 255, 255)) - creeped_image = minimap_copy - # write creeped minimap image to a string as a png - creeped_imageIO = StringIO() - creeped_image.save(creeped_imageIO, "png") - self.creep_spread_image_by_minute[player_id][time_stamp]=creeped_imageIO - ##debug for print out the images - f = open(str(player_id)+'image'+time_stamp+'.png','w') - f.write(creeped_imageIO.getvalue()) - creeped_imageIO.close() - f.close() - - def check_image_pixel_within_boundary(self,pointX, pointY): - pointX = 0 if pointX <0 else pointX - pointY=0 if pointY <0 else pointY - # put a minus 1 to make sure the pixel is not directly on the edge - pointX = int(self.map_width-1 if pointX >= self.map_width else pointX) - pointY = int(self.map_height-1 if pointY >= self.map_height else pointY) - return pointX,pointY - - def convert_cgu_radius_event_to_map_coord(self,cgu_radius): - cgu_radius_new = list() - for cgu in cgu_radius: - x = cgu[0][0] - y = cgu[0][1] - (x,y) = self.convert_event_coord_to_map_coord(x,y) - cgu = ((x,y),cgu[1]) - cgu_radius_new.append(cgu) - return cgu_radius_new - - def convert_event_coord_to_map_coord(self,x,y): - imageX = int(self.map_width - self.transX + self.image_scale * x) - imageY = int(self.transY - self.image_scale * y) - return imageX, imageY diff --git a/sc2reader/engine/plugins/gameheart.py b/sc2reader/engine/plugins/gameheart.py deleted file mode 100644 index 08bfc67..0000000 --- a/sc2reader/engine/plugins/gameheart.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from datetime import datetime -from sc2reader.utils import Length, get_real_type -from sc2reader.objects import Observer, Team -from sc2reader.engine.events import PluginExit -from sc2reader.constants import GAME_SPEED_FACTOR - - -class GameHeartNormalizer(object): - """ - normalize a GameHeart replay to: - 1) reset frames to the game start - 2) remove observing players - 3) fix race selection - 4) fix team selection - If a replay is not a GameHeart replay, it should be left untouched - Hopefully, the changes here will also extend to other replays that use - in-game lobbies - - GameHeart games have some constraints we can use here: - * They are all 1v1's. - * You can't random in GameHeart - """ - name = 'GameHeartNormalizer' - - PRIMARY_BUILDINGS = dict(Hatchery="Zerg", Nexus="Protoss", CommandCenter="Terran") - - def handleInitGame(self, event, replay): - # without tracker events game heart games can't be fixed - if len(replay.tracker_events) == 0: - yield PluginExit(self, code=0, details=dict()) - return - - start_frame = -1 - actual_players = {} - for event in replay.tracker_events: - if start_frame != -1 and event.frame > start_frame + 5: # fuzz it a little - break - if event.name == 'UnitBornEvent' and event.control_pid and event.unit_type_name in self.PRIMARY_BUILDINGS: - # In normal replays, starting units are born on frame zero. - if event.frame == 0: - yield PluginExit(self, code=0, details=dict()) - return - else: - start_frame = event.frame - actual_players[event.control_pid] = self.PRIMARY_BUILDINGS[event.unit_type_name] - - self.fix_entities(replay, actual_players) - self.fix_events(replay, start_frame) - - replay.frames -= start_frame - replay.game_length = Length(seconds=replay.frames / 16) - replay.real_type = get_real_type(replay.teams) - replay.real_length = Length(seconds=int(replay.game_length.seconds/GAME_SPEED_FACTOR[replay.speed])) - replay.start_time = datetime.utcfromtimestamp(replay.unix_timestamp-replay.real_length.seconds) - - def fix_events(self, replay, start_frame): - # Set back the game clock for all events - for event in replay.events: - if event.frame < start_frame: - event.frame = 0 - event.second = 0 - else: - event.frame -= start_frame - event.second = event.frame >> 4 - - def fix_entities(self, replay, actual_players): - # Change the players that aren't playing into observers - for p in [p for p in replay.players if p.pid not in actual_players]: - # Fix the slot data to be accurate - p.slot_data['observe'] = 1 - p.slot_data['team_id'] = None - obs = Observer(p.sid, p.slot_data, p.uid, p.init_data, p.pid) - - # Because these obs start the game as players the client - # creates various Beacon units for them. - obs.units = p.units - - # Remove all references to the old player - del replay.player[p.pid] - del replay.entity[p.pid] - del replay.human[p.uid] - replay.players.remove(p) - replay.entities.remove(p) - replay.humans.remove(p) - - # Create all the necessary references for the new observer - replay.observer[obs.uid] = obs - replay.entity[obs.pid] = obs - replay.human[obs.uid] = obs - replay.observers.append(obs) - replay.entities.append(obs) - replay.humans.append(obs) - - # Maintain order, just in case someone is depending on it - replay.observers = sorted(replay.observers, key=lambda o: o.sid) - replay.entities = sorted(replay.entities, key=lambda o: o.sid) - replay.humans = sorted(replay.humans, key=lambda o: o.sid) - - # Assume one player per team, should be valid for GameHeart games - replay.team = dict() - replay.teams = list() - for index, player in enumerate(replay.players): - team_id = index+1 - team = Team(team_id) - replay.team[team_id] = team - replay.teams.append(team) - player.team = team - team.result = player.result - player.pick_race = actual_players[player.pid] - player.play_race = player.pick_race - team.players = [player] - team.result = player.result - if team.result == 'Win': - replay.winner = team diff --git a/sc2reader/engine/plugins/selection.py b/sc2reader/engine/plugins/selection.py deleted file mode 100644 index 69aa12a..0000000 --- a/sc2reader/engine/plugins/selection.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - - -class SelectionTracker(object): - """ Tracks a player's active selection as an input into other plugins. - - In some situations selection tracking isn't perfect. The plugin will - detect these situations and report errors. For a player will a high - level of selection errors, it may be best to ignore the selection - results as they could have been severely compromised. - - Exposes the following interface, directly integrated into the player: - - for person in replay.entities: - total_errors = person.selection_errors - - selection = person.selection - control_group_0 = selection[0] - ... - control_group_9 = selection[9] - active_selection = selection[10] - - # TODO: list a few error inducing sitations - """ - name = 'SelectionTracker' - - def handleInitGame(self, event, replay): - for person in replay.entities: - person.selection = dict() - for i in range(11): - person.selection[i] = list() - person.selection_errors = 0 - - def handleSelectionEvent(self, event, replay): - selection = event.player.selection[event.control_group] - new_selection, error = self._deselect(selection, event.mask_type, event.mask_data) - new_selection = self._select(new_selection, event.objects) - event.player.selection[event.control_group] = new_selection - if error: - event.player.selection_errors += 1 - - def handleGetControlGroupEvent(self, event, replay): - selection = event.player.selection[event.control_group] - new_selection, error = self._deselect(selection, event.mask_type, event.mask_data) - event.player.selection[10] = new_selection - if error: - event.player.selection_errors += 1 - - def handleSetControlGroupEvent(self, event, replay): - event.player.selection[event.control_group] = event.player.selection[10] - - def handleAddToControlGroupEvent(self, event, replay): - selection = event.player.selection[event.control_group] - new_selection, error = self._deselect(selection, event.mask_type, event.mask_data) - new_selection = self._select(new_selection, event.player.selection[10]) - event.player.selection[event.control_group] = new_selection - if error: - event.player.selection_errors += 1 - - def _select(self, selection, units): - return sorted(set(selection+units)) - - def _deselect(self, selection, mode, data): - """Returns false if there was a data error when deselecting""" - if mode == 'None': - return selection, False - - selection_size, data_size = len(selection), len(data) - - if mode == 'Mask': - # Deselect objects according to deselect mask - sfilter = lambda bit_u: not bit_u[0] - mask = data+[False]*(selection_size-data_size) - new_selection = [u for (bit, u) in filter(sfilter, zip(mask, selection))] - error = data_size > selection_size - - elif mode == 'OneIndices': - # Deselect objects according to indexes - clean_data = list(filter(lambda i: i < selection_size, data)) - new_selection = [u for i, u in enumerate(selection) if i < selection_size] - error = len(list(filter(lambda i: i >= selection_size, data))) != 0 - - elif mode == 'ZeroIndices': - # Select objects according to indexes - clean_data = list(filter(lambda i: i < selection_size, data)) - new_selection = [selection[i] for i in clean_data] - error = len(clean_data) != data_size - - return new_selection, error diff --git a/sc2reader/engine/plugins/supply.py b/sc2reader/engine/plugins/supply.py deleted file mode 100644 index 394a3a6..0000000 --- a/sc2reader/engine/plugins/supply.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from collections import defaultdict - -class SupplyTracker(object): - def add_to_units_alive(self,event,replay): - unit_name = event.unit_type_name - if unit_name in self.unit_name_to_supply: - supplyCount = self.unit_name_to_supply[event.unit_type_name][0] - buildTime = self.unit_name_to_supply[event.unit_type_name][1] - time_built = event.second - buildTime - time_built= 0 if time_built < 0 else time_built - new_unit = (supplyCount, event.unit_id) - self.units_alive[event.control_pid].append(new_unit) - total_supply = sum([x[0] for x in self.units_alive[event.control_pid]]) - replay.players[event.control_pid-1].current_food_used[time_built]= total_supply - print("Second",time_built,replay.players[event.control_pid-1],"SUPPLY",replay.players[event.control_pid-1].current_food_used[time_built]) - - elif unit_name in self.supply_gen_unit: - ## see if the unit provides supply - supply_gen_count = self.supply_gen_unit[event.unit_type_name][0] - build_time = self.supply_gen_unit[event.unit_type_name][1] - time_complete = event.second+ build_time - supply_gen_unit = (supply_gen_count,event.unit_id) - self.supply_gen[event.control_pid].append(supply_gen_unit) - total_supply_gen = sum([x[0] for x in self.supply_gen[event.control_pid]]) - replay.players[event.control_pid-1].current_food_made[time_complete]= total_supply_gen - print("Second",time_complete, replay.players[event.control_pid-1],"Built",replay.players[event.control_pid-1].current_food_made[time_complete]) - else: - print("Unit name {0} does not exist".format(event.unit_type_name)) - return - - def remove_from_units_alive(self,event,replay): - died_unit_id = event.unit_id - for player in replay.player: - dead_unit = filter(lambda x:x[1]==died_unit_id,self.units_alive[player]) - if dead_unit: - self.units_alive[player].remove(dead_unit[0]) - total_supply = sum([x[0] for x in self.units_alive[player]]) - - replay.players[player-1].current_food_used[event.second] = total_supply - print("Second", event.second, "Killed", event.unit.name,"SUPPLY",replay.players[player-1].current_food_used[event.second]) - - dead_supply_gen=filter(lambda x:x[1]==died_unit_id, self.supply_gen[player]) - if dead_supply_gen: - self.supply_gen[player].remove(dead_supply_gen[0]) - total_supply_gen = sum([x[0] for x in self.supply_gen[player]]) - replay.players[player-1].current_food_made[event.second] = total_supply_gen - print("Second", event.second, "Killed", event.unit.name,"SUPPLY",replay.players[player-1].current_food_made[event.second]) - - def handleInitGame(self, event, replay): - ## This dictionary contains te supply of every unit - self.unit_name_to_supply = { - #Zerg - "Drone":(1,17),"Zergling":(1,25),"Baneling":(0,20),"Queen":(2,50),\ - "Hydralisk":(2,33),"Roach":(2,27),"Infestor":(2,50),"Mutalisk":(2,33),\ - "Corruptor":(2,40),"Utralisk":(6,55),"Broodlord":(2,34),\ - "SwarmHost":(3,40), "Viper":(3,40),\ - #Terran - "SCV":(1,17),"Marine":(1,25),"Marauder":(2,30),"SiegeTank":(2,45),\ - "Reaper":(1,45),"Ghost":(2,40),"Hellion":(2,30),"Thor":(6,60),\ - "Viking":(2,42),"Medivac":(2,42),"Raven":(2,60), "Banshee":(3,60),\ - "Battlecruiser":(6,90), "Hellbat":(2,30),"WidowMine":(2,40),\ - #Protoss - "Probe":(1,17),"Zealot":(2,38),"Stalker":(2,42),"Sentry":(2,42),\ - "Observer":(1,30), "Immortal":(4,55),"WarpPrism":(2,50),\ - "Colossus":(6,75), "Phoenix":(2,35),"VoidRay":(4,60), \ - "HighTemplar":(2,55),"DarkTemplar":(2,55), "Archon":(4,12),\ - "Carrier":(6,120), "Mothership":(6,100),"MothershipCore":(2,30),\ - "Oracle":(3,50),"Tempest":(4,60)} - - self.supply_gen_unit = { - #overlord build time is zero because event for units are made when - # it is born not when it's created - "Overlord":(8,0),"Hatchery":(2,100), \ - "SupplyDepot":(8,30),"CommandCenter":(11,100),\ - "Pylon":(8,25),"Nexus":(10,100) - } - ## This list contains a turple of the units supply and unit ID. - ## the purpose of the list is to know which user owns which unit - ## so that when a unit dies, that - self.units_alive = dict() - ## - self.supply_gen = dict() - for player in replay.players: - self.supply_gen[player.pid] = list() - self.units_alive[player.pid] = list() - player.current_food_used = defaultdict(int) - player.current_food_made = defaultdict(int) - player.time_supply_capped = int() - - def handleUnitInitEvent(self,event,replay): - #print ("Init",event.unit_type_name, event.unit_id) - self.add_to_units_alive(event,replay) - - def handleUnitBornEvent(self,event,replay): - #print ("Born",event.unit_type_name,event.unit_id) - self.add_to_units_alive(event,replay) - - def handleUnitDiedEvent(self,event,replay): - if event.unit.name not in self.unit_name_to_supply: - return - self.remove_from_units_alive(event,replay) - - def handleEndGame(self, event, replay): - for player in replay.players: - player.current_food_used = sorted(player.current_food_used.iteritems(), key=lambda x: x[0]) - player.current_food_made = sorted(player.current_food_made.iteritems(), key=lambda x:x[0]) diff --git a/sc2reader/engine/utils.py b/sc2reader/engine/utils.py deleted file mode 100644 index e3a9a18..0000000 --- a/sc2reader/engine/utils.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from bisect import bisect_left - - -class GameState(dict): - def __init__(self, initial_state): - self._frames = list() - self._frameset = set() - self[0] = initial_state - self.locked = False - - def __getitem__(self, frame): - if frame in self: - return super(GameState, self).__getitem__(frame) - - # Get the previous frame from our sorted frame list - # bisect_left returns the left most key where an item is - # less than or equal to the value in that key. If it is - # less than we need to subtract 1 - key = bisect_left(self._frames, frame) - if key == len(self._frames) or self._frames[key] > frame: - prev_frame = self._frames[key - 1] - else: - prev_frame = self._frames[key] - - # If we've locked the game state we don't need deep copies anymore - if self.locked: - state = self[prev_frame] - else: - # Copy the previous state and use it as our basis here - state = self[prev_frame] - if hasattr(state, 'copy'): - state = state.copy() - - self[frame] = state - return state - - def __setitem__(self, frame, value): - if frame not in self._frameset: - self._frames.insert(bisect_left(self._frames, frame), frame) - self._frameset.add(frame) - - super(GameState, self).__setitem__(frame, value) diff --git a/sc2reader/events/__init__.py b/sc2reader/events/__init__.py deleted file mode 100644 index 6ceaa63..0000000 --- a/sc2reader/events/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -# Export all events of all types to the package interface -from sc2reader.events import base, game, message, tracker -from sc2reader.events.base import * -from sc2reader.events.game import * -from sc2reader.events.message import * -from sc2reader.events.tracker import * diff --git a/sc2reader/events/base.py b/sc2reader/events/base.py deleted file mode 100644 index dbea286..0000000 --- a/sc2reader/events/base.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - - -class Event(object): - name = 'Event' diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py deleted file mode 100644 index 7eadebf..0000000 --- a/sc2reader/events/game.py +++ /dev/null @@ -1,648 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from sc2reader.utils import Length -from sc2reader.events.base import Event -from sc2reader.log_utils import loggable - -from itertools import chain - - -@loggable -class GameEvent(Event): - """ - This is the base class for all game events. The attributes below are universally available. - """ - def __init__(self, frame, pid): - #: The id of the player generating the event. This is 16 for global non-player events. - #: Prior to Heart of the Swarm this was the player id. Since HotS it is - #: now the user id (uid), we still call it pid for backwards compatibility. You shouldn't - #: ever need to use this; use :attr:`player` instead. - self.pid = pid - - #: A reference to the :class:`~sc2reader.objects.Player` object representing - #: this player in the replay. Not available for global events (:attr:`is_local` = False) - self.player = None - - #: The frame of the game that this event was recorded at. 16 frames per game second. - self.frame = frame - - #: The second of the game that this event was recorded at. 16 frames per game second. - self.second = frame >> 4 - - #: A flag indicating if it is a local or global event. - self.is_local = (pid != 16) - - #: Short cut string for event class name - self.name = self.__class__.__name__ - - def _str_prefix(self): - if getattr(self, 'pid', 16) == 16: - player_name = "Global" - elif self.player and not self.player.name: - player_name = "Player {0} - ({1})".format(self.player.pid, self.player.play_race) - elif self.player: - player_name = self.player.name - else: - player_name = "no name" - return "{0}\t{1:<15} ".format(Length(seconds=int(self.frame / 16)), player_name) - - def __str__(self): - return self._str_prefix() + self.name - - -class GameStartEvent(GameEvent): - """ - Recorded when the game starts and the frames start to roll. This is a global non-player - event. - """ - def __init__(self, frame, pid, data): - super(GameStartEvent, self).__init__(frame, pid) - - #: ??? - self.data = data - - -class PlayerLeaveEvent(GameEvent): - """ - Recorded when a player leaves the game. - """ - def __init__(self, frame, pid, data): - super(PlayerLeaveEvent, self).__init__(frame, pid) - - #: ??? - self.data = data - - -class UserOptionsEvent(GameEvent): - """ - This event is recorded for each player at the very beginning of the game before the - :class:`GameStartEvent`. - """ - def __init__(self, frame, pid, data): - super(UserOptionsEvent, self).__init__(frame, pid) - #: - self.game_fully_downloaded = data['game_fully_downloaded'] - - #: - self.development_cheats_enabled = data['development_cheats_enabled'] - - #: - self.multiplayer_cheats_enabled = data['multiplayer_cheats_enabled'] - - #: - self.sync_checksumming_enabled = data['sync_checksumming_enabled'] - - #: - self.is_map_to_map_transition = data['is_map_to_map_transition'] - - #: - self.use_ai_beacons = data['use_ai_beacons'] - - #: Are workers sent to auto-mine on game start - self.starting_rally = data['starting_rally'] if 'starting_rally' in data else None - - #: - self.debug_pause_enabled = data['debug_pause_enabled'] - - #: - self.base_build_num = data['base_build_num'] - - -def create_command_event(frame, pid, data): - ability_type = data['data'][0] - if ability_type == 'None': - return BasicCommandEvent(frame, pid, data) - - elif ability_type == 'TargetUnit': - return TargetUnitCommandEvent(frame, pid, data) - - elif ability_type == 'TargetPoint': - return TargetPointCommandEvent(frame, pid, data) - - elif ability_type == 'Data': - return DataCommandEvent(frame, pid, data) - - -@loggable -class CommandEvent(GameEvent): - """ - Ability events are generated when ever a player in the game issues a command - to a unit or group of units. They are split into three subclasses of ability, - each with their own set of associated data. The attributes listed below are - shared across all ability event types. - - See :class:`TargetPointCommandEvent`, :class:`TargetUnitCommandEvent`, and - :class:`DataCommandEvent` for individual details. - """ - def __init__(self, frame, pid, data): - super(CommandEvent, self).__init__(frame, pid) - - #: Flags on the command??? - self.flags = data['flags'] - - #: A dictionary of possible ability flags. Flags are: - #: - #: * alternate - #: * queued - #: * preempt - #: * smart_click - #: * smart_rally - #: * subgroup - #: * set_autocast, - #: * set_autocast_on - #: * user - #: * data_a - #: * data_b - #: * data_passenger - #: * data_abil_queue_order_id, - #: * ai - #: * ai_ignore_on_finish - #: * is_order - #: * script - #: * homogenous_interruption, - #: * minimap - #: * repeat - #: * dispatch_to_other_unit - #: * target_self - #: - self.flag = dict( - alternate=0x1 & self.flags != 0, - queued=0x2 & self.flags != 0, - preempt=0x4 & self.flags != 0, - smart_click=0x8 & self.flags != 0, - smart_rally=0x10 & self.flags != 0, - subgroup=0x20 & self.flags != 0, - set_autocast=0x40 & self.flags != 0, - set_autocast_on=0x80 & self.flags != 0, - user=0x100 & self.flags != 0, - data_a=0x200 & self.flags != 0, - data_passenger=0x200 & self.flags != 0, # alt-name - data_b=0x400 & self.flags != 0, - data_abil_queue_order_id=0x400 & self.flags != 0, # alt-name - ai=0x800 & self.flags != 0, - ai_ignore_on_finish=0x1000 & self.flags != 0, - is_order=0x2000 & self.flags != 0, - script=0x4000 & self.flags != 0, - homogenous_interruption=0x8000 & self.flags != 0, - minimap=0x10000 & self.flags != 0, - repeat=0x20000 & self.flags != 0, - dispatch_to_other_unit=0x40000 & self.flags != 0, - target_self=0x80000 & self.flags != 0, - ) - - #: Flag marking that the command had ability information - self.has_ability = data['ability'] is not None - - #: Link the the ability group - self.ability_link = data['ability']['ability_link'] if self.has_ability else 0 - - #: The index of the ability in the ability group - self.command_index = data['ability']['ability_command_index'] if self.has_ability else 0 - - #: Additional ability data. - self.ability_data = data['ability']['ability_command_data'] if self.has_ability else 0 - - #: Unique identifier for the ability - self.ability_id = self.ability_link << 5 | self.command_index - - #: A reference to the ability being used - self.ability = None - - #: A shortcut to the name of the ability being used - self.ability_name = '' - - #: The type of ability, one of: None (no target), TargetPoint, TargetUnit, or Data - self.ability_type = data['data'][0] - - #: The raw data associated with this ability type - self.ability_type_data = data['data'][1] - - #: Other unit id?? - self.other_unit_id = data['other_unit_tag'] - - #: A reference to the other unit - self.other_unit = None - - def __str__(self): - string = self._str_prefix() - if self.has_ability: - string += "Ability ({0:X})".format(self.ability_id) - if self.ability: - string += " - {0}".format(self.ability.name) - else: - string += "Right Click" - - if self.ability_type == 'TargetUnit': - string += "; Target: {0} [{1:0>8X}]".format(self.target.name, self.target_unit_id) - - if self.ability_type in ('TargetPoint', 'TargetUnit'): - string += "; Location: {0}".format(str(self.location)) - - return string - - -class BasicCommandEvent(CommandEvent): - """ - Extends :class:`CommandEvent` - - This event is recorded for events that have no extra information recorded. - - Note that like all CommandEvents, the event will be recorded regardless - of whether or not the command was successful. - """ - def __init__(self, frame, pid, data): - super(BasicCommandEvent, self).__init__(frame, pid, data) - - -class TargetPointCommandEvent(CommandEvent): - """ - Extends :class:`CommandEvent` - - This event is recorded when ever a player issues a command that targets a location - and NOT a unit. Commands like Psistorm, Attack Move, Fungal Growth, and EMP fall - under this category. - - Note that like all CommandEvents, the event will be recorded regardless - of whether or not the command was successful. - """ - def __init__(self, frame, pid, data): - super(TargetPointCommandEvent, self).__init__(frame, pid, data) - - #: The x coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.x = self.ability_type_data['point'].get('x', 0) / 4096.0 - - #: The y coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.y = self.ability_type_data['point'].get('y', 0) / 4096.0 - - #: The z coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.z = self.ability_type_data['point'].get('z', 0) - - #: The location of the target. Available for TargetPoint and TargetUnit type events - self.location = (self.x, self.y, self.z) - - -class TargetUnitCommandEvent(CommandEvent): - """ - Extends :class:`CommandEvent` - - This event is recorded when ever a player issues a command that targets a unit. - The location of the target unit at the time of the command is also recorded. Commands like - Chronoboost, Transfuse, and Snipe fall under this category. - - Note that like all CommandEvents, the event will be recorded regardless - of whether or not the command was successful. - """ - def __init__(self, frame, pid, data): - super(TargetUnitCommandEvent, self).__init__(frame, pid, data) - - #: Flags set on the target unit. Available for TargetUnit type events - self.target_flags = self.ability_type_data.get('flags', None) - - #: Timer?? Available for TargetUnit type events. - self.target_timer = self.ability_type_data.get('timer', None) - - #: Unique id of the target unit. Available for TargetUnit type events. - #: This id can be 0 when the target unit is shrouded by fog of war. - self.target_unit_id = self.ability_type_data.get('unit_tag', None) - - #: A reference to the targetted unit. When the :attr:`target_unit_id` is - #: 0 this target unit is a generic, reused fog of war unit of the :attr:`target_unit_type` - #: with an id of zero. It should not be confused with a real unit. - self.target_unit = None - - #: Current integer type id of the target unit. Available for TargetUnit type events. - self.target_unit_type = self.ability_type_data.get('unit_link', None) - - #: Integer player id of the controlling player. Available for TargetUnit type events starting in 19595. - #: When the targetted unit is under fog of war this id is zero. - self.control_player_id = self.ability_type_data.get('control_player_id', None) - - #: Integer player id of the player paying upkeep. Available for TargetUnit type events. - self.upkeep_player_id = self.ability_type_data.get('upkeep_player_id', None) - - #: The x coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.x = self.ability_type_data['point'].get('x', 0) / 4096.0 - - #: The y coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.y = self.ability_type_data['point'].get('y', 0) / 4096.0 - - #: The z coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.z = self.ability_type_data['point'].get('z', 0) - - #: The location of the target. Available for TargetPoint and TargetUnit type events - self.location = (self.x, self.y, self.z) - -class UpdateTargetPointCommandEvent(TargetPointCommandEvent): - """ - Extends :class: 'TargetPointCommandEvent' - - This event is generated when the user changes the point of a unit. Appears to happen - when a unit is moving and it is given a new command. It's possible there are other - instances of this occurring. - - """ - name = 'UpdateTargetPointCommandEvent' - -class UpdateTargetUnitCommandEvent(TargetUnitCommandEvent): - """ - Extends :class:`TargetUnitCommandEvent` - - This event is generated when a TargetUnitCommandEvent is updated, likely due to - changing the target unit. It is unclear if this needs to be a separate event - from TargetUnitCommandEvent, but for flexibility, it will be treated - differently. - - One example of this event occuring is casting inject on a hatchery while - holding shift, and then shift clicking on a second hatchery. - """ - - name = 'UpdateTargetUnitCommandEvent' - - -class DataCommandEvent(CommandEvent): - """ - Extends :class:`CommandEvent` - - DataCommandEvent are recorded when ever a player issues a command that has no target. Commands - like Burrow, SeigeMode, Train XYZ, and Stop fall under this category. - - Note that like all CommandEvents, the event will be recorded regardless - of whether or not the command was successful. - """ - def __init__(self, frame, pid, data): - super(DataCommandEvent, self).__init__(frame, pid, data) - - #: Other target data. Available for Data type events. - self.target_data = self.ability_type_data.get('data', None) - - -@loggable -class SelectionEvent(GameEvent): - """ - Selection events are generated when ever the active selection of the - player is updated. Unlike other game events, these events can also be - generated by non-player actions like unit deaths or transformations. - - Starting in Starcraft 2.0.0, selection events targetting control group - buffers are also generated when control group selections are modified - by non-player actions. When a player action updates a control group - a :class:`ControlGroupEvent` is generated. - """ - def __init__(self, frame, pid, data): - super(SelectionEvent, self).__init__(frame, pid) - - #: The control group being modified. 10 for active selection - self.control_group = data['control_group_index'] - - #: Deprecated, use control_group - self.bank = self.control_group - - #: ??? - self.subgroup_index = data['subgroup_index'] - - #: The type of mask to apply. One of None, Mask, OneIndices, ZeroIndices - self.mask_type = data['remove_mask'][0] - - #: The data for the mask - self.mask_data = data['remove_mask'][1] - - #: The unit type data for the new units - self.new_unit_types = [(d['unit_link'], d['subgroup_priority'], d['intra_subgroup_priority'], d['count']) for d in data['add_subgroups']] - - #: The unit id data for the new units - self.new_unit_ids = data['add_unit_tags'] - - # This stretches out the unit types and priorities to be zipped with ids. - unit_types = chain(*[[utype]*count for (utype, subgroup_priority, intra_subgroup_priority, count) in self.new_unit_types]) - unit_subgroup_priorities = chain(*[[subgroup_priority]*count for (utype, subgroup_priority, intra_subgroup_priority, count) in self.new_unit_types]) - unit_intra_subgroup_priorities = chain(*[[intra_subgroup_priority]*count for (utype, subgroup_priority, intra_subgroup_priority, count) in self.new_unit_types]) - - #: The combined type and id information for new units - self.new_unit_info = list(zip(self.new_unit_ids, unit_types, unit_subgroup_priorities, unit_intra_subgroup_priorities)) - - #: A list of references to units added by this selection - self.new_units = None - - #: Deprecated, see new_units - self.objects = None - - def __str__(self): - if self.new_units: - return GameEvent.__str__(self)+str([str(u) for u in self.new_units]) - else: - return GameEvent.__str__(self)+str([str(u) for u in self.new_unit_info]) - - -def create_control_group_event(frame, pid, data): - update_type = data['control_group_update'] - if update_type == 0: - return SetControlGroupEvent(frame, pid, data) - elif update_type == 1: - return AddToControlGroupEvent(frame, pid, data) - elif update_type == 2: - return GetControlGroupEvent(frame, pid, data) - elif update_type == 3: - # TODO: What could this be?!? - return ControlGroupEvent(frame, pid, data) - else: - # No idea what this is but we're seeing update_types of 4 and 5 in 3.0 - return ControlGroupEvent(frame, pid, data) - - -@loggable -class ControlGroupEvent(GameEvent): - """ - ControlGroup events are recorded when ever a player action modifies or accesses a control - group. There are three kinds of events, generated by each of the possible - player actions: - - * :class:`SetControlGroup` - Recorded when a user sets a control group (ctrl+#). - * :class:`GetControlGroup` - Recorded when a user retrieves a control group (#). - * :class:`AddToControlGroup` - Recorded when a user adds to a control group (shift+ctrl+#) - - All three events have the same set of data (shown below) but are interpretted differently. - See the class entry for details. - """ - def __init__(self, frame, pid, data): - super(ControlGroupEvent, self).__init__(frame, pid) - - #: Index to the control group being modified - self.control_group = data['control_group_index'] - - #: Deprecated, use control_group - self.bank = self.control_group - - #: Deprecated, use control_group - self.hotkey = self.control_group - - #: The type of update being performed, 0 (set),1 (add),2 (get) - self.update_type = data['control_group_update'] - - #: The type of mask to apply. One of None, Mask, OneIndices, ZeroIndices - self.mask_type = data['remove_mask'][0] - - #: The data for the mask - self.mask_data = data['remove_mask'][1] - - -class SetControlGroupEvent(ControlGroupEvent): - """ - Extends :class:`ControlGroupEvent` - - This event does a straight forward replace of the current control group contents - with the player's current selection. This event doesn't have masks set. - """ - - -class AddToControlGroupEvent(SetControlGroupEvent): - """ - Extends :class:`ControlGroupEvent` - - This event adds the current selection to the control group. - """ - - -class GetControlGroupEvent(ControlGroupEvent): - """ - Extends :class:`ControlGroupEvent` - - This event replaces the current selection with the contents of the control group. - The mask data is used to limit that selection to units that are currently selectable. - You might have 1 medivac and 8 marines on the control group but if the 8 marines are - inside the medivac they cannot be part of your selection. - """ - - -@loggable -class CameraEvent(GameEvent): - """ - Camera events are generated when ever the player camera moves, zooms, or rotates. - It does not matter why the camera changed, this event simply records the current - state of the camera after changing. - """ - def __init__(self, frame, pid, data): - super(CameraEvent, self).__init__(frame, pid) - - #: The x coordinate of the center of the camera - self.x = (data['target']['x'] if data['target'] is not None else 0)/256.0 - - #: The y coordinate of the center of the camera - self.y = (data['target']['y'] if data['target'] is not None else 0)/256.0 - - #: The location of the center of the camera - self.location = (self.x, self.y) - - #: The distance to the camera target ?? - self.distance = data['distance'] - - #: The current pitch of the camera - self.pitch = data['pitch'] - - #: The current yaw of the camera - self.yaw = data['yaw'] - - def __str__(self): - return self._str_prefix() + "{0} at ({1}, {2})".format(self.name, self.x, self.y) - - -@loggable -class ResourceTradeEvent(GameEvent): - """ - Generated when a player trades resources with another player. But not when fullfulling - resource requests. - """ - def __init__(self, frame, pid, data): - super(ResourceTradeEvent, self).__init__(frame, pid) - - #: The id of the player sending the resources - self.sender_id = pid - - #: A reference to the player sending the resources - self.sender = None - - #: The id of the player receiving the resources - self.recipient_id = data['recipient_id'] - - #: A reference to the player receiving the resources - self.recipient = None - - #: An array of resources sent - self.resources = data['resources'] - - #: Amount minerals sent - self.minerals = self.resources[0] if len(self.resources) >= 1 else None - - #: Amount vespene sent - self.vespene = self.resources[1] if len(self.resources) >= 2 else None - - #: Amount terrazine sent - self.terrazon = self.resources[2] if len(self.resources) >= 3 else None - - #: Amount custom resource sent - self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None - - def __str__(self): - return self._str_prefix() + " transfer {0} minerals, {1} gas, {2} terrazine, and {3} custom to {4}".format(self.minerals, self.vespene, self.terrazine, self.custom, self.recipient) - - -class ResourceRequestEvent(GameEvent): - """ - Generated when a player creates a resource request. - """ - def __init__(self, frame, pid, data): - super(ResourceRequestEvent, self).__init__(frame, pid) - - #: An array of resources sent - self.resources = data['resources'] - - #: Amount minerals sent - self.minerals = self.resources[0] if len(self.resources) >= 1 else None - - #: Amount vespene sent - self.vespene = self.resources[1] if len(self.resources) >= 2 else None - - #: Amount terrazine sent - self.terrazon = self.resources[2] if len(self.resources) >= 3 else None - - #: Amount custom resource sent - self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None - - def __str__(self): - return self._str_prefix() + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom".format(self.minerals, self.vespene, self.terrazine, self.custom) - - -class ResourceRequestFulfillEvent(GameEvent): - """ - Generated when a player accepts a resource request. - """ - def __init__(self, frame, pid, data): - super(ResourceRequestFulfillEvent, self).__init__(frame, pid) - - #: The id of the request being fulfilled - self.request_id = data['request_id'] - - -class ResourceRequestCancelEvent(GameEvent): - """ - Generated when a player cancels their resource request. - """ - def __init__(self, frame, pid, data): - super(ResourceRequestCancelEvent, self).__init__(frame, pid) - - #: The id of the request being cancelled - self.request_id = data['request_id'] - - -class HijackReplayGameEvent(GameEvent): - """ - Generated when players take over from a replay. - """ - def __init__(self, frame, pid, data): - super(HijackReplayGameEvent, self).__init__(frame, pid) - - #: The method used. Not sure what 0/1 represent - self.method = data['method'] - - #: Information on the users hijacking the game - self.user_infos = data['user_infos'] diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py deleted file mode 100644 index e985973..0000000 --- a/sc2reader/events/message.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from sc2reader.events.base import Event -from sc2reader.utils import Length -from sc2reader.log_utils import loggable - - -@loggable -class MessageEvent(Event): - """ - Parent class for all message events. - """ - def __init__(self, frame, pid): - #: The user id (or player id for older replays) of the person that generated the event. - self.pid = pid - - #: The frame of the game this event was applied - self.frame = frame - - #: The second of the game (game time not real time) this event was applied - self.second = frame >> 4 - - #: Short cut string for event class name - self.name = self.__class__.__name__ - - def _str_prefix(self): - player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" - return "{0}\t{1:<15} ".format(Length(seconds=int(self.frame / 16)), player_name) - - def __str__(self): - return self._str_prefix() + self.name - - -@loggable -class ChatEvent(MessageEvent): - """ - Records in-game chat events. - """ - def __init__(self, frame, pid, target, text): - super(ChatEvent, self).__init__(frame, pid) - #: The numerical target type. 0 = to all; 2 = to allies; 4 = to observers. - self.target = target - - #: The text of the message. - self.text = text - - #: Flag marked true of message was to all. - self.to_all = (self.target == 0) - - #: Flag marked true of message was to allies. - self.to_allies = (self.target == 2) - - #: Flag marked true of message was to observers. - self.to_observers = (self.target == 4) - - -@loggable -class ProgressEvent(MessageEvent): - """ - Sent during the load screen to update load process for other clients. - """ - def __init__(self, frame, pid, progress): - super(ProgressEvent, self).__init__(frame, pid) - - #: Marks the load progress for the player. Scaled 0-100. - self.progress = progress - - -@loggable -class PingEvent(MessageEvent): - """ - Records pings made by players in game. - """ - def __init__(self, frame, pid, target, x, y): - super(PingEvent, self).__init__(frame, pid) - - #: The numerical target type. 0 = to all; 2 = to allies; 4 = to observers. - self.target = target - - #: Flag marked true of message was to all. - self.to_all = (self.target == 0) - - #: Flag marked true of message was to allies. - self.to_allies = (self.target == 2) - - #: Flag marked true of message was to observers. - self.to_observers = (self.target == 4) - - #: The x coordinate of the target location - self.x = x - - #: The y coordinate of the target location - self.y = y - - #: The (x,y) coordinate of the target location - self.location = (self.x, self.y) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py deleted file mode 100644 index fe3e6f7..0000000 --- a/sc2reader/events/tracker.py +++ /dev/null @@ -1,568 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import functools - -from sc2reader.events.base import Event -from sc2reader.utils import Length - -clamp = functools.partial(max, 0) - - -class TrackerEvent(Event): - """ - Parent class for all tracker events. - """ - def __init__(self, frames): - #: The frame of the game this event was applied - #: Ignore all but the lowest 32 bits of the frame - self.frame = frames % 2**32 - - #: The second of the game (game time not real time) this event was applied - self.second = self.frame >> 4 - - #: Short cut string for event class name - self.name = self.__class__.__name__ - - def load_context(self, replay): - pass - - def _str_prefix(self): - return "{0}\t ".format(Length(seconds=int(self.frame / 16))) - - def __str__(self): - return self._str_prefix() + self.name - - -class PlayerSetupEvent(TrackerEvent): - """ Sent during game setup to help us organize players better """ - def __init__(self, frames, data, build): - super(PlayerSetupEvent, self).__init__(frames) - - #: The player id of the player we are setting up - self.pid = data[0] - - #: The type of this player. One of 1=human, 2=cpu, 3=neutral, 4=hostile - self.type = data[1] - - #: The user id of the player we are setting up. None of not human - self.uid = data[2] - - #: The slot id of the player we are setting up. None if not playing - self.sid = data[3] - - -class PlayerStatsEvent(TrackerEvent): - """ - Player Stats events are generated for all players that were in the game even if they've since - left every 10 seconds. An additional set of stats events are generated at the end of the game. - - When a player leaves the game, a single PlayerStatsEvent is generated for that player and no - one else. That player continues to generate PlayerStatsEvents at 10 second intervals until the - end of the game. - - In 1v1 games, the above behavior can cause the losing player to have 2 events generated at the - end of the game. One for leaving and one for the end of the game. - """ - def __init__(self, frames, data, build): - super(PlayerStatsEvent, self).__init__(frames) - - #: Id of the player the stats are for - self.pid = data[0] - - #: The Player object that these stats apply to - self.player = None - - #: An ordered list of all the available stats - self.stats = data[1] - - #: Minerals currently available to the player - self.minerals_current = clamp(self.stats[0]) - - #: Vespene currently available to the player - self.vespene_current = clamp(self.stats[1]) - - #: The rate the player is collecting minerals - self.minerals_collection_rate = clamp(self.stats[2]) - - #: The rate the player is collecting vespene - self.vespene_collection_rate = clamp(self.stats[3]) - - #: The number of active workers the player has - self.workers_active_count = clamp(self.stats[4]) - - #: The total mineral cost of army units (buildings?) currently being built/queued - self.minerals_used_in_progress_army = clamp(self.stats[5]) - - #: The total mineral cost of economy units (buildings?) currently being built/queued - self.minerals_used_in_progress_economy = clamp(self.stats[6]) - - #: The total mineral cost of technology research (buildings?) currently being built/queued - self.minerals_used_in_progress_technology = clamp(self.stats[7]) - - #: The total mineral cost of all things in progress - self.minerals_used_in_progress = self.minerals_used_in_progress_army + self.minerals_used_in_progress_economy + self.minerals_used_in_progress_technology - - #: The total vespene cost of army units (buildings?) currently being built/queued - self.vespene_used_in_progress_army = clamp(self.stats[8]) - - #: The total vespene cost of economy units (buildings?) currently being built/queued. - self.vespene_used_in_progress_economy = clamp(self.stats[9]) - - #: The total vespene cost of technology research (buildings?) currently being built/queued. - self.vespene_used_in_progress_technology = clamp(self.stats[10]) - - #: The total vespene cost of all things in progress - self.vespene_used_in_progress = self.vespene_used_in_progress_army + self.vespene_used_in_progress_economy + self.vespene_used_in_progress_technology - - #: The total cost of all things in progress - self.resources_used_in_progress = self.minerals_used_in_progress + self.vespene_used_in_progress - - #: The total mineral cost of current army units (buildings?) - self.minerals_used_current_army = clamp(self.stats[11]) - - #: The total mineral cost of current economy units (buildings?) - self.minerals_used_current_economy = clamp(self.stats[12]) - - #: The total mineral cost of current technology research (buildings?) - self.minerals_used_current_technology = clamp(self.stats[13]) - - #: The total mineral cost of all current things - self.minerals_used_current = self.minerals_used_current_army + self.minerals_used_current_economy + self.minerals_used_current_technology - - #: The total vespene cost of current army units (buildings?) - self.vespene_used_current_army = clamp(self.stats[14]) - - #: The total vespene cost of current economy units (buildings?) - self.vespene_used_current_economy = clamp(self.stats[15]) - - #: The total vespene cost of current technology research (buildings?) - self.vespene_used_current_technology = clamp(self.stats[16]) - - #: The total vepsene cost of all current things - self.vespene_used_current = self.vespene_used_current_army + self.vespene_used_current_economy + self.vespene_used_current_technology - - #: The total cost of all things current - self.resources_used_current = self.minerals_used_current + self.vespene_used_current - - #: The total mineral cost of all army units (buildings?) lost - self.minerals_lost_army = clamp(self.stats[17]) - - #: The total mineral cost of all economy units (buildings?) lost - self.minerals_lost_economy = clamp(self.stats[18]) - - #: The total mineral cost of all technology research (buildings?) lost - self.minerals_lost_technology = clamp(self.stats[19]) - - #: The total mineral cost of all lost things - self.minerals_lost = self.minerals_lost_army + self.minerals_lost_economy + self.minerals_lost_technology - - #: The total vespene cost of all army units (buildings?) lost - self.vespene_lost_army = clamp(self.stats[20]) - - #: The total vespene cost of all economy units (buildings?) lost - self.vespene_lost_economy = clamp(self.stats[21]) - - #: The total vespene cost of all technology research (buildings?) lost - self.vespene_lost_technology = clamp(self.stats[22]) - - #: The total vepsene cost of all lost things - self.vespene_lost = self.vespene_lost_army + self.vespene_lost_economy + self.vespene_lost_technology - - #: The total resource cost of all lost things - self.resources_lost = self.minerals_lost + self.vespene_lost - - #: The total mineral value of enemy army units (buildings?) killed - self.minerals_killed_army = clamp(self.stats[23]) - - #: The total mineral value of enemy economy units (buildings?) killed - self.minerals_killed_economy = clamp(self.stats[24]) - - #: The total mineral value of enemy technology research (buildings?) killed - self.minerals_killed_technology = clamp(self.stats[25]) - - #: The total mineral value of all killed things - self.minerals_killed = self.minerals_killed_army + self.minerals_killed_economy + self.minerals_killed_technology - - #: The total vespene value of enemy army units (buildings?) killed - self.vespene_killed_army = clamp(self.stats[26]) - - #: The total vespene value of enemy economy units (buildings?) killed - self.vespene_killed_economy = clamp(self.stats[27]) - - #: The total vespene value of enemy technology research (buildings?) killed - self.vespene_killed_technology = clamp(self.stats[28]) - - #: The total vespene cost of all killed things - self.vespene_killed = self.vespene_killed_army + self.vespene_killed_economy + self.vespene_killed_technology - - #: The total resource cost of all killed things - self.resources_killed = self.minerals_killed + self.vespene_killed - - #: The food supply currently used - self.food_used = clamp(self.stats[29]) / 4096.0 - - #: The food supply currently available - self.food_made = clamp(self.stats[30]) / 4096.0 - - #: The total mineral value of all active forces - self.minerals_used_active_forces = clamp(self.stats[31]) - - #: The total vespene value of all active forces - self.vespene_used_active_forces = clamp(self.stats[32]) - - #: Minerals of army value lost to friendly fire - self.ff_minerals_lost_army = clamp(self.stats[33]) if build >= 26490 else None - - #: Minerals of economy value lost to friendly fire - self.ff_minerals_lost_economy = clamp(self.stats[34]) if build >= 26490 else None - - #: Minerals of technology value lost to friendly fire - self.ff_minerals_lost_technology = clamp(self.stats[35]) if build >= 26490 else None - - #: Vespene of army value lost to friendly fire - self.ff_vespene_lost_army = clamp(self.stats[36]) if build >= 26490 else None - - #: Vespene of economy value lost to friendly fire - self.ff_vespene_lost_economy = clamp(self.stats[37]) if build >= 26490 else None - - #: Vespene of technology value lost to friendly fire - self.ff_vespene_lost_technology = clamp(self.stats[38]) if build >= 26490 else None - - def __str__(self): - return self._str_prefix() + "{0: >15} - Stats Update".format(str(self.player)) - - -class UnitBornEvent(TrackerEvent): - """ - Generated when a unit is created in a finished state in the game. Examples include the Marine, - Zergling, and Zealot (when trained from a gateway). Units that enter the game unfinished (all - buildings, warped in units) generate a :class:`UnitInitEvent` instead. - - Unfortunately, units that are born do not have events marking their beginnings like - :class:`UnitInitEvent` and :class:`UnitDoneEvent` do. The closest thing to it are the - :class:`~sc2reader.event.game.CommandEvent` game events where the command is a train unit - command. - """ - def __init__(self, frames, data, build): - super(UnitBornEvent, self).__init__(frames) - - #: The index portion of the unit id - self.unit_id_index = data[0] - - #: The recycle portion of the unit id - self.unit_id_recycle = data[1] - - #: The unique id of the unit being born - self.unit_id = self.unit_id_index << 18 | self.unit_id_recycle - - #: The unit object that was born - self.unit = None - - #: The unit type name of the unit being born - self.unit_type_name = data[2].decode('utf8') - - #: The id of the player that controls this unit. - self.control_pid = data[3] - - #: The id of the player that pays upkeep for this unit. - self.upkeep_pid = data[4] - - #: The player object that pays upkeep for this one. 0 means neutral unit - self.unit_upkeeper = None - - #: The player object that controls this unit. 0 means neutral unit - self.unit_controller = None - - #: The x coordinate of the center of the born unit's footprint. Only 4 point resolution - #: prior to Starcraft Patch 2.1. - self.x = data[5] - - #: The y coordinate of the center of the born unit's footprint. Only 4 point resolution - #: prior to Starcraft Patch 2.1. - self.y = data[6] - - #: The map location of the unit birth - self.location = (self.x, self.y) - - if build < 27950: - self.x = self.x * 4 - self.y = self.y * 4 - self.location = (self.x, self.y) - - def __str__(self): - return self._str_prefix() + "{0: >15} - Unit born {1}".format(str(self.unit_upkeeper), self.unit) - - -class UnitDiedEvent(TrackerEvent): - """ - Generated when a unit dies or is removed from the game for any reason. Reasons include - morphing, merging, and getting killed. - """ - def __init__(self, frames, data, build): - super(UnitDiedEvent, self).__init__(frames) - - #: The index portion of the unit id - self.unit_id_index = data[0] - - #: The recycle portion of the unit id - self.unit_id_recycle = data[1] - - #: The unique id of the unit being killed - self.unit_id = self.unit_id_index << 18 | self.unit_id_recycle - - #: The unit object that died - self.unit = None - - #: Deprecated, see :attr:`killing_player_id` - self.killer_pid = data[2] - - #: Deprecated, see :attr:`killing_player` - self.killer = None - - #: The id of the player that killed this unit. None when not available. - self.killing_player_id = data[2] - - #: The player object of the that killed the unit. Not always available. - self.killing_player = None - - #: The x coordinate of the center of the dying unit's footprint. Only 4 point resolution - #: prior to Starcraft Patch 2.1. - self.x = data[3] - - #: The y coordinate of the center of the dying unit's footprint. Only 4 point resolution - #: prior to Starcraft Patch 2.1. - self.y = data[4] - - #: The map location the unit was killed at. - self.location = (self.x, self.y) - - #: The index portion of the killing unit's id. Available for build 27950+ - self.killing_unit_index = None - - #: The recycle portion of the killing unit's id. Available for build 27950+ - self.killing_unit_recycle = None - - #: The unique id of the unit doing the killing. Available for build 27950+ - self.killing_unit_id = None - - #: A reference to the :class:`Unit` that killed this :class:`Unit` - self.killing_unit = None - - if build < 27950: - self.x = self.x * 4 - self.y = self.y * 4 - self.location = (self.x, self.y) - else: - # Starcraft patch 2.1 introduced killer unit indexes - self.killing_unit_index = data[5] - self.killing_unit_recycle = data[6] - if self.killing_unit_index: - self.killing_unit_id = self.killing_unit_index << 18 | self.killing_unit_recycle - - def __str__(self): - return self._str_prefix() + "{0: >15} - Unit died {1}.".format(str(self.unit.owner), self.unit) - - -class UnitOwnerChangeEvent(TrackerEvent): - """ - Generated when either ownership or control of a unit is changed. Neural Parasite is an example - of an action that would generate this event. - """ - def __init__(self, frames, data, build): - super(UnitOwnerChangeEvent, self).__init__(frames) - - #: The index portion of the unit id - self.unit_id_index = data[0] - - #: The recycle portion of the unit id - self.unit_id_recycle = data[1] - - #: The unique id of the unit changing ownership - self.unit_id = self.unit_id_index << 18 | self.unit_id_recycle - - #: The unit object that is affected by this event - self.unit = None - - #: The new id of the player that controls this unit. - self.control_pid = data[2] - - #: The new id of the player that pays upkeep for this unit. - self.upkeep_pid = data[3] - - #: The player object that pays upkeep for this one. 0 means neutral unit - self.unit_upkeeper = None - - #: The player object that controls this unit. 0 means neutral unit - self.unit_controller = None - - def __str__(self): - return self._str_prefix() + "{0: >15} took {1}".format(str(self.unit_upkeeper), self.unit) - - -class UnitTypeChangeEvent(TrackerEvent): - """ - Generated when the unit's type changes. This generally tracks upgrades to buildings (Hatch, - Lair, Hive) and mode switches (Sieging Tanks, Phasing prisms, Burrowing roaches). There may - be some other situations where a unit transformation is a type change and not a new unit. - """ - def __init__(self, frames, data, build): - super(UnitTypeChangeEvent, self).__init__(frames) - - #: The index portion of the unit id - self.unit_id_index = data[0] - - #: The recycle portion of the unit id - self.unit_id_recycle = data[1] - - #: The unique id of the unit changing type - self.unit_id = self.unit_id_index << 18 | self.unit_id_recycle - - #: The unit object that was changed - self.unit = None - - #: The the new unit type name - self.unit_type_name = data[2].decode('utf8') - - def __str__(self): - return self._str_prefix() + "{0: >15} - Unit {0} type changed to {1}".format(str(self.unit.owner), self.unit, self.unit_type_name) - - -class UpgradeCompleteEvent(TrackerEvent): - """ - Generated when a player completes an upgrade. - """ - def __init__(self, frames, data, build): - super(UpgradeCompleteEvent, self).__init__(frames) - - #: The player that completed the upgrade - self.pid = data[0] - - #: The Player object that completed the upgrade - self.player = None - - #: The name of the upgrade - self.upgrade_type_name = data[1].decode('utf8') - - #: The number of times this upgrade as been researched - self.count = data[2] - - def __str__(self): - return self._str_prefix() + "{0: >15} - {1} upgrade completed".format(str(self.player), self.upgrade_type_name) - - -class UnitInitEvent(TrackerEvent): - """ - The counter part to :class:`UnitDoneEvent`, generated by the game engine when a unit is - initiated. This applies only to units which are started in game before they are finished. - Primary examples being buildings and warp-in units. - """ - def __init__(self, frames, data, build): - super(UnitInitEvent, self).__init__(frames) - - #: The index portion of the unit id - self.unit_id_index = data[0] - - #: The recycle portion of the unit id - self.unit_id_recycle = data[1] - - #: The unique id of the stated unit - self.unit_id = self.unit_id_index << 18 | self.unit_id_recycle - - #: The unit object that was started (e.g. started to warp in) - self.unit = None - - #: The the new unit type name - self.unit_type_name = data[2].decode('utf8') - - #: The id of the player that controls this unit. - self.control_pid = data[3] - - #: The id of the player that pays upkeep for this unit. - self.upkeep_pid = data[4] - - #: The player object that pays upkeep for this one. 0 means neutral unit - self.unit_upkeeper = None - - #: The player object that controls this unit. 0 means neutral unit - self.unit_controller = None - - #: The x coordinate of the center of the init unit's footprint. Only 4 point resolution - #: prior to Starcraft Patch 2.1. - self.x = data[5] - - #: The y coordinate of the center of the init unit's footprint. Only 4 point resolution - #: prior to Starcraft Patch 2.1. - self.y = data[6] - - #: The map location the unit was started at - self.location = (self.x, self.y) - - if build < 27950: - self.x = self.x * 4 - self.y = self.y * 4 - self.location = (self.x, self.y) - - def __str__(self): - return self._str_prefix() + "{0: >15} - Unit initiated {1}".format(str(self.unit_upkeeper), self.unit) - - -class UnitDoneEvent(TrackerEvent): - """ - The counter part to the :class:`UnitInitEvent`, generated by the game engine when an initiated - unit is completed. E.g. warp-in finished, building finished, morph complete. - """ - def __init__(self, frames, data, build): - super(UnitDoneEvent, self).__init__(frames) - - #: The index portion of the unit id - self.unit_id_index = data[0] - - #: The recycle portion of the unit id - self.unit_id_recycle = data[1] - - #: The unique id of the finished unit - self.unit_id = self.unit_id_index << 18 | self.unit_id_recycle - - #: The unit object that was finished - self.unit = None - - def __str__(self): - return self._str_prefix() + "{0: >15} - Unit {1} done".format(str(self.unit.owner), self.unit) - - -class UnitPositionsEvent(TrackerEvent): - """ - Generated every 15 seconds. Marks the positions of the first 255 units that were damaged in - the last interval. If more than 255 units were damaged, then the first 255 are reported and - the remaining units are carried into the next interval. - """ - def __init__(self, frames, data, build): - super(UnitPositionsEvent, self).__init__(frames) - - #: The starting unit index point. - self.first_unit_index = data[0] - - #: An ordered list of unit/point data interpreted as below. - self.items = data[1] - - #: A dict mapping of units that had their position updated to their positions - self.units = dict() - - #: A list of (unit_index, (x,y)) derived from the first_unit_index and items. Prior to - #: Starcraft Patch 2.1 the coordinates have 4 point resolution. (15,25) recorded as (12,24). - #: Location prior to any rounding marks the center of the unit footprint. - self.positions = list() - - unit_index = self.first_unit_index - for i in range(0, len(self.items), 3): - unit_index += self.items[i] - x = self.items[i + 1] - y = self.items[i + 2] - if build < 27950: - x = x * 4 - y = y * 4 - self.positions.append((unit_index, (x, y))) - - def __str__(self): - return self._str_prefix() + "Unit positions update" diff --git a/sc2reader/exceptions.py b/sc2reader/exceptions.py deleted file mode 100644 index caf13b8..0000000 --- a/sc2reader/exceptions.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - - -class SC2ReaderError(Exception): - pass - - -class SC2ReaderLocalizationError(SC2ReaderError): - pass - - -class CorruptTrackerFileError(SC2ReaderError): - pass - - -class MPQError(SC2ReaderError): - pass - - -class NoMatchingFilesError(SC2ReaderError): - pass - - -class MultipleMatchingFilesError(SC2ReaderError): - pass - - -class ReadError(SC2ReaderError): - def __init__(self, msg, type, location, replay=None, game_events=[], buffer=None): - self.__dict__.update(locals()) - super(ReadError, self).__init__(msg) - - def __str__(self): - return "{0}, Type: {1}".format(self.msg, self.type) - - -class ParseError(SC2ReaderError): - pass - - -class ProcessError(SC2ReaderError): - pass - - -class FileError(SC2ReaderError): - pass diff --git a/sc2reader/factories/__init__.py b/sc2reader/factories/__init__.py deleted file mode 100644 index c6c469f..0000000 --- a/sc2reader/factories/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from __future__ import absolute_import, print_function, unicode_literals, division - -from sc2reader.factories.sc2factory import SC2Factory -from sc2reader.factories.sc2factory import FileCachedSC2Factory -from sc2reader.factories.sc2factory import DictCachedSC2Factory -from sc2reader.factories.sc2factory import DoubleCachedSC2Factory diff --git a/sc2reader/factories/plugins/__init__.py b/sc2reader/factories/plugins/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/sc2reader/factories/plugins/replay.py b/sc2reader/factories/plugins/replay.py deleted file mode 100644 index ad46560..0000000 --- a/sc2reader/factories/plugins/replay.py +++ /dev/null @@ -1,181 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import json -from collections import defaultdict - -from sc2reader import log_utils -from sc2reader.utils import Length -from sc2reader.factories.plugins.utils import PlayerSelection, GameState, JSONDateEncoder, plugin - - -@plugin -def toJSON(replay, **user_options): - options = dict(cls=JSONDateEncoder) - options.update(user_options) - obj = toDict()(replay) - return json.dumps(obj, **options) - - -@plugin -def toDict(replay): - # Build observers into dictionary - observers = list() - for observer in replay.observers: - messages = list() - for message in getattr(observer, 'messages', list()): - messages.append({ - 'time': message.time.seconds, - 'text': message.text, - 'is_public': message.to_all - }) - observers.append({ - 'name': getattr(observer, 'name', None), - 'pid': getattr(observer, 'pid', None), - 'messages': messages, - }) - - # Build players into dictionary - players = list() - for player in replay.players: - messages = list() - for message in player.messages: - messages.append({ - 'time': message.time.seconds, - 'text': message.text, - 'is_public': message.to_all - }) - players.append({ - 'avg_apm': getattr(player, 'avg_apm', None), - 'color': player.color.__dict__ if hasattr(player, 'color') else None, - 'handicap': getattr(player, 'handicap', None), - 'name': getattr(player, 'name', None), - 'pick_race': getattr(player, 'pick_race', None), - 'pid': getattr(player, 'pid', None), - 'play_race': getattr(player, 'play_race', None), - 'result': getattr(player, 'result', None), - 'type': getattr(player, 'type', None), - 'uid': getattr(player, 'uid', None), - 'url': getattr(player, 'url', None), - 'messages': messages, - }) - - # Consolidate replay metadata into dictionary - return { - 'region': getattr(replay, 'region', None), - 'map_name': getattr(replay, 'map_name', None), - 'file_time': getattr(replay, 'file_time', None), - 'filehash': getattr(replay, 'filehash', None), - 'unix_timestamp': getattr(replay, 'unix_timestamp', None), - 'date': getattr(replay, 'date', None), - 'utc_date': getattr(replay, 'utc_date', None), - 'speed': getattr(replay, 'speed', None), - 'category': getattr(replay, 'category', None), - 'type': getattr(replay, 'type', None), - 'is_ladder': getattr(replay, 'is_ladder', False), - 'is_private': getattr(replay, 'is_private', False), - 'filename': getattr(replay, 'filename', None), - 'file_time': getattr(replay, 'file_time', None), - 'frames': getattr(replay, 'frames', None), - 'build': getattr(replay, 'build', None), - 'release': getattr(replay, 'release_string', None), - 'game_fps': getattr(replay, 'game_fps', None), - 'game_length': getattr(getattr(replay, 'game_length', None), 'seconds', None), - 'players': players, - 'observers': observers, - 'real_length': getattr(getattr(replay, 'real_length', None), 'seconds', None), - 'real_type': getattr(replay, 'real_type', None), - 'time_zone': getattr(replay, 'time_zone', None), - 'versions': getattr(replay, 'versions', None) - } - - -@plugin -def APMTracker(replay): - """ - Builds ``player.aps`` and ``player.apm`` dictionaries where an action is - any Selection, Hotkey, or Command event. - - Also provides ``player.avg_apm`` which is defined as the sum of all the - above actions divided by the number of seconds played by the player (not - necessarily the whole game) multiplied by 60. - """ - for player in replay.players: - player.aps = defaultdict(int) - player.apm = defaultdict(int) - player.seconds_played = replay.length.seconds - - for event in player.events: - if event.name == 'SelectionEvent' or 'CommandEvent' in event.name or 'ControlGroup' in event.name: - player.aps[event.second] += 1.4 - player.apm[int(event.second/60)] += 1.4 - - elif event.name == 'PlayerLeaveEvent': - player.seconds_played = event.second - - if len(player.apm) > 0: - player.avg_apm = sum(player.aps.values())/float(player.seconds_played)*60 - else: - player.avg_apm = 0 - - return replay - -@plugin -def SelectionTracker(replay): - debug = replay.opt['debug'] - logger = log_utils.get_logger(SelectionTracker) - - for person in replay.entities: - # TODO: A more robust person interface might be nice - person.selection_errors = 0 - player_selections = GameState(PlayerSelection()) - for event in person.events: - error = False - if event.name == 'SelectionEvent': - selections = player_selections[event.frame] - control_group = selections[event.control_group].copy() - error = not control_group.deselect(event.mask_type, event.mask_data) - control_group.select(event.new_units) - selections[event.control_group] = control_group - if debug: - logger.info("[{0}] {1} selected {2} units: {3}".format(Length(seconds=event.second), person.name, len(selections[0x0A].objects), selections[0x0A])) - - elif event.name == 'SetControlGroupEvent': - selections = player_selections[event.frame] - selections[event.control_group] = selections[0x0A].copy() - if debug: - logger.info("[{0}] {1} set hotkey {2} to current selection".format(Length(seconds=event.second), person.name, event.hotkey)) - - elif event.name == 'AddToControlGroupEvent': - selections = player_selections[event.frame] - control_group = selections[event.control_group].copy() - error = not control_group.deselect(event.mask_type, event.mask_data) - control_group.select(selections[0x0A].objects) - selections[event.control_group] = control_group - if debug: - logger.info("[{0}] {1} added current selection to hotkey {2}".format(Length(seconds=event.second), person.name, event.hotkey)) - - elif event.name == 'GetControlGroupEvent': - selections = player_selections[event.frame] - control_group = selections[event.control_group].copy() - error = not control_group.deselect(event.mask_type, event.mask_data) - selections[0xA] = control_group - if debug: - logger.info("[{0}] {1} retrieved hotkey {2}, {3} units: {4}".format(Length(seconds=event.second), person.name, event.control_group, len(selections[0x0A].objects), selections[0x0A])) - - else: - continue - - # TODO: The event level interface here should be improved - # Possibly use 'added' and 'removed' unit lists as well - event.selected = selections[0x0A].objects - if error: - person.selection_errors += 1 - if debug: - logger.warn("Error detected in deselection mode {0}.".format(event.mask_type)) - - person.selection = player_selections - # Not a real lock, so don't change it! - person.selection.locked = True - - return replay diff --git a/sc2reader/factories/plugins/utils.py b/sc2reader/factories/plugins/utils.py deleted file mode 100644 index cf3559e..0000000 --- a/sc2reader/factories/plugins/utils.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from bisect import bisect_left -from collections import defaultdict -from datetime import datetime -from functools import wraps -import json - -from sc2reader.log_utils import loggable - - -def plugin(func): - @wraps(func) - def wrapper(**options): - @wraps(func) - def call(*args, **kwargs): - opt = kwargs.copy() - opt.update(options) - return func(*args, **opt) - return call - return wrapper - - -class JSONDateEncoder(json.JSONEncoder): - def default(self, obj): - if isinstance(obj, datetime): - return obj.strftime("%Y-%m-%d %H:%M:%S") - return json.JSONEncoder.default(self, obj) - - -class GameState(dict): - def __init__(self, initial_state): - self._frames = list() - self._frameset = set() - self[0] = initial_state - self.locked = False - - def __getitem__(self, frame): - if frame in self: - return super(GameState, self).__getitem__(frame) - - # Get the previous frame from our sorted frame list - # bisect_left returns the left most key where an item is - # less than or equal to the value in that key. If it is - # less than we need to subtract 1 - key = bisect_left(self._frames, frame) - if key == len(self._frames) or self._frames[key] > frame: - prev_frame = self._frames[key - 1] - else: - prev_frame = self._frames[key] - - # If we've locked the game state we don't need deep copies anymore - if self.locked: - state = self[prev_frame] - else: - # Copy the previous state and use it as our basis here - state = self[prev_frame] - if hasattr(state, 'copy'): - state = state.copy() - - self[frame] = state - return state - - def __setitem__(self, frame, value): - if frame not in self._frameset: - self._frames.insert(bisect_left(self._frames, frame), frame) - self._frameset.add(frame) - - super(GameState, self).__setitem__(frame, value) - - -@loggable -class UnitSelection(object): - def __init__(self, objects=None): - self.objects = objects or list() - - def select(self, new_objects): - new_set = set(self.objects+list(new_objects)) - self.objects = sorted(new_set, key=lambda obj: obj.id) - - def deselect(self, mode, data): - """Returns false if there was a data error when deselecting""" - size = len(self.objects) - - if mode == 'None': - return True - - elif mode == 'Mask': - """ Deselect objects according to deselect mask """ - mask = data - if len(mask) < size: - # pad to the right - mask = mask+[False]*(len(self.objects)-len(mask)) - - self.logger.debug("Deselection Mask: {0}".format(mask)) - self.objects = [obj for (slct, obj) in filter(lambda slct_obj: not slct_obj[0], zip(mask, self.objects))] - return len(mask) <= size - - elif mode == 'OneIndices': - """ Deselect objects according to indexes """ - clean_data = list(filter(lambda i: i < size, data)) - self.objects = [self.objects[i] for i in range(len(self.objects)) if i not in clean_data] - return len(clean_data) == len(data) - - elif mode == 'ZeroIndices': - """ Deselect objects according to indexes """ - clean_data = list(filter(lambda i: i < size, data)) - self.objects = [self.objects[i] for i in clean_data] - return len(clean_data) == len(data) - - else: - return False - - def __str__(self): - return ', '.join(str(obj) for obj in self.objects) - - def copy(self): - return UnitSelection(self.objects[:]) - - -class PlayerSelection(defaultdict): - def __init__(self): - super(PlayerSelection, self).__init__(UnitSelection) - - def copy(self): - new = PlayerSelection() - for bank, selection in self.items(): - new[bank] = selection # UnitSelection(selection.objects[:]) - return new diff --git a/sc2reader/factories/sc2factory.py b/sc2reader/factories/sc2factory.py deleted file mode 100644 index 36020b2..0000000 --- a/sc2reader/factories/sc2factory.py +++ /dev/null @@ -1,341 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from collections import defaultdict -from io import BytesIO -import os -import sys - -try: - unicode -except NameError: - basestring = unicode = str - -if sys.version_info[0] < 3: - from urllib2 import urlopen - from urlparse import urlparse -else: - from urllib.request import urlopen - from urllib.parse import urlparse - -import re -import time - -from sc2reader import utils -from sc2reader import log_utils -from sc2reader.resources import Resource, Replay, Map, GameSummary, Localization - - -@log_utils.loggable -class SC2Factory(object): - """The SC2Factory class acts as a generic loader interface for all - available to sc2reader resources. At current time this includes - :class:`~sc2reader.resources.Replay` and :class:`~sc2reader.resources.Map` resources. These resources can be - loaded in both singular and plural contexts with: - - * :meth:`load_replay` - :class:`Replay` - * :meth:`load_replays` - generator<:class:`Replay`> - * :meth:`load_map` - :class:`Map` - * :meth:`load_maps` - : generator<:class:`Map`> - - The load behavior can be configured in three ways: - - * Passing options to the factory constructor - * Using the :meth:`configure` method of a factory instance - * Passing overried options into the load method - - See the :meth:`configure` method for more details on configuration - options. - - Resources can be loaded in the singular context from the following inputs: - - * URLs - Uses the built-in package ``urllib`` - * File path - Uses the built-in method ``open`` - * File-like object - Must implement ``.read()`` - * DepotFiles - Describes remote Battle.net depot resources - - In the plural context the following inputs are acceptable: - - * An iterable of the above inputs - * Directory path - Uses :meth:`~sc2reader.utils.get_files` with the appropriate extension to fine files. - - """ - - _resource_name_map = dict(replay=Replay, map=Map) - - default_options = { - Resource: {'debug': False}, - Replay: {'load_level': 4, 'load_map': False}, - } - - def __init__(self, **options): - self.plugins = list() - - # Bootstrap with the default options - self.options = defaultdict(dict) - for cls, options in self.default_options.items(): - self.options[cls] = options.copy() - - # Then configure with the options passed in - self.configure(**options) - - # Primary Interface - def load_replay(self, source, options=None, **new_options): - """Loads a single sc2replay file. Accepts file path, url, or file object.""" - return self.load(Replay, source, options, **new_options) - - def load_replays(self, sources, options=None, **new_options): - """Loads a collection of sc2replay files, returns a generator.""" - return self.load_all(Replay, sources, options, extension='SC2Replay', **new_options) - - def load_localization(self, source, options=None, **new_options): - """Loads a single s2ml file. Accepts file path, url, or file object.""" - return self.load(Localization, source, options, **new_options) - - def load_localizations(self, sources, options=None, **new_options): - """Loads a collection of s2ml files, returns a generator.""" - return self.load_all(Localization, sources, options, extension='s2ml', **new_options) - - def load_map(self, source, options=None, **new_options): - """Loads a single s2ma file. Accepts file path, url, or file object.""" - return self.load(Map, source, options, **new_options) - - def load_maps(self, sources, options=None, **new_options): - """Loads a collection of s2ma files, returns a generator.""" - return self.load_all(Map, sources, options, extension='s2ma', **new_options) - - def load_game_summary(self, source, options=None, **new_options): - """Loads a single s2gs file. Accepts file path, url, or file object.""" - return self.load(GameSummary, source, options, **new_options) - - def load_game_summaries(self, sources, options=None, **new_options): - """Loads a collection of s2gs files, returns a generator.""" - return self.load_all(GameSummary, sources, options, extension='s2gs', **new_options) - - def configure(self, cls=None, **options): - """ Configures the factory to use the supplied options. If cls is specified - the options will only be applied when loading that class""" - if isinstance(cls, basestring): - cls = self._resource_name_map.get[cls.lower()] - cls = cls or Resource - self.options[cls].update(options) - - def reset(self): - "Resets the options to factory defaults" - self.options = defaultdict(dict) - - def register_plugin(self, cls, plugin): - "Registers the given Plugin to be run on classes of the supplied name." - if isinstance(cls, basestring): - cls = self._resource_name_map.get(cls.lower(), Resource) - self.plugins.append((cls, plugin)) - - # Support Functions - def load(self, cls, source, options=None, **new_options): - options = options or self._get_options(cls, **new_options) - resource, filename = self._load_resource(source, options=options) - return self._load(cls, resource, filename=filename, options=options) - - def load_all(self, cls, sources, options=None, **new_options): - options = options or self._get_options(cls, **new_options) - for resource, filename in self._load_resources(sources, options=options): - yield self._load(cls, resource, filename=filename, options=options) - - # Internal Functions - def _load(self, cls, resource, filename, options): - obj = cls(resource, filename=filename, factory=self, **options) - for plugin in options.get('plugins', self._get_plugins(cls)): - obj = plugin(obj) - return obj - - def _get_plugins(self, cls): - plugins = list() - for ext_cls, plugin in self.plugins: - if issubclass(cls, ext_cls): - plugins.append(plugin) - return plugins - - def _get_options(self, cls, **new_options): - options = dict() - for opt_cls, cls_options in self.options.items(): - if issubclass(cls, opt_cls): - options.update(cls_options) - options.update(new_options) - return options - - def _load_resources(self, resources, options=None, **new_options): - """Collections of resources or a path to a directory""" - options = options or self._get_options(Resource, **new_options) - - # Path to a folder, retrieve all relevant files as the collection - if isinstance(resources, basestring): - resources = utils.get_files(resources, **options) - - for resource in resources: - yield self._load_resource(resource, options=options) - - def load_remote_resource_contents(self, resource, **options): - self.logger.info("Fetching remote resource: " + resource) - return urlopen(resource).read() - - def load_local_resource_contents(self, location, **options): - # Extract the contents so we can close the file - with open(location, 'rb') as resource_file: - return resource_file.read() - - def _load_resource(self, resource, options=None, **new_options): - """http links, filesystem locations, and file-like objects""" - options = options or self._get_options(Resource, **new_options) - - if isinstance(resource, utils.DepotFile): - resource = resource.url - - if isinstance(resource, basestring): - if re.match(r'https?://', resource): - contents = self.load_remote_resource_contents(resource, **options) - - else: - directory = options.get('directory', '') - location = os.path.join(directory, resource) - contents = self.load_local_resource_contents(location, **options) - - # BytesIO implements a fuller file-like object - resource_name = resource - resource = BytesIO(contents) - - else: - # Totally not designed for large files!! - # We need a multiread resource, so wrap it in BytesIO - if not hasattr(resource, 'seek'): - resource = BytesIO(resource.read()) - - resource_name = getattr(resource, 'name', 'Unknown') - - if options.get('verbose', None): - print(resource_name) - - return (resource, resource_name) - - -class CachedSC2Factory(SC2Factory): - - def get_remote_cache_key(self, remote_resource): - # Strip the port and use the domain as the bucket - # and use the full path as the key - parseresult = urlparse(remote_resource) - bucket = re.sub(r':.*', '', parseresult.netloc) - key = parseresult.path.strip('/') - return (bucket, key) - - def load_remote_resource_contents(self, remote_resource, **options): - cache_key = self.get_remote_cache_key(remote_resource) - if not self.cache_has(cache_key): - resource = super(CachedSC2Factory, self).load_remote_resource_contents(remote_resource, **options) - self.cache_set(cache_key, resource) - else: - resource = self.cache_get(cache_key) - return resource - - def cache_has(self, cache_key): - raise NotImplemented() - - def cache_get(self, cache_key): - raise NotImplemented() - - def cache_set(self, cache_key, value): - raise NotImplemented() - - -class FileCachedSC2Factory(CachedSC2Factory): - """ - :param cache_dir: Local directory to cache files in. - - Extends :class:`SC2Factory`. - - Caches remote depot resources on the file system in the ``cache_dir``. - """ - def __init__(self, cache_dir, **options): - super(FileCachedSC2Factory, self).__init__(**options) - self.cache_dir = os.path.abspath(cache_dir) - if not os.path.isdir(self.cache_dir): - raise ValueError("cache_dir ({0}) must be an existing directory.".format(self.cache_dir)) - elif not os.access(self.cache_dir, os.F_OK | os.W_OK | os.R_OK): - raise ValueError("Must have read/write access to {0} for local file caching.".format(self.cache_dir)) - - def cache_has(self, cache_key): - return os.path.exists(self.cache_path(cache_key)) - - def cache_get(self, cache_key, **options): - return self.load_local_resource_contents(self.cache_path(cache_key), **options) - - def cache_set(self, cache_key, value): - cache_path = self.cache_path(cache_key) - bucket_dir = os.path.dirname(cache_path) - if not os.path.exists(bucket_dir): - os.makedirs(bucket_dir) - - with open(cache_path, 'wb') as out: - out.write(value) - - def cache_path(self, cache_key): - return os.path.join(self.cache_dir, *(cache_key)) - - -class DictCachedSC2Factory(CachedSC2Factory): - """ - :param cache_max_size: The max number of cache entries to hold in memory. - - Extends :class:`SC2Factory`. - - Caches remote depot resources in memory. Does not write to the file system. - The cache is effectively cleared when the process exits. - """ - def __init__(self, cache_max_size=0, **options): - super(DictCachedSC2Factory, self).__init__(**options) - self.cache_dict = dict() - self.cache_used = dict() - self.cache_max_size = cache_max_size - - def cache_set(self, cache_key, value): - if self.cache_max_size and len(self.cache_dict) >= self.cache_max_size: - oldest_cache_key = min(self.cache_used.items(), key=lambda e: e[1])[0] - del self.cache_used[oldest_cache_key] - del self.cache_dict[oldest_cache_key] - self.cache_dict[cache_key] = value - self.cache_used[cache_key] = time.time() - - def cache_get(self, cache_key): - self.cache_used[cache_key] = time.time() - return self.cache_dict[cache_key] - - def cache_has(self, cache_key): - return cache_key in self.cache_dict - - -class DoubleCachedSC2Factory(DictCachedSC2Factory, FileCachedSC2Factory): - """ - :param cache_dir: Local directory to cache files in. - :param cache_max_size: The max number of cache entries to hold in memory. - - Extends :class:`SC2Factory`. - - Caches remote depot resources to the file system AND holds a subset of them - in memory for more efficient access. - """ - def __init__(self, cache_dir, cache_max_size=0, **options): - super(DoubleCachedSC2Factory, self).__init__(cache_max_size, cache_dir=cache_dir, **options) - - def load_remote_resource_contents(self, remote_resource, **options): - cache_key = self.get_remote_cache_key(remote_resource) - - if DictCachedSC2Factory.cache_has(self, cache_key): - return DictCachedSC2Factory.cache_get(self, cache_key) - - if not FileCachedSC2Factory.cache_has(self, cache_key): - resource = SC2Factory.load_remote_resource_contents(self, remote_resource, **options) - FileCachedSC2Factory.cache_set(self, cache_key, resource) - else: - resource = FileCachedSC2Factory.cache_get(self, cache_key) - - DictCachedSC2Factory.cache_set(self, cache_key, resource) - return resource diff --git a/sc2reader/log_utils.py b/sc2reader/log_utils.py deleted file mode 100644 index 58a442d..0000000 --- a/sc2reader/log_utils.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import logging - -try: - unicode -except NameError: - basestring = unicode = str - -try: - from logging import NullHandler -except ImportError: - # Copied from the Python 2.7 source code. - class NullHandler(logging.Handler): - """ - This handler does nothing. It's intended to be used to avoid the - "No handlers could be found for logger XXX" one-off warning. This is - important for library code, which may contain code to log events. If a user - of the library does not configure logging, the one-off warning might be - produced; to avoid this, the library developer simply needs to instantiate - a NullHandler and add it to the top-level logger of the library module or - package. - """ - def handle(self, record): - pass - - def emit(self, record): - pass - - def createLock(self): - self.lock = None - -LEVEL_MAP = dict( - DEBUG=logging.DEBUG, - INFO=logging.INFO, - WARN=logging.WARN, - ERROR=logging.ERROR, - CRITICAL=logging.CRITICAL -) - - -def setup(): - logging.getLogger('sc2reader').addHandler(NullHandler()) - - -def log_to_file(filename, level='WARN', format=None, datefmt=None, **options): - add_log_handler(logging.FileHandler(filename, **options), level, format, datefmt) - - -def log_to_console(level='WARN', format=None, datefmt=None, **options): - add_log_handler(logging.StreamHandler(**options), level, format, datefmt) - - -def add_log_handler(handler, level='WARN', format=None, datefmt=None): - handler.setFormatter(logging.Formatter(format, datefmt)) - - if isinstance(level, basestring): - level = LEVEL_MAP[level] - - logger = logging.getLogger('sc2reader') - logger.setLevel(level) - logger.addHandler(handler) - - -def get_logger(entity): - """ - Retrieves loggers from the enties fully scoped name. - - get_logger(Replay) -> sc2reader.replay.Replay - get_logger(get_logger) -> sc2reader.utils.get_logger - - :param entity: The entity for which we want a logger. - """ - try: - return logging.getLogger(entity.__module__+'.'+entity.__name__) - - except AttributeError: - raise TypeError("Cannot retrieve logger for {0}.".format(entity)) - - -def loggable(cls): - cls.logger = get_logger(cls) - return cls diff --git a/sc2reader/objects.py b/sc2reader/objects.py deleted file mode 100644 index eaa2e28..0000000 --- a/sc2reader/objects.py +++ /dev/null @@ -1,731 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import hashlib -import math -from collections import namedtuple - -from sc2reader import utils, log_utils -from sc2reader.decoders import ByteDecoder -from sc2reader.constants import * - -Location = namedtuple('Location', ['x', 'y']) - - -class Team(object): - """ - The team object primarily a container object for organizing :class:`Player` - objects with some metadata. As such, it implements iterable and can be - looped over like a list. - - :param interger number: The team number as recorded in the replay - """ - - #: A unique hash identifying the team of players - hash = str() - - #: The team number as recorded in the replay - number = int() - - #: A list of the :class:`Player` objects on the team - players = list() - - #: The result of the game for this team. - #: One of "Win", "Loss", or "Unknown" - result = str() - - def __init__(self, number): - self.number = number - self.players = list() - self.result = "Unknown" - - def __iter__(self): - return self.players.__iter__() - - @property - def lineup(self): - """ - A string representation of the team play races like PP or TPZZ. Random - pick races are not reflected in this string - """ - return ''.join(sorted(p.play_race[0].upper() for p in self.players)) - - @property - def hash(self): - raw_hash = ','.join(sorted(p.url for p in self.players)) - return hashlib.sha256(raw_hash).hexdigest() - - def __str__(self): - return "Team {0}: {1}".format(self.number, ", ".join([str(p) for p in self.players])) - - def __repr__(self): - return str(self) - - -@log_utils.loggable -class Attribute(object): - - def __init__(self, header, attr_id, player, value): - self.header = header - self.id = attr_id - self.player = player - - if self.id not in LOBBY_PROPERTIES: - self.logger.info("Unknown attribute id: {0}".format(self.id)) - self.name = "Unknown" - self.value = None - else: - self.name, lookup = LOBBY_PROPERTIES[self.id] - self.value = lookup[value.strip("\x00 ")[::-1]] - - def __repr__(self): - return str(self) - - def __str__(self): - return "[{0}] {1}: {2}".format(self.player, self.name, self.value) - - -class Entity(object): - """ - :param integer sid: The entity's unique slot id. - :param dict slot_data: The slot data associated with this entity - """ - def __init__(self, sid, slot_data): - #: The entity's unique in-game slot id - self.sid = int(sid) - - #: The entity's replay.initData slot data - self.slot_data = slot_data - - #: The player's handicap as set prior to game start, ranges from 50-100 - self.handicap = slot_data['handicap'] - - #: The entity's team number. None for observers - self.team_id = None - if slot_data['team_id'] is not None: - self.team_id = slot_data['team_id'] + 1 - - #: A flag indicating if the person is a human or computer - #: Really just a shortcut for isinstance(entity, User) - self.is_human = slot_data['control'] == 2 - - #: A flag indicating the entity's observer status. - #: Really just a shortcut for isinstance(entity, Observer). - self.is_observer = slot_data['observe'] != 0 - - #: A flag marking this entity as a referee (can talk to players) - self.is_referee = slot_data['observe'] == 2 - - #: - self.hero_name = slot_data['hero'] - - #: - self.hero_skin = slot_data['skin'] - - #: - self.hero_mount = slot_data['mount'] - - #: The unique Battle.net account identifier in the form of - #: -S2-- - self.toon_handle = slot_data['toon_handle'] - - toon_handle = self.toon_handle or "0-S2-0-0" - parts = toon_handle.split("-") - - #: The Battle.net region the entity is registered to - self.region = GATEWAY_LOOKUP[int(parts[0])] - - #: The Battle.net subregion the entity is registered to - self.subregion = int(parts[2]) - - #: The Battle.net acount identifier. Used to construct the - #: bnet profile url. This value can be zero for games - #: played offline when a user was not logged in to battle.net. - self.toon_id = int(parts[3]) - - #: A index to the user that is the leader of the archon team - self.archon_leader_id = slot_data['tandem_leader_user_id'] - - #: A list of :class:`Event` objects representing all the game events - #: generated by the person over the course of the game - self.events = list() - - #: A list of :class:`~sc2reader.events.message.ChatEvent` objects representing all of the chat - #: messages the person sent during the game - self.messages = list() - - def format(self, format_string): - return format_string.format(**self.__dict__) - - -class Player(object): - """ - :param integer pid: The player's unique player id. - :param dict detail_data: The detail data associated with this player - :param dict attribute_data: The attribute data associated with this player - """ - def __init__(self, pid, slot_data, detail_data, attribute_data): - #: The player's unique in-game player id - self.pid = int(pid) - - #: The player's replay.initData slot data - self.slot_data = slot_data - - #: The replay.details data on this player - self.detail_data = detail_data - - #: The replay.attributes.events data on this player - self.attribute_data = attribute_data - - #: The player result, one of "Win", "Loss", or None - self.result = None - if detail_data['result'] == 1: - self.result = "Win" - elif detail_data['result'] == 2: - self.result = "Loss" - - #: A reference to the player's :class:`Team` object - self.team = None - - #: The race the player picked prior to the game starting. - #: One of Protoss, Terran, Zerg, Random - self.pick_race = attribute_data.get('Race', 'Unknown') - - #: The difficulty setting for the player. Always Medium for human players. - #: Very Easy, Easy, Medium, Hard, Harder, Very hard, Elite, Insane, - #: Cheater 2 (Resources), Cheater 1 (Vision) - self.difficulty = attribute_data.get('Difficulty', 'Unknown') - - #: The race the player played the game with. - #: One of Protoss, Terran, Zerg - self.play_race = LOCALIZED_RACES.get(detail_data['race'], detail_data['race']) - - #: The co-op commander the player picked - #: Kerrigan, Raynor, etc. - self.commander = slot_data['commander'] - if self.commander is not None: - self.commander = self.commander.decode('utf8') - - #: The level of the co-op commander - #: 1-15 or None - self.commander_level = slot_data['commander_level'] - - #: The mastery level of the co-op commander - #: >0 or None - self.commander_mastery_level = slot_data['commander_mastery_talents'] - - #: The mastery talents picked for the co-op commander - #: list of longs of length 6, each between 0 and 30 - self.commander_mastery_talents = slot_data['commander_mastery_talents'] - - #: A reference to a :class:`~sc2reader.utils.Color` object representing the player's color - self.color = utils.Color(**detail_data['color']) - - #: A list of references to the :class:`~sc2reader.data.Unit` objects the player had this game - self.units = list() - - #: A list of references to the :class:`~sc2reader.data.Unit` objects that the player killed this game - self.killed_units = list() - - #: The Battle.net region the entity is registered to - self.region = GATEWAY_LOOKUP[detail_data['bnet']['region']] - - #: The Battle.net subregion the entity is registered to - self.subregion = detail_data['bnet']['subregion'] - - #: The Battle.net acount identifier. Used to construct the - #: bnet profile url. This value can be zero for games - #: played offline when a user was not logged in to battle.net. - self.toon_id = detail_data['bnet']['uid'] - - -class User(object): - """ - :param integer uid: The user's unique user id - :param dict init_data: The init data associated with this user - """ - #: The Battle.net profile url template - URL_TEMPLATE = "http://{region}.battle.net/sc2/en/profile/{toon_id}/{subregion}/{name}/" - - def __init__(self, uid, init_data): - #: The user's unique in-game user id - self.uid = int(uid) - - #: The replay.initData data on this user - self.init_data = init_data - - #: The user's Battle.net clan tag at the time of the game - self.clan_tag = init_data['clan_tag'] - - #: The user's Battle.net name at the time of the game - self.name = init_data['name'] - - #: The user's combined Battle.net race levels - self.combined_race_levels = init_data['combined_race_levels'] - - #: The highest 1v1 league achieved by the user in the current season with 1 as Bronze and - #: 7 as Grandmaster. 8 seems to indicate that there is no current season 1v1 ranking. - self.highest_league = init_data['highest_league'] - - #: A flag indicating if this person was the one who recorded the game. - #: This is deprecated because it doesn't actually work. - self.recorder = None - - @property - def url(self): - """The player's formatted Battle.net profile url""" - return self.URL_TEMPLATE.format(**self.__dict__) # region=self.region, toon_id=self.toon_id, subregion=self.subregion, name=self.name.('utf8')) - - -class Observer(Entity, User): - """ Extends :class:`Entity` and :class:`User`. - - :param integer sid: The entity's unique slot id. - :param dict slot_data: The slot data associated with this entity - :param integer uid: The user's unique user id - :param dict init_data: The init data associated with this user - :param integer pid: The player's unique player id. - """ - def __init__(self, sid, slot_data, uid, init_data, pid): - Entity.__init__(self, sid, slot_data) - User.__init__(self, uid, init_data) - - #: The player id of the observer. Only meaningful in pre 2.0.4 replays - self.pid = pid - - def __str__(self): - return "Observer {0} - {1}".format(self.uid, self.name) - - def __repr__(self): - return str(self) - - -class Computer(Entity, Player): - """ Extends :class:`Entity` and :class:`Player` - - :param integer sid: The entity's unique slot id. - :param dict slot_data: The slot data associated with this entity - :param integer pid: The player's unique player id. - :param dict detail_data: The detail data associated with this player - :param dict attribute_data: The attribute data associated with this player - """ - def __init__(self, sid, slot_data, pid, detail_data, attribute_data): - Entity.__init__(self, sid, slot_data) - Player.__init__(self, pid, slot_data, detail_data, attribute_data) - - #: The auto-generated in-game name for this computer player - self.name = detail_data['name'] - - def __str__(self): - return "Player {0} - {1} ({2})".format(self.pid, self.name, self.play_race) - - def __repr__(self): - return str(self) - - -class Participant(Entity, User, Player): - """ Extends :class:`Entity`, :class:`User`, and :class:`Player` - - :param integer sid: The entity's unique slot id. - :param dict slot_data: The slot data associated with this entity - :param integer uid: The user's unique user id - :param dict init_data: The init data associated with this user - :param integer pid: The player's unique player id. - :param dict detail_data: The detail data associated with this player - :param dict attribute_data: The attribute data associated with this player - """ - def __init__(self, sid, slot_data, uid, init_data, pid, detail_data, attribute_data): - Entity.__init__(self, sid, slot_data) - User.__init__(self, uid, init_data) - Player.__init__(self, pid, slot_data, detail_data, attribute_data) - - def __str__(self): - return "Player {0} - {1} ({2})".format(self.pid, self.name, self.play_race) - - def __repr__(self): - return str(self) - - -class PlayerSummary(): - """ - Resents a player as loaded from a :class:`~sc2reader.resources.GameSummary` - file. - """ - - #: The index of the player in the game - pid = int() - - #: The index of the players team in the game - teamid = int() - - #: The race the player played in the game. - play_race = str() - - #: The race the player picked in the lobby. - pick_race = str() - - #: If the player is a computer - is_ai = False - - #: If the player won the game - is_winner = False - - #: Battle.Net id of the player - bnetid = int() - - #: Subregion id of player - subregion = int() - - #: The player's region, such as us, eu, sea - region = str() - - #: unknown1 - unknown1 = int() - - #: unknown2 - unknown2 = dict() - - #: :class:`Graph` of player army values over time (seconds) - army_graph = None - - #: :class:`Graph` of player income over time (seconds) - income_graph = None - - #: Stats from the game in a dictionary - stats = dict() - - def __init__(self, pid): - self.unknown2 = dict() - self.pid = pid - - def __str__(self): - if not self.is_ai: - return 'User {0}-S2-{1}-{2}'.format(self.region.upper(), self.subregion, self.bnetid) - else: - return 'AI ({0})'.format(self.play_race) - - def __repr__(self): - return str(self) - - def get_stats(self): - s = '' - for k in self.stats: - s += '{0}: {1}\n'.format(self.stats_pretty_names[k], self.stats[k]) - return s.strip() - - -BuildEntry = namedtuple('BuildEntry', ['supply', 'total_supply', 'time', 'order', 'build_index']) - - -# TODO: Are there libraries with classes like this in them -class Graph(): - """ - A class to represent a graph on the score screen. Derived from data in the - :class:`~sc2reader.resources.GameSummary` file. - """ - - #: Times in seconds on the x-axis of the graph - times = list() - - #: Values on the y-axis of the graph - values = list() - - def __init__(self, x, y, xy_list=None): - self.times = list() - self.values = list() - - if xy_list: - for x, y in xy_list: - self.times.append(x) - self.values.append(y) - else: - self.times = x - self.values = y - - def as_points(self): - """ Get the graph as a list of (x, y) tuples """ - return list(zip(self.times, self.values)) - - def __str__(self): - return "Graph with {0} values".format(len(self.times)) - - -class MapInfoPlayer(object): - """ - Describes the player data as found in the MapInfo document of SC2Map archives. - """ - def __init__(self, pid, control, color, race, unknown, start_point, ai, decal): - #: The pid of the player - self.pid = pid - - #: The controller of the player, one of: - #: - #: * 0 = Default? - #: * 1 = User - #: * 2 = Computer - #: * 3 = Neutral - #: * 4 = Hostile - #: * More? - #: - self.control = control - - #: The color of the player, one of: - #: - #: * 0xffffffff = (Any) - #: * 0 = White - #: * 1 = Red - #: * 2 = Blue - #: * 3 = Teal - #: * 4 = Purple - #: * 5 = Yellow - #: * 6 = Orange - #: * 7 = Green - #: * 8 = Pink - #: * 9 = Violet - #: * 10 = Light Grey - #: * 11 = Dark Green - #: * 12 = Brown - #: * 13 = Light Green - #: * 14 = Dark Grey - #: * 15 = Lavender - #: - self.color = color - - #: The player race, "" for unset - self.race = race - - #: Unknown player setting - self.unknown = unknown - - #: The point index of the player start location; 0 = random - self.start_point = start_point - - #: The AI to use - self.ai = ai - - #: The player decal - self.decal = decal - - -@log_utils.loggable -class MapInfo(object): - """ - Represents the data encoded into the MapInfo file inside every SC2Map archive - """ - def __init__(self, contents): - # According to http://www.galaxywiki.net/MapInfo_(File_Format) - # With a couple small changes for version 0x20+ - data = ByteDecoder(contents, endian='LITTLE') - magic = data.read_string(4) - if magic != 'MapI': - self.logger.warn("Invalid MapInfo file: {0}".format(magic)) - return - - #: The map info file format version - self.version = data.read_uint32() - if self.version >= 0x18: - self.unknown1 = data.read_uint32() - self.unknown2 = data.read_uint32() - - #: The full map width - self.width = data.read_uint32() - - #: The full map height - self.height = data.read_uint32() - - #: Small map preview type: 0 = None, 1 = Minimap, 2 = Custom - self.small_preview_type = data.read_uint32() - - #: (Optional) Small map preview path; relative to root of map archive - self.small_preview_path = str() - if self.small_preview_type == 2: - self.small_preview_path = data.read_cstring() - - #: Large map preview type: 0 = None, 1 = Minimap, 2 = Custom - self.large_preview_type = data.read_uint32() - - #: (Optional) Large map preview path; relative to root of map archive - self.large_preview_path = str() - if self.large_preview_type == 2: - self.large_preview_path = data.read_cstring() - - if self.version >= 0x1f: - self.unknown3 = data.read_cstring() - - if self.version >= 0x26: - self.unknown4 = data.read_cstring() - - if self.version >= 0x1f: - self.unknown5 = data.read_uint32() - - self.unknown6 = data.read_uint32() - - #: The type of fog of war used on the map - self.fog_type = data.read_cstring() - - #: The tile set used on the map - self.tile_set = data.read_cstring() - - #: The left bounds for the camera. This value is 7 less than the value shown in the editor. - self.camera_left = data.read_uint32() - - #: The bottom bounds for the camera. This value is 4 less than the value shown in the editor. - self.camera_bottom = data.read_uint32() - - #: The right bounds for the camera. This value is 7 more than the value shown in the editor. - self.camera_right = data.read_uint32() - - #: The top bounds for the camera. This value is 4 more than the value shown in the editor. - self.camera_top = data.read_uint32() - - #: The map base height (what is that?). This value is 4096*Base Height in the editor (giving a decimal value). - self.base_height = data.read_uint32()/4096 - - # Leave early so we dont barf. Turns out ggtracker doesnt need - # any of the map data thats loaded below. - return - - #: Load screen type: 0 = default, 1 = custom - self.load_screen_type = data.read_uint32() - - #: (Optional) Load screen image path; relative to root of map archive - self.load_screen_path = data.read_cstring() - - #: Unknown string, usually empty - self.unknown7 = data.read_bytes(data.read_uint16()).decode('utf8') - - #: Load screen image scaling strategy: 0 = normal, 1 = aspect scaling, 2 = stretch the image. - self.load_screen_scaling = data.read_uint32() - - #: The text position on the loading screen. One of: - #: - #: * 0xffffffff = (Default) - #: * 0 = Top Left - #: * 1 = Top - #: * 2 = Top Right - #: * 3 = Left - #: * 4 = Center - #: * 5 = Right - #: * 6 = Bottom Left - #: * 7 = Bottom - #: * 8 = Bottom Right - #: - self.text_position = data.read_uint32() - - #: Loading screen text position offset x - self.text_position_offset_x = data.read_uint32() - - #: Loading screen text position offset y - self.text_position_offset_y = data.read_uint32() - - #: Loading screen text size x - self.text_position_size_x = data.read_uint32() - - #: Loading screen text size y - self.text_position_size_y = data.read_uint32() - - #: A bit array of flags with the following options (possibly incomplete) - #: - #: * 0x00000001 = Disable Replay Recording - #: * 0x00000002 = Wait for Key (Loading Screen) - #: * 0x00000004 = Disable Trigger Preloading - #: * 0x00000008 = Enable Story Mode Preloading - #: * 0x00000010 = Use Horizontal Field of View - #: - self.data_flags = data.read_uint32() - - self.unknown8 = data.read_uint32() - - if self.version >= 0x19: - self.unknown9 = data.read_bytes(8) - - if self.version >= 0x1f: - self.unknown10 = data.read_bytes(9) - - if self.version >= 0x20: - self.unknown11 = data.read_bytes(4) - - #: The number of players enabled via the data editor - self.player_count = data.read_uint32() - - #: A list of references to :class:`MapInfoPlayer` objects - self.players = list() - for i in range(self.player_count): - self.players.append(MapInfoPlayer( - pid=data.read_uint8(), - control=data.read_uint32(), - color=data.read_uint32(), - race=data.read_cstring(), - unknown=data.read_uint32(), - start_point=data.read_uint32(), - ai=data.read_uint32(), - decal=data.read_cstring(), - )) - - #: A list of the start location point indexes used in Basic Team Settings. - #: The editor limits these to only Start Locations and not regular points. - self.start_locations = list() - for i in range(data.read_uint32()): - self.start_locations.append(data.read_uint32()) - - #: The number of start locations used - self.start_location_used = data.read_uint32() - - #: The number of alliance flags encoded in :attr:`alliance_flags`. - self.alliance_flags_length = data.read_uint32() - # A set bit (1) indicates that the pair of Start Locations are to be allied. - # bit = 1; // Set up a bitmask - # // i will be the first Start Location in the Point Indexes array - # // j will the the Start Location after i - # for(i=0;i< Start Location Count;i++){ - # for(j=i+1;j < Start Location Count;j++){ // set j, and then iterate through the rest - # bit <<= 1; // Shift left to move the mask to the next bit. - # if((Team Enemy Flags & bit) != 0) { // These start locations are allies - # // Add more to compensate for byte boundaries. This array can get big. - # } - # } - # } - #: A bit array of flags mapping out the player alliances - self.alliance_flags = data.read_uint(int(math.ceil(self.alliance_flags_length/8.0))) - - #: A list of the advanced start location point indexes used in Advanced Team Settings. - #: The editor limits these to only Start Locations and not regular points. - self.advanced_start_locations = list() - for i in range(data.read_uint32()): - # point index for each start location used - self.advanced_start_locations.append(data.read_uint32()) - - #: A list of bit arrays marking which start locations below to which team. - self.advanced_teams_flags = list() - for i in range(data.read_uint32()): - # TODO: - # One set for each team. Each bit corresponds with the Point Indexes - # array index (i.e., bit 0 is PointIndexes[0], bit1 is PointIndex[1], - # etc.). If the bit is set, that start location is a part of that team. - self.advanced_teams_flags.append(data.read_uint32()) - - #: Possibly "number of teams used"? Similar to "start locations used" - self.advanced_teams_count2 = data.read_uint32() - - #: The number of enemy flags encoded in :attr:`enemy_flags`. - self.enemy_flags_length = data.read_uint32() - # A set bit (1) indicates that the pair of teams are to be enemies. - # bit = 1; // Set up a bitmask - # // i will be the first Team in the Team Members array. - # // j will be the Team that comes after i - # for(i=0;i< Team Count;i++){ - # for(j=i+1;j < Team Count;j++){ // set j, and then iterate through the rest - # bit <<= 1; // Shift left to move the mask to the next bit. - # if((Team Enemy Flags & bit) != 0) { // These teams are enemies - # // Add more code to compensate for byte boundaries. - # } - # } - # } - #: A bit array of flags mapping out the player enemies. - self.enemy_flags = data.read_uint(int(math.ceil(self.enemy_flags_length/8.0))) - - if data.length != data.tell(): - self.logger.warn("Not all of the MapInfo file was read!") - - def __str__(self): - return self.map_name diff --git a/sc2reader/readers.py b/sc2reader/readers.py deleted file mode 100644 index 54bf3f5..0000000 --- a/sc2reader/readers.py +++ /dev/null @@ -1,1978 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import struct - -from sc2reader.exceptions import ParseError, ReadError -from sc2reader.objects import * -from sc2reader.events.game import * -from sc2reader.events.message import * -from sc2reader.events.tracker import * -from sc2reader.utils import DepotFile -from sc2reader.decoders import BitPackedDecoder, ByteDecoder - - -class InitDataReader(object): - def __call__(self, data, replay): - data = BitPackedDecoder(data) - result = dict( - user_initial_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=data.read_aligned_string(data.read_uint8()) if replay.base_build >= 24764 and data.read_bool() else None, - clan_logo=DepotFile(data.read_aligned_bytes(40)) if replay.base_build >= 27950 and data.read_bool() else None, - highest_league=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, - combined_race_levels=data.read_uint32() if replay.base_build >= 24764 and data.read_bool() else None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if replay.base_build >= 16561 and data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=data.read_bool() if replay.base_build >= 21955 else None, - custom_interface=data.read_bool() if replay.base_build >= 24764 else None, - test_type=data.read_uint32() if replay.base_build >= 34784 else None, - observe=data.read_bits(2), - hero=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, - skin=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, - mount=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, - toon_handle=data.read_aligned_string(data.read_bits(7)) if replay.base_build >= 34784 else None, - scaled_rating=data.read_uint32()-2147483648 if replay.base_build >= 54518 and data.read_bool() else None, - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - ranked=data.read_bool() if replay.base_build >= 34784 and replay.base_build < 38215 else None, - competitive=data.read_bool(), - practice=data.read_bool() if replay.base_build >= 34784 else None, - cooperative=data.read_bool() if replay.base_build >= 34784 else None, - no_victory_or_defeat=data.read_bool(), - hero_duplicates_allowed=data.read_bool() if replay.base_build >= 34784 else None, - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=data.read_uint64() if replay.base_build >= 22612 else None, - build_coach_enabled=data.read_bool() if replay.base_build >= 59587 else None, - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6) if replay.base_build >= 17266 else data.read_bits(5)+1, - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+(0 if replay.base_build >= 26490 else 1), - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=data.read_bits(data.read_bits(8 if replay.base_build >= 38749 else 7)) if replay.base_build >= 23925 else None, - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(8 if replay.base_build >= 38749 else 7) if replay.base_build >= 23925 else None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6 if replay.base_build >= 21955 else 4))], - has_extension_mod=data.read_bool() if replay.base_build >= 27950 else None, - has_nonBlizzardExtensionMod=data.read_bool() if replay.base_build >= 42932 else None, - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=data.read_bool() if replay.base_build >= 23925 else None, - is_realtime_mode=data.read_bool() if replay.base_build >= 54518 else None, - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=data.read_bits(8 if replay.base_build >= 38749 else 7) if replay.base_build >= 23925 else None, - handicap=data.read_bits(7), - observe=data.read_bits(2), - logo_index=data.read_uint32() if replay.base_build >= 32283 else None, - hero=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, - skin=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, - mount=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, - artifacts=[dict( - type_struct=data.read_aligned_string(data.read_bits(9)), - ) for i in range(data.read_bits(4))] if replay.base_build >= 34784 else None, - working_set_slot_id=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, - rewards=[data.read_uint32() for i in range(data.read_bits(17 if replay.base_build >= 34784 else 6 if replay.base_build >= 24764 else 5))], - toon_handle=data.read_aligned_string(data.read_bits(7)) if replay.base_build >= 17266 else None, - licenses=[data.read_uint32() for i in range(data.read_bits(13 if replay.base_build >= 70154 else 9))] if replay.base_build >= 19132 else [], - tandem_leader_user_id=data.read_bits(4) if replay.base_build >= 34784 and data.read_bool() else None, - commander=data.read_aligned_bytes(data.read_bits(9)) if replay.base_build >= 34784 else None, - commander_level=data.read_uint32() if replay.base_build >= 36442 else None, - has_silence_penalty=data.read_bool() if replay.base_build >= 38215 else None, - tandem_id=data.read_bits(4) if replay.base_build >= 39576 and data.read_bool() else None, - commander_mastery_level=data.read_uint32() if replay.base_build >= 42932 else None, - commander_mastery_talents=[data.read_uint32() for i in range(data.read_bits(3))] if replay.base_build >= 42932 else None, - reward_overrides=[[data.read_uint32(), [data.read_uint32() for i in range(data.read_bits(17))]] for j in range(data.read_bits(17))] if replay.base_build >= 47185 else None, - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - picked_map_tag=data.read_uint8() if replay.base_build >= 36442 else None, - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(8 if replay.base_build >= 38749 else 7) if replay.base_build >= 24764 else None, - ), - ) - if not data.done(): - raise ValueError("{0} bytes left!".format(data.length-data.tell())) - return result - - -class AttributesEventsReader(object): - def __call__(self, data, replay): - data = ByteDecoder(data, endian='LITTLE') - data.read_bytes(5 if replay.base_build >= 17326 else 4) - result = [Attribute( - data.read_uint32(), - data.read_uint32(), - data.read_uint8(), - ''.join(reversed(data.read_string(4))), - ) for i in range(data.read_uint32())] - if not data.done(): - raise ValueError("Not all bytes used up!") - return result - - -class DetailsReader(object): - def __call__(self, data, replay): - details = BitPackedDecoder(data).read_struct() - return dict( - players=[dict( - name=p[0].decode('utf8'), - bnet=dict( - region=p[1][0], - program_id=p[1][1], - subregion=p[1][2], - # name=p[1][3].decode('utf8'), # This is documented but never available - uid=p[1][4], - ), - race=p[2].decode('utf8'), - color=dict( - a=p[3][0], - r=p[3][1], - g=p[3][2], - b=p[3][3], - ), - control=p[4], - team=p[5], - handicap=p[6], - observe=p[7], - result=p[8], - working_set_slot=p[9] if replay.build >= 24764 else None, - hero=p[10] if replay.build >= 34784 and 10 in p else None, # hero appears to be present in Heroes replays but not StarCraft 2 replays - ) for p in details[0]], - map_name=details[1].decode('utf8'), - difficulty=details[2], - thumbnail=details[3][0], - blizzard_map=details[4], - file_time=details[5], - utc_adjustment=details[6], - description=details[7], - image_file_path=details[8].decode('utf8'), - map_file_name=details[9].decode('utf8'), - cache_handles=[DepotFile(bytes) for bytes in details[10]], - mini_save=details[11], - game_speed=details[12], - default_difficulty=details[13], - mod_paths=details[14] if (replay.build >= 22612 and replay.versions[1] == 1) else None, - campaign_index=details[15] if replay.versions[1] == 2 else None, - restartAsTransitionMap=details[16] if replay.build > 26490 else None, - ) - - -class MessageEventsReader(object): - def __call__(self, data, replay): - data = BitPackedDecoder(data) - pings = list() - messages = list() - packets = list() - - frame = 0 - while not data.done(): - frame += data.read_frames() - pid = data.read_bits(5) - flag = data.read_bits(4) - if flag == 0: # Client chat message - recipient = data.read_bits(3 if replay.base_build >= 21955 else 2) - text = data.read_aligned_string(data.read_bits(11)) - messages.append(ChatEvent(frame, pid, recipient, text)) - - elif flag == 1: # Client ping message - recipient = data.read_bits(3 if replay.base_build >= 21955 else 2) - x = data.read_uint32()-2147483648 - y = data.read_uint32()-2147483648 - pings.append(PingEvent(frame, pid, recipient, x, y)) - - elif flag == 2: # Loading progress message - progress = data.read_uint32()-2147483648 - packets.append(ProgressEvent(frame, pid, progress)) - - elif flag == 3: # Server ping message - pass - - elif flag == 4: # Reconnect notify message - status = data.read_bits(2) - pass # TODO: Store this somewhere - - data.byte_align() - - return dict(pings=pings, messages=messages, packets=packets) - - -class GameEventsReader_Base(object): - - def __init__(self): - self.EVENT_DISPATCH = { - 0: (None, self.unknown_event), - 5: (None, self.finished_loading_sync_event), - 7: (None, self.bank_file_event), - 8: (None, self.bank_section_event), - 9: (None, self.bank_key_event), - 10: (None, self.bank_value_event), - 11: (None, self.bank_signature_event), - 12: (UserOptionsEvent, self.user_options_event), - 22: (None, self.save_game_event), - 23: (None, self.save_game_done_event), - 25: (PlayerLeaveEvent, self.player_leave_event), - 26: (None, self.game_cheat_event), - 27: (create_command_event, self.command_event), - 28: (SelectionEvent, self.selection_delta_event), - 29: (create_control_group_event, self.control_group_update_event), - 30: (None, self.selection_sync_check_event), - 31: (None, self.resource_trade_event), - 32: (None, self.trigger_chat_message_event), - 33: (None, self.ai_communicate_event), - 34: (None, self.set_absolute_game_speed_event), - 35: (None, self.add_absolute_game_speed_event), - 37: (None, self.broadcast_cheat_event), - 38: (None, self.alliance_event), - 39: (None, self.unit_click_event), - 40: (None, self.unit_highlight_event), - 41: (None, self.trigger_reply_selected_event), - 44: (None, self.trigger_skipped_event), - 45: (None, self.trigger_sound_length_query_event), - 46: (None, self.trigger_sound_offset_event), - 47: (None, self.trigger_transmission_offset_event), - 48: (None, self.trigger_transmission_complete_event), - 49: (CameraEvent, self.camera_update_event), - 50: (None, self.trigger_abort_mission_event), - 51: (None, self.trigger_purchase_made_event), - 52: (None, self.trigger_purchase_exit_event), - 53: (None, self.trigger_planet_mission_launched_event), - 54: (None, self.trigger_planet_panel_canceled_event), - 55: (None, self.trigger_dialog_control_event), - 56: (None, self.trigger_sound_length_sync_event), - 57: (None, self.trigger_conversation_skipped_event), - 58: (None, self.trigger_mouse_clicked_event), - 63: (None, self.trigger_planet_panel_replay_event), - 64: (None, self.trigger_soundtrack_done_event), - 65: (None, self.trigger_planet_mission_selected_event), - 66: (None, self.trigger_key_pressed_event), - 67: (None, self.trigger_movie_function_event), - 68: (None, self.trigger_planet_panel_birth_complete_event), - 69: (None, self.trigger_planet_panel_death_complete_event), - 70: (None, self.resource_request_event), - 71: (None, self.resource_request_fulfill_event), - 72: (None, self.resource_request_cancel_event), - 73: (None, self.trigger_research_panel_exit_event), - 74: (None, self.trigger_research_panel_purchase_event), - 75: (None, self.trigger_research_panel_selection_changed_event), - 76: (None, self.lag_message_event), - 77: (None, self.trigger_mercenary_panel_exit_event), - 78: (None, self.trigger_mercenary_panel_purchase_event), - 79: (None, self.trigger_mercenary_panel_selection_changed_event), - 80: (None, self.trigger_victory_panel_exit_event), - 81: (None, self.trigger_battle_report_panel_exit_event), - 82: (None, self.trigger_battle_report_panel_play_mission_event), - 83: (None, self.trigger_battle_report_panel_play_scene_event), - 84: (None, self.trigger_battle_report_panel_selection_changed_event), - 85: (None, self.trigger_victory_panel_play_mission_again_event), - 86: (None, self.trigger_movie_started_event), - 87: (None, self.trigger_movie_finished_event), - 88: (None, self.decrement_game_time_remaining_event), - 89: (None, self.trigger_portrait_loaded_event), - 90: (None, self.trigger_custom_dialog_dismissed_event), - 91: (None, self.trigger_game_menu_item_selected_event), - 92: (None, self.trigger_camera_move_event), - 93: (None, self.trigger_purchase_panel_selected_purchase_item_changed_event), - 94: (None, self.trigger_purchase_panel_selected_purchase_category_changed_event), - 95: (None, self.trigger_button_pressed_event), - 96: (None, self.trigger_game_credits_finished_event), - } - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - game_events = list() - - # method short cuts, avoid dict lookups - EVENT_DISPATCH = self.EVENT_DISPATCH - debug = replay.opt['debug'] - tell = data.tell - read_frames = data.read_frames - read_bits = data.read_bits - byte_align = data.byte_align - append = game_events.append - - try: - fstamp = 0 - event_start = 0 - data_length = data.length - while event_start != data_length: - fstamp += read_frames() - pid = read_bits(5) - event_type = read_bits(7) - event_class, event_parser = EVENT_DISPATCH.get(event_type, (None, None)) - if event_parser is not None: - event_data = event_parser(data) - if event_class is not None: - event = event_class(fstamp, pid, event_data) - append(event) - if debug: - event.bytes = data.read_range(event_start, tell()) - else: - pass # Skipping unused events - - # Otherwise throw a read error - else: - raise ReadError("Event type {0} unknown at position {1}.".format(hex(event_type), hex(event_start)), event_type, event_start, replay, game_events, data) - - byte_align() - event_start = tell() - - return game_events - except ParseError as e: - raise ReadError("Parse error '{0}' unknown at position {1}.".format(e.msg, hex(event_start)), event_type, event_start, replay, game_events, data) - except EOFError as e: - raise ReadError("EOFError error '{0}' unknown at position {1}.".format(e.msg, hex(event_start)), event_type, event_start, replay, game_events, data) - - # Don't want to do this more than once - SINGLE_BIT_MASKS = [0x1 << i for i in range(2**9)] - - def read_selection_bitmask(self, data, mask_length): - bits_left = mask_length - bits = data.read_bits(mask_length) - mask = list() - shift_diff = (mask_length+data._bit_shift) % 8 - data._bit_shift - if shift_diff > 0: - mask = [bits & data._lo_masks[shift_diff]] - bits = bits >> shift_diff - bits_left -= shift_diff - elif shift_diff < 0: - mask = [bits & data._lo_masks[8+shift_diff]] - bits = bits >> (8+shift_diff) - bits_left -= 8+shift_diff - - # Now shift the rest of the bits off into the mask in byte-sized - # chunks in reverse order. No idea why it'd be stored like this. - while bits_left != 0: - mask.insert(0, bits & 0xFF) - bits = bits >> 8 - bits_left -= 8 - - # Compile the finished mask into a large integer for bit checks - bit_mask = sum([c << (i*8) for i, c in enumerate(mask)]) - - # Change mask representation from an int to a bit array with - # True => Deselect, False => Keep - return [(bit_mask & bit != 0) for bit in self.SINGLE_BIT_MASKS[:mask_length]] - - -class GameEventsReader_15405(GameEventsReader_Base): - - def unknown_event(self, data): - return dict( - unknown=data.read_bytes(2) - ) - - def finished_loading_sync_event(self, data): - return None - - def bank_file_event(self, data): - return dict( - name=data.read_aligned_string(data.read_bits(7)), - ) - - def bank_section_event(self, data): - return dict( - name=data.read_aligned_string(data.read_bits(6)), - ) - - def bank_key_event(self, data): - return dict( - name=data.read_aligned_string(data.read_bits(6)), - type=data.read_uint32(), - data=data.read_aligned_bytes(data.read_bits(7)), - ) - - def bank_value_event(self, data): - return dict( - type=data.read_uint32(), - name=data.read_aligned_string(data.read_bits(6)), - data=data.read_aligned_bytes(data.read_bits(12)), - ) - - def bank_signature_event(self, data): - return dict( - signature=[data.read_uint8() for i in range(data.read_bits(4))], - toon_handle=None, - ) - - def user_options_event(self, data): - return dict( - # I'm just guessing which flags are available here - game_fully_downloaded=None, - development_cheats_enabled=data.read_bool(), - multiplayer_cheats_enabled=data.read_bool(), - sync_checksumming_enabled=data.read_bool(), - is_map_to_map_transition=data.read_bool(), - use_ai_beacons=None, - debug_pause_enabled=None, - base_build_num=None, - starting_rally=None, - ) - - def save_game_event(self, data): - return dict( - file_name=data.read_aligned_string(data.read_bits(11)), - automatic=data.read_bool(), - overwrite=data.read_bool(), - name=data.read_aligned_string(data.read_uint8()), - description=data.read_aligned_string(data.read_bits(10)), - ) - - def save_game_done_event(self, data): - return None - - def player_leave_event(self, data): - return None - - def game_cheat_event(self, data): - return dict( - point=dict( - x=data.read_uint32()-2147483648, - y=data.read_uint32()-2147483648, - ), - time=data.read_uint32()-2147483648, - verb=data.read_aligned_string(data.read_bits(10)), - arguments=data.read_aligned_string(data.read_bits(10)), - ) - - def command_event(self, data): - flags = data.read_uint32() - ability = dict( - ability_link=data.read_uint16(), - ability_command_index=data.read_uint8(), - ability_command_data=data.read_uint8(), - ) - target_data = ('TargetUnit', dict( - flags=data.read_uint8(), - timer=data.read_uint8(), - )) - other_unit_tag = data.read_uint32() - - target_data[1].update(dict( - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - control_player_id=None, - upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - point=dict( - x=data.read_uint32()-2147483648, - y=data.read_uint32()-2147483648, - z=data.read_uint32()-2147483648, - ), - )) - return dict( - flags=flags, - ability=ability, - data=target_data, - other_unit_tag=other_unit_tag, - ) - - def selection_delta_event(self, data): - return dict( - control_group_index=data.read_bits(4), - subgroup_index=data.read_uint8(), - remove_mask=('Mask', self.read_selection_bitmask(data, data.read_uint8())), - add_subgroups=[dict( - unit_link=data.read_uint16(), - subgroup_priority=None, - intra_subgroup_priority=data.read_uint8(), - count=data.read_uint8(), - ) for i in range(data.read_uint8())], - add_unit_tags=[data.read_uint32() for i in range(data.read_uint8())], - ) - - def control_group_update_event(self, data): - return dict( - control_group_index=data.read_bits(4), - control_group_update=data.read_bits(2), - remove_mask=('Mask', self.read_selection_bitmask(data, data.read_uint8())) if data.read_bool() else ('None', None), - ) - - def selection_sync_check_event(self, data): - return dict( - control_group_index=data.read_bits(4), - selection_sync_data=dict( - count=data.read_uint8(), - subgroup_count=data.read_uint8(), - active_subgroup_index=data.read_uint8(), - unit_tags_checksum=data.read_uint32(), - subgroup_indices_checksum=data.read_uint32(), - subgroups_checksum=data.read_uint32(), - ) - ) - - def resource_trade_event(self, data): - return dict( - recipient_id=data.read_bits(4), - resources=[data.read_uint32()-2147483648 for i in range(data.read_bits(3))], - ) - - def trigger_chat_message_event(self, data): - return dict( - message=data.read_aligned_string(data.read_bits(10)), - ) - - def ai_communicate_event(self, data): - return dict( - beacon=data.read_uint8()-128, - ally=data.read_uint8()-128, - flags=data.read_uint8()-128, - build=None, - target_unit_tag=data.read_uint32(), - target_unit_link=data.read_uint16(), - target_upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - target_control_player_id=None, - target_point=dict( - x=data.read_uint32()-2147483648, - y=data.read_uint32()-2147483648, - z=data.read_uint32()-2147483648, - ), - ) - - def set_absolute_game_speed_event(self, data): - return dict( - speed=data.read_bits(3), - ) - - def add_absolute_game_speed_event(self, data): - return dict( - delta=data.read_uint8()-128, - ) - - def broadcast_cheat_event(self, data): - return dict( - verb=data.read_aligned_string(data.read_bits(10)), - arguments=data.read_aligned_string(data.read_bits(10)), - ) - - def alliance_event(self, data): - return dict( - alliance=data.read_uint32(), - control=data.read_uint32(), - ) - - def unit_click_event(self, data): - return dict( - unit_tag=data.read_uint32(), - ) - - def unit_highlight_event(self, data): - return dict( - unit_tag=data.read_uint32(), - flags=data.read_uint8(), - ) - - def trigger_reply_selected_event(self, data): - return dict( - conversation_id=data.read_uint32()-2147483648, - reply_id=data.read_uint32()-2147483648, - ) - - def trigger_skipped_event(self, data): - return None - - def trigger_sound_length_query_event(self, data): - return dict( - sound_hash=data.read_uint32(), - length=data.read_uint32(), - ) - - def trigger_sound_offset_event(self, data): - return dict( - sound=data.read_uint32(), - ) - - def trigger_transmission_offset_event(self, data): - return dict( - transmission_id=data.read_uint32()-2147483648, - ) - - def trigger_transmission_complete_event(self, data): - return dict( - transmission_id=data.read_uint32()-2147483648, - ) - - def camera_update_event(self, data): - return dict( - target=dict( - x=data.read_uint16(), - y=data.read_uint16(), - ), - distance=data.read_uint16() if data.read_bool() else None, - pitch=data.read_uint16() if data.read_bool() else None, - yaw=data.read_uint16() if data.read_bool() else None, - reason=None, - ) - - def trigger_abort_mission_event(self, data): - return None - - def trigger_purchase_made_event(self, data): - return dict( - purchase_item_id=data.read_uint32()-2147483648, - ) - - def trigger_purchase_exit_event(self, data): - return None - - def trigger_planet_mission_launched_event(self, data): - return dict( - difficulty_level=data.read_uint32()-2147483648, - ) - - def trigger_planet_panel_canceled_event(self, data): - return None - - def trigger_dialog_control_event(self, data): - return dict( - control_id=data.read_uint32()-2147483648, - event_type=data.read_uint32()-2147483648, - event_data={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('Checked', data.read_bool()), - 2: lambda: ('ValueChanged', data.read_uint32()), - 3: lambda: ('SelectionChanged', data.read_uint32()-2147483648), - 4: lambda: ('TextChanged', data.read_aligned_string(data.read_bits(11))), - }[data.read_bits(3)](), - ) - - def trigger_sound_length_sync_event(self, data): - return dict( - sync_info=dict( - sound_hash=[data.read_uint32() for i in range(data.read_uint8())], - length=[data.read_uint32() for i in range(data.read_uint8())], - ) - ) - - def trigger_conversation_skipped_event(self, data): - return dict( - skip_type=data.read_int(1), - ) - - def trigger_mouse_clicked_event(self, data): - return dict( - button=data.read_uint32(), - down=data.read_bool(), - position_ui=dict( - x=data.read_uint32(), - y=data.read_uint32(), - ), - position_world=dict( - x=data.read_uint32()-2147483648, - y=data.read_uint32()-2147483648, - z=data.read_uint32()-2147483648, - ), - ) - - def trigger_planet_panel_replay_event(self, data): - return None - - def trigger_soundtrack_done_event(self, data): - return dict( - soundtrack=data.read_uint32(), - ) - - def trigger_planet_mission_selected_event(self, data): - return dict( - planet_id=data.read_uint32()-2147483648, - ) - - def trigger_key_pressed_event(self, data): - return dict( - key=data.read_uint8()-128, - flags=data.read_uint8()-128, - ) - - def trigger_movie_function_event(self, data): - return dict( - function_name=data.read_aligned_string(data.read_bits(7)), - ) - - def trigger_planet_panel_birth_complete_event(self, data): - return None - - def trigger_planet_panel_death_complete_event(self, data): - return None - - def resource_request_event(self, data): - return dict( - resources=[data.read_uint32()-2147483648 for i in range(data.read_bits(3))], - ) - - def resource_request_fulfill_event(self, data): - return dict( - request_id=data.read_uint32()-2147483648, - ) - - def resource_request_cancel_event(self, data): - return dict( - request_id=data.read_uint32()-2147483648, - ) - - def trigger_research_panel_exit_event(self, data): - return None - - def trigger_research_panel_purchase_event(self, data): - return None - - def trigger_research_panel_selection_changed_event(self, data): - return dict( - item_id=data.read_uint32()-2147483648, - ) - - def lag_message_event(self, data): - return dict( - player_id=data.read_bits(4), - ) - - def trigger_mercenary_panel_exit_event(self, data): - return None - - def trigger_mercenary_panel_purchase_event(self, data): - return None - - def trigger_mercenary_panel_selection_changed_event(self, data): - return dict( - item_id=data.read_uint32()-2147483648, - ) - - def trigger_victory_panel_exit_event(self, data): - return None - - def trigger_battle_report_panel_exit_event(self, data): - return None - - def trigger_battle_report_panel_play_mission_event(self, data): - return dict( - battle_report_id=data.read_uint32()-2147483648, - difficulty_level=data.read_uint32()-2147483648, - ) - - def trigger_battle_report_panel_play_scene_event(self, data): - return dict( - battle_report_id=data.read_uint32()-2147483648, - ) - - def trigger_battle_report_panel_selection_changed_event(self, data): - return dict( - battle_report_id=data.read_uint32()-2147483648, - ) - - def trigger_victory_panel_play_mission_again_event(self, data): - return dict( - difficulty_level=data.read_uint32()-2147483648, - ) - - def trigger_movie_started_event(self, data): - return None - - def trigger_movie_finished_event(self, data): - return None - - def decrement_game_time_remaining_event(self, data): - return dict( - decrement_ms=data.read_uint32(), - ) - - def trigger_portrait_loaded_event(self, data): - return dict( - portrait_id=data.read_uint32()-2147483648, - ) - - def trigger_custom_dialog_dismissed_event(self, data): - return dict( - result=data.read_uint32()-2147483648, - ) - - def trigger_game_menu_item_selected_event(self, data): - return dict( - game_menu_item_index=data.read_uint32()-2147483648, - ) - - def trigger_camera_move_event(self, data): - return dict( - reason=data.read_uint8()-128, - ) - - def trigger_purchase_panel_selected_purchase_item_changed_event(self, data): - return dict( - item_id=data.read_uint32()-2147483648, - ) - - def trigger_purchase_panel_selected_purchase_category_changed_event(self, data): - return dict( - category_id=data.read_uint32()-2147483648, - ) - - def trigger_button_pressed_event(self, data): - return dict( - button=data.read_uint16(), - ) - - def trigger_game_credits_finished_event(self, data): - return None - - -class GameEventsReader_16561(GameEventsReader_15405): - - def command_event(self, data): - return dict( - flags=data.read_bits(17), - ability=dict( - ability_link=data.read_uint16(), - ability_command_index=data.read_bits(5), - ability_command_data=data.read_uint8() if data.read_bool() else None, - ) if data.read_bool() else None, - data={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('TargetPoint', dict( - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32()-2147483648, - ) - )), - 2: lambda: ('TargetUnit', dict( - flags=data.read_uint8(), - timer=data.read_uint8(), - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - control_player_id=None, - upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32()-2147483648, - ), - )), - 3: lambda: ('Data', dict(data=data.read_uint32())), - }[data.read_bits(2)](), - other_unit_tag=data.read_uint32() if data.read_bool() else None - ) - - def selection_delta_event(self, data): - return dict( - control_group_index=data.read_bits(4), - subgroup_index=data.read_uint8(), - remove_mask={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('Mask', self.read_selection_bitmask(data, data.read_uint8())), - 2: lambda: ('OneIndices', [data.read_uint8() for i in range(data.read_uint8())]), - 3: lambda: ('ZeroIndices', [data.read_uint8() for i in range(data.read_uint8())]), - }[data.read_bits(2)](), - add_subgroups=[dict( - unit_link=data.read_uint16(), - subgroup_priority=None, - intra_subgroup_priority=data.read_uint8(), - count=data.read_uint8(), - ) for i in range(data.read_uint8())], - add_unit_tags=[data.read_uint32() for i in range(data.read_uint8())], - ) - - def control_group_update_event(self, data): - return dict( - control_group_index=data.read_bits(4), - control_group_update=data.read_bits(2), - remove_mask={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('Mask', self.read_selection_bitmask(data, data.read_uint8())), - 2: lambda: ('OneIndices', [data.read_uint8() for i in range(data.read_uint8())]), - 3: lambda: ('ZeroIndices', [data.read_uint8() for i in range(data.read_uint8())]), - }[data.read_bits(2)](), - ) - - def decrement_game_time_remaining_event(self, data): - # really this should be set to 19, and a new GameEventsReader_41743 should be introduced that specifies 32 bits. - # but I dont care about ability to read old replays. - return dict( - decrement_ms=data.read_bits(32) - ) - - -class GameEventsReader_16605(GameEventsReader_16561): - pass - - -class GameEventsReader_16755(GameEventsReader_16605): - pass - - -class GameEventsReader_16939(GameEventsReader_16755): - pass - - -class GameEventsReader_17326(GameEventsReader_16939): - - def __init__(self): - super(GameEventsReader_17326, self).__init__() - - self.EVENT_DISPATCH.update({ - 59: (None, self.trigger_mouse_moved_event), - }) - - def bank_signature_event(self, data): - return dict( - signature=[data.read_uint8() for i in range(data.read_bits(5))], - toon_handle=None, - ) - - def trigger_mouse_clicked_event(self, data): - return dict( - button=data.read_uint32(), - down=data.read_bool(), - position_ui=dict( - x=data.read_bits(11), - y=data.read_bits(11), - ), - position_world=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32() - 2147483648, - ), - ) - - def trigger_mouse_moved_event(self, data): - return dict( - position_ui=dict( - x=data.read_bits(11), - y=data.read_bits(11), - ), - position_world=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32()-2147483648, - ), - ) - - -class GameEventsReader_18092(GameEventsReader_17326): - pass - - -class GameEventsReader_18574(GameEventsReader_18092): - - def command_event(self, data): - return dict( - flags=data.read_bits(18), - ability=dict( - ability_link=data.read_uint16(), - ability_command_index=data.read_bits(5), - ability_command_data=data.read_uint8() if data.read_bool() else None, - ) if data.read_bool() else None, - data={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('TargetPoint', dict( - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32()-2147483648, - ) - )), - 2: lambda: ('TargetUnit', dict( - flags=data.read_uint8(), - timer=data.read_uint8(), - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - control_player_id=None, - upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32()-2147483648, - ), - )), - 3: lambda: ('Data', dict(data=data.read_uint32())), - }[data.read_bits(2)](), - other_unit_tag=data.read_uint32() if data.read_bool() else None - ) - - -class GameEventsReader_19132(GameEventsReader_18574): - pass - - -class GameEventsReader_19595(GameEventsReader_19132): - - def command_event(self, data): - return dict( - flags=data.read_bits(18), - ability=dict( - ability_link=data.read_uint16(), - ability_command_index=data.read_bits(5), - ability_command_data=data.read_uint8() if data.read_bool() else None, - ) if data.read_bool() else None, - data={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('TargetPoint', dict( - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32()-2147483648, - ) - )), - 2: lambda: ('TargetUnit', dict( - flags=data.read_uint8(), - timer=data.read_uint8(), - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - control_player_id=data.read_bits(4) if data.read_bool() else None, - upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32()-2147483648, - ), - )), - 3: lambda: ('Data', dict(data=data.read_uint32())), - }[data.read_bits(2)](), - other_unit_tag=data.read_uint32() if data.read_bool() else None - ) - - def ai_communicate_event(self, data): - return dict( - beacon=data.read_uint8()-128, - ally=data.read_uint8()-128, - flags=data.read_uint8()-128, # autocast?? - build=None, - target_unit_tag=data.read_uint32(), - target_unit_link=data.read_uint16(), - target_upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - target_control_player_id=data.read_bits(4) if data.read_bool() else None, - target_point=dict( - x=data.read_uint32()-2147483648, - y=data.read_uint32()-2147483648, - z=data.read_uint32()-2147483648, - ), - ) - - -class GameEventsReader_21029(GameEventsReader_19595): - pass - - -class GameEventsReader_22612(GameEventsReader_21029): - - def __init__(self): - super(GameEventsReader_22612, self).__init__() - - self.EVENT_DISPATCH.update({ - 36: (None, self.trigger_ping_event), - 60: (None, self.achievement_awarded_event), - 97: (None, self.trigger_cutscene_bookmark_fired_event), - 98: (None, self.trigger_cutscene_end_scene_fired_event), - 99: (None, self.trigger_cutscene_conversation_line_event), - 100: (None, self.trigger_cutscene_conversation_line_missing_event), - }) - - def user_options_event(self, data): - return dict( - game_fully_downloaded=data.read_bool(), - development_cheats_enabled=data.read_bool(), - multiplayer_cheats_enabled=data.read_bool(), - sync_checksumming_enabled=data.read_bool(), - is_map_to_map_transition=data.read_bool(), - use_ai_beacons=data.read_bool(), - debug_pause_enabled=None, - base_build_num=None, - starting_rally=None, - ) - - def command_event(self, data): - return dict( - flags=data.read_bits(20), - ability=dict( - ability_link=data.read_uint16(), - ability_command_index=data.read_bits(5), - ability_command_data=data.read_uint8() if data.read_bool() else None, - ) if data.read_bool() else None, - data={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('TargetPoint', dict( - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32()-2147483648, - ) - )), - 2: lambda: ('TargetUnit', dict( - flags=data.read_uint8(), - timer=data.read_uint8(), - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - control_player_id=data.read_bits(4) if data.read_bool() else None, - upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32()-2147483648, - ), - )), - 3: lambda: ('Data', dict(data=data.read_uint32())), - }[data.read_bits(2)](), - other_unit_tag=data.read_uint32() if data.read_bool() else None - ) - - def selection_delta_event(self, data): - return dict( - control_group_index=data.read_bits(4), - subgroup_index=data.read_bits(9), - remove_mask={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('Mask', self.read_selection_bitmask(data, data.read_bits(9))), - 2: lambda: ('OneIndices', [data.read_bits(9) for i in range(data.read_bits(9))]), - 3: lambda: ('ZeroIndices', [data.read_bits(9) for i in range(data.read_bits(9))]), - }[data.read_bits(2)](), - add_subgroups=[dict( - unit_link=data.read_uint16(), - subgroup_priority=None, - intra_subgroup_priority=data.read_uint8(), - count=data.read_bits(9), - ) for i in range(data.read_bits(9))], - add_unit_tags=[data.read_uint32() for i in range(data.read_bits(9))], - ) - - def control_group_update_event(self, data): - return dict( - control_group_index=data.read_bits(4), - control_group_update=data.read_bits(2), - remove_mask={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('Mask', self.read_selection_bitmask(data, data.read_bits(9))), - 2: lambda: ('OneIndices', [data.read_bits(9) for i in range(data.read_bits(9))]), - 3: lambda: ('ZeroIndices', [data.read_bits(9) for i in range(data.read_bits(9))]), - }[data.read_bits(2)](), - ) - - def selection_sync_check_event(self, data): - return dict( - control_group_index=data.read_bits(4), - selection_sync_data=dict( - count=data.read_bits(9), - subgroup_count=data.read_bits(9), - active_subgroup_index=data.read_bits(9), - unit_tags_checksum=data.read_uint32(), - subgroup_indices_checksum=data.read_uint32(), - subgroups_checksum=data.read_uint32(), - ) - ) - - def ai_communicate_event(self, data): - return dict( - beacon=data.read_uint8()-128, - ally=data.read_uint8()-128, - flags=data.read_uint8()-128, - build=data.read_uint8()-128, - target_unit_tag=data.read_uint32(), - target_unit_link=data.read_uint16(), - target_upkeep_player_id=data.read_uint8(), - target_control_player_id=data.read_uint8(), - target_point=dict( - x=data.read_uint32()-2147483648, - y=data.read_uint32()-2147483648, - z=data.read_uint32()-2147483648, - ), - ) - - def trigger_ping_event(self, data): - return dict( - point=dict( - x=data.read_uint32()-2147483648, - y=data.read_uint32()-2147483648, - ), - unit_tag=data.read_uint32(), - pinged_minimap=data.read_bool(), - ) - - def trigger_transmission_offset_event(self, data): - # I'm not actually sure when this second int is introduced.. - return dict( - transmission_id=data.read_uint32()-2147483648, - thread=data.read_uint32(), - ) - - def achievement_awarded_event(self, data): - return dict( - achievement_link=data.read_uint16(), - ) - - def trigger_cutscene_bookmark_fired_event(self, data): - return dict( - cutscene_id=data.read_uint32()-2147483648, - bookmark_name=data.read_aligned_string(data.read_bits(7)), - ) - - def trigger_cutscene_end_scene_fired_event(self, data): - return dict( - cutscene_id=data.read_uint32()-2147483648, - ) - - def trigger_cutscene_conversation_line_event(self, data): - return dict( - cutscene_id=data.read_uint32()-2147483648, - conversation_line=data.read_aligned_string(data.read_bits(7)), - alt_conversation_line=data.read_aligned_string(data.read_bits(7)), - ) - - def trigger_cutscene_conversation_line_missing_event(self, data): - return dict( - cutscene_id=data.read_uint32()-2147483648, - conversation_line=data.read_aligned_string(data.read_bits(7)), - ) - - -class GameEventsReader_23260(GameEventsReader_22612): - - def trigger_sound_length_sync_event(self, data): - return dict( - sync_info=dict( - sound_hash=[data.read_uint32() for i in range(data.read_bits(7))], - length=[data.read_uint32() for i in range(data.read_bits(7))], - ) - ) - - def user_options_event(self, data): - return dict( - game_fully_downloaded=data.read_bool(), - development_cheats_enabled=data.read_bool(), - multiplayer_cheats_enabled=data.read_bool(), - sync_checksumming_enabled=data.read_bool(), - is_map_to_map_transition=data.read_bool(), - starting_rally=data.read_bool(), - use_ai_beacons=data.read_bool(), - debug_pause_enabled=None, - base_build_num=None, - ) - - -class GameEventsReader_HotSBeta(GameEventsReader_23260): - - def user_options_event(self, data): - return dict( - game_fully_downloaded=data.read_bool(), - development_cheats_enabled=data.read_bool(), - multiplayer_cheats_enabled=data.read_bool(), - sync_checksumming_enabled=data.read_bool(), - is_map_to_map_transition=data.read_bool(), - starting_rally=data.read_bool(), - debug_pause_enabled=None, - base_build_num=data.read_uint32(), - use_ai_beacons=None, - ) - - def selection_delta_event(self, data): - return dict( - control_group_index=data.read_bits(4), - subgroup_index=data.read_bits(9), - remove_mask={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('Mask', self.read_selection_bitmask(data, data.read_bits(9))), - 2: lambda: ('OneIndices', [data.read_bits(9) for i in range(data.read_bits(9))]), - 3: lambda: ('ZeroIndices', [data.read_bits(9) for i in range(data.read_bits(9))]), - }[data.read_bits(2)](), - add_subgroups=[dict( - unit_link=data.read_uint16(), - subgroup_priority=data.read_uint8(), - intra_subgroup_priority=data.read_uint8(), - count=data.read_bits(9), - ) for i in range(data.read_bits(9))], - add_unit_tags=[data.read_uint32() for i in range(data.read_bits(9))], - ) - - def camera_update_event(self, data): - return dict( - target=dict( - x=data.read_uint16(), - y=data.read_uint16(), - ) if data.read_bool() else None, - distance=data.read_uint16() if data.read_bool() else None, - pitch=data.read_uint16() if data.read_bool() else None, - yaw=data.read_uint16() if data.read_bool() else None, - ) - - def trigger_dialog_control_event(self, data): - return dict( - control_id=data.read_uint32()-2147483648, - event_type=data.read_uint32()-2147483648, - event_data={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('Checked', data.read_bool()), - 2: lambda: ('ValueChanged', data.read_uint32()), - 3: lambda: ('SelectionChanged', data.read_uint32()-2147483648), - 4: lambda: ('TextChanged', data.read_aligned_string(data.read_bits(11))), - 5: lambda: ('MouseButton', data.read_uint32()) - }[data.read_bits(3)](), - ) - - -class GameEventsReader_24247(GameEventsReader_HotSBeta): - - def __init__(self): - super(GameEventsReader_24247, self).__init__() - - self.EVENT_DISPATCH.update({ - 7: (UserOptionsEvent, self.user_options_event), # Override - 9: (None, self.bank_file_event), # Override - 10: (None, self.bank_section_event), # Override - 11: (None, self.bank_key_event), # Override - 12: (None, self.bank_value_event), # Override - 13: (None, self.bank_signature_event), # New - 14: (None, self.camera_save_event), # New - 21: (None, self.save_game_event), # New - 22: (None, self.save_game_done_event), # Override - 23: (None, self.load_game_done_event), # Override - 43: (HijackReplayGameEvent, self.hijack_replay_game_event), # New - 62: (None, self.trigger_target_mode_update_event), # New - 101: (PlayerLeaveEvent, self.game_user_leave_event), # New - 102: (None, self.game_user_join_event), # New - }) - del self.EVENT_DISPATCH[8] - del self.EVENT_DISPATCH[25] - del self.EVENT_DISPATCH[76] - - def bank_signature_event(self, data): - return dict( - signature=[data.read_uint8() for i in range(data.read_bits(5))], - toon_handle=data.read_aligned_string(data.read_bits(7)) - ) - - def camera_save_event(self, data): - return dict( - which=data.read_bits(3), - target=dict( - x=data.read_uint16(), - y=data.read_uint16(), - ) - ) - - def load_game_done_event(self, data): - return None - - def hijack_replay_game_event(self, data): - return dict( - user_infos=[dict( - game_user_id=data.read_bits(4), - observe=data.read_bits(2), - name=data.read_aligned_string(data.read_uint8()), - toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, - clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_logo=None, - ) for i in range(data.read_bits(5))], - method=data.read_bits(1), - ) - - def camera_update_event(self, data): - return dict( - target=dict( - x=data.read_uint16(), - y=data.read_uint16(), - ) if data.read_bool() else None, - distance=data.read_uint16() if data.read_bool() else None, - pitch=data.read_uint16() if data.read_bool() else None, - yaw=data.read_uint16() if data.read_bool() else None, - reason=None, - ) - - def trigger_target_mode_update_event(self, data): - return dict( - ability_link=data.read_uint16(), - ability_command_index=data.read_bits(5), - state=data.read_uint8()-128, - ) - - def game_user_leave_event(self, data): - return None - - def game_user_join_event(self, data): - return dict( - observe=data.read_bits(2), - name=data.read_aligned_string(data.read_bits(8)), - toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, - clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_log=None, - ) - - -class GameEventsReader_26490(GameEventsReader_24247): - - def user_options_event(self, data): - return dict( - game_fully_downloaded=data.read_bool(), - development_cheats_enabled=data.read_bool(), - multiplayer_cheats_enabled=data.read_bool(), - sync_checksumming_enabled=data.read_bool(), - is_map_to_map_transition=data.read_bool(), - starting_rally=data.read_bool(), - debug_pause_enabled=data.read_bool(), - base_build_num=data.read_uint32(), - use_ai_beacons=None, - ) - - def trigger_mouse_clicked_event(self, data): - return dict( - button=data.read_uint32(), - down=data.read_bool(), - position_ui=dict( - x=data.read_bits(11), - y=data.read_bits(11), - ), - position_world=dict( - x=data.read_bits(20) - 2147483648, - y=data.read_bits(20) - 2147483648, - z=data.read_uint32() - 2147483648, - ), - flags=data.read_uint8() - 128, - ) - - def trigger_mouse_moved_event(self, data): - return dict( - position_ui=dict( - x=data.read_bits(11), - y=data.read_bits(11), - ), - position_world=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32() - 2147483648, - ), - flags=data.read_uint8() - 128, - ) - - -class GameEventsReader_27950(GameEventsReader_26490): - - def hijack_replay_game_event(self, data): - return dict( - user_infos=[dict( - game_user_id=data.read_bits(4), - observe=data.read_bits(2), - name=data.read_aligned_string(data.read_uint8()), - toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, - clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, - ) for i in range(data.read_bits(5))], - method=data.read_bits(1), - ) - - def camera_update_event(self, data): - return dict( - target=dict( - x=data.read_uint16(), - y=data.read_uint16(), - ) if data.read_bool() else None, - distance=data.read_uint16() if data.read_bool() else None, - pitch=data.read_uint16() if data.read_bool() else None, - yaw=data.read_uint16() if data.read_bool() else None, - reason=data.read_uint8() - 128 if data.read_bool() else None, - ) - - def game_user_join_event(self, data): - return dict( - observe=data.read_bits(2), - name=data.read_aligned_string(data.read_bits(8)), - toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, - clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, - ) - -class GameEventsReader_34784(GameEventsReader_27950): - - def __init__(self): - super(GameEventsReader_34784, self).__init__() - - self.EVENT_DISPATCH.update({ - 25: (None, self.command_manager_reset_event), # Re-using this old number - 61: (None, self.trigger_hotkey_pressed_event), - 103: (None, self.command_manager_state_event), - 104: (UpdateTargetPointCommandEvent, self.command_update_target_point_event), - 105: (UpdateTargetUnitCommandEvent, self.command_update_target_unit_event), - 106: (None, self.trigger_anim_length_query_by_name_event), - 107: (None, self.trigger_anim_length_query_by_props_event), - 108: (None, self.trigger_anim_offset_event), - 109: (None, self.catalog_modify_event), - 110: (None, self.hero_talent_tree_selected_event), - 111: (None, self.trigger_profiler_logging_finished_event), - 112: (None, self.hero_talent_tree_selection_panel_toggled_event), - }) - - def hero_talent_tree_selection_panel_toggled_event(self, data): - return dict( - shown=data.read_bool(), - ) - - def trigger_profiler_logging_finished_event(self, data): - return dict() - - def hero_talent_tree_selected_event(self, data): - return dict( - index=data.read_uint32() - ) - - def catalog_modify_event(self, data): - return dict( - catalog=data.read_uint8(), - entry=data.read_uint16(), - field=data.read_aligned_string(data.read_uint8()), - value=data.read_aligned_string(data.read_uint8()), - ) - - def trigger_anim_offset_event(self, data): - return dict( - anim_wait_query_id=data.read_uint16(), - ) - - def trigger_anim_length_query_by_props_event(self, data): - return dict( - query_id=data.read_uint16(), - length_ms=data.read_uint32(), - ) - - def trigger_anim_length_query_by_name_event(self, data): - return dict( - query_id=data.read_uint16(), - length_ms=data.read_uint32(), - finish_game_loop=data.read_uint32(), - ) - - def command_manager_reset_event(self, data): - return dict( - sequence=data.read_uint32(), - ) - - def command_manager_state_event(self, data): - return dict( - state=data.read_bits(2), - sequence=data.read_uint32() + 1 if data.read_bool() else None, - ) - - def command_update_target_point_event(self, data): - return dict( - flags=0, # fill me with previous TargetPointEvent.flags - ability=None, # fill me with previous TargetPointEvent.ability - data=('TargetPoint', dict( - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_bits(32) - 2147483648, - ), - )), - sequence=0, # fill me with previous TargetPointEvent.flags - other_unit_tag=None, # fill me with previous TargetPointEvent.flags - unit_group=None, # fill me with previous TargetPointEvent.flags - ) - - def command_update_target_unit_event(self, data): - return dict( - flags=0, # fill me with previous TargetUnitEvent.flags - ability=None, # fill me with previous TargetUnitEvent.ability - data=('TargetUnit', dict( - flags=data.read_uint16(), - timer=data.read_uint8(), - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - control_player_id=data.read_bits(4) if data.read_bool() else None, - upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_bits(32) - 2147483648, - ), - )), - sequence=0, # fill me with previous TargetUnitEvent.flags - other_unit_tag=None, # fill me with previous TargetUnitEvent.flags - unit_group=None, # fill me with previous TargetUnitEvent.flags - ) - - def command_event(self, data): - return dict( - flags=data.read_bits(23), - ability=dict( - ability_link=data.read_uint16(), - ability_command_index=data.read_bits(5), - ability_command_data=data.read_uint8() if data.read_bool() else None, - ) if data.read_bool() else None, - data={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('TargetPoint', dict( - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32() - 2147483648, - ) - )), - 2: lambda: ('TargetUnit', dict( - flags=data.read_uint16(), - timer=data.read_uint8(), - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - control_player_id=data.read_bits(4) if data.read_bool() else None, - upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32() - 2147483648, - ), - )), - 3: lambda: ('Data', dict( - data=data.read_uint32() - )), - }[data.read_bits(2)](), - sequence=data.read_uint32() + 1, - other_unit_tag=data.read_uint32() if data.read_bool() else None, - unit_group=data.read_uint32() if data.read_bool() else None, - ) - - def user_options_event(self, data): - return dict( - game_fully_downloaded=data.read_bool(), - development_cheats_enabled=data.read_bool(), - test_cheats_enabled=data.read_bool(), - multiplayer_cheats_enabled=data.read_bool(), - sync_checksumming_enabled=data.read_bool(), - is_map_to_map_transition=data.read_bool(), - starting_rally=data.read_bool(), - debug_pause_enabled=data.read_bool(), - use_galaxy_asserts=data.read_bool(), - platform_mac=data.read_bool(), - camera_follow=data.read_bool(), - base_build_num=data.read_uint32(), - build_num=data.read_uint32(), - version_flags=data.read_uint32(), - hotkey_profile=data.read_aligned_string(data.read_bits(9)), - use_ai_beacons=None, - ) - - def trigger_ping_event(self, data): - return dict( - point=dict( - x=data.read_uint32() - 2147483648, - y=data.read_uint32() - 2147483648, - ), - unit_tag=data.read_uint32(), - pinged_minimap=data.read_bool(), - option=data.read_uint32() - 2147483648, - ) - - def camera_update_event(self, data): - return dict( - target=dict( - x=data.read_uint16(), - y=data.read_uint16(), - ) if data.read_bool() else None, - distance=data.read_uint16() if data.read_bool() else None, - pitch=data.read_uint16() if data.read_bool() else None, - yaw=data.read_uint16() if data.read_bool() else None, - reason=data.read_uint8() - 128 if data.read_bool() else None, - follow=data.read_bool(), - ) - - def trigger_hotkey_pressed_event(self, data): - return dict( - hotkey=data.read_uint32(), - down=data.read_bool(), - ) - - def game_user_join_event(self, data): - return dict( - observe=data.read_bits(2), - name=data.read_aligned_string(data.read_bits(8)), - toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, - clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, - hijack=data.read_bool(), - hijack_clone_game_user_id=data.read_bits(4) if data.read_bool() else None, - ) - - def game_user_leave_event(self, data): - return dict( - leave_reason=data.read_bits(4) - ) - -class GameEventsReader_36442(GameEventsReader_34784): - - def control_group_update_event(self, data): - return dict( - control_group_index=data.read_bits(4), - control_group_update=data.read_bits(3), - remove_mask={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('Mask', self.read_selection_bitmask(data, data.read_bits(9))), - 2: lambda: ('OneIndices', [data.read_bits(9) for i in range(data.read_bits(9))]), - 3: lambda: ('ZeroIndices', [data.read_bits(9) for i in range(data.read_bits(9))]), - }[data.read_bits(2)](), - ) - -class GameEventsReader_38215(GameEventsReader_36442): - - def __init__(self): - super(GameEventsReader_38215, self).__init__() - - self.EVENT_DISPATCH.update({ - 76: (None, self.trigger_command_error_event), - 92: (None, self.trigger_mousewheel_event), # 172 in protocol38125.py - }) - - def trigger_command_error_event(self, data): - return dict( - error=data.read_uint32() - 2147483648, - ability=dict( - ability_link=data.read_uint16(), - ability_command_index=data.read_bits(5), - ability_command_data=data.read_uint8() if data.read_bool() else None, - ) if data.read_bool() else None, - ) - - def trigger_mousewheel_event(self, data): - # 172 in protocol38125.py - return dict( - wheelspin=data.read_uint16()-32768, # 171 in protocol38125.py - flags=data.read_uint8() - 128, # 112 in protocol38125.py - ) - - def command_event(self, data): - # this function is exactly the same as command_event() from GameEventsReader_36442 - # with the only change being that flags now has 25 bits instead of 23. - return dict( - flags=data.read_bits(25), - ability=dict( - ability_link=data.read_uint16(), - ability_command_index=data.read_bits(5), - ability_command_data=data.read_uint8() if data.read_bool() else None, - ) if data.read_bool() else None, - data={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('TargetPoint', dict( - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32() - 2147483648, - ) - )), - 2: lambda: ('TargetUnit', dict( - flags=data.read_uint16(), - timer=data.read_uint8(), - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - control_player_id=data.read_bits(4) if data.read_bool() else None, - upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32() - 2147483648, - ), - )), - 3: lambda: ('Data', dict( - data=data.read_uint32() - )), - }[data.read_bits(2)](), - sequence=data.read_uint32() + 1, - other_unit_tag=data.read_uint32() if data.read_bool() else None, - unit_group=data.read_uint32() if data.read_bool() else None, - ) - - def user_options_event(self, data): - # only change: removes starting_rally - return dict( - game_fully_downloaded=data.read_bool(), - development_cheats_enabled=data.read_bool(), - test_cheats_enabled=data.read_bool(), - multiplayer_cheats_enabled=data.read_bool(), - sync_checksumming_enabled=data.read_bool(), - is_map_to_map_transition=data.read_bool(), - debug_pause_enabled=data.read_bool(), - use_galaxy_asserts=data.read_bool(), - platform_mac=data.read_bool(), - camera_follow=data.read_bool(), - base_build_num=data.read_uint32(), - build_num=data.read_uint32(), - version_flags=data.read_uint32(), - hotkey_profile=data.read_aligned_string(data.read_bits(9)), - use_ai_beacons=None, - ) - -class GameEventsReader_38749(GameEventsReader_38215): - - def trigger_ping_event(self, data): - return dict( - point=dict( - x=data.read_uint32() - 2147483648, - y=data.read_uint32() - 2147483648, - ), - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - unit_control_player_id=(data.read_bits(4) if data.read_bool() else None), - unit_upkeep_player_id=(data.read_bits(4) if data.read_bool() else None), - unit_position=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_bits(32) - 2147483648, - ), - pinged_minimap=data.read_bool(), - option=data.read_uint32() - 2147483648, - ) - -class GameEventsReader_38996(GameEventsReader_38749): - - def trigger_ping_event(self, data): - return dict( - point=dict( - x=data.read_uint32() - 2147483648, - y=data.read_uint32() - 2147483648, - ), - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - unit_control_player_id=(data.read_bits(4) if data.read_bool() else None), - unit_upkeep_player_id=(data.read_bits(4) if data.read_bool() else None), - unit_position=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_bits(32) - 2147483648, - ), - unit_is_under_construction=data.read_bool(), - pinged_minimap=data.read_bool(), - option=data.read_uint32() - 2147483648, - ) - -class GameEventsReader_64469(GameEventsReader_38996): - - # this function is exactly the same as command_event() from GameEventsReader_38996 - # with the only change being that flags now has 26 bits instead of 25. - def command_event(self, data): - return dict( - flags=data.read_bits(26), - ability=dict( - ability_link=data.read_uint16(), - ability_command_index=data.read_bits(5), - ability_command_data=data.read_uint8() if data.read_bool() else None, - ) if data.read_bool() else None, - data={ # Choice - 0: lambda: ('None', None), - 1: lambda: ('TargetPoint', dict( - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32() - 2147483648, - ) - )), - 2: lambda: ('TargetUnit', dict( - flags=data.read_uint16(), - timer=data.read_uint8(), - unit_tag=data.read_uint32(), - unit_link=data.read_uint16(), - control_player_id=data.read_bits(4) if data.read_bool() else None, - upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - point=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_uint32() - 2147483648, - ), - )), - 3: lambda: ('Data', dict( - data=data.read_uint32() - )), - }[data.read_bits(2)](), - sequence=data.read_uint32() + 1, - other_unit_tag=data.read_uint32() if data.read_bool() else None, - unit_group=data.read_uint32() if data.read_bool() else None, - ) - - -class GameEventsReader_65895(GameEventsReader_64469): - """ - corresponds to StarCraft 4.4.0 - """ - - def __init__(self): - super(GameEventsReader_65895, self).__init__() - - self.EVENT_DISPATCH.update({ - 116: (None, self.set_sync_loading), - 117: (None, self.set_sync_playing), - }) - - def set_sync_loading(self, data): - return dict( - sync_load=data.read_uint32() - ) - - def set_sync_playing(self, data): - return dict( - sync_load=data.read_uint32() - ) - - -class TrackerEventsReader(object): - - def __init__(self): - self.EVENT_DISPATCH = { - 0: PlayerStatsEvent, - 1: UnitBornEvent, - 2: UnitDiedEvent, - 3: UnitOwnerChangeEvent, - 4: UnitTypeChangeEvent, - 5: UpgradeCompleteEvent, - 6: UnitInitEvent, - 7: UnitDoneEvent, - 8: UnitPositionsEvent, - 9: PlayerSetupEvent, - } - - def __call__(self, data, replay): - decoder = BitPackedDecoder(data) - - frames = 0 - events = list() - while not decoder.done(): - decoder._buffer.read(3) # 03 00 09 - frames += decoder.read_vint() - decoder._buffer.read(1) # 09 - etype = decoder.read_vint() - event_data = decoder.read_struct() - event = self.EVENT_DISPATCH[etype](frames, event_data, replay.build) - events.append(event) - - return events diff --git a/sc2reader/resources.py b/sc2reader/resources.py deleted file mode 100644 index 32ac05b..0000000 --- a/sc2reader/resources.py +++ /dev/null @@ -1,1222 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -from collections import defaultdict, namedtuple -from datetime import datetime -import hashlib -from xml.etree import ElementTree -import zlib - -import mpyq -import sc2reader -from sc2reader import utils -from sc2reader.decoders import BitPackedDecoder -from sc2reader import log_utils -from sc2reader import readers -from sc2reader import exceptions -from sc2reader.data import datapacks -from sc2reader.exceptions import SC2ReaderLocalizationError, CorruptTrackerFileError -from sc2reader.objects import Participant, Observer, Computer, Team, PlayerSummary, Graph, BuildEntry, MapInfo -from sc2reader.constants import GAME_SPEED_FACTOR, LOBBY_PROPERTIES - - -class Resource(object): - def __init__(self, file_object, filename=None, factory=None, **options): - self.factory = factory - self.opt = options - self.logger = log_utils.get_logger(self.__class__) - self.filename = filename or getattr(file_object, 'name', 'Unavailable') - - if hasattr(file_object, 'seek'): - file_object.seek(0) - self.filehash = hashlib.sha256(file_object.read()).hexdigest() - file_object.seek(0) - - -class Replay(Resource): - - #: A nested dictionary of player => { attr_name : attr_value } for - #: known attributes. Player 16 represents the global context and - #: contains attributes like game speed. - attributes = defaultdict(dict) - - #: Fully qualified filename of the replay file represented. - filename = str() - - #: Total number of frames in this game at 16 frames per second. - frames = int() - - #: The SCII client build number - build = int() - - #: The SCII game engine build number - base_build = int() - - #: The full version release string as seen on Battle.net - release_string = str() - - #: A tuple of the individual pieces of the release string - versions = tuple() - - #: The game speed: Slower, Slow, Normal, Fast, Faster - speed = str() - - #: Deprecated, use :attr:`game_type` or :attr:`real_type` instead - type = str() - - #: The game type choosen at game creation: 1v1, 2v2, 3v3, 4v4, FFA - game_type = str() - - #: The real type of the replay as observed by counting players on teams. - #: For outmatched games, the smaller team numbers come first. - #: Example Values: 1v1, 2v2, 3v3, FFA, 2v4, etc. - real_type = str() - - #: The category of the game, Ladder and Private - category = str() - - #: A flag for public ladder games - is_ladder = bool() - - #: A flag for private non-ladder games - is_private = bool() - - #: The raw hash name of the s2ma resource as hosted on bnet depots - map_hash = str() - - #: The name of the map the game was played on - map_name = str() - - #: A reference to the loaded :class:`Map` resource. - map = None - - #: The UTC time (according to the client NOT the server) that the game - #: was ended as represented by the Windows OS - windows_timestamp = int() - - #: The UTC time (according to the client NOT the server) that the game - #: was ended as represented by the Unix OS - unix_timestamp = int() - - #: The time zone adjustment for the time zone registered on the local - #: computer that recorded this replay. - time_zone = int() - - #: Deprecated: See `end_time` below. - date = None - - #: A datetime object representing the utc time at the end of the game. - end_time = None - - #: A datetime object representing the utc time at the start of the game - start_time = None - - #: Deprecated: See `game_length` below. - length = None - - #: The :class:`Length` of the replay as an alternative to :attr:`frames` - game_length = None - - #: The :class:`Length` of the replay in real time adjusted for the game speed - real_length = None - - #: The region the game was played on: us, eu, sea, etc - region = str() - - #: An integrated list of all the game events - events = list() - - #: A list of :class:`Team` objects from the game - teams = list() - - #: A dict mapping team number to :class:`Team` object - team = dict() - - #: A list of :class:`Player` objects from the game - players = list() - - #: A dual key dict mapping player names and numbers to - #: :class:`Player` objects - player = dict() - - #: A list of :class:`Observer` objects from the game - observers = list() - - #: A list of :class:`Person` objects from the game representing - #: both the player and observer lists - people = list() - - #: A dual key dict mapping :class:`Person` object to their - #: person id's and names - person = dict() - - #: A list of :class:`Person` objects from the game representing - #: only the human players from the :attr:`people` list - humans = list() - - #: A list of :class:`Computer` objects from the game. - computers = list() - - #: A list of all the chat message events from the game - messages = list() - - #: A list of pings sent by all the different people in the game - pings = list() - - #: A list of packets sent between the various game clients - packets = list() - - #: A reference to the :class:`Person` that recorded the game - recorder = None - - #: If there is a valid winning team this will contain a :class:`Team` otherwise it will be :class:`None` - winner = None - - #: A dictionary mapping unit unique ids to their corresponding classes - objects = dict() - - #: A sha256 hash uniquely representing the combination of people in the game. - #: Can be used in conjunction with date times to match different replays - #: of the game game. - people_hash = str() - - #: SC2 Expansion. One of 'WoL', 'HotS' - expansion = str() - - #: True of the game was resumed from a replay - resume_from_replay = False - - #: A flag marking which method was used to resume from replay. Unknown interpretation. - resume_method = None - - #: Lists info for each user that is resuming from replay. - resume_user_info = None - - def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, do_tracker_events=True, **options): - super(Replay, self).__init__(replay_file, filename, **options) - self.datapack = None - self.raw_data = dict() - - # The current load level of the replay - self.load_level = None - - # default values, filled in during file read - self.speed = "" - self.type = "" - self.game_type = "" - self.real_type = "" - self.category = "" - self.is_ladder = False - self.is_private = False - self.map = None - self.map_hash = "" - self.region = "" - self.events = list() - self.teams, self.team = list(), dict() - - self.player = dict() - self.observer = dict() - self.human = dict() - self.computer = dict() - self.entity = dict() - - self.players = list() - self.observers = list() # Unordered list of Observer - self.humans = list() - self.computers = list() - self.entities = list() - - self.attributes = defaultdict(dict) - self.messages = list() - self.recorder = None # Player object - self.packets = list() - self.objects = {} - self.active_units = {} - self.game_fps = 16.0 - - self.tracker_events = list() - self.game_events = list() - - # Bootstrap the readers. - self.registered_readers = defaultdict(list) - self.register_default_readers() - - # Bootstrap the datapacks. - self.registered_datapacks = list() - self.register_default_datapacks() - - # Unpack the MPQ and read header data if requested - # Since the underlying traceback isn't important to most people, don't expose it in python2 anymore - if load_level >= 0: - self.load_level = 0 - try: - self.archive = mpyq.MPQArchive(replay_file, listfile=False) - except Exception as e: - raise exceptions.MPQError("Unable to construct the MPQArchive", e) - - header_content = self.archive.header['user_data_header']['content'] - header_data = BitPackedDecoder(header_content).read_struct() - self.versions = list(header_data[1].values()) - self.frames = header_data[3] - self.build = self.versions[4] - self.base_build = self.versions[5] - self.release_string = "{0}.{1}.{2}.{3}".format(*self.versions[1:5]) - fps = self.game_fps - if (34784 <= self.build): # lotv replay, adjust time - fps = self.game_fps * 1.4 - - self.length = self.game_length = self.real_length = utils.Length(seconds=int(self.frames/fps)) - - # Load basic details if requested - # .backup files are read in case the main files are missing or removed - if load_level >= 1: - self.load_level = 1 - files = [ - 'replay.initData.backup', - 'replay.details.backup', - 'replay.attributes.events', - 'replay.initData', - 'replay.details' - ] - for data_file in files: - self._read_data(data_file, self._get_reader(data_file)) - self.load_all_details() - self.datapack = self._get_datapack() - - # Can only be effective if map data has been loaded - if options.get('load_map', False): - self.load_map() - - # Load players if requested - if load_level >= 2: - self.load_level = 2 - for data_file in ['replay.message.events']: - self._read_data(data_file, self._get_reader(data_file)) - self.load_message_events() - self.load_players() - - # Load tracker events if requested - if load_level >= 3 and do_tracker_events: - self.load_level = 3 - for data_file in ['replay.tracker.events']: - self._read_data(data_file, self._get_reader(data_file)) - self.load_tracker_events() - - # Load events if requested - if load_level >= 4: - self.load_level = 4 - for data_file in ['replay.game.events']: - self._read_data(data_file, self._get_reader(data_file)) - self.load_game_events() - - # Run this replay through the engine as indicated - if engine: - resume_events = [ev for ev in self.game_events if ev.name == 'HijackReplayGameEvent'] - if self.base_build <= 26490 and self.tracker_events and len(resume_events) > 0: - raise CorruptTrackerFileError( - "Cannot run engine on resumed games with tracker events. Run again with the " + - "do_tracker_events=False option to generate context without tracker events.") - - engine.run(self) - - def load_init_data(self): - if 'replay.initData' in self.raw_data: - initData = self.raw_data['replay.initData'] - elif 'replay.initData.backup' in self.raw_data: - initData = self.raw_data['replay.initData.backup'] - else: - return - - options = initData['game_description']['game_options'] - self.amm = options['amm'] - self.ranked = options['ranked'] - self.competitive = options['competitive'] - self.practice = options['practice'] - self.cooperative = options['cooperative'] - self.battle_net = options['battle_net'] - self.hero_duplicates_allowed = options['hero_duplicates_allowed'] - - def load_attribute_events(self): - if 'replay.attributes.events' in self.raw_data: - # Organize the attribute data to be useful - self.attributes = defaultdict(dict) - attributesEvents = self.raw_data['replay.attributes.events'] - for attr in attributesEvents: - self.attributes[attr.player][attr.name] = attr.value - - # Populate replay with attributes - self.speed = self.attributes[16]['Game Speed'] - self.category = self.attributes[16]['Game Mode'] - self.type = self.game_type = self.attributes[16]['Teams'] - self.is_ladder = (self.category == "Ladder") - self.is_private = (self.category == "Private") - - def load_details(self): - if 'replay.details' in self.raw_data: - details = self.raw_data['replay.details'] - elif 'replay.details.backup' in self.raw_data: - details = self.raw_data['replay.details.backup'] - else: - return - - self.map_name = details['map_name'] - self.region = details['cache_handles'][0].server.lower() - self.map_hash = details['cache_handles'][-1].hash - self.map_file = details['cache_handles'][-1] - - # Expand this special case mapping - if self.region == 'sg': - self.region = 'sea' - - dependency_hashes = [d.hash for d in details['cache_handles']] - if hashlib.sha256('Standard Data: Void.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: - self.expansion = 'LotV' - elif hashlib.sha256('Standard Data: Swarm.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: - self.expansion = 'HotS' - elif hashlib.sha256('Standard Data: Liberty.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: - self.expansion = 'WoL' - else: - self.expansion = '' - - self.windows_timestamp = details['file_time'] - self.unix_timestamp = utils.windows_to_unix(self.windows_timestamp) - self.end_time = datetime.utcfromtimestamp(self.unix_timestamp) - - # The utc_adjustment is either the adjusted windows timestamp OR - # the value required to get the adjusted timestamp. We know the upper - # limit for any adjustment number so use that to distinguish between - # the two cases. - if details['utc_adjustment'] < 10**7*60*60*24: - self.time_zone = details['utc_adjustment']/(10**7*60*60) - else: - self.time_zone = (details['utc_adjustment']-details['file_time'])/(10**7*60*60) - - self.game_length = self.length - self.real_length = utils.Length(seconds=int(self.length.seconds/GAME_SPEED_FACTOR[self.expansion][self.speed])) - self.start_time = datetime.utcfromtimestamp(self.unix_timestamp-self.real_length.seconds) - self.date = self.end_time # backwards compatibility - - def load_all_details(self): - self.load_init_data() - self.load_attribute_events() - self.load_details() - - def load_map(self): - self.map = self.factory.load_map(self.map_file, **self.opt) - - def load_players(self): - # If we don't at least have details and attributes_events we can go no further - # We can use the backup detail files if the main files have been removed - if 'replay.details' in self.raw_data: - details = self.raw_data['replay.details'] - elif 'replay.details.backup' in self.raw_data: - details = self.raw_data['replay.details.backup'] - else: - return - if 'replay.attributes.events' not in self.raw_data: - return - if 'replay.initData' in self.raw_data: - initData = self.raw_data['replay.initData'] - elif 'replay.initData.backup' in self.raw_data: - initData = self.raw_data['replay.initData.backup'] - else: - return - - self.clients = list() - self.client = dict() - - # For players, we can use the details file to look up additional - # information. detail_id marks the current index into this data. - detail_id = 0 - player_id = 1 - - # Assume that the first X map slots starting at 1 are player slots - # so that we can assign player ids without the map - self.entities = list() - for slot_id, slot_data in enumerate(initData['lobby_state']['slots']): - user_id = slot_data['user_id'] - - if slot_data['control'] == 2: - if slot_data['observe'] == 0: - self.entities.append(Participant(slot_id, slot_data, user_id, initData['user_initial_data'][user_id], player_id, details['players'][detail_id], self.attributes.get(player_id, dict()))) - detail_id += 1 - player_id += 1 - - else: - self.entities.append(Observer(slot_id, slot_data, user_id, initData['user_initial_data'][user_id], player_id)) - player_id += 1 - - elif slot_data['control'] == 3 and detail_id < len(details['players']): - # detail_id check needed for coop - self.entities.append(Computer(slot_id, slot_data, player_id, details['players'][detail_id], self.attributes.get(player_id, dict()))) - detail_id += 1 - player_id += 1 - - def get_team(team_id): - if team_id is not None and team_id not in self.team: - team = Team(team_id) - self.team[team_id] = team - self.teams.append(team) - return self.team[team_id] - - # Set up all our cross reference data structures - for entity in self.entities: - if entity.is_observer is False: - entity.team = get_team(entity.team_id) - entity.team.players.append(entity) - self.players.append(entity) - self.player[entity.pid] = entity - else: - self.observers.append(entity) - self.observer[entity.uid] = entity - - if entity.is_human: - self.humans.append(entity) - self.human[entity.uid] = entity - else: - self.computers.append(entity) - self.computer[entity.pid] = entity - - # Index by pid so that we can match events to players in pre-HotS replays - self.entity[entity.pid] = entity - - # Pull results up for teams - for team in self.teams: - results = set([p.result for p in team.players]) - if len(results) == 1: - team.result = list(results)[0] - if team.result == 'Win': - self.winner = team - else: - self.logger.warn("Conflicting results for Team {0}: {1}".format(team.number, results)) - team.result = 'Unknown' - - self.teams.sort(key=lambda t: t.number) - - # These are all deprecated - self.clients = self.humans - self.people = self.entities - self.client = self.human - self.person = self.entity - - self.real_type = utils.get_real_type(self.teams) - - # Assign the default region to computer players for consistency - # We know there will be a default region because there must be - # at least 1 human player or we wouldn't have a replay. - default_region = self.humans[0].region - for entity in self.entities: - if not entity.region: - entity.region = default_region - - # Pretty sure this just never worked, forget about it for now - self.recorder = None - - entity_names = sorted(map(lambda p: p.name, self.entities)) - hash_input = self.region+":"+','.join(entity_names) - self.people_hash = hashlib.sha256(hash_input.encode('utf8')).hexdigest() - - # The presence of observers and/or computer players makes this not actually ladder - # This became an issue in HotS where Training, vs AI, Unranked, and Ranked - # were all marked with "amm" => Ladder - if len(self.observers) > 0 or len(self.humans) != len(self.players): - self.is_ladder = False - - def load_message_events(self): - if 'replay.message.events' not in self.raw_data: - return - - self.messages = self.raw_data['replay.message.events']['messages'] - self.pings = self.raw_data['replay.message.events']['pings'] - self.packets = self.raw_data['replay.message.events']['packets'] - - self.message_events = self.messages+self.pings+self.packets - self.events = sorted(self.events + self.message_events, key=lambda e: e.frame) - - def load_game_events(self): - # Copy the events over - # TODO: the events need to be fixed both on the reader and processor side - if 'replay.game.events' not in self.raw_data: - return - - self.game_events = self.raw_data['replay.game.events'] - self.events = sorted(self.events+self.game_events, key=lambda e: e.frame) - - # hideous hack for HotS 2.0.0.23925, see https://github.com/GraylinKim/sc2reader/issues/87 - if self.base_build == 23925 and self.events and self.events[-1].frame > self.frames: - self.frames = self.events[-1].frame - self.length = utils.Length(seconds=int(self.frames/self.game_fps)) - - def load_tracker_events(self): - if 'replay.tracker.events' not in self.raw_data: - return - - self.tracker_events = self.raw_data['replay.tracker.events'] - self.events = sorted(self.tracker_events + self.events, key=lambda e: e.frame) - - def register_reader(self, data_file, reader, filterfunc=lambda r: True): - """ - Allows you to specify your own reader for use when reading the data - files packed into the .SC2Replay archives. Datapacks are checked for - use with the supplied filterfunc in reverse registration order to give - user registered datapacks preference over factory default datapacks. - - Don't use this unless you know what you are doing. - - :param data_file: The full file name that you would like this reader to - parse. - - :param reader: The :class:`Reader` object you wish to use to read the - data file. - - :param filterfunc: A function that accepts a partially loaded - :class:`Replay` object as an argument and returns true if the - reader should be used on this replay. - """ - self.registered_readers[data_file].insert(0, (filterfunc, reader)) - - def register_datapack(self, datapack, filterfunc=lambda r: True): - """ - Allows you to specify your own datapacks for use when loading replays. - Datapacks are checked for use with the supplied filterfunc in reverse - registration order to give user registered datapacks preference over - factory default datapacks. - - This is how you would add mappings for your favorite custom map. - - :param datapack: A :class:`BaseData` object to use for mapping unit - types and ability codes to their corresponding classes. - - :param filterfunc: A function that accepts a partially loaded - :class:`Replay` object as an argument and returns true if the - datapack should be used on this replay. - """ - self.registered_datapacks.insert(0, (filterfunc, datapack)) - - # Override points - def register_default_readers(self): - """Registers factory default readers.""" - self.register_reader('replay.details', readers.DetailsReader(), lambda r: True) - self.register_reader('replay.initData', readers.InitDataReader(), lambda r: True) - self.register_reader('replay.details.backup', readers.DetailsReader(), lambda r: True) - self.register_reader('replay.initData.backup', readers.InitDataReader(), lambda r: True) - self.register_reader('replay.tracker.events', readers.TrackerEventsReader(), lambda r: True) - self.register_reader('replay.message.events', readers.MessageEventsReader(), lambda r: True) - self.register_reader('replay.attributes.events', readers.AttributesEventsReader(), lambda r: True) - - self.register_reader('replay.game.events', readers.GameEventsReader_15405(), lambda r: 15405 <= r.base_build < 16561) - self.register_reader('replay.game.events', readers.GameEventsReader_16561(), lambda r: 16561 <= r.base_build < 17326) - self.register_reader('replay.game.events', readers.GameEventsReader_17326(), lambda r: 17326 <= r.base_build < 18574) - self.register_reader('replay.game.events', readers.GameEventsReader_18574(), lambda r: 18574 <= r.base_build < 19595) - self.register_reader('replay.game.events', readers.GameEventsReader_19595(), lambda r: 19595 <= r.base_build < 22612) - self.register_reader('replay.game.events', readers.GameEventsReader_22612(), lambda r: 22612 <= r.base_build < 23260) - self.register_reader('replay.game.events', readers.GameEventsReader_23260(), lambda r: 23260 <= r.base_build < 24247) - self.register_reader('replay.game.events', readers.GameEventsReader_24247(), lambda r: 24247 <= r.base_build < 26490) - self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build < 27950) - self.register_reader('replay.game.events', readers.GameEventsReader_27950(), lambda r: 27950 <= r.base_build < 34784) - self.register_reader('replay.game.events', readers.GameEventsReader_34784(), lambda r: 34784 <= r.base_build < 36442) - self.register_reader('replay.game.events', readers.GameEventsReader_36442(), lambda r: 36442 <= r.base_build < 38215) - self.register_reader('replay.game.events', readers.GameEventsReader_38215(), lambda r: 38215 <= r.base_build < 38749) - self.register_reader('replay.game.events', readers.GameEventsReader_38749(), lambda r: 38749 <= r.base_build < 38996) - self.register_reader('replay.game.events', readers.GameEventsReader_38996(), lambda r: 38996 <= r.base_build < 64469) - self.register_reader('replay.game.events', readers.GameEventsReader_64469(), lambda r: 64469 <= r.base_build < 65895) - self.register_reader('replay.game.events', readers.GameEventsReader_65895(), lambda r: 65895 <= r.base_build) - self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) - - def register_default_datapacks(self): - """Registers factory default datapacks.""" - self.register_datapack(datapacks['WoL']['16117'], lambda r: r.expansion == 'WoL' and 16117 <= r.build < 17326) - self.register_datapack(datapacks['WoL']['17326'], lambda r: r.expansion == 'WoL' and 17326 <= r.build < 18092) - self.register_datapack(datapacks['WoL']['18092'], lambda r: r.expansion == 'WoL' and 18092 <= r.build < 19458) - self.register_datapack(datapacks['WoL']['19458'], lambda r: r.expansion == 'WoL' and 19458 <= r.build < 22612) - self.register_datapack(datapacks['WoL']['22612'], lambda r: r.expansion == 'WoL' and 22612 <= r.build < 24944) - self.register_datapack(datapacks['WoL']['24944'], lambda r: r.expansion == 'WoL' and 24944 <= r.build) - self.register_datapack(datapacks['HotS']['base'], lambda r: r.expansion == 'HotS' and r.build < 23925) - self.register_datapack(datapacks['HotS']['23925'], lambda r: r.expansion == 'HotS' and 23925 <= r.build < 24247) - self.register_datapack(datapacks['HotS']['24247'], lambda r: r.expansion == 'HotS' and 24247 <= r.build < 24764) - self.register_datapack(datapacks['HotS']['24764'], lambda r: r.expansion == 'HotS' and 24764 <= r.build < 38215) - self.register_datapack(datapacks['HotS']['38215'], lambda r: r.expansion == 'HotS' and 38215 <= r.build) - self.register_datapack(datapacks['LotV']['base'], lambda r: r.expansion == 'LotV' and 34784 <= r.build) - self.register_datapack(datapacks['LotV']['44401'], lambda r: r.expansion == 'LotV' and 44401 <= r.build < 47185) - self.register_datapack(datapacks['LotV']['47185'], lambda r: r.expansion == 'LotV' and 47185 <= r.build < 48258) - self.register_datapack(datapacks['LotV']['48258'], lambda r: r.expansion == 'LotV' and 48258 <= r.build < 53644) - self.register_datapack(datapacks['LotV']['53644'], lambda r: r.expansion == 'LotV' and 53644 <= r.build < 54724) - self.register_datapack(datapacks['LotV']['54724'], lambda r: r.expansion == 'LotV' and 54724 <= r.build < 59587) - self.register_datapack(datapacks['LotV']['59587'], lambda r: r.expansion == 'LotV' and 59587 <= r.build < 70154) - self.register_datapack(datapacks['LotV']['70154'], lambda r: r.expansion == 'LotV' and 70154 <= r.build) - - - # Internal Methods - def _get_reader(self, data_file): - for callback, reader in self.registered_readers[data_file]: - if callback(self): - return reader - else: - raise ValueError("Valid {0} reader could not found for build {1}".format(data_file, self.build)) - - def _get_datapack(self): - for callback, datapack in self.registered_datapacks: - if callback(self): - return datapack - else: - return None - - def _read_data(self, data_file, reader): - data = utils.extract_data_file(data_file, self.archive) - if data: - self.raw_data[data_file] = reader(data, self) - elif self.opt['debug'] and data_file not in ['replay.message.events', 'replay.tracker.events']: - raise ValueError("{0} not found in archive".format(data_file)) - - def __getstate__(self): - state = self.__dict__.copy() - del state['registered_readers'] - del state['registered_datapacks'] - return state - - -class Map(Resource): - url_template = 'http://{0}.depot.battle.net:1119/{1}.s2ma' - - def __init__(self, map_file, filename=None, region=None, map_hash=None, **options): - super(Map, self).__init__(map_file, filename, **options) - - #: The localized (only enUS supported right now) map name. - self.name = str() - - #: The localized (only enUS supported right now) map author. - self.author = str() - - #: The localized (only enUS supported right now) map description. - self.description = str() - - #: The localized (only enUS supported right now) map website. - self.website = str() - - #: The unique hash used to identify this map on bnet's depots. - self.hash = map_hash - - #: The region this map was posted to. Maps must be posted individually to each region. - self.region = region - - #: A URL reference to the location of this map on bnet's depots. - self.url = Map.get_url(self.region, map_hash) - - #: The opened MPQArchive for this map - self.archive = mpyq.MPQArchive(map_file) - - #: A byte string representing the minimap in tga format. - self.minimap = self.archive.read_file('Minimap.tga') - - # This will only populate the fields for maps with enUS localizations. - # Clearly this isn't a great solution but we can't be throwing exceptions - # just because US English wasn't a concern of the map author. - # TODO: Make this work regardless of the localizations available. - game_strings_file = self.archive.read_file('enUS.SC2Data\LocalizedData\GameStrings.txt') - if game_strings_file: - for line in game_strings_file.decode('utf8').split('\r\n'): - if len(line) == 0: - continue - - key, value = line.split('=', 1) - if key == 'DocInfo/Name': - self.name = value - elif key == 'DocInfo/Author': - self.author = value - elif key == 'DocInfo/DescLong': - self.description = value - elif key == 'DocInfo/Website': - self.website = value - - #: A reference to the map's :class:`~sc2reader.objects.MapInfo` object - self.map_info = None - map_info_file = self.archive.read_file('MapInfo') - if map_info_file: - self.map_info = MapInfo(map_info_file) - - doc_info_file = self.archive.read_file('DocumentInfo') - if doc_info_file: - doc_info = ElementTree.fromstring(doc_info_file.decode('utf8')) - - icon_path_node = doc_info.find('Icon/Value') - #: (Optional) The path to the icon for the map, relative to the archive root - self.icon_path = icon_path_node.text if icon_path_node is not None else None - - #: (Optional) The icon image for the map in tga format - self.icon = self.archive.read_file(self.icon_path) if self.icon_path is not None else None - - #: A list of module names this map depends on - self.dependencies = list() - for dependency_node in doc_info.findall('Dependencies/Value'): - self.dependencies.append(dependency_node.text) - - @classmethod - def get_url(cls, region, map_hash): - """Builds a download URL for the map from its components.""" - if region and map_hash: - # it seems like sea maps are stored on us depots. - region = 'us' if region == 'sea' else region - return cls.url_template.format(region, map_hash) - else: - return None - - -class Localization(Resource, dict): - - def __init__(self, s2ml_file, **options): - Resource.__init__(self, s2ml_file, **options) - xml = ElementTree.parse(s2ml_file) - for entry in xml.findall('e'): - self[int(entry.attrib['id'])] = entry.text - - -class GameSummary(Resource): - - url_template = 'http://{0}.depot.battle.net:1119/{1}.s2gs' - - #: Game speed - game_speed = str() - - #: Game length (real-time) - real_length = int() - - #: Game length (in-game) - game_length = int() - - #: A dictionary of Lobby properties - lobby_properties = dict() - - #: A dictionary of Lobby player properties - lobby_player_properties = dict() - - #: Winners, a list of the pids of the winning players - winners = list() - - #: Build orders, a dict of build orders indexed by player id - build_orders = dict() - - #: Map image urls - image_urls = list() - - #: Map localization urls - localization_urls = dict() - - def __init__(self, summary_file, filename=None, lang='enUS', **options): - super(GameSummary, self).__init__(summary_file, filename, lang=lang, **options) - - #: A dict of team# -> teams - self.team = dict() - - #: A list of teams - self.teams = list() - - #: Players, a dict of :class`PlayerSummary` from the game - self.players = list() - - self.observers = list() - - #: Game start and end times - self.start_time = None - self.end_time = None - - self.winners = list() - self.player = dict() - self.settings = dict() - self.player_stats = dict() - self.player_settings = defaultdict(dict) - self.build_orders = defaultdict(list) - self.image_urls = list() - self.localization_urls = dict() - self.lobby_properties = dict() - self.lobby_player_properties = dict() - self.game_type = str() - self.real_type = str() - - # The first 16 bytes appear to be some sort of compression header - buffer = BitPackedDecoder(zlib.decompress(summary_file.read()[16:])) - - # TODO: Is there a fixed number of entries? - # TODO: Maybe the # of parts is recorded somewhere? - self.parts = list() - while not buffer.done(): - self.parts.append(buffer.read_struct()) - - self.load_translations() - dependencies = [sheet[1] for sheet in self.lang_sheets['enUS']] - if 'Swarm (Mod)' in dependencies: - self.expansion = 'HotS' - elif 'Liberty (Mod)' in dependencies: - self.expansion = 'WoL' - else: - self.expansion = '' - - self.end_time = datetime.utcfromtimestamp(self.parts[0][8]) - self.game_speed = LOBBY_PROPERTIES[0xBB8][1][self.parts[0][0][1].decode('utf8')] - self.game_length = utils.Length(seconds=self.parts[0][7]) - self.real_length = utils.Length(seconds=int(self.parts[0][7]/GAME_SPEED_FACTOR[self.expansion][self.game_speed])) - self.start_time = datetime.utcfromtimestamp(self.parts[0][8] - self.real_length.seconds) - - self.load_map_info() - self.load_settings() - self.load_player_stats() - self.load_players() - - self.game_type = self.settings['Teams'].replace(" ", "") - self.real_type = utils.get_real_type(self.teams) - - # The s2gs file also keeps reference to a series of s2mv files - # Some of these appear to be encoded bytes and others appear to be - # the preview images that authors may bundle with their maps. - self.s2mv_urls = [str(utils.DepotFile(file_hash)) for file_hash in self.parts[0][6][7]] - - def load_translations(self): - # This section of the file seems to map numerical ids to their - # corresponding entries in the localization files (see below). - # Each mapping has 3 parts: - # 1: The id to be mapped - # 2: The localization sheet and entry index to map to - # 3: A list of ids for the summary tabs the value shows up in - # - # In some cases it seems that these ids don't map to an entry so - # there must be some additional purpose to this section as well. - # - self.id_map = dict() - for mapping in self.parts[1][0]: - if isinstance(mapping[2][0], dict): - self.id_map[mapping[1][1]] = (mapping[2][0][1], mapping[2][0][2]) - - # The id mappings for lobby and player properties are stored - # separately in the parts[0][5] entry. - # - # The values for each property are also mapped but the values - # don't have their own unique ids so we use a compound key - self.lobby_properties = dict() - for item in self.parts[0][5]: - uid = item[0][1] - sheet = item[2][0][1] - entry = item[2][0][2] - self.id_map[uid] = (sheet, entry) - - for value in item[1]: - sheet = value[1][0][1] - entry = value[1][0][2] - self.id_map[(uid, value[0])] = (sheet, entry) - - # Each localization is a pairing of a language id, e.g. enUS - # and a list of byte strings that can be decoded into urls for - # resources hosted on the battle.net depot servers. - # - # Sometimes these byte strings are all NULLed out and need to be ignored. - for localization in self.parts[0][6][8]: - language = localization[0].decode('utf8') - - files = list() - for file_hash in localization[1]: - if file_hash[:4].decode('utf8') != '\x00\x00\x00\x00': - files.append(utils.DepotFile(file_hash)) - self.localization_urls[language] = files - - # Grab the region from the one of the files - self.region = list(self.localization_urls.values())[0][0].server.lower() - - # Each of the localization urls points to an XML file with a set of - # localization strings and their unique ids. After reading these mappings - # into a lang_sheets variable we can use these sheets to make a direct - # map from internal id to localize string. - # - # For now we'll only do this for english localizations. - self.lang_sheets = dict() - self.translations = dict() - for lang, files in self.localization_urls.items(): - if lang != self.opt['lang']: - continue - - sheets = list() - for depot_file in files: - sheets.append(self.factory.load_localization(depot_file, **self.opt)) - - translation = dict() - for uid, (sheet, item) in self.id_map.items(): - if sheet < len(sheets) and item in sheets[sheet]: - translation[uid] = sheets[sheet][item] - elif self.opt['debug']: - msg = "No {0} translation for sheet {1}, item {2}" - raise SC2ReaderLocalizationError(msg.format(self.opt['lang'], sheet, item)) - else: - translation[uid] = "Unknown" - - self.lang_sheets[lang] = sheets - self.translations[lang] = translation - - def load_map_info(self): - map_strings = self.lang_sheets[self.opt['lang']][-1] - self.map_name = map_strings[1] - self.map_description = map_strings[2] - self.map_tileset = map_strings[3] - - def load_settings(self): - Property = namedtuple('Property', ['id', 'values', 'requirements', 'defaults', 'is_lobby']) - - properties = dict() - for p in self.parts[0][5]: - properties[p[0][1]] = Property(p[0][1], p[1], p[3], p[8], isinstance(p[8], dict)) - - settings = dict() - for setting in self.parts[0][6][6]: - prop = properties[setting[0][1]] - if prop.is_lobby: - settings[setting[0][1]] = setting[1][0] - else: - settings[setting[0][1]] = [p[0] for p in setting[1]] - - activated = dict() - - def use_property(prop, player=None): - # Check the cache before recomputing - if (prop.id, player) in activated: - return activated[(prop.id, player)] - - # A property can only be used if it's requirements - # are both active and have one if the required settings. - # These settings can be player specific. - use = False - for req in prop.requirements: - requirement = properties[req[0][1][1]] - if not use_property(requirement, player): - break - - setting = settings[req[0][1][1]] - - # Lobby properties can require on player properties. - # How does this work? I assume that one player satisfying the - # property requirments is sufficient - if requirement.is_lobby: - values = [setting] - else: - values = [setting[player]] if player is not None else setting - - # Because of the above complication we resort to a set intersection of - # the applicable values and the set of required values. - if not set(requirement.values[val][0] for val in values) & set(req[1]): - break - - else: - # Executes if we don't break out of the loop! - use = True - - # Record the result for future reference and return - activated[(prop.id, player)] = use - return use - - translation = self.translations[self.opt['lang']] - for uid, prop in properties.items(): - name = translation.get(uid, "Unknown") - if prop.is_lobby: - if use_property(prop): - value = prop.values[settings[uid]][0] - self.settings[name] = translation[(uid, value)] - else: - for index, player_setting in enumerate(settings[uid]): - if use_property(prop, index): - value = prop.values[player_setting][0] - self.player_settings[index][name] = translation[(uid, value)] - - def load_player_stats(self): - translation = self.translations[self.opt['lang']] - - stat_items = sum([p[0] for p in self.parts[3:]], []) - - for item in stat_items: - # Each stat item is laid out as follows - # - # { - # 0: {0:999, 1:translation_id}, - # 1: [ [{p1values},...], [{p2values},...], ...] - # } - stat_id = item[0][1] - if stat_id in translation: - stat_name = translation[stat_id] - # Assume anything under 1 million is a normal score screen item - # Build order ids are generally 16 million+ - if stat_id < 1000000: - for pid, value in enumerate(item[1]): - if not value: - continue - - if stat_name in ('Army Value', 'Resource Collection Rate', 'Upgrade Spending', 'Workers Active'): - # Each point entry for the graph is laid out as follows - # - # {0:Value, 1:0, 2:Time} - # - # The 2nd part of the tuple appears to always be zero and - # the time is in seconds of game time. - xy = [(point[2], point[0]) for point in value] - value = Graph([], [], xy_list=xy) - else: - value = value[0][0] - - self.player_stats.setdefault(pid, dict())[stat_name] = value - else: - # Each build item represents one ability and contains - # a list of all the uses of that ability by each player - # up to the first 64 successful actions in the game. - for pindex, commands in enumerate(item[1]): - for command in commands: - self.build_orders[pindex].append(BuildEntry( - supply=command[0], - total_supply=command[1] & 0xff, - time=int((command[2] >> 8) / 16), - order=stat_name, - build_index=command[1] >> 16 - )) - elif stat_id != 83886080: # We know this one is always bad. - self.logger.warn("Untranslatable key = {0}".format(stat_id)) - - # Once we've compiled all the build commands we need to make - # sure they are properly sorted for presentation. - for build_order in self.build_orders.values(): - build_order.sort(key=lambda x: x.build_index) - - def load_players(self): - for index, struct in enumerate(self.parts[0][3]): - if not struct[0] or not struct[0][1]: - continue # Slot is closed - - player = PlayerSummary(struct[0][0]) - stats = self.player_stats.get(index, dict()) - settings = self.player_settings[index] - player.is_ai = not isinstance(struct[0][1], dict) - if not player.is_ai: - player.region = self.region - player.subregion = struct[0][1][0][2] - player.bnetid = struct[0][1][0][3] - player.unknown1 = struct[0][1][0] - player.unknown2 = struct[0][1][1] - - # Either a referee or a spectator, nothing else to do - if settings.get('Participant Role', '') != 'Participant': - self.observers.append(player) - continue - - player.play_race = LOBBY_PROPERTIES[0xBB9][1].get(struct[2], None) - - player.is_winner = isinstance(struct[1], dict) and struct[1][0] == 0 - if player.is_winner: - self.winners.append(player.pid) - - team_id = int(settings['Team'].split(' ')[1]) - if team_id not in self.team: - self.team[team_id] = Team(team_id) - self.teams.append(self.team[team_id]) - - player.team = self.team[team_id] - self.team[team_id].players.append(player) - - # We can just copy these settings right over - player.color = utils.Color(name=settings.get('Color', None)) - player.pick_race = settings.get('Race', None) - player.handicap = settings.get('Handicap', None) - - # Overview Tab - player.resource_score = stats.get('Resources', None) - player.structure_score = stats.get('Structures', None) - player.unit_score = stats.get('Units', None) - player.overview_score = stats.get('Overview', None) - - # Units Tab - player.units_killed = stats.get('Killed Unit Count', None) - player.structures_built = stats.get('Structures Built', None) - player.units_trained = stats.get('Units Trained', None) - player.structures_razed = stats.get('Structures Razed Count', None) - - # Graphs Tab - # Keep income_graph for backwards compatibility - player.army_graph = stats.get('Army Value') - player.resource_collection_graph = stats.get('Resource Collection Rate', None) - player.income_graph = player.resource_collection_graph - - # HotS Stats - player.upgrade_spending_graph = stats.get('Upgrade Spending', None) - player.workers_active_graph = stats.get('Workers Active', None) - player.enemies_destroyed = stats.get('Enemies Destroyed:', None) - player.time_supply_capped = stats.get('Time Supply Capped', None) - player.idle_production_time = stats.get('Idle Production Time', None) - player.resources_spent = stats.get('Resources Spent:', None) - player.apm = stats.get('APM', None) - - # Economic Breakdown Tab - if isinstance(player.income_graph, Graph): - values = player.income_graph.values - player.resource_collection_rate = int(sum(values)/len(values)) - else: - # In old s2gs files the field with this name was actually a number not a graph - player.resource_collection_rate = player.income_graph - player.resource_collection_graph = None - player.income_graph = None - - player.avg_unspent_resources = stats.get('Average Unspent Resources', None) - player.workers_created = stats.get('Workers Created', None) - - # Build Orders Tab - player.build_order = self.build_orders.get(index, None) - - self.players.append(player) - self.player[player.pid] = player - - def __str__(self): - return "{0} - {1} {2}".format(self.start_time, self.game_length, 'v'.join(''.join(p.play_race[0] for p in team.players) for team in self.teams)) - - -class MapHeader(Resource): - """**Experimental**""" - - base_url_template = 'http://{0}.depot.battle.net:1119/{1}.{2}' - url_template = 'http://{0}.depot.battle.net:1119/{1}.s2mh' - image_url_template = 'http://{0}.depot.battle.net:1119/{1}.s2mv' - - #: The name of the map - name = str() - - #: Hash of map file - map_hash = str() - - #: Link to the map file - map_url = str() - - #: Hash of the map image - image_hash = str() - - #: Link to the image of the map (.s2mv) - image_url = str() - - #: Localization dictionary, {language, url} - localization_urls = dict() - - #: Blizzard map - blizzard = False - - def __init__(self, header_file, filename=None, **options): - super(MapHeader, self).__init__(header_file, filename, **options) - self.data = BitPackedDecoder(header_file).read_struct() - - # Name - self.name = self.data[0][1] - - # Blizzard - self.blizzard = (self.data[0][11] == 'BLIZ') - - # Parse image hash - parsed_hash = utils.parse_hash(self.data[0][1]) - self.image_hash = parsed_hash['hash'] - self.image_url = self.image_url_template.format(parsed_hash['server'], parsed_hash['hash']) - - # Parse map hash - parsed_hash = utils.parse_hash(self.data[0][2]) - self.map_hash = parsed_hash['hash'] - self.map_url = self.base_url_template.format(parsed_hash['server'], parsed_hash['hash'], parsed_hash['type']) - - # Parse localization hashes - l18n_struct = self.data[0][4][8] - for l in l18n_struct: - parsed_hash = utils.parse_hash(l[1][0]) - self.localization_urls[l[0]] = self.base_url_template.format(parsed_hash['server'], parsed_hash['hash'], parsed_hash['type']) diff --git a/sc2reader/scripts/__init__.py b/sc2reader/scripts/__init__.py deleted file mode 100644 index e826f79..0000000 --- a/sc2reader/scripts/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -# import submodules -from sc2reader.scripts import utils diff --git a/sc2reader/scripts/sc2attributes.py b/sc2reader/scripts/sc2attributes.py deleted file mode 100644 index da0160e..0000000 --- a/sc2reader/scripts/sc2attributes.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Recursively searches for s2gs files in specified paths. Adds -# new attributes and values and allows the user to choose when -# conflicts are detected. -# -# Usage: sc2attributes PATH... -# -# Cannot be run from an egg installation because attributes.json -# must be writable. Install from source when you want to use this. -# -# ---------------------------------------------------------------- -# -# The file has the following structure: -# -# sc2reader/data/attributes.json - { -# "attributes": { json object }, -# "decisions": "pickled python object", -# } -# -# Why we need to track decisions: -# -# Sometimes the attribute names or values can change over time -# or have values we don't like. When the script detects conflicts -# between the s2gs names and the existing attribute names it -# notifies the user and asks for a decision. In order to save the -# user from making the same decisions over and over again we save -# those decisions. The decisions are pickled instead of in json -# because the data structure is too complex for the json format. -# -from __future__ import absolute_import, print_function, unicode_literals, division - -import argparse -import json -import os -import pickle -import traceback - -import sc2reader - -try: - raw_input # Python 2 -except NameError: - raw_input = input # Python 3 - -decisions = dict() - - -def main(): - global decisions - - parser = argparse.ArgumentParser(description="Recursively parses replay files, inteded for debugging parse issues.") - parser.add_argument('folders', metavar='folder', type=str, nargs='+', help="Path to a folder") - args = parser.parse_args() - - scripts_dir = os.path.dirname(os.path.abspath(__file__)) - data_path = os.path.normpath(os.path.join(scripts_dir, '..', 'data', 'attributes.json')) - - attributes = dict() - if os.path.exists(data_path): - with open(data_path, 'r') as data_file: - data = json.load(data_file) - attributes = data.get('attributes', attributes) - decisions = pickle.loads(data.get('decisions', '(dp0\n.')) - - for folder in args.folders: - for path in sc2reader.utils.get_files(folder, extension='s2gs'): - try: - summary = sc2reader.load_game_summary(path) - for prop in summary.parts[0][5]: - group_key = prop[0][1] - group_name = summary.translations['enUS'][group_key] - attribute_values = dict() - if str(group_key) in attributes: - attribute_name, attribute_values = attributes[str(group_key)] - if attribute_name != group_name: - group_name = get_choice(group_key, attribute_name, group_name) - - for value in prop[1]: - value_key = value[0].strip("\x00 ").replace(' v ', 'v') - value_name = summary.lang_sheets['enUS'][value[1][0][1]][value[1][0][2]] - if str(value_key) in attribute_values: - attribute_value_name = attribute_values[str(value_key)] - if value_name != attribute_value_name: - value_name = get_choice((group_key, value_key), attribute_value_name, value_name) - - attribute_values[str(value_key)] = value_name - - attributes["{0:0>4}".format(group_key)] = (group_name, attribute_values) - except Exception as e: - if isinstance(e, KeyboardInterrupt): - raise - else: - traceback.print_exc() - - with open(data_path, 'w') as data_file: - data = dict(attributes=attributes, decisions=pickle.dumps(decisions)) - json.dump(data, data_file, indent=2, sort_keys=True) - - -def get_choice(s2gs_key, old_value, new_value): - global decisions - - # This way old/new values can be swapped and decision is remembered - key = frozenset([s2gs_key, old_value, new_value]) - if key not in decisions: - print("Naming conflict on {0}: {1} != {2}".format(s2gs_key, old_value, new_value)) - print("Which do you want to use?") - print(" (o) Old value '{0}'".format(old_value)) - print(" (n) New value '{0}'".format(new_value)) - while True: - answer = raw_input("Choose 'o' or 'n' then press enter: ").lower() - if answer not in ('o', 'n'): - print('Invalid choice `{0}`'.format(answer)) - else: - break - decisions[key] = {'o': old_value, 'n': new_value}[answer] - print("") - return decisions[key] - - -if __name__ == '__main__': - main() diff --git a/sc2reader/scripts/sc2json.py b/sc2reader/scripts/sc2json.py deleted file mode 100644 index bd42178..0000000 --- a/sc2reader/scripts/sc2json.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import sc2reader -from sc2reader.factories.plugins.replay import toJSON - - -def main(): - import argparse - parser = argparse.ArgumentParser(description="Prints replay data to a json string.") - parser.add_argument('--indent', '-i', type=int, default=None, help="The per-line indent to use when printing a human readable json string") - parser.add_argument('--encoding', '-e', type=str, default='UTF-8', help="The character encoding use..") - parser.add_argument('path', metavar='path', type=str, nargs=1, help="Path to the replay to serialize.") - args = parser.parse_args() - - factory = sc2reader.factories.SC2Factory() - factory.register_plugin("Replay", toJSON(encoding=args.encoding, indent=args.indent)) - replay_json = factory.load_replay(args.path[0]) - print(replay_json) - -if __name__ == '__main__': - main() diff --git a/sc2reader/scripts/sc2parse.py b/sc2reader/scripts/sc2parse.py deleted file mode 100644 index 571b0c0..0000000 --- a/sc2reader/scripts/sc2parse.py +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -This script is intended for use debugging parse issues on replays. - - sc2parse [FILES..] - -Recursively parses all the files. When exceptions are thrown it catches them -and attempts to print(out any information that might be needed for debug. If -information you need isn't available feel free to add new handlers or add to -existing exception handlers. - -Also sets logging to INFO so that missing unit type and ability type messages -are caught and reported. At some point these things should be moved to WARN. - -If there are parse exceptions, this script should be run to generate an info -for the ticket filed. -""" -from __future__ import absolute_import, print_function, unicode_literals, division - -import argparse -import sc2reader -import traceback - -sc2reader.log_utils.log_to_console('INFO') - - -def main(): - parser = argparse.ArgumentParser(description="Recursively parses replay files, inteded for debugging parse issues.") - parser.add_argument('--one_each', help="Attempt to parse only one Ladder replay for each release_string", action="store_true") - parser.add_argument('--ladder_only', help="If a non-ladder game fails, ignore it", action="store_true") - parser.add_argument('folders', metavar='folder', type=str, nargs='+', help="Path to a folder") - args = parser.parse_args() - - releases_parsed = set() - for folder in args.folders: - print("dealing with {0}".format(folder)) - for path in sc2reader.utils.get_files(folder, extension='SC2Replay'): - try: - rs = sc2reader.load_replay(path, load_level=0).release_string - already_did = rs in releases_parsed - releases_parsed.add(rs) - if not args.one_each or not already_did: - replay = sc2reader.load_replay(path, debug=True, load_level=1) - if not args.one_each or replay.is_ladder: - replay = sc2reader.load_replay(path, debug=True) - - human_pids = set([human.pid for human in replay.humans]) - event_pids = set([event.player.pid for event in replay.events if getattr(event, 'player', None)]) - player_pids = set([player.pid for player in replay.players if player.is_human]) - ability_pids = set([event.player.pid for event in replay.events if 'CommandEvent' in event.name]) - if human_pids != event_pids: - print('Event Pid problem! pids={pids} but event pids={event_pids}'.format(pids=human_pids, event_pids=event_pids)) - print(' with {path}: {build} - {real_type} on {map_name} - Played {start_time}'.format(path=path, **replay.__dict__)) - elif player_pids != ability_pids: - print('Ability Pid problem! pids={pids} but event pids={event_pids}'.format(pids=player_pids, event_pids=ability_pids)) - print(' with {path}: {build} - {real_type} on {map_name} - Played {start_time}'.format(path=path, **replay.__dict__)) - else: - print('No problems with {path}: {build} - {real_type} on {map_name} - Played {start_time}'.format(path=path, **replay.__dict__)) - print('Units were: {units}'.format(units=set([obj.name for obj in replay.objects.values()]))) - - except sc2reader.exceptions.ReadError as e: - if args.ladder_only and not e.replay.is_ladder: - continue - - print("") - print(path) - print('{build} - {real_type} on {map_name} - Played {start_time}'.format(**e.replay.__dict__)) - print('[ERROR] {}', e) - for event in e.game_events[-5:]: - print('{0}'.format(event)) - print(e.buffer.read_range(e.location, e.location + 50).encode('hex')) - print - except Exception as e: - print("") - print(path) - try: - replay = sc2reader.load_replay(path, debug=True, load_level=2) - print('{build} - {real_type} on {map_name} - Played {start_time}'.format(**replay.__dict__)) - print('[ERROR] {0}'.format(e)) - for pid, attributes in replay.attributes.items(): - print("{0} {1}".format(pid, attributes)) - for pid, info in enumerate(replay.players): - print("{0} {1}".format(pid, info)) - for message in replay.messages: - print("{0} {1}".format(message.pid, message.text)) - traceback.print_exc() - print("") - except Exception as e2: - replay = sc2reader.load_replay(path, debug=True, load_level=0) - print('Total failure parsing {release_string}'.format(**replay.__dict__)) - print('[ERROR] {0}'.format(e)) - print('[ERROR] {0}'.format(e2)) - traceback.print_exc() - print - - -if __name__ == '__main__': - main() diff --git a/sc2reader/scripts/sc2printer.py b/sc2reader/scripts/sc2printer.py deleted file mode 100644 index c780d16..0000000 --- a/sc2reader/scripts/sc2printer.py +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import os -import argparse - -import sc2reader -from sc2reader import utils -from sc2reader.exceptions import ReadError - - -def printReplay(filepath, arguments): - """ Prints summary information about SC2 replay file """ - try: - replay = sc2reader.load_replay(filepath, debug=True) - - if arguments.map: - print(" Map: {0}".format(replay.map_name)) - if arguments.length: - print(" Length: {0} minutes".format(replay.game_length)) - if arguments.date: - print(" Date: {0}".format(replay.start_time)) - if arguments.teams: - lineups = [team.lineup for team in replay.teams] - print(" Teams: {0}".format("v".join(lineups))) - for team in replay.teams: - print(" Team {0}\t{1} ({2})".format(team.number, team.players[0].name, team.players[0].pick_race[0])) - for player in team.players[1:]: - print(" \t{0} ({1})".format(player.name, player.pick_race[0])) - if arguments.observers: - print(" Observers:") - for observer in replay.observers: - print(" {0}".format(observer.name)) - - if arguments.messages: - print(" Messages:") - for message in replay.messages: - print(" {0}".format(message)) - if arguments.version: - print(" Version: {0}".format(replay.release_string)) - - print - except ReadError as e: - raise - return - prev = e.game_events[-1] - print("\nVersion {0} replay:\n\t{1}".format(e.replay.release_string, e.replay.filepath)) - print("\t{0}, Type={1:X}".format(e.msg, e.type)) - print("\tPrevious Event: {0}".format(prev.name)) - print("\t\t" + prev.bytes.encode('hex')) - print("\tFollowing Bytes:") - print("\t\t" + e.buffer.read_range(e.location, e.location + 30).encode('hex')) - print("Error with '{0}': ".format(filepath)) - print(e) - except Exception as e: - print("Error with '{0}': ".format(filepath)) - print(e) - raise - - -def printGameSummary(filepath, arguments): - summary = sc2reader.load_game_summary(filepath) - - if arguments.map: - print(" Map: {0}".format(summary.map_name)) - if arguments.length: - print(" Length: {0} minutes".format(summary.game_length)) - if arguments.date: - print(" Date: {0}".format(summary.start_time)) - if arguments.teams: - lineups = [team.lineup for team in summary.teams] - print(" Teams: {0}".format("v".join(lineups))) - for team in summary.teams: - print(" Team {0}\t{1}".format(team.number, team.players[0])) - for player in team.players[1:]: - print(" \t{0}".format(player)) - if arguments.builds: - for player in summary.players: - print("\n== {0} ==\n".format(player)) - for order in summary.build_orders[player.pid]: - msg = " {0:0>2}:{1:0>2} {2:<35} {3:0>2}/{4}" - print(msg.format(order.time / 60, order.time % 60, order.order, order.supply, order.total_supply)) - print("") - - -def main(): - parser = argparse.ArgumentParser( - description="""Prints basic information from Starcraft II replay and - game summary files or directories.""") - parser.add_argument('--recursive', action="store_true", default=True, - help="Recursively read through directories of Starcraft II files [default on]") - - required = parser.add_argument_group('Required Arguments') - required.add_argument('paths', metavar='filename', type=str, nargs='+', - help="Paths to one or more Starcraft II files or directories") - - shared_args = parser.add_argument_group('Shared Arguments') - shared_args.add_argument('--date', action="store_true", default=True, - help="print game date [default on]") - shared_args.add_argument('--length', action="store_true", default=False, - help="print game duration mm:ss in game time (not real time) [default off]") - shared_args.add_argument('--map', action="store_true", default=True, - help="print map name [default on]") - shared_args.add_argument('--teams', action="store_true", default=True, - help="print teams, their players, and the race matchup [default on]") - shared_args.add_argument('--observers', action="store_true", default=True, - help="print observers") - - replay_args = parser.add_argument_group('Replay Options') - replay_args.add_argument('--messages', action="store_true", default=False, - help="print(in-game player chat messages [default off]") - replay_args.add_argument('--version', action="store_true", default=True, - help="print(the release string as seen in game [default on]") - - s2gs_args = parser.add_argument_group('Game Summary Options') - s2gs_args.add_argument('--builds', action="store_true", default=False, - help="print(player build orders (first 64 items) [default off]") - - arguments = parser.parse_args() - for path in arguments.paths: - depth = -1 if arguments.recursive else 0 - for filepath in utils.get_files(path, depth=depth): - name, ext = os.path.splitext(filepath) - if ext.lower() == '.sc2replay': - print("\n--------------------------------------\n{0}\n".format(filepath)) - printReplay(filepath, arguments) - elif ext.lower() == '.s2gs': - print("\n--------------------------------------\n{0}\n".format(filepath)) - printGameSummary(filepath, arguments) - -if __name__ == '__main__': - main() diff --git a/sc2reader/scripts/sc2replayer.py b/sc2reader/scripts/sc2replayer.py deleted file mode 100644 index 7a72c7e..0000000 --- a/sc2reader/scripts/sc2replayer.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -try: - # Assume that we are on *nix or Mac - import termios - import fcntl - import os - import sys - - def getch(): - fd = sys.stdin.fileno() - oldterm = termios.tcgetattr(fd) - newattr = termios.tcgetattr(fd) - newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO - termios.tcsetattr(fd, termios.TCSANOW, newattr) - oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) - fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) - try: - while 1: - try: - sys.stdin.read(1) - break - except IOError: - pass - finally: - termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) - fcntl.fcntl(fd, fcntl.F_SETFL, oldflags) - -except ImportError as e: - try: - # Opps, we might be on windows, try this one - from msvcrt import getch - except ImportError as e: - # We can't make getch happen, just dump events to the screen - getch = lambda: True - - -import argparse -import sc2reader -from sc2reader.events import * - - -def main(): - parser = argparse.ArgumentParser( - description="""Step by step replay of game events; shows only the - Initialization, Command, and Selection events by default. Press any - key to advance through the events in sequential order.""" - ) - - parser.add_argument('FILE', type=str, help="The file you would like to replay") - parser.add_argument('--player', default=0, type=int, help="The number of the player you would like to watch. Defaults to 0 (All).") - parser.add_argument('--bytes', default=False, action="store_true", help="Displays the byte code of the event in hex after each event.") - parser.add_argument('--hotkeys', default=False, action="store_true", help="Shows the hotkey events in the event stream.") - parser.add_argument('--cameras', default=False, action="store_true", help="Shows the camera events in the event stream.") - args = parser.parse_args() - - for filename in sc2reader.utils.get_files(args.FILE): - replay = sc2reader.load_replay(filename, debug=True) - print("Release {0}".format(replay.release_string)) - print("{0} on {1} at {2}".format(replay.type, replay.map_name, replay.start_time)) - print("") - for team in replay.teams: - print(team) - for player in team.players: - print(" {0}".format(player)) - print("\n--------------------------\n\n") - - # Allow picking of the player to 'watch' - if args.player: - events = replay.player[args.player].events - else: - events = replay.events - - # Allow specification of events to `show` - # Loop through the events - for event in events: - - if isinstance(event, CommandEvent) or \ - isinstance(event, SelectionEvent) or \ - isinstance(event, PlayerLeaveEvent) or \ - isinstance(event, GameStartEvent) or \ - (args.hotkeys and isinstance(event, HotkeyEvent)) or \ - (args.cameras and isinstance(event, CameraEvent)): - print(event) - getch() - if args.bytes: - print("\t"+event.bytes.encode('hex')) - - -if __name__ == '__main__': - main() diff --git a/sc2reader/scripts/utils.py b/sc2reader/scripts/utils.py deleted file mode 100644 index 3eb0518..0000000 --- a/sc2reader/scripts/utils.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import argparse -import re -import textwrap - - -class Formatter(argparse.RawTextHelpFormatter): - """FlexiFormatter which respects new line formatting and wraps the rest - - Example: - >>> parser = argparse.ArgumentParser(formatter_class=FlexiFormatter) - >>> parser.add_argument('a',help='''\ - ... This argument's help text will have this first long line\ - ... wrapped to fit the target window size so that your text\ - ... remains flexible. - ... - ... 1. This option list - ... 2. is still persisted - ... 3. and the option strings get wrapped like this\ - ... with an indent for readability. - ... - ... You must use backslashes at the end of lines to indicate that\ - ... you want the text to wrap instead of preserving the newline. - ... ''') - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - @classmethod - def new(cls, **options): - return lambda prog: Formatter(prog, **options) - - def _split_lines(self, text, width): - lines = list() - main_indent = len(re.match(r'( *)', text).group(1)) - # Wrap each line individually to allow for partial formatting - for line in text.splitlines(): - - # Get this line's indent and figure out what indent to use - # if the line wraps. Account for lists of small variety. - indent = len(re.match(r'( *)', line).group(1)) - list_match = re.match(r'( *)(([*-+>]+|\w+\)|\w+\.) +)', line) - if(list_match): - sub_indent = indent + len(list_match.group(2)) - else: - sub_indent = indent - - # Textwrap will do all the hard work for us - line = self._whitespace_matcher.sub(' ', line).strip() - new_lines = textwrap.wrap( - text=line, - width=width, - initial_indent=' '*(indent-main_indent), - subsequent_indent=' '*(sub_indent-main_indent), - ) - - # Blank lines get eaten by textwrap, put it back with [' '] - lines.extend(new_lines or [' ']) - - return lines diff --git a/sc2reader/utils.py b/sc2reader/utils.py deleted file mode 100644 index 2ee3d38..0000000 --- a/sc2reader/utils.py +++ /dev/null @@ -1,304 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, unicode_literals, division - -import binascii -import os -import json -from datetime import timedelta, datetime - -from sc2reader.log_utils import loggable -from sc2reader.exceptions import MPQError -from sc2reader.constants import COLOR_CODES, COLOR_CODES_INV - - -class DepotFile(object): - """ - :param bytes: The raw bytes representing the depot file - - The DepotFile object parses bytes for a dependency into their components - and assembles them into a URL so that the dependency can be fetched. - """ - - #: The url template for all DepotFiles - url_template = 'http://{0}.depot.battle.net:1119/{1}.{2}' - - def __init__(self, bytes): - #: The server the file is hosted on - self.server = bytes[4:8].decode('utf-8').strip('\x00 ') - - # There is no SEA depot, use US instead - if self.server == 'SEA': - self.server = 'US' - - #: The unique content based hash of the file - self.hash = binascii.b2a_hex(bytes[8:]).decode('utf8') - - #: The extension of the file on the server - self.type = bytes[0:4].decode('utf8') - - @property - def url(self): - """ Returns url of the depot file. """ - return self.url_template.format(self.server, self.hash, self.type) - - def __hash__(self): - return hash(self.url) - - def __str__(self): - return self.url - - -def windows_to_unix(windows_time): - # This windows timestamp measures the number of 100 nanosecond periods since - # January 1st, 1601. First we subtract the number of nanosecond periods from - # 1601-1970, then we divide by 10^7 to bring it back to seconds. - return int((windows_time - 116444735995904000) / 10 ** 7) - - -@loggable -class Color(object): - """ - Stores a color name and rgba representation of a color. Individual - color components can be retrieved with the dot operator:: - - color = Color(r=255, g=0, b=0, a=75) - tuple(color.r,color.g, color.b, color.a) == color.rgba - - You can also create a color by name. - - color = Color('Red') - - Only standard Starcraft colors are supported. ValueErrors will be thrown - on invalid names or hex values. - """ - def __init__(self, name=None, r=0, g=0, b=0, a=255): - if name: - if name not in COLOR_CODES_INV: - self.logger.warn("Invalid color name: " + name) - hexstr = COLOR_CODES_INV.get(name, '000000') - self.r = int(hexstr[0:2], 16) - self.g = int(hexstr[2:4], 16) - self.b = int(hexstr[4:6], 16) - self.a = 255 - self.name = name - else: - self.r = r - self.g = g - self.b = b - self.a = a - if self.hex not in COLOR_CODES: - self.logger.warn("Invalid color hex value: " + self.hex) - self.name = COLOR_CODES.get(self.hex, self.hex) - - @property - def rgba(self): - """ Returns a tuple containing the color's (r,g,b,a) """ - return (self.r, self.g, self.b, self.a) - - @property - def hex(self): - """The hexadecimal representation of the color""" - return "{0.r:02X}{0.g:02X}{0.b:02X}".format(self) - - def __str__(self): - return self.name - - -def get_real_type(teams): - # Special case FFA games and sort outmatched games in ascending order - team_sizes = [len(team.players) for team in teams] - if len(team_sizes) > 2 and sum(team_sizes) == len(team_sizes): - return "FFA" - else: - return "v".join(str(size) for size in sorted(team_sizes)) - - -def extract_data_file(data_file, archive): - - def recovery_attempt(): - try: - return archive.read_file(data_file) - except Exception: - return None - - # Wrap all mpyq related exceptions so they can be distinguished - # from other sc2reader issues later on. - try: - # Some replays tampered with by 3rd party software report - # block sizes wrong. They can either over report or under - # report. If they over report a non-compressed file might - # attempt decompression. If they under report a compressed - # file might bypass decompression. So do this: - # - # * Force a decompression to catch under reporting - # * If that fails, try to process normally - # * mpyq doesn't allow you to skip decompression, so fail - # - # Refs: arkx/mpyq#12, GraylinKim/sc2reader#102 - try: - file_data = archive.read_file(data_file, force_decompress=True) - except Exception as e: - file_data = recovery_attempt() - if file_data is None: - raise - - return file_data - - except Exception as e: - # Python2 and Python3 handle wrapped exceptions with old tracebacks in incompatible ways - # Python3 handles it by default and Python2's method won't compile in python3 - # Since the underlying traceback isn't important to most people, don't expose it anymore - raise MPQError("Unable to extract file: {0}".format(data_file), e) - - -def get_files(path, exclude=list(), depth=-1, followlinks=False, extension=None, **extras): - """ - Retrieves files from the given path with configurable behavior. - - :param path: Path to search for files - :param depth: Limits the depth of the search. -1 = Unlimited - :param followLinks: Enables the search to follow links. - :param exclude: Excludes subdirectories with names in this list. - :param extension: Restricts results to files matching the given extension." - """ - # os.walk and os.path.isfile fail silently. We want to be loud! - if not os.path.exists(path): - raise ValueError("Location `{0}` does not exist".format(path)) - - # If an extension is supplied, use it to do a type check - if extension: - type_check = lambda path: os.path.splitext(path)[1][1:].lower() == extension.lower() - else: - type_check = lambda n: True - - # os.walk can't handle file paths, only directories - if os.path.isfile(path): - if type_check(path): - yield path - else: - pass # return and halt the generator - - else: - for root, directories, filenames in os.walk(path, followlinks=followlinks): - # Exclude the indicated directories by removing them from `directories` - for directory in list(directories): - if directory in exclude or depth == 0: - directories.remove(directory) - - # Extend our return value only with the allowed file type and regex - for filename in filter(type_check, filenames): - yield os.path.join(root, filename) - - depth -= 1 - - -class Length(timedelta): - """ Extends the builtin timedelta class. See python docs for more info on - what capabilities this gives you. - """ - - @property - def hours(self): - """ The number of hours in represented. """ - return self.seconds // 3600 - - @property - def mins(self): - """ The number of minutes in excess of the hours. """ - return self.seconds // 60 % 60 - - @property - def secs(self): - """ The number of seconds in excess of the minutes. """ - return self.seconds % 60 - - def __str__(self): - if self.hours: - return "{0:0>2}.{1:0>2}.{2:0>2}".format(self.hours, self.mins, self.secs) - else: - return "{0:0>2}.{1:0>2}".format(self.mins, self.secs) - - -class JSONDateEncoder(json.JSONEncoder): - def default(self, obj): - if isinstance(obj, datetime): - return obj.strftime("%Y-%m-%d %H:%M:%S") - return json.JSONEncoder.default(self, obj) - - -def toJSON(replay, **user_options): - options = dict(cls=JSONDateEncoder) - options.update(user_options) - return json.dumps(toDict(replay), **options) - - -def toDict(replay): - # Build observers into dictionary - observers = list() - for observer in replay.observers: - messages = list() - for message in getattr(observer, 'messages', list()): - messages.append({ - 'time': message.time.seconds, - 'text': message.text, - 'is_public': message.to_all - }) - observers.append({ - 'name': getattr(observer, 'name', None), - 'pid': getattr(observer, 'pid', None), - 'messages': messages, - }) - - # Build players into dictionary - players = list() - for player in replay.players: - messages = list() - for message in player.messages: - messages.append({ - 'time': message.time.seconds, - 'text': message.text, - 'is_public': message.to_all - }) - players.append({ - 'avg_apm': getattr(player, 'avg_apm', None), - 'color': player.color.__dict__ if hasattr(player, 'color') else None, - 'handicap': getattr(player, 'handicap', None), - 'name': getattr(player, 'name', None), - 'pick_race': getattr(player, 'pick_race', None), - 'pid': getattr(player, 'pid', None), - 'play_race': getattr(player, 'play_race', None), - 'result': getattr(player, 'result', None), - 'type': getattr(player, 'type', None), - 'uid': getattr(player, 'uid', None), - 'url': getattr(player, 'url', None), - 'messages': messages, - }) - - # Consolidate replay metadata into dictionary - return { - 'region': getattr(replay, 'region', None), - 'map_name': getattr(replay, 'map_name', None), - 'file_time': getattr(replay, 'file_time', None), - 'filehash': getattr(replay, 'filehash', None), - 'unix_timestamp': getattr(replay, 'unix_timestamp', None), - 'date': getattr(replay, 'date', None), - 'utc_date': getattr(replay, 'utc_date', None), - 'speed': getattr(replay, 'speed', None), - 'category': getattr(replay, 'category', None), - 'type': getattr(replay, 'type', None), - 'is_ladder': getattr(replay, 'is_ladder', False), - 'is_private': getattr(replay, 'is_private', False), - 'filename': getattr(replay, 'filename', None), - 'file_time': getattr(replay, 'file_time', None), - 'frames': getattr(replay, 'frames', None), - 'build': getattr(replay, 'build', None), - 'release': getattr(replay, 'release_string', None), - 'game_fps': getattr(replay, 'game_fps', None), - 'game_length': getattr(getattr(replay, 'game_length', None), 'seconds', None), - 'players': players, - 'observers': observers, - 'real_length': getattr(getattr(replay, 'real_length', None), 'seconds', None), - 'real_type': getattr(replay, 'real_type', None), - 'time_zone': getattr(replay, 'time_zone', None), - 'versions': getattr(replay, 'versions', None) - }