Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merges v15 into master with README.txt improvements.

  • Loading branch information...
commit 6aaec971ff4b2c2487bb794c93256be01ba8b834 2 parents 11fccd0 + 4ebead8
@GraylinKim authored
Showing with 6,155 additions and 7,313 deletions.
  1. +190 −307 README.txt
  2. +0 −117 docs/source/index.old
  3. +0 −2  docs/source/listeners.rst
  4. +2 −2 docs/source/mainstructures.rst
  5. +0 −101 docs/source/processors.rst
  6. +0 −2  docs/source/tutorials/actionlistener.rst
  7. +289 −0 extract.py
  8. +10 −10 sc2reader/__init__.py
  9. +194 −41 sc2reader/constants.py
  10. +259 −0 sc2reader/data/16939_abilities.csv
  11. +350 −0 sc2reader/data/16939_units.csv
  12. +260 −0 sc2reader/data/17811_abilities.csv
  13. +353 −0 sc2reader/data/17811_units.csv
  14. +260 −0 sc2reader/data/18701_abilities.csv
  15. +360 −0 sc2reader/data/18701_units.csv
  16. +262 −0 sc2reader/data/21029_abilities.csv
  17. +362 −0 sc2reader/data/21029_units.csv
  18. +269 −0 sc2reader/data/22612_abilities.csv
  19. +364 −0 sc2reader/data/22612_units.csv
  20. +342 −5 sc2reader/data/__init__.py
  21. +0 −715 sc2reader/data/base.py
  22. +0 −713 sc2reader/data/build16561.py
  23. +0 −722 sc2reader/data/build17326.py
  24. +0 −713 sc2reader/data/build18317.py
  25. +0 −839 sc2reader/data/build19595.py
  26. +0 −703 sc2reader/data/template.py
  27. +0 −288 sc2reader/data/utils.py
  28. +162 −81 sc2reader/events.py
  29. +2 −2 sc2reader/exceptions.py
  30. +115 −307 sc2reader/factories.py
  31. +0 −8 sc2reader/listeners/__init__.py
  32. +0 −29 sc2reader/listeners/apm.py
  33. +0 −21 sc2reader/listeners/location.py
  34. +0 −105 sc2reader/listeners/selection.py
  35. +0 −21 sc2reader/listeners/target.py
  36. +0 −17 sc2reader/listeners/utils.py
  37. +138 −17 sc2reader/objects.py
  38. 0  sc2reader/plugins/__init__.py
  39. +1 −0  sc2reader/plugins/game_summary.py
  40. +145 −0 sc2reader/plugins/replay.py
  41. +123 −0 sc2reader/plugins/utils.py
  42. +0 −5 sc2reader/processors/__init__.py
  43. +0 −283 sc2reader/processors/full.py
  44. +0 −30 sc2reader/processors/jsonencode.py
  45. +0 −59 sc2reader/processors/todict.py
  46. +296 −562 sc2reader/readers.py
  47. +709 −98 sc2reader/resources.py
  48. +1 −1  sc2reader/scripts/sc2autosave.py
  49. +28 −0 sc2reader/scripts/sc2boprinter.py
  50. +5 −8 sc2reader/scripts/sc2printer.py
  51. +301 −377 sc2reader/utils.py
  52. +3 −2 setup.py
View
497 README.txt
@@ -1,371 +1,254 @@
What is sc2reader?
====================
-sc2reader is a library for extracting game information from Starcraft II
-replay files into a structured replay object. sc2reader aims to give anyone
-and everyone the power to construct their own tools and hack on their own
-Starcraft II projects under the open MIT license.
+sc2reader is a python library for extracting information from various different
+Starcraft II resources. These resources currently include Replays, Maps, and
+Game Summaries; we will eventually include BNet profiles and possibly adapters
+to the more entrenched SCII sites like sc2ranks.
+Our goal is to give anyone and everyone the power to construct their own
+tools, do their own analysis, and hack on their own Starcraft II projects
+under the open MIT license. Currently powering:
+* Websites: `ggtracker.com`_
+* Research: `Build Order Classification`
-Supports Python 2.6+, Python 3 isn't tested but probably won't work. If you want
-to make it work, drop a proposal on the `mailing list`_. Python 3.0 support
-would be awesome.
+Our secondary goal is to become a reference implementation for people looking
+to implement parsers in other languages. There are currently implementations
+under development in:
-Special thanks to the people of the awesome `phpsc2replay`_ project whose
-public documentation and source code made starting this library possible.
+* C#: `sc2replay-csharp`_ (special thanks for v1.5 help)
+* C++: `sc2pp`_
+* Javascript: `comsat`_
+* PHP: `phpsc2replay`_ (the original open implementation!)
+
+If you'd like your tool, site, project, or implementation listed above, drop
+us a line on our mailing list or stop by our #sc2reader IRC channel and say hi!
Current Status
=================
-sc2reader can parse basic replay information out of all official releases of
-Starcraft II from 1.1.0 to 1.4.1. This means that the following information can
-be extracted:
-
-- Replay details (map, length, version, date, game type, game speed, ...)
-- Player details (name, race, team, color, bnet url, ...)
-- Message details (text, time, player, target, ...)
-- Game details (winners, losers, unit abilities, unit selections, hotkeys, ...)
-
-Unfortunately, the area around game details is still very rough. Most of the
-available builds do not map the parsed ability codes to the corresponding unit
-ability which really limits its usability for anything beyond apm type
-calculations. Filling out the ability codes mapping is the primary task right now
-and hopefully improve support can be added in the near future.
-
-1.0.x is also supported via code more or less copied from the `phpsc2replay`_
-project. While it appears to work, there are no guarantees and getting support
-for any issues will probably be difficult. If you have 1.0.x replays laying
-around it would be great if you could post them to the mailing list for testing
-purposes. We would require permission to upload and distribute them through our
-Github repository.
-
-
-Examples
-===================
-
-The example below demonstrates some of the most basic usage. For more detailed
-examples consult the official `documentation`_.
-
-::
-
- >>> import sc2reader
- >>> r = sc2reader.read_file('test_replays/1.4.0.19679/36663.SC2Replay')
- >>> print "Duration: {0} on {1}, played {2} ".format(r.length, r.map, r.date)
- Duration: 10.59 on Xel'Naga Caverns, played 2011-09-21 02:49:47
- >>> for player in r.players:
- ... print "[{0}] {1}, {2} APM".format(player.result,player,player.avg_apm)
- ...
- [Win] Player 1 - MaNNErCHOMP (Terran), 148.13353566 APM
- [Loss] Player 2 - vVvHasuu (Protoss), 143.525835866 APM
- >>> r.player[1].result
- 'Win'
- >>> r.player['vVvHasuu'].url
- 'http://us.battle.net/sc2/en/profile/493391/1/vVvHasuu/'
-
-
-For web services, dumping to json might be a common operation.
-
-::
-
- >>> import sc2reader;
- >>> from sc2reader.processors import jsonEncoder
- >>> print sc2reader.read_file(
- ... 'test_replays/1.4.0.19679/36663.SC2Replay',
- ... processors=[jsonEncoder(indent=4)]
- ... )
- {
- "category": "Ladder",
- "map": "Xel'Naga Caverns",
- "players": [
- {
- "uid": 934659,
- "play_race": "Terran",
- "color": {
- "a": 255,
- "r": 180,
- "b": 30,
- "g": 20
- },
- "pick_race": "Terran",
- "pid": 1,
- "result": "Win",
- "name": "MaNNErCHOMP",
- "url": "http://us.battle.net/sc2/en/profile/934659/1/MaNNErCHOMP/",
- "messages": [
- {
- "text": "lol",
- "is_public": true,
- "time": 9
- },
- {
- "text": "sup bra",
- "is_public": true,
- "time": 23
- },
- {
- "text": ":(",
- "is_public": true,
- "time": 48
- }
- ],
- "type": "Human",
- "avg_apm": 148.13353566009107
- },
- {
- "uid": 493391,
- "play_race": "Protoss",
- "color": {
- "a": 255,
- "r": 0,
- "b": 255,
- "g": 66
- },
- "pick_race": "Protoss",
- "pid": 2,
- "result": "Loss",
- "name": "vVvHasuu",
- "url": "http://us.battle.net/sc2/en/profile/493391/1/vVvHasuu/",
- "messages": [],
- "type": "Human",
- "avg_apm": 143.52583586626139
- }
- ],
- "type": "1v1",
- "is_ladder": true,
- "utc_date": "2011-09-21 06:49:47",
- "file_time": 129610613871027307,
- "observers": [],
- "frames": 10552,
- "build": 19679,
- "date": "2011-09-21 02:49:47",
- "unix_timestamp": 1316587787,
- "filename": "test_replays/1.4.0.19679/36663.SC2Replay",
- "speed": "Faster",
- "gateway": "us",
- "is_private": false,
- "release": "1.4.0.19679"
- }
-
-Seriously, consult the `documentation`_! Its for your own good.
-
-
-Example Scripts
-====================
+sc2reader is currently capable of parsing varying levels of information out of
+the three primary resource types listed below. For a more detailed and exact
+description of the information that can be extracted please consult the
+`documentation`_ hosted on Read the Docs and packaged with the source.
-A couple simple scripts have been included in the sc2reader package to get you
-started and provide an example. While potentially useful on their own they are
-primarily there to demonstrate what can be done. As such, there are no
-guarantees that these scripts will be maintained or continue operating in the
-same way.
-
-Please modify them to your liking or create your own as necessary. If you are
-proud of your changes or would like to have your script distributed let the
-`mailing list`_ know. Generally speaking, we'd be happy to distribute more
-useful example scripts and utilities.
-
-sc2printer
---------------
-
-The sc2printer script packaged with sc2reader provides a configurable printout
-of several key aspects of the replay(s) that its pointed at:
-
-::
-
- graylin@graylin-laptop:/home/sc2reader$ sc2printer test_replays/1.4.0.19679/36663.SC2Replay --messages --date --map --length --teams
-
- --------------------------------------
- test_replays/1.4.0.19679/36663.SC2Replay
-
- Map: Xel'Naga Caverns
- Length: 10.59
- Date: 2011-09-21 02:49:47
- Teams: TvP
- Team 1 MaNNErCHOMP (T)
- Team 2 vVvHasuu (P)
- Messages:
- 00.09 - MaNNErCHOMP - lol
- 00.23 - MaNNErCHOMP - sup bra
- 00.48 - MaNNErCHOMP - :(
- Version: 1.4.0.19679
-
-
-sc2autosave
-------------------
-
-sc2autosave is a utility script that you could run in cycle mode in the
-background or hook up to a cron job in batch mode to autosave your replay files
-with configurable naming conventions into a structured file hierarchy.
-
-Its got a lot of options, so make sure to use the ``--help`` command before you
-get started.
-
-::
-
- graylin@graylin-laptop:/home/sc2reader$ sc2autosave test_replays test_autosave --mode BATCH --action COPY --exclude-dirs problem_replays mine
- Loading state from file: test_autosave/sc2autosave.dat
- SCANNING: test_replays
- COPY:
- Source: /149414-nSkENNY-VS-aflubin.sc2replay
- Dest: /18.12 1v1 on Abyssal Caverns.SC2Replay
- COPY:
- Source: /1.2.1.17682/VTPokebunny_vs_LuckyFool_5768.SC2Replay
- Dest: /16.48 1v1 on Shakuras Plateau.SC2Replay
- COPY:
- Source: /1.2.1.17682/Froadac_vs_BattleOtter_6040.SC2Replay
- Dest: /20.20 1v1 on Lost Temple.SC2Replay
- COPY:
- Source: /1.2.1.17682/2v2_Scorched Haven_6473.SC2Replay
- Dest: /27.14 2v2 on Scorched Haven.SC2Replay
- COPY:
- Source: /1.2.1.17682/Laegoose_vs_nitrousx_4626.SC2Replay
- Dest: /21.04 1v1 on Мусоросборник.SC2Replay
- COPY:
- Source: /1.2.1.17682/Deadiam_vs_McSwagger_6474.SC2Replay
- Dest: /19.22 1v1 on Steppes of War.SC2Replay
- COPY:
- Source: /1.2.1.17682/1v1_Lost Temple_3969.SC2Replay
- Dest: /16.46 1v1 on Lost Temple.SC2Replay
- COPY:
- Source: /1.2.1.17682/BowmanSX_vs_nubington_8614.SC2Replay
- Dest: /22.04 1v1 on Metalopolis.SC2Replay
- COPY:
- Source: /1.2.1.17682/Sharky_vs_trolli_4792.SC2Replay
- Dest: /09.04 1v1 on Blistering Sands.SC2Replay
-
- .... #There are hundreds of test replays...
-
-
-sc2store
+
+Replays
-------------
-sc2store is a really cool idea that I probably won't get around to finishing. It
-uses sqlAlchemy to stuff the target replays into a target SQL database. The
-models could definitely use some work and there might be a couple bugs to shake
-out but it demonstrates a pretty solid approach to working with sc2reader from
-other languages. Drop.sc used a script similar to this for a long time to work
-with sc2reader from his Ruby on Rails web application.
-
-If you don't specify a storage string it just uses sqlite in memory.
-
-::
-
- graylin@graylin-laptop:/home/sc2reader$ sc2store test_replays/mine
- #LOTS OF SQLAlchemy output...
- 2011-10-02 14:28:11,892 INFO sqlalchemy.engine.base.Engine SELECT DISTINCT person.name AS anon_1
- FROM person
- 2011-10-02 14:28:11,892 INFO sqlalchemy.engine.base.Engine ()
- [(u'AMartinez',), (u'Adelscott',), (u'AintNoThang',), (u'Amanda',),
- (u'Blue',), (u'BurnemDown',), (u'ByTheNumbers',), (u'CDUB',), (u'CuP',),
- (u'Davidal',), (u'DrMandrake',), (u'Ender',), (u'ExAn',), (u'FalconPunch',),
- (u'Fertile',), (u'Geph',), (u'HaRibO',), (u'HaZeN',), (u'HarshCougar',),
- (u'HeLeCoPtEr',), (u'Jakrom',), (u'James',), (u'Jeff',), (u'Kamron',),
- (u'Kevin',), (u'Manny',), (u'Merveilles',), (u'Mort',), (u'NELLYSON',),
- (u'NerdHerder',), (u'Onjai',), (u'OrangeBottle',), (u'PandaFeather',),
- (u'PatsyCake',), (u'Peonz',), (u'Pille',), (u'Reaganomics',), (u'Red',),
- (u'Remedy',), (u'Saladrael',), (u'ShadesofGray',), (u'SourDiesel',),
- (u'TAG',), (u'TheBoss',), (u'ThisBryanFoo',), (u'TigerGosu',), (u'Tyrak',),
- (u'UniqueRubber',), (u'Violet',), (u'Wukasz',), (u'YoungPhoenix',),
- (u'ZORN',), (u'ZeroHero',), (u'agility',), (u'dante',), (u'haoster',),
- (u'marmot',), (u'mouzMaNa',), (u'neosmatrix',), (u'oobugoo',),
- (u'reddawn',), (u'rostin',), (u'rubbernutzz',), (u'wildcard',), (u'yenoMenO',)]
+Almost all the basic contextual information can be extracted from any post-beta
+replays. This information includes:
+
+- Replay details (map, length, version, datetime, game type, game speed, ...)
+- Player details (name, race, team, color, bnet url, win/loss, ...)
+- Message details (text, time, player, target, pings, ...)
+
+Additional information can be parsed from ladder replays and replays from basic
+unmodded private "custom" games. This information includes:
+
+- Unit Selection and Hotkey events.
+- Resource Transfers and Requests (but not collection or unspent values!)
+- Unfiltered Unit commands (attack, move, train, build, psi storm, etc)
+- Camera Movements for all players and observers.
+
+In some cases, further information can be extracted from this raw information:
+
+- All unit selections and hotkey values for every frame of the game.
+- APM/EPM and its untold variations.
+
+We are in the process of building data dictionaries for all the SC2 units and
+abilities which should enable much more creative and robust analysis of the
+raw event stream found in replay files.
+
+
+Maps
+-------
+
+Maps are currently parsed in the most minimal way possible and are an area for
+big improvement in the future. Currently the Minimap.tga packaged with the map
+is made available along with Name, Author, Description for ONLY enUS localized
+SCII map files. More robust Map meta data extraction will likely be added in
+future releases.
+
+There's a lot more in here to be had for the adventurous.
+
+
+Game Summaries
+-----------------
+
+Tons of data parsed. Thank you Prillan and others from `Team Liquid`_.
+
+* Lobby Properties (game speed, game type, ...)
+* Player Information (Race, Team, Result, bnet info, ...)
+* Player Graphs & Stats (Army Graph, Income Graph, Avg Unspent Resources, ...)
+* URLs to map localization files and images
+* Player build orders up to 64 (real) actions
+
+This isn't super reliable yet and s2gs files may fail during processing. We've
+figured out the basic common structure and where the information is stored but
+the data structure sometimes can't be processed with current techniques and it
+seems as though different s2gs files can contain radically different amounts
+of information based on some unknown factors.
+
+It is likely that s2gs file support will be improved in future releases.
+
+
+Example Usage
+=====================
+
+To demonstrate how you might use sc2reader in practice I've included some short
+contrived scripts below. For more elaborate examples, checkout the docs and the
+sc2reader.scripts package on Github.
+
+Downloading Maps
+--------------------
+
+Save all the minimaps for all the games you've ever played::
+
+ import sc2reader, os, sys
+
+ if not os.path.exists('minimaps'):
+ os.makedirs('minimaps')
+
+ # Only load details file (level 1) and fetch the map file from bnet
+ for replay in sc2reader.load_replays(sys.argv[1:], load_map=True, load_level=1):
+ minimap_path = os.path.join('minimaps', replay.map_name.replace(' ','_')+'.tga')
+ if not os.path.exists(minimap_path):
+ with open(minimap_path, 'w') as file_out:
+ file_out.write(replay.map.minimap)
+ print "Saved Map: {0} [{1}]".format(replay.map_name, replay.map_hash)
+
+
+Organizing Replays
+----------------------
+
+Organizing your 1v1 replays by race played and matchup and sortable by length::
+
+ import sc2reader, os, shutil, sys
+
+ sorted_base = 'sorted'
+ path_to_replays = 'my/replays'
+
+ for replay in sc2reader.load_replays(sys.argv[1], load_level=1):
+ if replay.real_type != '1v1':
+ continue
+
+ try:
+ me = replay.player.name('ShadesofGray')
+ you = team[(me.team.number+1)%2].players[0]
+
+ matchup = "{}v{}".format(me.play_race[0], you.play_race[1])
+
+ sorted_path = os.path.join(sorted_base,me.play_race[0],matchup)
+ if not os.path.exists(sorted_path):
+ os.makedirs(sorted_path)
+
+ filename = "{0} - {1}".format(replay.game_length, replay.filename)
+ src = os.join(path_to_replays,replay.filename)
+ dst = os.join(sorted_path, filename)
+ shutil.copyfile(src, dst)
+
+ except KeyError as e:
+ continue # A game I didn't play in!
Installation
================
-Okay, I've convinced you to give sc2reader a shot. Next you need to install it.
-If you are on windows you can cheat and just run the .exe download at the bottom
-of this page.
-
-If you are on sane system like the rest of us you can try one of the following
-magic incantations on the shell. If you are a developer and want the latest and
-greatest at all times, you can skip to the advanced installation section.
+From PyPI (stable)
+---------------------
-::
+Install from the latest release on PyPI with pip::
pip install sc2reader
-If you don't have `pip`_, you should consider getting it, but I digress. You can
-use easy_install instead.
-
-::
+or easy_install::
easy_install sc2reader
-If you don't have `easy_install`_ you probably have your reasons. If you don't,
-then I really think you should consider getting it. Or better yet, get `pip`_!
-Never fear though, when all else fails you can still do things the old fashioned
-way.
-
-::
+or with setuptools (specify a valid x.x.x)::
- wget http://pypi.python.org/packages/source/s/sc2reader/sc2reader-0.3.0.tar.gz
- tar -xzf sc2reader-0.3.0.tar.gz
- cd sc2reader-0.3.0
+ wget http://pypi.python.org/packages/source/s/sc2reader/sc2reader-x.x.x.tar.gz
+ tar -xzf sc2reader-x.x.x.tar.gz
+ cd sc2reader-x.x.x
python setup.py install
-Advanced Installation
-============================
+From Github
+--------------------------
-Master is at times a bit unstable and the interface might change in (mostly)
-minor ways without warning. That being said, its where all the best stuff is.
-If you are going to do this install you should definitely be on the
-`developers mailing list`_ and it would be great if you stopped by #sc2reader on
-FreeNode.net and said Hi. We can help you get up to speed and get started.
+Github master is generally stable with development branches more unstable.
-::
+Install from the latest source on github with pip::
- git clone https://github.com/GraylinKim/sc2reader.git
- cd sc2reader
- python setup.py install
+ pip install -e git+git://github.com/GraylinKim/sc2reader#egg=sc2reader
-If you intend on making local modifications it'd be better to use develop mode
-instead:
+or with setuptools::
-::
+ wget -O sc2reader-master.tar.gz https://github.com/GraylinKim/sc2reader/tarball/master
+ tar -xzf sc2reader-master.tar.gz
+ cd sc2reader-master
+ python setup.py install
- python setup.py develop
+For Contributors
+-------------------
-You can test your install to verify that things are working correctly using
-`pytest`_, an automated testing solution. Just run the following from the root
-folder of the sc2reader source code:
+Contributors should install from an active git repository using setuptools in
+`develop`_ mode. This will install links to the live code so that local edits
+are available to external modules automatically::
-::
+ git clone https://github.com/GraylinKim/sc2reader.git
+ cd sc2reader
+ python setup.py develop
- pip install pytest
- py.test
+Contributions can be sent via pull request or by `mailing list`_ with attached
+patch files. It is highly recommended you get in touch with us before working
+on patches.
-If they don't all pass, something went wrong. Panic. If that doesn't work, reach
-out on IRC or on our `mailing list`_ for assistance.
Community
==============
sc2reader has a small but growing community of people looking to make tools and
-websites with Starcraft II replay data. If that sounds like something you'd like
-to be a part of please join our underused `mailing list`_ and start a conversation
+websites with Starcraft II data. If that sounds like something you'd like to be
+a part of please join our underused `mailing list`_ and start a conversation
or stop by #sc2reader on FreeNode and say 'Hi'. We have members from all over
Europe, Australia, and the United States currently, so regardless of the time,
you can probably find someone to talk to.
+
Issues and Support
=====================
We have an `issue tracker`_ on Github that all bug reports and feature requests
should be directed to. We have a `mailing list`_ with Google Groups that you can
use to reach out for support. We are generally on FreeNode in the #sc2reader
-and may be able to provide support and address issues there as well.
+and can generally provide live support and address issues there as well.
+Acknowledgements
+=======================
+
+Thanks to all the awesome developers in the SC2 community that helped out
+and kept this project going. Special thanks to the people of the awesome
+`phpsc2replay`_ project whose public documentation and source code made
+starting this library possible and to sc2replay-csharp for setting us
+straight on game events parsing and assisting with our v1.5 upgrade.
+
+.. _Build Order Classification: https://github.com/grahamjenson/sc2reader
+.. _ggtracker.com: http://ggtracker.com
+.. _PyPy: http://pypy.org/
+.. _sc2pp: https://github.com/zsol/sc2pp
+.. _sc2replay-csharp: https://github.com/ascendedguard/sc2replay-csharp
+.. _comsat: https://github.com/tec27/comsat
+.. _phpsc2replay: http://code.google.com/p/phpsc2replay/
+.. _Team Liquid: http://www.teamliquid.net/forum/viewmessage.php?topic_id=330926
+.. _develop: http://peak.telecommunity.com/DevCenter/setuptools#development-mode
.. _documentation: http://sc2reader.rtfd.org/
.. _mailing list: http://groups.google.com/group/sc2reader
.. _developers mailing list: http://groups.google.com/group/sc2reader-dev
.. _phpsc2replay: http://code.google.com/p/phpsc2replay/
-.. _pytest: http://pytest.org/
.. _issue tracker: https://github.com/GraylinKim/sc2reader/issues
-.. _pip: http://pypi.python.org/pypi/pip
-.. _easy_install: http://pypi.python.org/pypi/setuptools
View
117 docs/source/index.old
@@ -1,117 +0,0 @@
-sc2reader Documentation
-=====================================
-
-sc2reader is a library for extracting game information from Starcraft II
-replay files into a structured replay object. sc2reader aims to give anyone
-and everyone the power to construct their own tools and hack on their own
-Starcraft II projects under the open MIT license.
-
-This document is a work in progress and an attempt to document the use and
-configuration of sc2reader as well as the data that it makes available. I'll
-try to keep it up to date and fill out some of the missing sections as time
-goes on. While this document will hopefully give you an idea how sc2reader works
-there is no substitute for reading the source code. If you plan on seriously
-using the library please feel welcome to ask questions in #sc2reader on FreeNode
-(IRC) or on the `mailing list`_. I'd be happy to help you out.
-
-.. _mailing list: http://groups.google.com/group/sc2reader
-
-Use and Configuration
-=======================
-
-Basic Use
--------------
-
-The sc2reader package itself can be configured and used to read replay files
-right out of the box! This lightweight approach to usage provides default
-options for full replay parsing so no configuration is necessary for normal use.
-
-read
-~~~~~~~~
-
-::
-
- >>> import sc2reader
- >>> sc2reader.read('test_replays/1.4.0.19679/36663.SC2Replay')
- [<sc2reader.objects.Replay object at 0x944822c>]
-
-Notice that a list of Replay_ objects was returned. That is because the read
-function is always plural and will return a list regardless of how many replays
-it finds at the path that you send it.
-
-It works by (optionally) recursing through the specified path (if its a directory)
-and grabbing all files of the .SC2Replay file type and parsing them. Because of
-this, while the path you send it must always exist it is possible for the read_
-function to return an empty array of not files are found. This scanning process
-is fairly configurable by several of the available Options_.
-
-Because frequently you will be parsing only a single file or will be in an
-environment where you only have access to file or file-like objects, a read_file_
-function is available as well.
-
-read_file
-~~~~~~~~~~~~
-
-::
-
- >>> import sc2reader
- >>> replay = sc2reader.read_file('test_replays/1.4.0.19679/36663.SC2Replay')
- >>> print "{0} on {1}, played on {2}".format(replay.type, replay.map, replay.date)
- 1v1 on Xel'Naga Caverns, played on 2011-09-21 02:49:47
-
-The read file function can accept either a path to a single file or a reference
-to a file-like object. A file-like object must implement the ``seek`` and
-``read`` methods to be valid. These two functions read_file_ and read_ provide
-the interface for constructing replays from file objects.
-
-
-configure
-~~~~~~~~~~~
-
-::
-
- >>> import sc2reader
- >>> sc2reader.configure(files=sc2reader.config.files.partial)
- >>> replay = sc2reader.read_file('CustomMap.SC2Replay')
-
-The configure_ function can be used to change the default configuration of the
-replay parser and processor. This can be used to effect scanning of the file
-tree, the output and logging destination, and the fullness of the parsing. In
-the example above, we have restricted the file set to a partial parse and
-excluded the replay.game.events file from the parsing process. While sc2reader
-doesn't support custom games, by restricting the file set it can successfully
-read custom games to get non-event related information including summary game
-information as well as a general profile of the players.
-
-For one off configuration jobs though, sometimes its easier to pass the options
-in as keyword arguments to the read_ and read_file_ functions. This will leave
-the current sc2reader options untouched and won't affect future calls.
-
-::
-
- >>> import sc2reader
- >>> sc2reader.read(path, **options)
- >>> sc2reader.read_file(fileobj, **options)
-
-
-Advanced Use
---------------
-
-In addition to making the read_, read_file_, and configure_ methods available on
-the module, they are also available as part of an SC2Reader class with the same
-call signature. This can let you move easily between several different
-configurations as needed for different tasks.
-
-::
-
- >>> from sc2reader import SC2Reader
- >>> reader = SC2Reader(**options)
- >>> reader.read_file('test_replays/1.4.0.19679/36663.SC2Replay')
- <sc2reader.objects.Replay object at 0x944822c>
-
-
-
-Indices and tables
-==================
-
-* :ref:`genindex`
View
2  docs/source/listeners.rst
@@ -1,2 +0,0 @@
-Listeners
-==============
View
4 docs/source/mainstructures.rst
@@ -1,4 +1,4 @@
-.. currentmodule:: sc2reader.replay
+.. currentmodule:: sc2reader.resources
Main Structures
======================
@@ -69,7 +69,7 @@ Person
Observer
---------------
-.. autoclass:: Observer
+.. autoclass:: Observer
View
101 docs/source/processors.rst
@@ -1,101 +0,0 @@
-Processors
-=================
-
-jsonEncode
----------------
-
- The jsonEncode processor can be used to return a encoded json string instead
- of a replay object. This shortcut processor might be useful for web apps or
- interprocess communication perhaps.
-
- ::
-
- >>> import sc2reader;
- >>> from sc2reader.processors import jsonEncode
- >>> print sc2reader.read_file('test_replays/1.4.0.19679/36663.SC2Replay', processors=[jsonEncode])
-
- The processor also comes in a slightly different class based flavor which
- allows you to configure the encoding process by basically piping your options
- through to python's ``json.dumps`` standard library function.
-
- ::
-
- >>> import sc2reader;
- >>> from sc2reader.processors import jsonEncoder
- >>> print sc2reader.read_file(
- ... 'test_replays/1.4.0.19679/36663.SC2Replay',
- ... processors=[jsonEncoder(indent=4)]
- ... )
- {
- "category": "Ladder",
- "map": "Xel'Naga Caverns",
- "players": [
- {
- "uid": 934659,
- "play_race": "Terran",
- "color": {
- "a": 255,
- "r": 180,
- "b": 30,
- "g": 20
- },
- "pick_race": "Terran",
- "pid": 1,
- "result": "Win",
- "name": "MaNNErCHOMP",
- "url": "http://us.battle.net/sc2/en/profile/934659/1/MaNNErCHOMP/",
- "messages": [
- {
- "text": "lol",
- "is_public": true,
- "time": 9
- },
- {
- "text": "sup bra",
- "is_public": true,
- "time": 23
- },
- {
- "text": ":(",
- "is_public": true,
- "time": 48
- }
- ],
- "type": "Human",
- "avg_apm": 148.13353566009107
- },
- {
- {
- "uid": 493391,
- "play_race": "Protoss",
- "color": {
- "a": 255,
- "r": 0,
- "b": 255,
- "g": 66
- },
- "pick_race": "Protoss",
- "pid": 2,
- "result": "Loss",
- "name": "vVvHasuu",
- "url": "http://us.battle.net/sc2/en/profile/493391/1/vVvHasuu/",
- "messages": [],
- "type": "Human",
- "avg_apm": 143.52583586626139
- }
- ],
- "type": "1v1",
- "is_ladder": true,
- "utc_date": "2011-09-21 06:49:47",
- "file_time": 129610613871027307,
- "observers": [],
- "frames": 10552,
- "build": 19679,
- "date": "2011-09-21 02:49:47",
- "unix_timestamp": 1316587787,
- "filename": "test_replays/1.4.0.19679/36663.SC2Replay",
- "speed": "Faster",
- "gateway": "us",
- "is_private": false,
- "release": "1.4.0.19679"
- }
View
2  docs/source/tutorials/actionlistener.rst
@@ -1,2 +0,0 @@
-Building an ActionListener
-=================================
View
289 extract.py
@@ -0,0 +1,289 @@
+import zlib, sys, pprint
+from sc2reader.utils import ReplayBuffer
+from sc2reader.data.build19595 import Data_19595 as DataObject
+
+unitData = DataObject()
+
+races = {'Prot':'Protoss','Zerg':'Zerg','Terr':'Terran','RAND':'Random'}
+data_names = [
+ 'R',
+ 'U',
+ 'S',
+ 'O',
+ 'AUR',
+ 'RCR',
+ 'WC',
+ 'UT',
+ 'KUC',
+ 'SB',
+ 'SRC',
+
+]
+data_names_pretty = [
+ 'Resources',
+ 'Units',
+ 'Structures',
+ 'Overview',
+ 'Average Unspent Resources',
+ 'Resource Collection Rate',
+ 'Workers Created',
+ 'Units Trained',
+ 'Killed Unit Count',
+ 'Structures Built',
+ 'Structures Razed Count'
+]
+# Obviously not complete
+abilities = {
+ # Protoss
+ ## Twilight
+ 0x5902 : 'Blink',
+ # Charge
+
+ ## Cyber core
+ 0x5602 : 'Warp Gate',
+ 0x5702 : 'Hallucination',
+ # Air Weapons 1-3
+ # Air Armor 1-3
+ # Hallucination
+
+ ## Robo bay
+ # Obs, speed
+ # Prism, speed
+ 0x3402 : 'Extended Thermal Lance',
+
+ #Zerg
+ ## Pool
+ 0x4402 : 'Metabolic Boost',
+ # Adrenal glands
+
+ ## Evo. chamber
+ 0x3a02 : 'Zerg Ground Carapace Level 1',
+ 0x3b02 : 'Zerg Ground Carapace Level 2', #extrapolated
+ 0x3c02 : 'Zerg Ground Carapace Level 3', #extrapolated
+ 0x3d02 : 'Zerg Missile Attacks Level 1',
+ 0x3e02 : 'Zerg Missile Attacks Level 2', #extrapolated
+ 0x3f02 : 'Zerg Missile Attacks Level 3', #extrapolated
+
+ ## Lair
+ 0x4202 : 'Burrow',
+
+ #Terran
+ ## Factory tech lab
+ 0x1402 : 'Siege tech'
+ }
+lobby_properties = {
+ 3000 : 'game_speed',
+ 2001 : 'game_type', #1v1/2v2/3v3/4v4/5v5/6v6/FFA
+ 3010 : 'unknown1', #yes/no
+ 3006 : 'unknown2', #3/5/7/10/15/20/25/30
+ 1001 : 'unknown3', #yes/no
+ 1000 : 'unknown4', #Dflt
+ 2000 : 'unknown5', #t2/t3/FFA/Cust
+ 3009 : 'lobby_type' #Priv/Pub/Amm (Auto MatchMaking)
+
+}
+player_properties = {
+ 500 : 'slot_state', #Clsd/Open/Humn/Comp
+ 3001 : 'race',
+ 3003 : 'energy',
+ 3002 : 'color',
+ 3004 : 'difficulty',
+ 3008 : 'nonplayer_mode' #Obs/Ref
+}
+
+def getRealm(str):
+ return ""
+def loadPlayerPropTemplate(prop_struct):
+ ret = dict()
+ for prop in prop_struct:
+ if not prop[0][1] in player_properties:
+ continue
+
+ ret[prop[0][1]] = [o[0] for o in prop[1]]
+ return ret
+def loadLobbyPropTemplate(prop_struct):
+ ret = dict()
+ for prop in prop_struct:
+ if not prop[0][1] in lobby_properties:
+ continue
+ ret[prop[0][1]] = [o[0] for o in prop[1]]
+ return ret
+def getLobbyProperties(prop_struct, prop_template):
+ ret = dict()
+ for p in prop_struct:
+ if not p[0][1] in prop_template:
+ continue
+ ret[lobby_properties[p[0][1]]] =(
+ prop_template[p[0][1]][p[1][0]])
+ return ret
+
+def getLobby(data):
+ props = loadLobbyPropTemplate(data[0][5])
+
+ return {
+ 'properties':getLobbyProperties(data[0][6][6], props)
+ }
+
+def getPlayerProperties(pindex, prop_struct, prop_template):
+ ret = dict()
+ for p in prop_struct:
+ if not p[0][1] in prop_template:
+ continue
+ ret[player_properties[p[0][1]]] =(
+ prop_template[p[0][1]][p[1][pindex][0]])
+ return ret
+
+def getPlayers(data):
+
+ props = loadPlayerPropTemplate(data[0][5])
+
+ players = []
+ parr = data[0][3]
+ for i in range(16):
+ if not (parr[i][0][1] == 0):
+ player = getPlayer(data, i)
+ player['properties'] = getPlayerProperties(i, data[0][6][6], props)
+ players.append(player)
+
+ return players
+def getIncomeGraph(data, index):
+ return getGraph(data[4][0][1][1], index)
+def getArmyGraph(data, index):
+ return getGraph(data[4][0][2][1], index)
+def getGraph(graph, index):
+ return [(o[2], o[0]) for o in graph[index]]
+def getPlayer(data, index):
+ pinfo = data[0][3][index]
+ pdata = data[3][0]
+
+ player = {
+ 'id': "{}/{}/{}".format(getRealm(pinfo[0][1][0][1]), pinfo[0][1][0][2], pinfo[0][1][0][3]),
+ 'race' : races[pinfo[2]]
+ }
+
+ stats = {}
+
+ for i in range(len(pdata)):
+ stats[data_names[i]] = pdata[i][1][index][0][0]
+ stats[data_names[len(pdata)]] = data[4][0][0][1][index][0][0]
+ player['stats'] = stats
+ player['graphs'] = {}
+ player['graphs']['income'] = getIncomeGraph(data, index)
+ player['graphs']['army'] = getArmyGraph(data, index)
+
+ return player
+def flip_int(num, b):
+ """
+ Flips the b first bytes in num
+ Example:
+ (0x12345, 3) -> 0x452301
+ (0x00112233, 4) -> 0x33221100
+ """
+ o = 0
+ for i in range(b/2):
+ o |= ((num & (0xff << i*8)) << (b-(2*i+1))*8)
+ o |= ((num & (0xff << (b-(i+1))*8)) >> (b-(2*i+1)) * 8)
+ if b % 2 == 1:
+ o |= (num & (0xff << (b/2)*8))
+ return o
+
+def toTime(bo_time):
+ return (bo_time >> 8) / 16
+def toUnit(bo_unit):
+ #print(hex(flip_int(bo_unit, 4)))
+ i = ((bo_unit & 0xff) << 8) | 0x01
+ if bo_unit >> 24 == 1:
+ return {'name':unitData.type(i).name, 'type':hex(i), 'id':hex(bo_unit)}
+ return None
+def toAbility(bo_ability):
+ #print(hex(flip_int(bo_unit, 4)))
+ i = ((bo_ability & 0xff) << 8) | 0x02
+ if bo_ability >> 24 == 2:
+ return {'name':abilities[i] if i in abilities else "Unknown ability ({})".format(hex(i)), 'type':hex(i), 'id':hex(bo_ability)}
+
+ return None
+def getBuildOrder(unit_structs, index):
+ ''' [ {supply, time, unit} ] '''
+ bo = []
+ for unit_struct in unit_structs:
+ for u in unit_struct:
+ # is unit
+ if u[0][1] >> 24 == 1:
+ unit = toUnit(u[0][1])
+ elif u[0][1] >> 24 == 2:
+ unit = toAbility(u[0][1])
+ if not unit:
+ print("Unknown code {}".format(u))
+ continue
+ for entry in u[1][index]:
+ bo.append({
+ 'supply' : entry[0],
+ 'total_supply' : entry[1]&0xff,
+ 'time' : toTime(entry[2]),
+ 'time_hex' : hex(entry[2]>>8),
+ 'order' : unit,
+ 'build_index' : entry[1] >> 16,
+ 'struct_as_hex' : {0:hex(entry[0]),
+ 1:hex(entry[1]),
+ 2:hex(entry[2]),
+ }
+ })
+ bo.sort(key=lambda x: x['build_index'])
+ return bo
+def getBuildOrderOthers(struct):
+ ret = list()
+ for x in struct:
+ if x[1][1] > 0xffff:
+ ret.append({
+ 'type':x[1][1],
+ 'type_hex':hex(x[1][1]),
+ 'player':x[2][0][1],
+ 'others':[x[2][0][2],
+ #x[2][2][1],
+ #x[2][2][2],
+ x[4]]
+ })
+ return ret
+
+def getBuildOrders(data):
+ unit_structs = [x[0] for x in data[5:]]
+ unit_structs.append(data[4][0][3:])
+ players = {}
+ for i in range(15):
+ bo = getBuildOrder(unit_structs, i)
+ if len(bo) > 0:
+ players[i] = bo
+ all = [u for p in players for u in players[p]]
+ all.sort(key=lambda x: x['build_index'])
+ return [players, all, getBuildOrderOthers(data[1][0])]
+
+def main():
+ arg = sys.argv[2] if len(sys.argv) >= 3 else "pprint"
+ with open(sys.argv[1],"rb") as s2gs:
+ raw_data = zlib.decompress(s2gs.read()[16:])
+ data = list()
+ buffer = ReplayBuffer(raw_data)
+ while buffer.left:
+ part = buffer.read_data_struct()
+ data.append(part)
+
+ if arg == "players":
+ pprint.PrettyPrinter(indent=2).pprint(getPlayers(data))
+ elif arg == "lobby":
+ pprint.PrettyPrinter(indent=2).pprint(getLobby(data))
+ elif arg == "pprint":
+ pprint.PrettyPrinter(indent=2).pprint(data)
+ elif arg == "bo":
+ pprint.PrettyPrinter(indent=2).pprint(getBuildOrders(data))
+ elif arg == "bo2":
+ bos = getBuildOrders(data)[0]
+ players = getPlayers(data)
+ for p in bos:
+ print("== {} - {} ==".format(players[p]['race'], players[p]['id']))
+ for u in bos[p]:
+ print("{:0>2}:{:0>2} {:<25} {:>2}/{}".format(u['time'] / 60,
+ u['time'] % 60,
+ u['order']['name'],
+ u['supply'],
+ u['total_supply']))
+main()
View
20 sc2reader/__init__.py
@@ -1,7 +1,7 @@
from __future__ import absolute_import
# import submodules
-from sc2reader import listeners, data, scripts
+from sc2reader import plugins, data, scripts
from sc2reader import factories, log_utils
@@ -14,18 +14,18 @@
# Expose a nice module level interface
__defaultSC2Reader = factories.SC2Factory()
-register_datapack = __defaultSC2Reader.register_datapack
-register_listener = __defaultSC2Reader.register_listener
-register_reader = __defaultSC2Reader.register_reader
-
-get_listeners = __defaultSC2Reader.get_listeners
-get_datapack = __defaultSC2Reader.get_datapack
-get_reader = __defaultSC2Reader.get_reader
-
load_replays = __defaultSC2Reader.load_replays
load_replay = __defaultSC2Reader.load_replay
load_maps = __defaultSC2Reader.load_maps
load_map = __defaultSC2Reader.load_map
+load_game_summaries = __defaultSC2Reader.load_game_summaries
+load_game_summary = __defaultSC2Reader.load_game_summary
+load_map_infos = __defaultSC2Reader.load_map_infos
+load_map_info = __defaultSC2Reader.load_map_info
+load_map_histories = __defaultSC2Reader.load_map_headers
+load_map_history = __defaultSC2Reader.load_map_header
configure = __defaultSC2Reader.configure
-reset = __defaultSC2Reader.reset
+reset = __defaultSC2Reader.reset
+
+register_plugin = __defaultSC2Reader.register_plugin
View
235 sc2reader/constants.py
@@ -22,8 +22,8 @@
'프로토스': 'Protoss',
'저그': 'Zerg',
- # ???
- 'Terrani': 'Terran',
+ # ??eu
+ 'Terranie': 'Terran',
'Protosi': 'Protoss',
'Zergi': 'Zerg',
@@ -55,10 +55,10 @@
#
RACE_CODES = {
- 'rreT': 'Terran',
- 'greZ': 'Zerg',
- 'torP': 'Protoss',
- 'DNAR': 'Random',
+ 'Terr': 'Terran',
+ 'Zerg': 'Zerg',
+ 'Prot': 'Protoss',
+ 'RAND': 'Random',
}
MESSAGE_CODES = {
'0': 'All',
@@ -67,35 +67,35 @@
'125': 'Ping',
}
TEAM_COLOR_CODES = {
- '10ct': "Red",
- '20ct': "Blue",
- '30ct': "Teal",
- '40ct': "Purple",
- '50ct': "Yellow",
- '60ct': "Orange",
- '70ct': "Green",
- '80ct': "Pink",
- '90ct': "??",
- '01ct': "??",
- '11ct': "??",
- '21ct': "??",
- '31ct': "??",
- '41ct': "??",
- '51ct': "??",
- '61ct': "??",
+ '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': "??",
}
DIFFICULTY_CODES = {
- 'yEyV': 'Very easy',
- 'ysaE': 'Easy',
- 'ideM': 'Medium',
- 'draH': 'Hard',
- 'dHyV': 'Very hard',
- 'asnI': 'Insane',
+ 'VyEy': 'Very easy',
+ 'Easy': 'Easy',
+ 'Medi': 'Medium',
+ 'Hard': 'Hard',
+ 'VyHd': 'Very hard',
+ 'Insa': 'Insane',
}
GAME_TYPE_CODES = {
- 'virP': 'Private',
- 'buP': 'Public',
- 'mmA': 'Ladder',
+ 'Priv': 'Private',
+ 'Pub': 'Public',
+ 'Amm': 'Ladder',
'': 'Single',
}
# (name, key for team ids)
@@ -106,14 +106,14 @@
'4v4': '4v4',
'5v5': '5v5',
'6v6': '6v6',
- 'AFF': 'FFA',
+ 'FFA': 'FFA',
}
GAME_SPEED_CODES = {
- 'rolS': 'Slower',
- 'wolS': 'Slow',
- 'mroN': 'Normal',
- 'tsaF': 'Fast',
- 'rsaF': 'Faster',
+ 'Slor': 'Slower',
+ 'Slow': 'Slow',
+ 'Norm': 'Normal',
+ 'Fast': 'Fast',
+ 'Fasr': 'Faster',
}
GAME_SPEED_FACTOR = {
@@ -125,10 +125,10 @@
}
PLAYER_TYPE_CODES = {
- 'nmuH': 'Human',
- 'pmoC': 'Computer',
- 'nepO': 'Open',
- 'dslC': 'Closed',
+ 'Humn': 'Human',
+ 'Comp': 'Computer',
+ 'Open': 'Open',
+ 'Clsd': 'Closed',
}
GATEWAY_CODES = {
'US': 'Americas',
@@ -155,6 +155,159 @@
'E55BB0': 'Pink'
}
+## Names of the different properties found in the s2gs files lobby part
+LOBBY_PROPERTY_NAMES = {
+ 1 : 'unknown1', #0001/0002
+ 2 : 'unknown2', #0001/0002
+ 500 : 'Slot type', #Clsd/Open/Humn/Comp
+ 1000 : 'unknown3', #Dflt
+ 1001 : 'Melee', #no/yes no->2000, yes->2001
+ 2000 : 'Custom mode', #t2/t3/t4/t5/FFA/Cust (tX = X teams)
+ 2001 : 'Melee mode', #1v1/2v2/3v3/4v4/5v5/6v6/FFA
+ 2002 : '1v1 Team', #T1/T2
+ 2003 : '2v2 Team', #T1/T2/T1/T2
+ 2004 : '3v3 Team', #T1/T2/T1/T2/T1/T2
+ 2005 : '4v4 Team', #T1/T2/T1/T2/T1/T2/T1/T2
+ 2006 : 'FFA Team', #T1/T2/T3/T4/T5/T6
+ 2007 : '5v5 Team', #T1/T2/T1/T2/T1/T2/T1/T2/T1/T2
+ 2008 : '6v6 Team', #T1/T2/T1/T2/T1/T2/T1/T2/T1/T2/T1/T2
+ 2011 : "'2 Teams' team", #(T1/T2)*6
+ 2012 : "'3 Teams' team", #(T1/T2/T3)*6
+ 2013 : "'4 Teams' team", #(T1/T2/T3/T4)*6
+ 2014 : "'5 Teams' team", #(T1/T2/T3/T4/T5)*6
+ 2017 : "FFA Team", #T1/T2/T3/T4/T5/T6
+ 2018 : "'Custom' team", #(T1/T2/T3/T4/T5/T6)*5
+ 3000 : 'Game speed', #Slor/Slow/Norm/Fast/Fasr
+ 3001 : 'Race', #Terr/Zerg/Prot/RAND
+ 3002 : 'Color', #tc01/tc02/tc03/tc04/.../tc15
+ 3003 : 'Handicap', #50/60/70/80/90/100
+ 3004 : 'Difficulty', #VyEy/Easy/Medi/Hard/VyHd/Insa
+ 3006 : 'Game countdown', #3/5/7/10/15/20/25/30 (countdown timer in lobby (seconds))
+ 3007 : 'Player mode', #Part/Watch (Participating/Watching) Watch->3008
+ 3008 : 'Spectate mode', #Obs/Ref
+ 3009 : 'Lobby type', #Priv/Pub/Amm
+ 3010 : 'unknown4', #no/yes (Never required)
+}
+
+BUILD_ORDER_UPGRADES = {
+ # Protoss
+
+ ## Forge
+ 0x2902 : 'Protoss Ground Weapons Level 1',
+ 0x2a02 : 'Protoss Ground Weapons Level 2',
+ 0x2b02 : 'Protoss Ground Weapons Level 3',
+ 0x2c02 : 'Protoss Ground Armor Level 1',
+ 0x2d02 : 'Protoss Ground Armor Level 2',
+ 0x2e02 : 'Protoss Ground Armor Level 3',
+ 0x2f02 : 'Protoss Shields Level 1',
+ 0x3002 : 'Protoss Shields Level 2',
+ 0x3102 : 'Protoss Shields Level 3',
+ ## Robo bay
+ 0x3202 : 'Gravitic Boosters',
+ 0x3302 : 'Gravitic Drive',
+ 0x3402 : 'Extended Thermal Lance',
+ ## Cyber core
+ 0x5002 : 'Protoss Air Weapons Level 1',
+ 0x5102 : 'Protoss Air Weapons Level 2',
+ 0x5202 : 'Protoss Air Weapons Level 3',
+ 0x5302 : 'Protoss Air Armor Level 1',
+ 0x5402 : 'Protoss Air Armor Level 2',
+ 0x5502 : 'Protoss Air Armor Level 3',
+ 0x5602 : 'Warp Gate Research',
+ 0x5702 : 'Hallucination',
+ ## Twilight
+ 0x5802 : 'Charge',
+ 0x5902 : 'Blink',
+ ## Fleet Beacon
+ 0x0302 : 'Graviton Catapult',
+ 0x7102 : 'Anion Pulse-Crystals',
+
+ #Zerg
+
+ ## Roach Warren
+ 0x0402 : 'Gial Reconstitution',
+ 0x0502 : 'Tunneling Claws',
+ ## Ultralisk Cavern
+ 0x0602 : 'Chitinous Plating',
+ ## Evo. chamber
+ 0x3702 : 'Zerg Melee Attacks Level 1',
+ 0x3802 : 'Zerg Melee Attacks Level 2',
+ 0x3902 : 'Zerg Melee Attacks Level 3',
+ 0x3a02 : 'Zerg Ground Carapace Level 1',
+ 0x3b02 : 'Zerg Ground Carapace Level 2',
+ 0x3c02 : 'Zerg Ground Carapace Level 3',
+ 0x3d02 : 'Zerg Missile Attacks Level 1',
+ 0x3e02 : 'Zerg Missile Attacks Level 2',
+ 0x3f02 : 'Zerg Missile Attacks Level 3',
+ ## Lair
+ 0x4002 : 'Pneumatized Carapace',
+ 0x4102 : 'Ventral Sacs',
+ 0x4202 : 'Burrow',
+ ## Pool
+ 0x4302 : 'Adrenal Glands',
+ 0x4402 : 'Metabolic Boost',
+ ## Hydra den
+ 0x4502 : 'Grooved Spines',
+ ## Spire
+ 0x4602 : 'Zerg Flyer Attacks Level 1',
+ 0x4702 : 'Zerg Flyer Attacks Level 2',
+ 0x4802 : 'Zerg Flyer Attacks Level 3',
+ 0x4902 : 'Zerg Flyer Carapace Level 1',
+ 0x4a02 : 'Zerg Flyer Carapace Level 2',
+ 0x4b02 : 'Zerg Flyer Carapace Level 3',
+ ## Infestation pit
+ 0x4c02 : 'Pathogen Glands',
+ 0x7202 : 'Neural Parasite',
+ ## Baneling Nest
+ 0x4d02 : 'Centrifugal Hooks',
+
+ #Terran
+ ## Engineering bay
+ 0x702 : 'Hi-Sec Auto Tracking',
+ 0x802 : 'Terran Building Armor',
+ 0x902 : 'Terran Infantry Weapons Level 1',
+ 0xa02 : 'Terran Infantry Weapons Level 2',
+ 0xb02 : 'Terran Infantry Weapons Level 3',
+ 0xc02 : 'Neosteel Frame',
+ 0xd02 : 'Terran Infantry Armor Level 1',
+ 0xe02 : 'Terran Infantry Armor Level 2',
+ 0xf02 : 'Terran Infantry Armor Level 3',
+ ## Barracks tech lab
+ 0x1002 : 'Nitro Packs',
+ 0x1102 : 'Stimpack',
+ 0x1202 : 'Combat Shields',
+ 0x1302 : 'Concussive Shells',
+ ## Factory tech lab
+ 0x1402 : 'Siege Tech',
+ 0x1502 : 'Infernal Pre-igniter',
+ 0x7002 : '250mm Strike Cannons',
+ ## Starport tech lab
+ 0x1602 : 'Cloaking Field',
+ 0x1702 : 'Caduceus Reactor',
+ 0x1902 : 'Seeker Missile',
+ 0x1a02 : 'Durable Materials',
+ 0x4e02 : 'Corvid Reactor',
+ ## Fusion Core
+ 0x1802 : 'Behemoth Reactor',
+ 0x4f02 : 'Weapon Refit',
+ ## Ghost Academy
+ 0x1b02 : 'Personal Cloaking',
+ 0x1c02 : 'Moebiue Reactor',
+ ## Armory
+ 0x1d02 : 'Terran Vehicle Plating Level 1',
+ 0x1e02 : 'Terran Vehicle Plating Level 2',
+ 0x1f02 : 'Terran Vehicle Plating Level 3',
+ 0x2002 : 'Terran Vehicle Weapons Level 1',
+ 0x2102 : 'Terran Vehicle Weapons Level 2',
+ 0x2202 : 'Terran Vehicle Weapons Level 3',
+ 0x2302 : 'Terran Ship Plating Level 1',
+ 0x2402 : 'Terran Ship Plating Level 2',
+ 0x2502 : 'Terran Ship Plating Level 3',
+ 0x2602 : 'Terran Ship Weapons Level 1',
+ 0x2702 : 'Terran Ship Weapons Level 2',
+ 0x2802 : 'Terran Ship Weapons Level 3'
+ }
+
# TODO: Not sure if this is a complete mapping
#
# Assuming only 1 Public Test Realm subregion on the following basis:
View
259 sc2reader/data/16939_abilities.csv
@@ -0,0 +1,259 @@
+16939|0|||||||||||||||||||||||||||||||||
+16939|1|CAbilEffect||||||||||||||||||||||||||||||||
+16939|2|CAbilQueueable||||||||||||||||||||||||||||||||
+16939|3|CAbilProgress||||||||||||||||||||||||||||||||
+16939|4|CAbilRedirect||||||||||||||||||||||||||||||||
+16939|5|CAbilArmMagazine||||||||||||||||||||||||||||||||
+16939|6|CAbilAttack||||||||||||||||||||||||||||||||
+16939|7|CAbilAugment||||||||||||||||||||||||||||||||
+16939|8|CAbilBattery||||||||||||||||||||||||||||||||
+16939|9|CAbilBeacon||||||||||||||||||||||||||||||||
+16939|10|CAbilBehavior||||||||||||||||||||||||||||||||
+16939|11|CAbilBuild||||||||||||||||||||||||||||||||
+16939|12|CAbilBuildable||||||||||||||||||||||||||||||||
+16939|13|CAbilEffectInstant||||||||||||||||||||||||||||||||
+16939|14|CAbilEffectTarget||||||||||||||||||||||||||||||||
+16939|15|CAbilHarvest||||||||||||||||||||||||||||||||
+16939|16|CAbilInteract||||||||||||||||||||||||||||||||
+16939|17|CAbilInventory||||||||||||||||||||||||||||||||
+16939|18|CAbilLearn||||||||||||||||||||||||||||||||
+16939|19|CAbilMerge||||||||||||||||||||||||||||||||
+16939|20|CAbilMergeable||||||||||||||||||||||||||||||||
+16939|21|CAbilMorph||||||||||||||||||||||||||||||||
+16939|22|CAbilMorphPlacement||||||||||||||||||||||||||||||||
+16939|23|CAbilMove||||||||||||||||||||||||||||||||
+16939|24|CAbilPawn||||||||||||||||||||||||||||||||
+16939|25|CAbilQueue||||||||||||||||||||||||||||||||
+16939|26|CAbilRally||||||||||||||||||||||||||||||||
+16939|27|CAbilResearch||||||||||||||||||||||||||||||||
+16939|28|CAbilRevive||||||||||||||||||||||||||||||||
+16939|29|CAbilSpecialize||||||||||||||||||||||||||||||||
+16939|30|CAbilStop||||||||||||||||||||||||||||||||
+16939|31|CAbilTrain||||||||||||||||||||||||||||||||
+16939|32|CAbilTransport||||||||||||||||||||||||||||||||
+16939|33|CAbilWarpable||||||||||||||||||||||||||||||||
+16939|34|CAbilWarpTrain||||||||||||||||||||||||||||||||
+16939|35|Taunt|Taunt|Cancel||||||||||||||||||||||||||||||
+16939|36|stop|Stop|HoldFire|Taunt|Taunt||||||||||||||||||||||||||||
+16939|37|HoldFire|Stop|HoldFire|Taunt|Taunt||||||||||||||||||||||||||||
+16939|38|move|Move|Patrol|HoldPosition|Move|Move|||||||||||||||||||||||||||
+16939|39|Beacon||||||||||||||||||||||||||||||||
+16939|41|attack|Attack|||||||||||||||||||||||||||||||
+16939|42|TerranAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding|
+16939|43|TerranBuildingLiftOff||||||||||||||||||||||||||||||||
+16939|44|TerranBuildingLand||||||||||||||||||||||||||||||||
+16939|45|Refund||||||||||||||||||||||||||||||||
+16939|46|Salvage||||||||||||||||||||||||||||||||
+16939|47|DisguiseChangeling||||||||||||||||||||||||||||||||
+16939|48|Corruption|CorruptorCorruption|||||||||||||||||||||||||||||||
+16939|49|GhostHoldFire|GhostHoldFire|||||||||||||||||||||||||||||||
+16939|50|GhostWeaponsFree|GhostWeaponsFree|||||||||||||||||||||||||||||||
+16939|51|MorphToInfestedTerran||||||||||||||||||||||||||||||||
+16939|52|Explode|BanelingExplode|||||||||||||||||||||||||||||||
+16939|53|FleetBeaconResearch|ResearchFluxVanes|ResearchCarrierWeaponSpeed|ResearchPhoenixRange||||||||||||||||||||||||||||CancelResearch|
+16939|54|FungalGrowth|InfestorFungalGrowth|||||||||||||||||||||||||||||||
+16939|55|GuardianShield|SentryGuardianShield|||||||||||||||||||||||||||||||
+16939|56|MULERepair|MULERepair|CancelChannel||||||||||||||||||||||||||||||
+16939|57|MorphZerglingToBaneling|MorphToBaneling|CancelMorph||||||||||||||||||||||||||||||
+16939|58|NexusTrainMothership|TrainMothership||||||||||||||||||||||||||||||CancelTrain|
+16939|59|Feedback|HighTemplarFeedback|||||||||||||||||||||||||||||||
+16939|60|MassRecall|MothershipMassRecall|||||||||||||||||||||||||||||||
+16939|61|PlacePointDefenseDrone|RavenBuildPointDefenseDrone|||||||||||||||||||||||||||||||
+16939|62|HallucinationArchon|SentryHallucinationArchon|||||||||||||||||||||||||||||||
+16939|63|HallucinationColossus|SentryHallucinationColossus|||||||||||||||||||||||||||||||
+16939|64|HallucinationHighTemplar|SentryHallucinationHighTemplar|||||||||||||||||||||||||||||||
+16939|65|HallucinationImmortal|SentryHallucinationImmortal|||||||||||||||||||||||||||||||
+16939|66|HallucinationPhoenix|SentryHallucinationPhoenix|||||||||||||||||||||||||||||||
+16939|67|HallucinationProbe|SentryHallucinationProbe|||||||||||||||||||||||||||||||
+16939|68|HallucinationStalker|SentryHallucinationStalker|||||||||||||||||||||||||||||||
+16939|69|HallucinationVoidRay|SentryHallucinationVoidRay|||||||||||||||||||||||||||||||
+16939|70|HallucinationWarpPrism|SentryHallucinationWarpPrism|||||||||||||||||||||||||||||||
+16939|71|HallucinationZealot|SentryHallucinationZealot|||||||||||||||||||||||||||||||
+16939|72|MULEGather|Gather|ReturnCargo|Cancel|||||||||||||||||||||||||||||
+16939|73|SeekerMissile|RavenSeekerMissile|||||||||||||||||||||||||||||||
+16939|74|CalldownMULE|CalldownMULE|||||||||||||||||||||||||||||||
+16939|75|GravitonBeam|PhoenixGravitonBeam|CancelChannel||||||||||||||||||||||||||||||
+16939|76|BuildinProgressNydusCanal|CancelBuilding|CancelBuilding||||||||||||||||||||||||||||||
+16939|77|Siphon||||||||||||||||||||||||||||||||
+16939|78|Leech||||||||||||||||||||||||||||||||
+16939|79|SpawnChangeling|OverseerSpawnChangeling|||||||||||||||||||||||||||||||
+16939|80|DisguiseAsZealot||||||||||||||||||||||||||||||||
+16939|81|DisguiseAsMarineWithShield||||||||||||||||||||||||||||||||
+16939|82|DisguiseAsMarineWithoutShield||||||||||||||||||||||||||||||||
+16939|83|DisguiseAsZerglingWithWings||||||||||||||||||||||||||||||||
+16939|84|DisguiseAsZerglingWithoutWings||||||||||||||||||||||||||||||||
+16939|85|PhaseShift||||||||||||||||||||||||||||||||
+16939|86|Rally|SetUnitRally|||||||||||||||||||||||||||||||
+16939|87|ProgressRally|SetUnitRally|||||||||||||||||||||||||||||||
+16939|88|RallyCommand|SetWorkerRally|||||||||||||||||||||||||||||||
+16939|89|RallyNexus|SetUnitRally|||||||||||||||||||||||||||||||
+16939|90|RallyHatchery|SetUnitRally|SetWorkerRally||||||||||||||||||||||||||||||
+16939|91|RoachWarrenResearch|Unknown|ResearchRoachSpeed|ResearchRoachTunnelingClaws|||||||||||||||||||||||||||||
+16939|92|SapStructure||||||||||||||||||||||||||||||||
+16939|93|InfestedTerrans|InfestorSpawnInfestedTerran|||||||||||||||||||||||||||||||
+16939|94|NeuralParasite|InfestorNeuralParasite|||||||||||||||||||||||||||||||
+16939|95|SpawnLarva|QueenSpawnLarva|||||||||||||||||||||||||||||||
+16939|96|StimpackMarauder|UseStimpack|||||||||||||||||||||||||||||||
+16939|97|SupplyDrop|CalldownSupply|||||||||||||||||||||||||||||||
+16939|98|250mmStrikeCannons|ThorStrikeCannons|||||||||||||||||||||||||||||||
+16939|99|TemporalRift||||||||||||||||||||||||||||||||
+16939|100|TimeWarp|NexusChronoBoost|||||||||||||||||||||||||||||||
+16939|101|UltraliskCavernResearch|Unknown|Unknown|ResearchUltraliskArmor|||||||||||||||||||||||||||||
+16939|102|WormholeTransit||||||||||||||||||||||||||||||||
+16939|103|SCVHarvest|Gather|ReturnCargo|Cancel|||||||||||||||||||||||||||||
+16939|104|ProbeHarvest|Gather|ReturnCargo|Cancel|||||||||||||||||||||||||||||
+16939|105|AttackWarpPrism|Attack|||||||||||||||||||||||||||||||
+16939|106|que1|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+16939|107|que5|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+16939|108|que5LongBlend|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+16939|109|que5Passive|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+16939|110|BuildInProgress|CancelBuilding|CancelBuilding||||||||||||||||||||||||||||||
+16939|111|Repair|SCVRepair|||||||||||||||||||||||||||||||
+16939|112|TerranBuild|BuildCommandCenter|BuildSupplyDepot|BuildRefinery|BuildBarracks|BuildEngineeringBay|BuildMissileTurret|BuildBunker||BuildSensorTower|BuildGhostAcademy|BuildFactory|BuildStarport||BuildArmory||BuildFusionCore|||||||||||||||CancelBuilding|
+16939|113|RavenBuild|RavenBuildAutoTurret||||||||||||||||||||||||||||||CancelBuilding|
+16939|114|Stimpack|UseStimpack|||||||||||||||||||||||||||||||
+16939|115|GhostCloak|GhostCloak|GhostDecloak||||||||||||||||||||||||||||||
+16939|116|Snipe|GhostSnipe|||||||||||||||||||||||||||||||
+16939|117|MedivacHeal|MedivacHeal|||||||||||||||||||||||||||||||
+16939|118|SiegeMode|SiegeTankSiege|||||||||||||||||||||||||||||||
+16939|119|Unsiege|SiegeTankUnsiege|||||||||||||||||||||||||||||||
+16939|120|BansheeCloak|BansheeCloak|BansheeDecloak||||||||||||||||||||||||||||||
+16939|121|MedivacTransport|MedivacLoad|MedivacUnloadAll|MedivacUnloadAll|MedivacUnload|MedivacLoad|||||||||||||||||||||||||||
+16939|122|ScannerSweep|CalldownScannerSweep|||||||||||||||||||||||||||||||
+16939|123|Yamato|BattlecruiserYamato|||||||||||||||||||||||||||||||
+16939|124|AssaultMode|VikingLand|||||||||||||||||||||||||||||||
+16939|125|FighterMode|VikingLift|||||||||||||||||||||||||||||||
+16939|126|BunkerTransport|BunkerLoad|BunkerUnloadAll|BunkerUnload|BunkerUnload|BunkerLoad|||||||||||||||||||||||||||
+16939|127|CommandCenterTransport|CommandCenterLoad|CommandCenterUnloadAll|CommandCenterUnload|CommandCenterUnload|CommandCenterLoad|||||||||||||||||||||||||||
+16939|128|CommandCenterLiftOff|LiftCommandCenter|||||||||||||||||||||||||||||||
+16939|129|CommandCenterLand|LandCommandCenter|||||||||||||||||||||||||||||||
+16939|130|BarracksAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding|
+16939|131|BarracksLiftOff|LiftBarracks|||||||||||||||||||||||||||||||
+16939|132|FactoryAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding|
+16939|133|FactoryLiftOff|LiftFactory|||||||||||||||||||||||||||||||
+16939|134|StarportAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding|
+16939|135|StarportLiftOff|LiftStarport|||||||||||||||||||||||||||||||
+16939|136|FactoryLand|LandFactory|||||||||||||||||||||||||||||||
+16939|137|StarportLand|LandStarport|||||||||||||||||||||||||||||||
+16939|138|CommandCenterTrain|TrainSCV||||||||||||||||||||||||||||||CancelTrain|
+16939|139|BarracksLand|LandBarracks|||||||||||||||||||||||||||||||
+16939|140|SupplyDepotLower|SupplyDepotLower|||||||||||||||||||||||||||||||
+16939|141|SupplyDepotRaise|SupplyDepotRaise|||||||||||||||||||||||||||||||
+16939|142|BarracksTrain|TrainMarine|TrainReaper|TrainGhost|TrainMarauder|||||||||||||||||||||||||||CancelTrain|
+16939|143|FactoryTrain|Unknown|TrainSiegeTank|||TrainThor|TrainHellion|||||||||||||||||||||||||CancelTrain|
+16939|144|StarportTrain|TrainMedivac|TrainBanshee|TrainRaven|TrainBattlecruiser|TrainViking||||||||||||||||||||||||||CancelTrain|
+16939|145|EngineeringBayResearch|ResearchHiSecAutoTracking|ResearchTerranBuildingArmor|ResearchTerranInfantryWeapons1|ResearchTerranInfantryWeapons2|ResearchTerranInfantryWeapons3|ResearchNeosteelFrame|ResearchTerranInfantryArmors1|ResearchTerranInfantryArmors2|ResearchTerranInfantryArmors3||||||||||||||||||||||CancelResearch|
+16939|146|MercCompoundResearch||||||||||||||||||||||||||||||||
+16939|147|ArmSiloWithNuke|ArmNuke|||||||||||||||||||||||||||||||
+16939|148|BarracksTechLabResearch|ResearchStimpack|ResearchCombatShields|ResearchPunisherGrenades||||||||||||||||||||||||||||CancelResearch|
+16939|149|FactoryTechLabResearch|ResearchSiegeTech|ResearchBlueFlame|ResearchStrikeCannons||||||||||||||||||||||||||||CancelResearch|
+16939|150|StarportTechLabResearch|ResearchBansheeCloak||ResearchMedivacEnergy|ResearchRavenEnergy|||ResearchSeekerMissile|ResearchDurableMaterials|||||||||||||||||||||||CancelResearch|
+16939|151|GhostAcademyResearch|ResearchGhostCloak|ResearchGhostEnergy|||||||||||||||||||||||||||||CancelResearch|
+16939|152|ArmoryResearch|||ResearchTerranVehicleArmors1|ResearchTerranVehicleArmors2|ResearchTerranVehicleArmors3|ResearchTerranVehicleWeapons1|ResearchTerranVehicleWeapons2|ResearchTerranVehicleWeapons3|ResearchTerranShipArmors1|ResearchTerranShipArmors2|ResearchTerranShipArmors3|ResearchTerranShipWeapons1|ResearchTerranShipWeapons2|ResearchTerranShipWeapons3|||||||||||||||||CancelResearch|
+16939|153|ProtossBuild|BuildNexus|BuildPylon|BuildAssimilator|BuildGateway|BuildForge|BuildFleetBeacon|BuildTwilightCouncil|BuildPhotonCannon||BuildStargate|BuildTemplarArchive|BuildDarkShrine|BuildRoboticsBay|BuildRoboticsFacility|BuildCyberneticsCore||||||||||||||||CancelBuilding|
+16939|154|WarpPrismTransport|WarpPrismLoad|WarpPrismUnloadAll|WarpPrismUnloadAll|WarpPrismUnload|WarpPrismLoad|||||||||||||||||||||||||||
+16939|155|GatewayTrain|TrainZealot|TrainStalker||TrainHighTemplar|TrainDarkTemplar|TrainSentry|||||||||||||||||||||||||CancelTrain|
+16939|156|StargateTrain|TrainPhoenix||TrainCarrier||TrainVoidRay||||||||||||||||||||||||||CancelTrain|
+16939|157|RoboticsFacilityTrain|TrainWarpPrism|TrainObserver|TrainColossus|TrainImmortal|||||||||||||||||||||||||||CancelTrain|
+16939|158|NexusTrain|TrainProbe||||||||||||||||||||||||||||||CancelTrain|
+16939|159|PsiStorm|HighTemplarPsiStorm|||||||||||||||||||||||||||||||
+16939|160|HangarQueue5|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+16939|161|BroodLordQueue2|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+16939|162|CarrierHangar|ArmInterceptor|||||||||||||||||||||||||||||||
+16939|163|ForgeResearch|ResearchProtossGroundWeapons1|ResearchProtossGroundWeapons2|ResearchProtossGroundWeapons3|ResearchProtossGroundArmors1|ResearchProtossGroundArmors2|ResearchProtossGroundArmors3|ResearchProtossShields1|ResearchProtossShields2|ResearchProtossShields3||||||||||||||||||||||CancelResearch|
+16939|164|RoboticsBayResearch||ResearchObserverSpeed|ResearchWarpPrismSpeed|||ResearchExtendedThermalLance|||||||||||||||||||||||||CancelResearch|
+16939|165|TemplarArchivesResearch||||ResearchKhaydarinAmulet|ResearchPsiStorm||||||||||||||||||||||||||CancelResearch|
+16939|166|ZergBuild|BuildHatchery||BuildExtractor|BuildSpawningPool|BuildEvolutionChamber|BuildHydraliskDen|BuildSpire|BuildUltraliskCavern|BuildInfestationPit|BuildNydusNetwork|BuildBanelingNest|||BuildRoachWarren|BuildSpineCrawler|BuildSporeCrawler|||||||||||||||CancelBuilding|
+16939|167|DroneHarvest|Gather|ReturnCargo|Cancel|||||||||||||||||||||||||||||
+16939|168|evolutionchamberresearch|ResearchZergMeleeWeapons1|ResearchZergMeleeWeapons2|ResearchZergMeleeWeapons3|ResearchZergGroundArmors1|ResearchZergGroundArmors2|ResearchZergGroundArmors3|ResearchZergMissileWeapons1|ResearchZergMissileWeapons2|ResearchZergMissileWeapons3||||||||||||||||||||||CancelResearch|
+16939|169|UpgradeToLair|MorphToLair|CancelMorph||||||||||||||||||||||||||||||
+16939|170|UpgradeToHive|MorphToHive|CancelMorph||||||||||||||||||||||||||||||
+16939|171|UpgradeToGreaterSpire|MorphToGreaterSpire|CancelMorph||||||||||||||||||||||||||||||
+16939|172|LairResearch||ResearchOverlordSpeed|ResearchVentralSacs|ResearchBurrow|||||||||||||||||||||||||||CancelResearch|
+16939|173|SpawningPoolResearch|ResearchZerglingAttackSpeed|ResearchZerglingMovementSpeed|||||||||||||||||||||||||||||CancelResearch|
+16939|174|HydraliskDenResearch|||ResearchHydraliskSpeed||||||||||||||||||||||||||||CancelResearch|
+16939|175|SpireResearch|ResearchZergFlyerWeapons1|ResearchZergFlyerWeapons2|ResearchZergFlyerWeapons3|ResearchZergFlyerArmors1|ResearchZergFlyerArmors2|ResearchZergFlyerArmors3|||||||||||||||||||||||||CancelResearch|
+16939|176|LarvaTrain|TrainDrone|TrainZergling|TrainOverlord|TrainHydralisk|TrainMutalisk||TrainUltralisk|||TrainRoach|TrainInfestor|TrainCorruptor|||||||||||||||||||CancelTrain|
+16939|177|MorphToBroodLord|MorphToBroodLord|CancelMorph||||||||||||||||||||||||||||||
+16939|178|BurrowBanelingDown|BurrowBaneling|||||||||||||||||||||||||||||||
+16939|179|BurrowBanelingUp|UnburrowBaneling|||||||||||||||||||||||||||||||
+16939|180|BurrowDroneDown|BurrowDrone|||||||||||||||||||||||||||||||
+16939|181|BurrowDroneUp|UnburrowDrone|||||||||||||||||||||||||||||||
+16939|182|BurrowHydraliskDown|BurrowHydralisk|||||||||||||||||||||||||||||||
+16939|183|BurrowHydraliskUp|UnburrowHydralisk|||||||||||||||||||||||||||||||
+16939|184|BurrowRoachDown|BurrowRoach|||||||||||||||||||||||||||||||
+16939|185|BurrowRoachUp|UnburrowRoach|||||||||||||||||||||||||||||||
+16939|186|BurrowZerglingDown|BurrowZergling|||||||||||||||||||||||||||||||
+16939|187|BurrowZerglingUp|UnburrowZergling|||||||||||||||||||||||||||||||
+16939|188|BurrowInfestorTerranDown|BurrowInfestedTerran|||||||||||||||||||||||||||||||
+16939|189|BurrowInfestorTerranUp|UnburrowInfestedTerran|||||||||||||||||||||||||||||||
+16939|190|RedstoneLavaCritterBurrow||||||||||||||||||||||||||||||||
+16939|191|RedstoneLavaCritterInjuredBurrow||||||||||||||||||||||||||||||||
+16939|192|RedstoneLavaCritterUnburrow||||||||||||||||||||||||||||||||
+16939|193|RedstoneLavaCritterInjuredUnburrow||||||||||||||||||||||||||||||||
+16939|194|OverlordTransport|OverlordLoad|OverlordUnloadAll|OverlordUnloadAll|OverlordUnload|OverlordLoad|||||||||||||||||||||||||||
+16939|195|Mergeable|Cancel|||||||||||||||||||||||||||||||
+16939|196|Warpable|CancelWarpIn|||||||||||||||||||||||||||||||
+16939|197|WarpGateTrain|WarpInZealot|WarpInStalker||WarpInHighTemplar|WarpInDarkTemplar|WarpInSentry|||||||||||||||||||||||||CancelWarpIn|
+16939|198|BurrowQueenDown|BurrowQueen|||||||||||||||||||||||||||||||
+16939|199|BurrowQueenUp|UnburrowQueen|||||||||||||||||||||||||||||||
+16939|200|NydusCanalTransport|NydusLoad|NydusUnloadAll|NydusUnloadAll|NydusUnload|NydusLoad|||||||||||||||||||||||||||
+16939|201|Blink|StalkerBlink|||||||||||||||||||||||||||||||
+16939|202|BurrowInfestorDown|BurrowInfestor|||||||||||||||||||||||||||||||
+16939|203|BurrowInfestorUp|UnburrowInfestor|||||||||||||||||||||||||||||||
+16939|204|MorphToOverseer|MorphToOverseer|CancelMorph||||||||||||||||||||||||||||||
+16939|205|UpgradeToPlanetaryFortress|MorphToPlanetaryFortress|CancelMorph||||||||||||||||||||||||||||||
+16939|206|InfestationPitResearch|||ResearchInfestorEnergy|ResearchNeuralParasite|||||||||||||||||||||||||||CancelResearch|
+16939|207|BanelingNestResearch|ResearchBanelingSpeed||||||||||||||||||||||||||||||CancelResearch|
+16939|208|BurrowUltraliskDown|BurrowUltralisk|||||||||||||||||||||||||||||||
+16939|209|BurrowUltraliskUp|UnburrowUltralisk|||||||||||||||||||||||||||||||
+16939|210|UpgradeToOrbital|MorphToOrbitalCommand|CancelMorph||||||||||||||||||||||||||||||
+16939|211|UpgradeToWarpGate|MorphToWarpGate|CancelMorph||||||||||||||||||||||||||||||
+16939|212|MorphBackToGateway|MorphToGateway|CancelMorph||||||||||||||||||||||||||||||
+16939|213|OrbitalLiftOff|LiftOrbitalCommand|||||||||||||||||||||||||||||||
+16939|214|OrbitalCommandLand|LandOrbitalCommand|||||||||||||||||||||||||||||||
+16939|215|ForceField|SentryForceField|||||||||||||||||||||||||||||||
+16939|216|PhasingMode|WarpPrismPhasing|||||||||||||||||||||||||||||||
+16939|217|TransportMode|WarpPrismTransport|||||||||||||||||||||||||||||||
+16939|218|FusionCoreResearch|ResearchYamatoCannon|ResearchBattlecruiserEnergy|||||||||||||||||||||||||||||CancelResearch|
+16939|219|CyberneticsCoreResearch|ResearchProtossAirWeapons1|ResearchProtossAirWeapons2|ResearchProtossAirWeapons3|ResearchProtossAirArmors1|ResearchProtossAirArmors2|ResearchProtossAirArmors3|ResearchWarpGate|||ResearchHallucination|||||||||||||||||||||CancelResearch|
+16939|220|TwilightCouncilResearch|ResearchCharge|ResearchBlink|||||||||||||||||||||||||||||CancelResearch|
+16939|221|TacNukeStrike|GhostNuke|||||||||||||||||||||||||||||||
+16939|222|SalvageBunkerRefund||||||||||||||||||||||||||||||||
+16939|223|SalvageBunker|BunkerSalvage|||||||||||||||||||||||||||||||
+16939|224|EMP|GhostEMP|||||||||||||||||||||||||||||||
+16939|225|Vortex|MothershipVortex|||||||||||||||||||||||||||||||
+16939|226|TrainQueen|TrainQueen||||||||||||||||||||||||||||||CancelTrain|
+16939|227|BurrowCreepTumorDown|CancelMorph|||||||||||||||||||||||||||||||
+16939|228|Transfusion|QueenTransfusion|||||||||||||||||||||||||||||||
+16939|229|TechLabMorph||||||||||||||||||||||||||||||||
+16939|230|BarracksTechLabMorph||||||||||||||||||||||||||||||||
+16939|231|FactoryTechLabMorph||||||||||||||||||||||||||||||||
+16939|232|StarportTechLabMorph||||||||||||||||||||||||||||||||
+16939|233|ReactorMorph||||||||||||||||||||||||||||||||
+16939|234|BarracksReactorMorph||||||||||||||||||||||||||||||||
+16939|235|FactoryReactorMorph||||||||||||||||||||||||||||||||
+16939|236|StarportReactorMorph||||||||||||||||||||||||||||||||
+16939|237|AttackRedirect||||||||||||||||||||||||||||||||
+16939|238|StimpackRedirect||||||||||||||||||||||||||||||||
+16939|239|StimpackMarauderRedirect||||||||||||||||||||||||||||||||
+16939|240|burrowedStop|Stop|HoldFire|Taunt|Taunt||||||||||||||||||||||||||||
+16939|241|StopRedirect||||||||||||||||||||||||||||||||
+16939|242|GenerateCreep|OverlordGenerateCreep|OverlordStopGenerateCreep||||||||||||||||||||||||||||||
+16939|243|QueenBuild|QueenBuildCreepTumor||||||||||||||||||||||||||||||CancelBuilding|
+16939|244|SpineCrawlerUproot|UprootSpineCrawler|||||||||||||||||||||||||||||||
+16939|245|SporeCrawlerUproot|UprootSporeCrawler|||||||||||||||||||||||||||||||
+16939|246|SpineCrawlerRoot|RootSpineCrawler|||||||||||||||||||||||||||||||
+16939|247|SporeCrawlerRoot|RootSporeCrawler|||||||||||||||||||||||||||||||
+16939|248|CreepTumorBuild|CreepTumorBuildCreepTumor||||||||||||||||||||||||||||||CancelBuilding|
+16939|249|BuildAutoTurret|RavenBuildAutoTurret|CancelBuilding||||||||||||||||||||||||||||||
+16939|250|ArchonWarp|MergeArchon|MergeArchon||||||||||||||||||||||||||||||
+16939|251|BuildNydusCanal|BuildNydusCanal||||||||||||||||||||||||||||||CancelBuilding|
+16939|252|BroodLordHangar|ArmBroodling|||||||||||||||||||||||||||||||
+16939|253|Charge|ZealotCharge|||||||||||||||||||||||||||||||
+16939|254|TowerCapture||||||||||||||||||||||||||||||||
+16939|255|HerdInteract||||||||||||||||||||||||||||||||
+16939|256|Frenzy||||||||||||||||||||||||||||||||
+16939|257|Contaminate|OverseerContaminate|||||||||||||||||||||||||||||||
+16939|258|Shatter||||||||||||||||||||||||||||||||
+16939|259|InfestedTerransLayEgg|InfestorSpawnInfestedTerran|||||||||||||||||||||||||||||||
View
350 sc2reader/data/16939_units.csv
@@ -0,0 +1,350 @@
+16939|4|BeaconRally|
+16939|5|BeaconAttack|
+16939|6|BeaconDefend|
+16939|7|BeaconDetect|
+16939|8|BeaconExpand|
+16939|9|BeaconHarass|
+16939|10|BeaconScout|
+16939|12||
+16939|13|DESTRUCTIBLE|
+16939|14|ITEM|
+16939|15|POWERUP|
+16939|16|SMCAMERA|
+16939|17|SMCHARACTER|
+16939|18|STARMAP|
+16939|19|SMSET|
+16939|20|MISSILE|
+16939|21|MISSILE_INVULNERABLE|
+16939|22|MISSILE_HALFLIFE|
+16939|23|PLACEHOLDER|
+16939|24|PLACEHOLDER_AIR|
+16939|25|PATHINGBLOCKER|
+16939|26|BEACON|
+16939|27|Ball|
+16939|28|StereoscopicOptionsUnit|
+16939|29|Colossus|Colossus
+16939|30|TechLab|TechLab
+16939|31|Reactor|Reactor
+16939|33|InfestorTerran|InfestorTerran
+16939|34|BanelingCocoon|BanelingCocoon
+16939|35|Baneling|Baneling
+16939|36|Mothership|Mothership
+16939|37|PointDefenseDrone|PointDefenseDrone
+16939|38|Changeling|Changeling
+16939|39|ChangelingZealot|ChangelingZealot
+16939|40|ChangelingMarineShield|ChangelingMarine
+16939|41|ChangelingMarine|ChangelingMarine
+16939|42|ChangelingZerglingWings|ChangelingZergling
+16939|43|ChangelingZergling|ChangelingZergling
+16939|45|CommandCenter|CommandCenter
+16939|46|SupplyDepot|SupplyDepot
+16939|47|Refinery|Refinery
+16939|48|Barracks|Barracks
+16939|49|EngineeringBay|EngineeringBay
+16939|50|MissileTurret|MissileTurret
+16939|51|Bunker|Bunker
+16939|52|SensorTower|SensorTower
+16939|53|GhostAcademy|GhostAcademy
+16939|54|Factory|Factory
+16939|55|Starport|Starport
+16939|57|Armory|Armory
+16939|58|FusionCore|FusionCore
+16939|59|AutoTurret|AutoTurret
+16939|60|SiegeTankSieged|SiegeTankSieged
+16939|61|SiegeTank|SiegeTank
+16939|62|VikingAssault|VikingAssault
+16939|63|VikingFighter|VikingFighter
+16939|64|CommandCenterFlying|CommandCenterFlying
+16939|65|BarracksTechLab|BarracksTechLab
+16939|66|BarracksReactor|BarracksReactor
+16939|67|FactoryTechLab|FactoryTechLab
+16939|68|FactoryReactor|FactoryReactor
+16939|69|StarportTechLab|StarportTechLab
+16939|70|StarportReactor|StarportReactor
+16939|71|FactoryFlying|FactoryFlying
+16939|72|StarportFlying|StarportFlying
+16939|73|SCV|SCV
+16939|74|BarracksFlying|BarracksFlying
+16939|75|SupplyDepotLowered|SupplyDepotLowered
+16939|76|Marine|Marine
+16939|77|Reaper|Reaper
+16939|78|Ghost|Ghost
+16939|79|Marauder|Marauder
+16939|80|Thor|Thor
+16939|81|Hellion|Hellion
+16939|82|Medivac|Medivac
+16939|83|Banshee|Banshee
+16939|84|Raven|Raven
+16939|85|Battlecruiser|Battlecruiser
+16939|86|Nuke|
+16939|87|Nexus|Nexus
+16939|88|Pylon|Pylon
+16939|89|Assimilator|Assimilator
+16939|90|Gateway|Gateway
+16939|91|Forge|Forge
+16939|92|FleetBeacon|FleetBeacon
+16939|93|TwilightCouncil|TwilightCouncil
+16939|94|PhotonCannon|PhotonCannon
+16939|95|Stargate|Stargate
+16939|96|TemplarArchive|TemplarArchive
+16939|97|DarkShrine|DarkShrine
+16939|98|RoboticsBay|RoboticsBay
+16939|99|RoboticsFacility|RoboticsFacility
+16939|100|CyberneticsCore|CyberneticsCore
+16939|101|Zealot|Zealot
+16939|102|Stalker|Stalker
+16939|103|HighTemplar|HighTemplar
+16939|104|DarkTemplar|DarkTemplar
+16939|105|Sentry|Sentry
+16939|106|Phoenix|Phoenix
+16939|107|Carrier|Carrier
+16939|108|VoidRay|VoidRay
+16939|109|WarpPrism|WarpPrism
+16939|110|Observer|Observer
+16939|111|Immortal|Immortal
+16939|112|Probe|Probe
+16939|113|Interceptor|Interceptor
+16939|114|Hatchery|Hatchery
+16939|115|CreepTumor|CreepTumor
+16939|116|Extractor|Extractor
+16939|117|SpawningPool|SpawningPool
+16939|118|EvolutionChamber|EvolutionChamber
+16939|119|HydraliskDen|HydraliskDen
+16939|120|Spire|Spire
+16939|121|UltraliskCavern|UltraliskCavern
+16939|122|InfestationPit|InfestationPit
+16939|123|NydusNetwork|NydusNetwork
+16939|124|BanelingNest|BanelingNest
+16939|125|RoachWarren|RoachWarren
+16939|126|SpineCrawler|SpineCrawler
+16939|127|SporeCrawler|SporeCrawler
+16939|128|Lair|Lair
+16939|129|Hive|Hive
+16939|130|GreaterSpire|GreaterSpire
+16939|131|Egg|Egg
+16939|132|Drone|Drone
+16939|133|Zergling|Zergling
+16939|134|Overlord|Overlord
+16939|135|Hydralisk|Hydralisk
+16939|136|Mutalisk|Mutalisk
+16939|137|Ultralisk|Ultralisk
+16939|138|Roach|Roach
+16939|139|Infestor|Infestor
+16939|140|Corruptor|Corruptor
+16939|141|BroodLordCocoon|BroodLordCocoon
+16939|142|BroodLord|BroodLord
+16939|143|BanelingBurrowed|BanelingBurrowed
+16939|144|DroneBurrowed|DroneBurrowed
+16939|145|HydraliskBurrowed|HydraliskBurrowed
+16939|146|RoachBurrowed|RoachBurrowed
+16939|147|ZerglingBurrowed|ZerglingBurrowed
+16939|148|InfestorTerranBurrowed|InfestorTerranBurrowed
+16939|149|RedstoneLavaCritterBurrowed|
+16939|150|RedstoneLavaCritterInjuredBurrowed|
+16939|151|RedstoneLavaCritter|
+16939|152|RedstoneLavaCritterInjured|
+16939|153|QueenBurrowed|QueenBurrowed
+16939|154|Queen|Queen
+16939|155|InfestorBurrowed|InfestorBurrowed
+16939|156|OverlordCocoon|OverlordCocoon
+16939|157|Overseer|Overseer
+16939|158|PlanetaryFortress|PlanetaryFortress
+16939|159|UltraliskBurrowed|UltraliskBurrowed
+16939|160|OrbitalCommand|OrbitalCommand
+16939|161|WarpGate|WarpGate
+16939|162|OrbitalCommandFlying|OrbitalCommandFlying
+16939|163|ForceField|ForceField
+16939|164|WarpPrismPhasing|WarpPrismPhasing
+16939|165|CreepTumorBurrowed|CreepTumorBurrowed
+16939|166|SpineCrawlerUprooted|SpineCrawlerUprooted
+16939|167|SporeCrawlerUprooted|SporeCrawlerUprooted
+16939|168|Archon|Archon
+16939|169|NydusCanal|NydusCanal
+16939|170|BroodlingEscort|
+16939|171|RichMineralField|RichMineralField
+16939|173|XelNagaTower|XelNagaTower
+16939|176|InfestedTerransEgg|InfestedTerransEgg
+16939|177|Larva|Larva
+16939|178|ReaperPlaceholder|
+16939|179|NeedleSpinesWeapon|
+16939|180|CorruptionWeapon|
+16939|181|InfestedTerransWeapon|
+16939|182|NeuralParasiteWeapon|
+16939|183|PointDefenseDroneReleaseWeapon|
+16939|184|HunterSeekerWeapon|
+16939|185|MULE|MULE
+16939|187|ThorAAWeapon|
+16939|188|PunisherGrenadesLMWeapon|
+16939|189|VikingFighterWeapon|
+16939|190|ATALaserBatteryLMWeapon|
+16939|191|ATSLaserBatteryLMWeapon|
+16939|192|LongboltMissileWeapon|
+16939|193|D8ChargeWeapon|
+16939|194|YamatoWeapon|
+16939|195|IonCannonsWeapon|
+16939|196|AcidSalivaWeapon|
+16939|197|SpineCrawlerWeapon|
+16939|198|SporeCrawlerWeapon|
+16939|199|GlaiveWurmWeapon|
+16939|200|GlaiveWurmM2Weapon|
+16939|201|GlaiveWurmM3Weapon|
+16939|202|StalkerWeapon|
+16939|203|EMP2Weapon|
+16939|204|BacklashRocketsLMWeapon|
+16939|205|PhotonCannonWeapon|
+16939|206|ParasiteSporeWeapon|
+16939|207|Broodling|Broodling
+16939|210|AutoTurretReleaseWeapon|
+16939|211|LarvaReleaseMissile|
+16939|212|AcidSpinesWeapon|
+16939|213|FrenzyWeapon|
+16939|214|ContaminateWeapon|
+16939|215|BroodlingDefault|
+16939|216|Critter|
+16939|217|FungalGrowthMissile|
+16939|218|NeuralParasiteTentacleMissile|
+16939|219|Beacon_Protoss|
+16939|220|Beacon_ProtossSmall|
+16939|221|Beacon_Terran|
+16939|222|Beacon_TerranSmall|
+16939|223|Beacon_Zerg|
+16939|224|Beacon_ZergSmall|
+16939|225|Lyote|Lyote
+16939|226|CarrionBird|CarrionBird
+16939|227|KarakMale|Karak
+16939|228|KarakFemale|Karak
+16939|229|UrsadakMale|Ursadak
+16939|230|UrsadakFemale|Ursadak
+16939|231|UrsadakCalf|Ursadak
+16939|232|UrsadakMaleExotic|Ursadak
+16939|233|UrsadakFemaleExotic|Ursadak
+16939|234|UtilityBot|UtilityBot
+16939|235|Scantipede|Scantipede
+16939|236|Dog|
+16939|237|Sheep|
+16939|238|Cow|
+16939|239|InfestedTerransEggPlacement|
+16939|240|InfestorTerransWeapon|
+16939|241|MineralField|MineralField
+16939|242|VespeneGeyser|VespeneGeyser
+16939|243|SpacePlatformGeyser|SpacePlatformGeyser
+16939|244|RichVespeneGeyser|RichVespeneGeyser
+16939|245|DestructibleSearchlight|DestructibleDoodad
+16939|246|DestructibleBullhornLights|DestructibleDoodad
+16939|247|DestructibleStreetlight|DestructibleDoodad
+16939|248|DestructibleSpacePlatformSign|DestructibleDoodad
+16939|249|DestructibleStoreFrontCityProps|DestructibleDoodad
+16939|250|DestructibleBillboardTall|DestructibleDoodad
+16939|251|DestructibleBillboardScrollingText|DestructibleDoodad
+16939|252|DestructibleSpacePlatformBarrier|DestructibleDoodad
+16939|253|DestructibleSignsDirectional|DestructibleDoodad
+16939|254|DestructibleSignsConstruction|DestructibleDoodad
+16939|255|DestructibleSignsFunny|DestructibleDoodad
+16939|256|DestructibleSignsIcons|DestructibleDoodad
+16939|257|DestructibleSignsWarning|DestructibleDoodad
+16939|258|DestructibleGarage|DestructibleDoodad
+16939|259|DestructibleGarageLarge|DestructibleDoodad
+16939|260|DestructibleTrafficSignal|DestructibleDoodad
+16939|261|TrafficSignal|DestructibleDoodad
+16939|262|BraxisAlphaDestructible1x1|BraxisAlphaDestructible1x1
+16939|263|BraxisAlphaDestructible2x2|BraxisAlphaDestructible2x2
+16939|264|DestructibleDebris4x4|DestructibleDebris4x4
+16939|265|DestructibleDebris6x6|DestructibleDebris6x6
+16939|266|DestructibleRock2x4Vertical|DestructibleRock2x4Vertical
+16939|267|DestructibleRock2x4Horizontal|DestructibleRock2x4Horizontal
+16939|268|DestructibleRock2x6Vertical|DestructibleRock2x6Vertical
+16939|269|DestructibleRock2x6Horizontal|DestructibleRock2x6Horizontal
+16939|270|DestructibleRock4x4|DestructibleRock4x4
+16939|271||
+16939|272|DestructibleRampDiagonalHugeULBR|DestructibleRampDiagonalHugeULBR
+16939|273|DestructibleRampDiagonalHugeBLUR|DestructibleRampDiagonalHugeBLUR
+16939|274|MengskStatueAlone|MengskStatue
+16939|275|MengskStatue|
+16939|276|WolfStatue|DestructibleDoodad
+16939|277|GlobeStatue|
+16939|278||
+16939|279|BroodLordWeapon|
+16939|280|CreepBlocker1x1|
+16939|281|PathingBlocker1x1|
+16939|282|PathingBlocker2x2|
+16939|283|AutoTestAttackTargetGround|
+16939|284|AutoTestAttackTargetAir|
+16939|285|AutoTestAttacker|
+16939|286|HelperEmitterSelectionArrow|
+16939|287|MultiKillObject|
+16939|288|ShapeGolfball|
+16939|289|ShapeCone|
+16939|290|ShapeCube|
+16939|291|ShapeCylinder|
+16939|292|ShapeDodecahedron|
+16939|293|ShapeIcosahedron|
+16939|294|ShapeOctahedron|
+16939|295|ShapePyramid|
+16939|296|ShapeRoundedCube|
+16939|297|ShapeSphere|
+16939|298|ShapeTetrahedron|
+16939|299|ShapeThickTorus|
+16939|300|ShapeThinTorus|
+16939|301|ShapeTorus|
+16939|302|Shape4PointStar|
+16939|303|Shape5PointStar|
+16939|304|Shape6PointStar|
+16939|305|Shape8PointStar|
+16939|306|ShapeArrowPointer|
+16939|307|ShapeBowl|
+16939|308|ShapeBox|
+16939|309|ShapeCapsule|
+16939|310|ShapeCrescentMoon|
+16939|311|ShapeDecahedron|
+16939|312|ShapeDiamond|
+16939|313|ShapeFootball|
+16939|314|ShapeGemstone|
+16939|315|ShapeHeart|
+16939|316|ShapeJack|
+16939|317|ShapePlusSign|
+16939|318|ShapeShamrock|
+16939|319|ShapeSpade|
+16939|320|ShapeTube|
+16939|321|ShapeEgg|
+16939|322|ShapeYenSign|
+16939|323|ShapeX|
+16939|324|ShapeWatermelon|
+16939|325|ShapeWonSign|
+16939|326|ShapeTennisball|
+16939|327|ShapeStrawberry|
+16939|328|ShapeSmileyFace|
+16939|329|ShapeSoccerball|
+16939|330|ShapeRainbow|
+16939|331|ShapeSadFace|
+16939|332|ShapePoundSign|
+16939|333|ShapePear|
+16939|334|ShapePineapple|
+16939|335|ShapeOrange|
+16939|336|ShapePeanut|
+16939|337|ShapeO|
+16939|338|ShapeLemon|
+16939|339|ShapeMoneyBag|
+16939|340|ShapeHorseshoe|
+16939|341|ShapeHockeyStick|
+16939|342|ShapeHockeyPuck|
+16939|343|ShapeHand|
+16939|344|ShapeGolfClub|
+16939|345|ShapeGrape|
+16939|346|ShapeEuroSign|
+16939|347|ShapeDollarSign|
+16939|348|ShapeBasketball|
+16939|349|ShapeCarrot|
+16939|350|ShapeCherry|
+16939|351|ShapeBaseball|
+16939|352|ShapeBaseballBat|
+16939|353|ShapeBanana|
+16939|354|ShapeApple|
+16939|355|ShapeCashLarge|
+16939|356|ShapeCashMedium|
+16939|357|ShapeCashSmall|
+16939|358|ShapeFootballColored|
+16939|359|ShapeLemonSmall|
+16939|360|ShapeOrangeSmall|
+16939|361|ShapeTreasureChestOpen|
+16939|362|ShapeTreasureChestClosed|
+16939|363|ShapeWatermelonSmall|
View
260 sc2reader/data/17811_abilities.csv
@@ -0,0 +1,260 @@
+17811|0|||||||||||||||||||||||||||||||||
+17811|1|CAbilEffect||||||||||||||||||||||||||||||||
+17811|2|CAbilQueueable||||||||||||||||||||||||||||||||
+17811|3|CAbilProgress||||||||||||||||||||||||||||||||
+17811|4|CAbilRedirect||||||||||||||||||||||||||||||||
+17811|5|CAbilArmMagazine||||||||||||||||||||||||||||||||
+17811|6|CAbilAttack||||||||||||||||||||||||||||||||
+17811|7|CAbilAugment||||||||||||||||||||||||||||||||
+17811|8|CAbilBattery||||||||||||||||||||||||||||||||
+17811|9|CAbilBeacon||||||||||||||||||||||||||||||||
+17811|10|CAbilBehavior||||||||||||||||||||||||||||||||
+17811|11|CAbilBuild||||||||||||||||||||||||||||||||
+17811|12|CAbilBuildable||||||||||||||||||||||||||||||||
+17811|13|CAbilEffectInstant||||||||||||||||||||||||||||||||
+17811|14|CAbilEffectTarget||||||||||||||||||||||||||||||||
+17811|15|CAbilHarvest||||||||||||||||||||||||||||||||
+17811|16|CAbilInteract||||||||||||||||||||||||||||||||
+17811|17|CAbilInventory||||||||||||||||||||||||||||||||
+17811|18|CAbilLearn||||||||||||||||||||||||||||||||
+17811|19|CAbilMerge||||||||||||||||||||||||||||||||
+17811|20|CAbilMergeable||||||||||||||||||||||||||||||||
+17811|21|CAbilMorph||||||||||||||||||||||||||||||||
+17811|22|CAbilMorphPlacement||||||||||||||||||||||||||||||||
+17811|23|CAbilMove||||||||||||||||||||||||||||||||
+17811|24|CAbilPawn||||||||||||||||||||||||||||||||
+17811|25|CAbilQueue||||||||||||||||||||||||||||||||
+17811|26|CAbilRally||||||||||||||||||||||||||||||||
+17811|27|CAbilResearch||||||||||||||||||||||||||||||||
+17811|28|CAbilRevive||||||||||||||||||||||||||||||||
+17811|29|CAbilSpecialize||||||||||||||||||||||||||||||||
+17811|30|CAbilStop||||||||||||||||||||||||||||||||
+17811|31|CAbilTrain||||||||||||||||||||||||||||||||
+17811|32|CAbilTransport||||||||||||||||||||||||||||||||
+17811|33|CAbilWarpable||||||||||||||||||||||||||||||||
+17811|34|CAbilWarpTrain||||||||||||||||||||||||||||||||
+17811|35|Taunt|Taunt|Cancel||||||||||||||||||||||||||||||
+17811|36|stop|Stop|HoldFire|Taunt|Taunt||||||||||||||||||||||||||||
+17811|37|HoldFire|Stop|HoldFire|Taunt|Taunt||||||||||||||||||||||||||||
+17811|38|move|Move|Patrol|HoldPosition|Move|Move|||||||||||||||||||||||||||
+17811|39|Beacon||||||||||||||||||||||||||||||||
+17811|42|attack|Attack|||||||||||||||||||||||||||||||
+17811|43|TerranAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding|
+17811|44|TerranBuildingLiftOff||||||||||||||||||||||||||||||||
+17811|45|TerranBuildingLand||||||||||||||||||||||||||||||||
+17811|46|Refund||||||||||||||||||||||||||||||||
+17811|47|Salvage||||||||||||||||||||||||||||||||
+17811|48|DisguiseChangeling||||||||||||||||||||||||||||||||
+17811|49|Corruption|CorruptorCorruption|||||||||||||||||||||||||||||||
+17811|50|GhostHoldFire|GhostHoldFire|||||||||||||||||||||||||||||||
+17811|51|GhostWeaponsFree|GhostWeaponsFree|||||||||||||||||||||||||||||||
+17811|52|MorphToInfestedTerran||||||||||||||||||||||||||||||||
+17811|53|Explode|BanelingExplode|||||||||||||||||||||||||||||||
+17811|54|FleetBeaconResearch|ResearchFluxVanes|ResearchCarrierWeaponSpeed|ResearchPhoenixRange||||||||||||||||||||||||||||CancelResearch|
+17811|55|FungalGrowth|InfestorFungalGrowth|||||||||||||||||||||||||||||||
+17811|56|GuardianShield|SentryGuardianShield|||||||||||||||||||||||||||||||
+17811|57|MULERepair|MULERepair|CancelChannel||||||||||||||||||||||||||||||
+17811|58|MorphZerglingToBaneling|MorphToBaneling|CancelMorph||||||||||||||||||||||||||||||
+17811|59|NexusTrainMothership|TrainMothership||||||||||||||||||||||||||||||CancelTrain|
+17811|60|Feedback|HighTemplarFeedback|||||||||||||||||||||||||||||||
+17811|61|MassRecall|MothershipMassRecall|||||||||||||||||||||||||||||||
+17811|62|PlacePointDefenseDrone|RavenBuildPointDefenseDrone|||||||||||||||||||||||||||||||
+17811|63|HallucinationArchon|SentryHallucinationArchon|||||||||||||||||||||||||||||||
+17811|64|HallucinationColossus|SentryHallucinationColossus|||||||||||||||||||||||||||||||
+17811|65|HallucinationHighTemplar|SentryHallucinationHighTemplar|||||||||||||||||||||||||||||||
+17811|66|HallucinationImmortal|SentryHallucinationImmortal|||||||||||||||||||||||||||||||
+17811|67|HallucinationPhoenix|SentryHallucinationPhoenix|||||||||||||||||||||||||||||||
+17811|68|HallucinationProbe|SentryHallucinationProbe|||||||||||||||||||||||||||||||
+17811|69|HallucinationStalker|SentryHallucinationStalker|||||||||||||||||||||||||||||||
+17811|70|HallucinationVoidRay|SentryHallucinationVoidRay|||||||||||||||||||||||||||||||
+17811|71|HallucinationWarpPrism|SentryHallucinationWarpPrism|||||||||||||||||||||||||||||||
+17811|72|HallucinationZealot|SentryHallucinationZealot|||||||||||||||||||||||||||||||
+17811|73|MULEGather|Gather|ReturnCargo|Cancel|||||||||||||||||||||||||||||
+17811|74|SeekerMissile|RavenSeekerMissile|||||||||||||||||||||||||||||||
+17811|75|CalldownMULE|CalldownMULE|||||||||||||||||||||||||||||||
+17811|76|GravitonBeam|PhoenixGravitonBeam|CancelChannel||||||||||||||||||||||||||||||
+17811|77|BuildinProgressNydusCanal|CancelBuilding|CancelBuilding||||||||||||||||||||||||||||||
+17811|78|Siphon||||||||||||||||||||||||||||||||
+17811|79|Leech||||||||||||||||||||||||||||||||
+17811|80|SpawnChangeling|OverseerSpawnChangeling|||||||||||||||||||||||||||||||
+17811|81|DisguiseAsZealot||||||||||||||||||||||||||||||||
+17811|82|DisguiseAsMarineWithShield||||||||||||||||||||||||||||||||
+17811|83|DisguiseAsMarineWithoutShield||||||||||||||||||||||||||||||||
+17811|84|DisguiseAsZerglingWithWings||||||||||||||||||||||||||||||||
+17811|85|DisguiseAsZerglingWithoutWings||||||||||||||||||||||||||||||||
+17811|86|PhaseShift||||||||||||||||||||||||||||||||
+17811|87|Rally|SetUnitRally|||||||||||||||||||||||||||||||
+17811|88|ProgressRally|SetUnitRally|||||||||||||||||||||||||||||||
+17811|89|RallyCommand|SetWorkerRally|||||||||||||||||||||||||||||||
+17811|90|RallyNexus|SetUnitRally|||||||||||||||||||||||||||||||
+17811|91|RallyHatchery|SetUnitRally|SetWorkerRally||||||||||||||||||||||||||||||
+17811|92|RoachWarrenResearch|Unknown|ResearchRoachSpeed|ResearchRoachTunnelingClaws|||||||||||||||||||||||||||||
+17811|93|SapStructure||||||||||||||||||||||||||||||||
+17811|94|InfestedTerrans|InfestorSpawnInfestedTerran|||||||||||||||||||||||||||||||
+17811|95|NeuralParasite|InfestorNeuralParasite|||||||||||||||||||||||||||||||
+17811|96|SpawnLarva|QueenSpawnLarva|||||||||||||||||||||||||||||||
+17811|97|StimpackMarauder|UseStimpack|||||||||||||||||||||||||||||||
+17811|98|SupplyDrop|CalldownSupply|||||||||||||||||||||||||||||||
+17811|99|250mmStrikeCannons|ThorStrikeCannons|||||||||||||||||||||||||||||||
+17811|100|TemporalRift||||||||||||||||||||||||||||||||
+17811|101|TimeWarp|NexusChronoBoost|||||||||||||||||||||||||||||||
+17811|102|UltraliskCavernResearch|Unknown|Unknown|ResearchUltraliskArmor|||||||||||||||||||||||||||||
+17811|103|WormholeTransit||||||||||||||||||||||||||||||||
+17811|104|SCVHarvest|Gather|ReturnCargo|Cancel|||||||||||||||||||||||||||||
+17811|105|ProbeHarvest|Gather|ReturnCargo|Cancel|||||||||||||||||||||||||||||
+17811|106|AttackWarpPrism|Attack|||||||||||||||||||||||||||||||
+17811|107|que1|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+17811|108|que5|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+17811|109|que5LongBlend|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+17811|110|que5Passive|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+17811|111|que5Addon|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+17811|112|BuildInProgress|CancelBuilding|CancelBuilding||||||||||||||||||||||||||||||
+17811|113|Repair|SCVRepair|||||||||||||||||||||||||||||||
+17811|114|TerranBuild|BuildCommandCenter|BuildSupplyDepot|BuildRefinery|BuildBarracks|BuildEngineeringBay|BuildMissileTurret|BuildBunker||BuildSensorTower|BuildGhostAcademy|BuildFactory|BuildStarport||BuildArmory||BuildFusionCore|||||||||||||||CancelBuilding|
+17811|115|RavenBuild|RavenBuildAutoTurret||||||||||||||||||||||||||||||CancelBuilding|
+17811|116|Stimpack|UseStimpack|||||||||||||||||||||||||||||||
+17811|117|GhostCloak|GhostCloak|GhostDecloak||||||||||||||||||||||||||||||
+17811|118|Snipe|GhostSnipe|||||||||||||||||||||||||||||||
+17811|119|MedivacHeal|MedivacHeal|||||||||||||||||||||||||||||||
+17811|120|SiegeMode|SiegeTankSiege|||||||||||||||||||||||||||||||
+17811|121|Unsiege|SiegeTankUnsiege|||||||||||||||||||||||||||||||
+17811|122|BansheeCloak|BansheeCloak|BansheeDecloak||||||||||||||||||||||||||||||
+17811|123|MedivacTransport|MedivacLoad|MedivacUnloadAll|MedivacUnloadAll|MedivacUnload|MedivacLoad|||||||||||||||||||||||||||
+17811|124|ScannerSweep|CalldownScannerSweep|||||||||||||||||||||||||||||||
+17811|125|Yamato|BattlecruiserYamato|||||||||||||||||||||||||||||||
+17811|126|AssaultMode|VikingLand|||||||||||||||||||||||||||||||
+17811|127|FighterMode|VikingLift|||||||||||||||||||||||||||||||
+17811|128|BunkerTransport|BunkerLoad|BunkerUnloadAll|BunkerUnload|BunkerUnload|BunkerLoad|||||||||||||||||||||||||||
+17811|129|CommandCenterTransport|CommandCenterLoad|CommandCenterUnloadAll|CommandCenterUnload|CommandCenterUnload|CommandCenterLoad|||||||||||||||||||||||||||
+17811|130|CommandCenterLiftOff|LiftCommandCenter|||||||||||||||||||||||||||||||
+17811|131|CommandCenterLand|LandCommandCenter|||||||||||||||||||||||||||||||
+17811|132|BarracksAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding|
+17811|133|BarracksLiftOff|LiftBarracks|||||||||||||||||||||||||||||||
+17811|134|FactoryAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding|
+17811|135|FactoryLiftOff|LiftFactory|||||||||||||||||||||||||||||||
+17811|136|StarportAddOns|BuildTechLab|BuildReactor|||||||||||||||||||||||||||||CancelBuilding|
+17811|137|StarportLiftOff|LiftStarport|||||||||||||||||||||||||||||||
+17811|138|FactoryLand|LandFactory|||||||||||||||||||||||||||||||
+17811|139|StarportLand|LandStarport|||||||||||||||||||||||||||||||
+17811|140|CommandCenterTrain|TrainSCV||||||||||||||||||||||||||||||CancelTrain|
+17811|141|BarracksLand|LandBarracks|||||||||||||||||||||||||||||||
+17811|142|SupplyDepotLower|SupplyDepotLower|||||||||||||||||||||||||||||||
+17811|143|SupplyDepotRaise|SupplyDepotRaise|||||||||||||||||||||||||||||||
+17811|144|BarracksTrain|TrainMarine|TrainReaper|TrainGhost|TrainMarauder|||||||||||||||||||||||||||CancelTrain|
+17811|145|FactoryTrain|Unknown|TrainSiegeTank|||TrainThor|TrainHellion|||||||||||||||||||||||||CancelTrain|
+17811|146|StarportTrain|TrainMedivac|TrainBanshee|TrainRaven|TrainBattlecruiser|TrainViking||||||||||||||||||||||||||CancelTrain|
+17811|147|EngineeringBayResearch|ResearchHiSecAutoTracking|ResearchTerranBuildingArmor|ResearchTerranInfantryWeapons1|ResearchTerranInfantryWeapons2|ResearchTerranInfantryWeapons3|ResearchNeosteelFrame|ResearchTerranInfantryArmors1|ResearchTerranInfantryArmors2|ResearchTerranInfantryArmors3||||||||||||||||||||||CancelResearch|
+17811|148|MercCompoundResearch||||||||||||||||||||||||||||||||
+17811|149|ArmSiloWithNuke|ArmNuke|||||||||||||||||||||||||||||||
+17811|150|BarracksTechLabResearch|ResearchStimpack|ResearchCombatShields|ResearchPunisherGrenades||||||||||||||||||||||||||||CancelResearch|
+17811|151|FactoryTechLabResearch|ResearchSiegeTech|ResearchBlueFlame|ResearchStrikeCannons||||||||||||||||||||||||||||CancelResearch|
+17811|152|StarportTechLabResearch|ResearchBansheeCloak||ResearchMedivacEnergy|ResearchRavenEnergy|||ResearchSeekerMissile|ResearchDurableMaterials|||||||||||||||||||||||CancelResearch|
+17811|153|GhostAcademyResearch|ResearchGhostCloak|ResearchGhostEnergy|||||||||||||||||||||||||||||CancelResearch|
+17811|154|ArmoryResearch|||ResearchTerranVehicleArmors1|ResearchTerranVehicleArmors2|ResearchTerranVehicleArmors3|ResearchTerranVehicleWeapons1|ResearchTerranVehicleWeapons2|ResearchTerranVehicleWeapons3|ResearchTerranShipArmors1|ResearchTerranShipArmors2|ResearchTerranShipArmors3|ResearchTerranShipWeapons1|ResearchTerranShipWeapons2|ResearchTerranShipWeapons3|||||||||||||||||CancelResearch|
+17811|155|ProtossBuild|BuildNexus|BuildPylon|BuildAssimilator|BuildGateway|BuildForge|BuildFleetBeacon|BuildTwilightCouncil|BuildPhotonCannon||BuildStargate|BuildTemplarArchive|BuildDarkShrine|BuildRoboticsBay|BuildRoboticsFacility|BuildCyberneticsCore||||||||||||||||CancelBuilding|
+17811|156|WarpPrismTransport|WarpPrismLoad|WarpPrismUnloadAll|WarpPrismUnloadAll|WarpPrismUnload|WarpPrismLoad|||||||||||||||||||||||||||
+17811|157|GatewayTrain|TrainZealot|TrainStalker||TrainHighTemplar|TrainDarkTemplar|TrainSentry|||||||||||||||||||||||||CancelTrain|
+17811|158|StargateTrain|TrainPhoenix||TrainCarrier||TrainVoidRay||||||||||||||||||||||||||CancelTrain|
+17811|159|RoboticsFacilityTrain|TrainWarpPrism|TrainObserver|TrainColossus|TrainImmortal|||||||||||||||||||||||||||CancelTrain|
+17811|160|NexusTrain|TrainProbe||||||||||||||||||||||||||||||CancelTrain|
+17811|161|PsiStorm|HighTemplarPsiStorm|||||||||||||||||||||||||||||||
+17811|162|HangarQueue5|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+17811|163|BroodLordQueue2|CancelQueue|CancelQueue||||||||||||||||||||||||||||||
+17811|164|CarrierHangar|ArmInterceptor|||||||||||||||||||||||||||||||
+17811|165|ForgeResearch|ResearchProtossGroundWeapons1|ResearchProtossGroundWeapons2|ResearchProtossGroundWeapons3|ResearchProtossGroundArmors1|ResearchProtossGroundArmors2|ResearchProtossGroundArmors3|ResearchProtossShields1|ResearchProtossShields2|ResearchProtossShields3||||||||||||||||||||||CancelResearch|
+17811|166|RoboticsBayResearch||ResearchObserverSpeed|ResearchWarpPrismSpeed|||ResearchExtendedThermalLance|||||||||||||||||||||||||CancelResearch|
+17811|167|TemplarArchivesResearch||||ResearchKhaydarinAmulet|ResearchPsiStorm||||||||||||||||||||||||||CancelResearch|
+17811|168|ZergBuild|BuildHatchery||BuildExtractor|BuildSpawningPool|BuildEvolutionChamber|BuildHydraliskDen|BuildSpire|BuildUltraliskCavern|BuildInfestationPit|BuildNydusNetwork|BuildBanelingNest|||BuildRoachWarren|BuildSpineCrawler|BuildSporeCrawler|||||||||||||||CancelBuilding|
+17811|169|DroneHarvest|Gather|ReturnCargo|Cancel|||||||||||||||||||||||||||||
+17811|170|evolutionchamberresearch|ResearchZergMeleeWeapons1|ResearchZergMeleeWeapons2|ResearchZergMeleeWeapons3|ResearchZergGroundArmors1|ResearchZergGroundArmors2|ResearchZergGroundArmors3|ResearchZergMissileWeapons1|ResearchZergMissileWeapons2|ResearchZergMissileWeapons3||||||||||||||||||||||CancelResearch|
+17811|171|UpgradeToLair|MorphToLair|CancelMorph||||||||||||||||||||||||||||||
+17811|172|UpgradeToHive|MorphToHive|CancelMorph||||||||||||||||||||||||||||||
+17811|173|UpgradeToGreaterSpire|MorphToGreaterSpire|CancelMorph||||||||||||||||||||||||||||||
+17811|174|LairResearch||ResearchOverlordSpeed|ResearchVentralSacs|ResearchBurrow|||||||||||||||||||||||||||CancelResearch|
+17811|175|SpawningPoolResearch|ResearchZerglingAttackSpeed|ResearchZerglingMovementSpeed|||||||||||||||||||||||||||||CancelResearch|
+17811|176|HydraliskDenResearch|||ResearchHydraliskSpeed||||||||||||||||||||||||||||CancelResearch|
+17811|177|SpireResearch|ResearchZergFlyerWeapons1|ResearchZergFlyerWeapons2|ResearchZergFlyerWeapons3|ResearchZergFlyerArmors1|ResearchZergFlyerArmors2|ResearchZergFlyerArmors3|||||||||||||||||||||||||CancelResearch|
+17811|178|LarvaTrain|TrainDrone|TrainZergling|TrainOverlord|TrainHydralisk|TrainMutalisk||TrainUltralisk|||TrainRoach|TrainInfestor|TrainCorruptor|||||||||||||||||||CancelTrain|
+17811|179|MorphToBroodLord|MorphToBroodLord|CancelMorph||||||||||||||||||||||||||||||
+17811|180|BurrowBanelingDown|BurrowBaneling|||||||||||||||||||||||||||||||
+17811|181|BurrowBanelingUp|UnburrowBaneling|||||||||||||||||||||||||||||||
+17811|182|BurrowDroneDown|BurrowDrone|||||||||||||||||||||||||||||||
+17811|183|BurrowDroneUp|UnburrowDrone|||||||||||||||||||||||||||||||
+17811|184|BurrowHydraliskDown|BurrowHydralisk|||||||||||||||||||||||||||||||
+17811|185|BurrowHydraliskUp|UnburrowHydralisk|||||||||||||||||||||||||||||||
+17811|186|BurrowRoachDown|BurrowRoach|||||||||||||||||||||||||||||||
+17811|187|BurrowRoachUp|UnburrowRoach|||||||||||||||||||||||||||||||
+17811|188|BurrowZerglingDown|BurrowZergling|||||||||||||||||||||||||||||||
+17811|189|BurrowZerglingUp|UnburrowZergling|||||||||||||||||||||||||||||||
+17811|190|BurrowInfestorTerranDown|BurrowInfestedTerran|||||||||||||||||||||||||||||||
+17811|191|BurrowInfestorTerranUp|UnburrowInfestedTerran|||||||||||||||||||||||||||||||
+17811|192|RedstoneLavaCritterBurrow||||||||||||||||||||||||||||||||
+17811|193|RedstoneLavaCritterInjuredBurrow||||||||||||||||||||||||||||||||
+17811|194|RedstoneLavaCritterUnburrow||||||||||||||||||||||||||||||||
+17811|195|RedstoneLavaCritterInjuredUnburrow||||||||||||||||||||||||||||||||
+17811|196|OverlordTransport|OverlordLoad|OverlordUnloadAll|OverlordUnloadAll|OverlordUnload|OverlordLoad|||||||||||||||||||||||||||
+17811|197|Mergeable|Cancel|||||||||||||||||||||||||||||||
+17811|198|Warpable|CancelWarpIn|||||||||||||||||||||||||||||||
+17811|199|WarpGateTrain|WarpInZealot|WarpInStalker||WarpInHighTemplar|WarpInDarkTemplar|WarpInSentry|||||||||||||||||||||||||CancelWarpIn|
+17811|200|BurrowQueenDown|BurrowQueen|||||||||||||||||||||||||||||||
+17811|201|BurrowQueenUp|UnburrowQueen|||||||||||||||||||||||||||||||
+17811|202|NydusCanalTransport|NydusLoad|NydusUnloadAll|NydusUnloadAll|NydusUnload|NydusLoad|||||||||||||||||||||||||||
+17811|203|Blink|StalkerBlink|||||||||||||||||||||||||||||||
+17811|204|BurrowInfestorDown|BurrowInfestor|||||||||||||||||||||||||||||||
+17811|205|BurrowInfestorUp|UnburrowInfestor|||||||||||||||||||||||||||||||
+17811|206|MorphToOverseer|MorphToOverseer|CancelMorph||||||||||||||||||||||||||||||
+17811|207|UpgradeToPlanetaryFortress|MorphToPlanetaryFortress|CancelMorph||||||||||||||||||||||||||||||
+17811|208|InfestationPitResearch|||ResearchInfestorEnergy|ResearchNeuralParasite|||||||||||||||||||||||||||CancelResearch|
+17811|209|BanelingNestResearch|ResearchBanelingSpeed||||||||||||||||||||||||||||||CancelResearch|
+17811|210|BurrowUltraliskDown|BurrowUltralisk|||||||||||||||||||||||||||||||
+17811|211|BurrowUltraliskUp|UnburrowUltralisk|||||||||||||||||||||||||||||||
+17811|212|UpgradeToOrbital|MorphToOrbitalCommand|CancelMorph||||||||||||||||||||||||||||||
+17811|213|UpgradeToWarpGate|MorphToWarpGate|CancelMorph||||||||||||||||||||||||||||||
+17811|214|MorphBackToGateway|MorphToGateway|CancelMorph||||||||||||||||||||||||||||||
+17811|215|OrbitalLiftOff|LiftOrbitalCommand|||||||||||||||||||||||||||||||
+17811|216|OrbitalCommandLand|LandOrbitalCommand|||||||||||||||||||||||||||||||
+17811|217|ForceField|SentryForceField|||||||||||||||||||||||||||||||
+17811|218|PhasingMode|WarpPrismPhasing|||||||||||||||||||||||||||||||
+17811|219|TransportMode|WarpPrismTransport|||||||||||||||||||||||||||||||
+17811|220|FusionCoreResearch|ResearchYamatoCannon|ResearchBattlecruiserEnergy|||||||||||||||||||||||||||||CancelResearch|
+17811|221|CyberneticsCoreResearch|ResearchProtossAirWeapons1|ResearchProtossAirWeapons2|ResearchProtossAirWeapons3|ResearchProtossAirArmors1|ResearchProtossAirArmors2|ResearchProtossAirArmors3|ResearchWarpGate|||ResearchHallucination|||||||||||||||||||||CancelResearch|
+17811|222|TwilightCouncilResearch|ResearchCharge|ResearchBlink|||||||||||||||||||||||||||||CancelResearch|
+17811|223|TacNukeStrike|GhostNuke|||||||||||||||||||||||||||||||
+17811|224|SalvageBunkerRefund||||||||||||||||||||||||||||||||
+17811|225|SalvageBunker|BunkerSalvage|||||||||||||||||||||||||||||||
+17811|226|EMP|GhostEMP|||||||||||||||||||||||||||||||
+17811|227|Vortex|MothershipVortex|||||||||||||||||||||||||||||||
+17811|228|TrainQueen|TrainQueen||||||||||||||||||||||||||||||CancelTrain|
+17811|229|BurrowCreepTumorDown|CancelMorph|||||||||||||||||||||||||||||||
+17811|230|Transfusion|QueenTransfusion|||||||||||||||||||||||||||||||
+17811|231|TechLabMorph||||||||||||||||||||||||||||||||
+17811|232|BarracksTechLabMorph||||||||||||||||||||||||||||||||
+17811|233|FactoryTechLabMorph||||||||||||||||||||||||||||||||
+17811|234|StarportTechLabMorph||||||||||||||||||||||||||||||||
+17811|235|ReactorMorph||||||||||||||||||||||||||||||||
+17811|236|BarracksReactorMorph||||||||||||||||||||||||||||||||
+17811|237|FactoryReactorMorph||||||||||||||||||||||||||||||||
+17811|238|StarportReactorMorph||||||||||||||||||||||||||||||||
+17811|239|AttackRedirect||||||||||||||||||||||||||||||||
+17811|240|StimpackRedirect||||||||||||||||||||||||||||||||
+17811|241|StimpackMarauderRedirect||||||||||||||||||||||||||||||||
+17811|242|burrowedStop|Stop|HoldFire|Taunt|Taunt||||||||||||||||||||||||||||
+17811|243|StopRedirect||||||||||||||||||||||||||||||||
+17811|244|GenerateCreep|OverlordGenerateCreep|OverlordStopGenerateCreep||||||||||||||||||||||||||||||
+17811|245|QueenBuild|QueenBuildCreepTumor||||||||||||||||||||||||||||||CancelBuilding|
+17811|246|SpineCrawlerUproot|UprootSpineCrawler|||||||||||||||||||||||||||||||
+17811|247|SporeCrawlerUproot|UprootSporeCrawler|||||||||||||||||||||||||||||||
+17811|248|SpineCrawlerRoot|RootSpineCrawler|||||||||||||||||||||||||||||||
+17811|249|SporeCrawlerRoot|RootSporeCrawler|||||||||||||||||||||||||||||||
+17811|250|CreepTumorBuild|CreepTumorBuildCreepTumor||||||||||||||||||||||||||||||CancelBuilding|
+17811|251|BuildAutoTurret|RavenBuildAutoTurret|CancelBuilding||||||||||||||||||||||||||||||
+17811|252|ArchonWarp|MergeArchon|MergeArchon||||||||||||||||||||||||||||||
+17811|253|BuildNydusCanal|BuildNydusCanal||||||||||||||||||||||||||||||CancelBuilding|
+17811|254|BroodLordHangar|ArmBroodling|||||||||||||||||||||||||||||||
+17811|255|Charge|ZealotCharge|||||||||||||||||||||||||||||||
+17811|256|TowerCapture||||||||||||||||||||||||||||||||
+17811|257|HerdInteract||||||||||||||||||||||||||||||||
+17811|258|Frenzy||||||||||||||||||||||||||||||||
+17811|259|Contaminate|OverseerContaminate|||||||||||||||||||||||||||||||
+17811|260|Shatter||||||||||||||||||||||||||||||||
+17811|261|InfestedTerransLayEgg|InfestorSpawnInfestedTerran|||||||||||||||||||||||||||||||
View
353 sc2reader/data/17811_units.csv
@@ -0,0 +1,353 @@
+17811|4|BeaconRally|
+17811|5|BeaconAttack|
+17811|6|BeaconDefend|
+17811|7|BeaconDetect|
+17811|8|BeaconExpand|
+17811|9|BeaconHarass|
+17811|10|BeaconScout|
+17811|12||
+17811|13|DESTRUCTIBLE|
+17811|14|ITEM|
+17811|15|POWERUP|
+17811|16|SMCAMERA|
+17811|17|SMCHARACTER|
+17811|18|STARMAP|
+17811|19|SMSET|
+17811|20|MISSILE|
+17811|21|MISSILE_INVULNERABLE|
+17811|22|MISSILE_HALFLIFE|
+17811|23|PLACEHOLDER|
+17811|24|PLACEHOLDER_AIR|
+17811|25|PATHINGBLOCKER|
+17811|26|BEACON|
+17811|27|Ball|
+17811|28|StereoscopicOptionsUnit|
+17811|29|Colossus|Colossus
+17811|30|TechLab|TechLab
+17811|31|Reactor|Reactor
+17811|33|InfestorTerran|InfestorTerran
+17811|34|BanelingCocoon|BanelingCocoon
+17811|35|Baneling|Baneling
+17811|36|Mothership|Mothership
+17811|37|PointDefenseDrone|PointDefenseDrone
+17811|38|Changeling|Changeling
+17811|39|ChangelingZealot|ChangelingZealot
+17811|40|ChangelingMarineShield|ChangelingMarine
+17811|41|ChangelingMarine|ChangelingMarine
+17811|42|ChangelingZerglingWings|ChangelingZergling
+17811|43|ChangelingZergling|ChangelingZergling
+17811|45|CommandCenter|CommandCenter
+17811|46|SupplyDepot|SupplyDepot
+17811|47|Refinery|Refinery
+17811|48|Barracks|Barracks
+17811|49|EngineeringBay|EngineeringBay
+17811|50|MissileTurret|MissileTurret
+17811|51|Bunker|Bunker
+17811|52|SensorTower|SensorTower
+17811|53|GhostAcademy|GhostAcademy
+17811|54|Factory|Factory
+17811|55|Starport|Starport
+17811|57|Armory|Armory
+17811|58|FusionCore|FusionCore
+17811|59|AutoTurret|AutoTurret
+17811|60|SiegeTankSieged|SiegeTankSieged
+17811|61|SiegeTank|SiegeTank
+17811|62|VikingAssault|VikingAssault
+17811|63|VikingFighter|VikingFighter
+17811|64|CommandCenterFlying|CommandCenterFlying
+17811|65|BarracksTechLab|BarracksTechLab
+17811|66|BarracksReactor|BarracksReactor
+17811|67|FactoryTechLab|FactoryTechLab
+17811|68|FactoryReactor|FactoryReactor
+17811|69|StarportTechLab|StarportTechLab
+17811|70|StarportReactor|StarportReactor
+17811|71|FactoryFlying|FactoryFlying
+17811|72|StarportFlying|StarportFlying
+17811|73|SCV|SCV
+17811|74|BarracksFlying|BarracksFlying
+17811|75|SupplyDepotLowered|SupplyDepotLowered
+17811|76|Marine|Marine
+17811|77|Reaper|Reaper
+17811|78|Ghost|Ghost
+17811|79|Marauder|Marauder
+17811|80|Thor|Thor
+17811|81|Hellion|Hellion
+17811|82|Medivac|Medivac
+17811|83|Banshee|Banshee
+17811|84|Raven|Raven
+17811|85|Battlecruiser|Battlecruiser
+17811|86|Nuke|
+17811|87|Nexus|Nexus
+17811|88|Pylon|Pylon
+17811|89|Assimilator|Assimilator
+17811|90|Gateway|Gateway
+17811|91|Forge|Forge
+17811|92|FleetBeacon|FleetBeacon
+17811|93|TwilightCouncil|TwilightCouncil
+17811|94|PhotonCannon|PhotonCannon
+17811|95|Stargate|Stargate