From a821521cbed5a03fe3c315921bfb8106840c77f9 Mon Sep 17 00:00:00 2001 From: Kevin Leung Date: Fri, 16 Nov 2018 23:41:23 -0800 Subject: [PATCH 1/2] add support for 70154, bump to 1.3.0 --- CHANGELOG.rst | 7 +++++++ sc2reader/data/attributes.json | 3 ++- sc2reader/readers.py | 2 +- setup.py | 2 +- test_replays/4.7.0.70154/1.SC2Replay | Bin 0 -> 36738 bytes test_replays/test_all.py | 7 +++++++ 6 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 test_replays/4.7.0.70154/1.SC2Replay diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 43ddf6b8..52337169 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ CHANGELOG ============ +1.3.0 - November 16, 2018 +------------------------- +* Added support for protocol 70154 (StarCraft 4.7.0) +* Added support for Zeratul +* Updated CircleCI build for Python 3.7 +* Fixed a bug with printing TrackerEvent + 1.2.0 - October 7, 2018 ----------------------- * Added support for Tychus diff --git a/sc2reader/data/attributes.json b/sc2reader/data/attributes.json index 751f8dc8..773be8c3 100644 --- a/sc2reader/data/attributes.json +++ b/sc2reader/data/attributes.json @@ -714,7 +714,8 @@ "Swan": "Swann", "Tych": "Tychus", "Vora": "Vorazun", - "Zaga": "Zagara" + "Zaga": "Zagara", + "Zera": "Zeratul" } ], "3014": [ diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 1428186e..54bf3f54 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -118,7 +118,7 @@ def __call__(self, data, replay): working_set_slot_id=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, rewards=[data.read_uint32() for i in range(data.read_bits(17 if replay.base_build >= 34784 else 6 if replay.base_build >= 24764 else 5))], toon_handle=data.read_aligned_string(data.read_bits(7)) if replay.base_build >= 17266 else None, - licenses=[data.read_uint32() for i in range(data.read_bits(9))] if replay.base_build >= 19132 else [], + licenses=[data.read_uint32() for i in range(data.read_bits(13 if replay.base_build >= 70154 else 9))] if replay.base_build >= 19132 else [], tandem_leader_user_id=data.read_bits(4) if replay.base_build >= 34784 and data.read_bool() else None, commander=data.read_aligned_bytes(data.read_bits(9)) if replay.base_build >= 34784 else None, commander_level=data.read_uint32() if replay.base_build >= 36442 else None, diff --git a/setup.py b/setup.py index c14bc2a2..c06d6fce 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='1.2.0', + version='1.3.0', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), diff --git a/test_replays/4.7.0.70154/1.SC2Replay b/test_replays/4.7.0.70154/1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..3633b09e0c554484e909096a17965649221266c5 GIT binary patch literal 36738 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
$eT_k zbECKA)TD|g(r@#TJ;QsMd4cYrblo_U8W=0KMKzfyEsb7gpr|9u`J8cDY+*)+x@b_tKRGy7=>7qbm$}OAY||XhHy(03ZxN_-z-= z3TRo_h{<2!_$tLkst%H~%a<+WMCF90)Zi{(UI1Wmc&!*Jp2JUw#q#FI+sWt~C;|^K zhu!IF=pS3U+S(7{7=N*Oo`u}h*eb6%L3@sja8HTN)GnOP+2kJsc3MW4ADSx@I`v4Q zYnkm;eF4Iy**)8I;-D#3GI|SQQEA^Xx)&@-g*qzg4M6yR)KbMj@C#w0>_Z9X=5G7b z1KSE&GA{UWP5YH>c}%V72aoR!E!Kd}IK!%g zx%O{BQHPoDULWBMS#tHSf|wtC1;M*y|LXs*3jP088DHFX>t^&#N|oh%t2zqtMr++(WS`j4?%(A*-LNXQ_0YmaMdUvVHn6C4MrGd$s)E0r1~_ z{eP7wY2u+}cn)HJX{8&+F%-wiNNNxQ-y2H2?@{xD5va7Y)=X)MCjJFYxQn6W0iY5_ ze!PNdL~%SuM5WEo)!c8BZH{*}k(dm=9f+SCPPXt_R=6G1=1V|@1){ljAn#^Ysq8T{cQK*@l4)I@N&3)tbFcpP>IxdP zgIp*AW1doB4zZTZ^O$ds{P6wrCbBQ{8#qB5{iIt5c1I>6 zBYUnh0X{K`kvEjFC2adkJ8f14D7=G1P|g&G&^!(^b&&nm53N+w%(=O8uaqB`Ad%1A z5#6*ff_1xQO0%6SGk?brrh}>hL0flxbj%EiOJ!H+(*x7G|B#j`T$_qinCy>%5_(^> zR2R?UU$w*vL7~>SjW$^PR1K5h@XJ45=?5PQUVG5fh@{p?@OF&p&9qS(XAx_7bviYo z!@Hh$qNxk!T_|5v8EwkBoGbR@dl~ClrR3(xo+Z-(rWokI?VEWMK@aP`LHmqzM}kW=kk|O-cHQP0^k|_XwpdjC8i>#TX9alzU z;yrG}?^RqF?s>bJ_wrDucr?tJs@%!`Zb5|6zbFDZfq(h0ax??k+aB`{Z4=HIGKB3a zKW4;E9pI!m$qS{u5hPEEBaOU=;L#3wt!WQoYz5KyHSQPbc9(J#XrDaJjgKvk`rHK? zS>lz@!f1H8qhsRmHSwi56`Wf~t~bGMn&1;0m8%A%Zd*H>4J*0>gp-wqT8V9oN-l9Iz3_veypq(T;?bF$@r%P^s~ z>*(7&H|^o93bR*XV{+WSWi^0V+NNN$TVqH)9@+@XomDpY_p(Rn;l4h$nH9NY$kpWF zhH@(gK_T-e814h0<-Lk^G1LX0)^Eu~(X^pwXp1qHtPu`Zv|`!q$M!0qs5z2~5^#j) zwoYvFAJn6{FTozei|ZMm3A$fL(?TqnBZiu6vI<6gRa)SA!Ta+>>IleGhb z^Lx7ow@X8Jr^&S>;E@VNZM3!^vtl_gu;OkmN)lf4Z0{&UET8ey{B3@0a##pTf nWoF3-U_JiDGZummo{b(lg5aBWY?&cJc0_1g>9cvxFQ!|jT4X)j literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 1667fe1a..b779e7cf 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -596,6 +596,13 @@ def test_event_print(self): sys.stdout = sys.__stdout__ capturedOutput.close() + def test_70154(self): + for replayfilename in [ + "test_replays/4.7.0.70154/1.SC2Replay", + ]: + factory = sc2reader.factories.SC2Factory() + replay = factory.load_replay(replayfilename) + class TestGameEngine(unittest.TestCase): class TestEvent(object): From 468b0a6e8eb102f437fc7caf6385836e4e6aa8e7 Mon Sep 17 00:00:00 2001 From: Kevin Leung Date: Sun, 18 Nov 2018 16:21:42 -0800 Subject: [PATCH 2/2] added new data for 70154 --- sc2reader/data/LotV/70154_abilities.csv | 408 ++++++++++ sc2reader/data/LotV/70154_units.csv | 996 ++++++++++++++++++++++++ sc2reader/data/__init__.py | 2 +- sc2reader/data/ability_lookup.csv | 5 +- sc2reader/data/unit_lookup.csv | 21 + sc2reader/resources.py | 15 +- 6 files changed, 1438 insertions(+), 9 deletions(-) create mode 100644 sc2reader/data/LotV/70154_abilities.csv create mode 100644 sc2reader/data/LotV/70154_units.csv diff --git a/sc2reader/data/LotV/70154_abilities.csv b/sc2reader/data/LotV/70154_abilities.csv new file mode 100644 index 00000000..d4d9cc44 --- /dev/null +++ b/sc2reader/data/LotV/70154_abilities.csv @@ -0,0 +1,408 @@ +39,Taunt +40,stop +42,move +45,attack +60,SprayTerran +61,SprayZerg +62,SprayProtoss +63,SalvageShared +65,GhostHoldFire +66,GhostWeaponsFree +68,Explode +69,FleetBeaconResearch +70,FungalGrowth +71,GuardianShield +72,MULERepair +73,ZerglingTrain +74,NexusTrainMothership +75,Feedback +76,MassRecall +78,HallucinationArchon +79,HallucinationColossus +80,HallucinationHighTemplar +81,HallucinationImmortal +82,HallucinationPhoenix +83,HallucinationProbe +84,HallucinationStalker +85,HallucinationVoidRay +86,HallucinationWarpPrism +87,HallucinationZealot +88,MULEGather +90,CalldownMULE +91,GravitonBeam +95,SpawnChangeling +102,Rally +103,ProgressRally +104,RallyCommand +105,RallyNexus +106,RallyHatchery +107,RoachWarrenResearch +109,InfestedTerrans +110,NeuralParasite +111,SpawnLarva +112,StimpackMarauder +113,SupplyDrop +117,UltraliskCavernResearch +119,SCVHarvest +120,ProbeHarvest +122,que1 +123,que5 +124,que5CancelToSelection +126,que5Addon +127,BuildInProgress +128,Repair +129,TerranBuild +131,Stimpack +132,GhostCloak +134,MedivacHeal +135,SiegeMode +136,Unsiege +137,BansheeCloak +138,MedivacTransport +139,ScannerSweep +140,Yamato +141,AssaultMode +142,FighterMode +143,BunkerTransport +144,CommandCenterTransport +145,CommandCenterLiftOff +146,CommandCenterLand +147,BarracksFlyingBuild +148,BarracksLiftOff +149,FactoryBuild +150,FactoryLiftOff +151,StarportBuild +152,StarportLiftOff +153,FactoryLand +154,StarportLand +155,OrbitalCommandTrain +156,BarracksLand +157,SupplyDepotLower +158,SupplyDepotRaise +159,BarracksTrain +160,FactoryTrain +161,StarportTrain +162,EngineeringBayResearch +164,GhostAcademyTrain +165,BarracksTechLabResearch +166,FactoryTechLabResearch +167,StarportTechLabResearch +168,GhostAcademyResearch +169,ArmoryResearch +170,ProtossBuild +171,WarpPrismTransport +172,GatewayTrain +173,StargateTrain +174,RoboticsFacilityTrain +175,NexusTrain +176,PsiStorm +177,HangarQueue5 +179,CarrierTrain +180,ForgeResearch +181,RoboticsBayResearch +182,TemplarArchiveResearch +183,ZergBuild +184,DroneHarvest +185,EvolutionChamberResearch +186,UpgradeToLair +187,UpgradeToHive +188,UpgradeToGreaterSpire +189,HiveResearch +190,SpawningPoolResearch +191,HydraliskDenResearch +192,SpireResearch +193,LarvaTrain +194,MorphToBroodLord +195,BurrowBanelingDown +196,BurrowBanelingUp +197,BurrowDroneDown +198,BurrowDroneUp +199,BurrowHydraliskDown +200,BurrowHydraliskUp +201,BurrowRoachDown +202,BurrowRoachUp +203,BurrowZerglingDown +204,BurrowZerglingUp +205,BurrowInfestorTerranDown +206,BurrowInfestorTerranUp +207,RedstoneLavaCritterBurrow +208,RedstoneLavaCritterInjuredBurrow +209,RedstoneLavaCritterUnburrow +210,RedstoneLavaCritterInjuredUnburrow +214,WarpGateTrain +215,BurrowQueenDown +216,BurrowQueenUp +217,NydusCanalTransport +218,Blink +219,BurrowInfestorDown +220,BurrowInfestorUp +221,MorphToOverseer +222,UpgradeToPlanetaryFortress +223,InfestationPitResearch +224,BanelingNestResearch +225,BurrowUltraliskDown +226,BurrowUltraliskUp +227,UpgradeToOrbital +228,UpgradeToWarpGate +229,MorphBackToGateway +230,OrbitalLiftOff +231,OrbitalCommandLand +232,ForceField +233,PhasingMode +234,TransportMode +235,FusionCoreResearch +236,CyberneticsCoreResearch +237,TwilightCouncilResearch +238,TacNukeStrike +241,EMP +243,HiveTrain +245,Transfusion +254,AttackRedirect +255,StimpackRedirect +256,StimpackMarauderRedirect +258,StopRedirect +259,GenerateCreep +260,QueenBuild +261,SpineCrawlerUproot +262,SporeCrawlerUproot +263,SpineCrawlerRoot +264,SporeCrawlerRoot +265,CreepTumorBurrowedBuild +266,BuildAutoTurret +267,ArchonWarp +268,NydusNetworkBuild +270,Charge +274,Contaminate +277,que5Passive +278,que5PassiveCancelToSelection +302,ThorNormalMode +307,DigesterCreepSpray +311,MorphToMothership +336,XelNagaHealingShrine +345,MothershipCoreMassRecall +347,MorphToHellion +357,MorphToHellionTank +365,MorphToSwarmHostBurrowedMP +366,MorphToSwarmHostMP +368,attackProtossBuilding +370,stopProtossBuilding +371,BlindingCloud +373,Yoink +376,ViperConsumeStructure +379,TestZerg +380,VolatileBurstBuilding +387,WidowMineBurrow +388,WidowMineUnburrow +389,WidowMineAttack +390,TornadoMissile +394,BurrowLurkerMPDown +395,BurrowLurkerMPUp +397,HallucinationOracle +398,MedivacSpeedBoost +399,ExtendingBridgeNEWide8Out +400,ExtendingBridgeNEWide8 +401,ExtendingBridgeNWWide8Out +402,ExtendingBridgeNWWide8 +403,ExtendingBridgeNEWide10Out +404,ExtendingBridgeNEWide10 +405,ExtendingBridgeNWWide10Out +406,ExtendingBridgeNWWide10 +407,ExtendingBridgeNEWide12Out +408,ExtendingBridgeNEWide12 +409,ExtendingBridgeNWWide12Out +410,ExtendingBridgeNWWide12 +412,CritterFlee +413,OracleRevelation +421,MothershipCorePurifyNexus +422,XelNaga_Caverns_DoorE +423,XelNaga_Caverns_DoorEOpened +424,XelNaga_Caverns_DoorN +425,XelNaga_Caverns_DoorNE +426,XelNaga_Caverns_DoorNEOpened +427,XelNaga_Caverns_DoorNOpened +428,XelNaga_Caverns_DoorNW +429,XelNaga_Caverns_DoorNWOpened +430,XelNaga_Caverns_DoorS +431,XelNaga_Caverns_DoorSE +432,XelNaga_Caverns_DoorSEOpened +433,XelNaga_Caverns_DoorSOpened +434,XelNaga_Caverns_DoorSW +435,XelNaga_Caverns_DoorSWOpened +436,XelNaga_Caverns_DoorW +437,XelNaga_Caverns_DoorWOpened +438,XelNaga_Caverns_Floating_BridgeNE8Out +439,XelNaga_Caverns_Floating_BridgeNE8 +440,XelNaga_Caverns_Floating_BridgeNW8Out +441,XelNaga_Caverns_Floating_BridgeNW8 +442,XelNaga_Caverns_Floating_BridgeNE10Out +443,XelNaga_Caverns_Floating_BridgeNE10 +444,XelNaga_Caverns_Floating_BridgeNW10Out +445,XelNaga_Caverns_Floating_BridgeNW10 +446,XelNaga_Caverns_Floating_BridgeNE12Out +447,XelNaga_Caverns_Floating_BridgeNE12 +448,XelNaga_Caverns_Floating_BridgeNW12Out +449,XelNaga_Caverns_Floating_BridgeNW12 +450,XelNaga_Caverns_Floating_BridgeH8Out +451,XelNaga_Caverns_Floating_BridgeH8 +452,XelNaga_Caverns_Floating_BridgeV8Out +453,XelNaga_Caverns_Floating_BridgeV8 +454,XelNaga_Caverns_Floating_BridgeH10Out +455,XelNaga_Caverns_Floating_BridgeH10 +456,XelNaga_Caverns_Floating_BridgeV10Out +457,XelNaga_Caverns_Floating_BridgeV10 +458,XelNaga_Caverns_Floating_BridgeH12Out +459,XelNaga_Caverns_Floating_BridgeH12 +460,XelNaga_Caverns_Floating_BridgeV12Out +461,XelNaga_Caverns_Floating_BridgeV12 +462,TemporalField +486,SnowRefinery_Terran_ExtendingBridgeNEShort8Out +487,SnowRefinery_Terran_ExtendingBridgeNEShort8 +488,SnowRefinery_Terran_ExtendingBridgeNWShort8Out +489,SnowRefinery_Terran_ExtendingBridgeNWShort8 +511,CausticSpray +514,MorphToRavager +515,MorphToLurker +518,RavagerCorrosiveBile +519,BurrowRavagerDown +520,BurrowRavagerUp +522,PurificationNovaTargeted +524,LockOn +526,LockOnCancel +528,Hyperjump +530,ThorAPMode +533,NydusWormTransport +534,OracleWeapon +540,LocustMPFlyingSwoop +541,HallucinationDisruptor +542,HallucinationAdept +543,VoidRaySwarmDamageBoost +544,SeekerDummyChannel +545,AiurLightBridgeNE8Out +546,AiurLightBridgeNE8 +547,AiurLightBridgeNE10Out +548,AiurLightBridgeNE10 +549,AiurLightBridgeNE12Out +550,AiurLightBridgeNE12 +551,AiurLightBridgeNW8Out +552,AiurLightBridgeNW8 +553,AiurLightBridgeNW10Out +554,AiurLightBridgeNW10 +555,AiurLightBridgeNW12Out +556,AiurLightBridgeNW12 +569,ShakurasLightBridgeNE8Out +570,ShakurasLightBridgeNE8 +571,ShakurasLightBridgeNE10Out +572,ShakurasLightBridgeNE10 +573,ShakurasLightBridgeNE12Out +574,ShakurasLightBridgeNE12 +575,ShakurasLightBridgeNW8Out +576,ShakurasLightBridgeNW8 +577,ShakurasLightBridgeNW10Out +578,ShakurasLightBridgeNW10 +579,ShakurasLightBridgeNW12Out +580,ShakurasLightBridgeNW12 +581,VoidMPImmortalReviveRebuild +583,ArbiterMPStasisField +584,ArbiterMPRecall +585,CorsairMPDisruptionWeb +586,MorphToGuardianMP +587,MorphToDevourerMP +588,DefilerMPConsume +589,DefilerMPDarkSwarm +590,DefilerMPPlague +591,DefilerMPBurrow +592,DefilerMPUnburrow +593,QueenMPEnsnare +594,QueenMPSpawnBroodlings +595,QueenMPInfestCommandCenter +599,OracleBuild +603,ParasiticBomb +604,AdeptPhaseShift +607,LurkerHoldFire +608,LurkerRemoveHoldFire +611,LiberatorAGTarget +612,LiberatorAATarget +614,AiurLightBridgeAbandonedNE8Out +615,AiurLightBridgeAbandonedNE8 +616,AiurLightBridgeAbandonedNE10Out +617,AiurLightBridgeAbandonedNE10 +618,AiurLightBridgeAbandonedNE12Out +619,AiurLightBridgeAbandonedNE12 +620,AiurLightBridgeAbandonedNW8Out +621,AiurLightBridgeAbandonedNW8 +622,AiurLightBridgeAbandonedNW10Out +623,AiurLightBridgeAbandonedNW10 +624,AiurLightBridgeAbandonedNW12Out +625,AiurLightBridgeAbandonedNW12 +626,KD8Charge +629,AdeptPhaseShiftCancel +630,AdeptShadePhaseShiftCancel +631,SlaynElementalGrab +633,PortCity_Bridge_UnitNE8Out +634,PortCity_Bridge_UnitNE8 +635,PortCity_Bridge_UnitSE8Out +636,PortCity_Bridge_UnitSE8 +637,PortCity_Bridge_UnitNW8Out +638,PortCity_Bridge_UnitNW8 +639,PortCity_Bridge_UnitSW8Out +640,PortCity_Bridge_UnitSW8 +641,PortCity_Bridge_UnitNE10Out +642,PortCity_Bridge_UnitNE10 +643,PortCity_Bridge_UnitSE10Out +644,PortCity_Bridge_UnitSE10 +645,PortCity_Bridge_UnitNW10Out +646,PortCity_Bridge_UnitNW10 +647,PortCity_Bridge_UnitSW10Out +648,PortCity_Bridge_UnitSW10 +649,PortCity_Bridge_UnitNE12Out +650,PortCity_Bridge_UnitNE12 +651,PortCity_Bridge_UnitSE12Out +652,PortCity_Bridge_UnitSE12 +653,PortCity_Bridge_UnitNW12Out +654,PortCity_Bridge_UnitNW12 +655,PortCity_Bridge_UnitSW12Out +656,PortCity_Bridge_UnitSW12 +657,PortCity_Bridge_UnitN8Out +658,PortCity_Bridge_UnitN8 +659,PortCity_Bridge_UnitS8Out +660,PortCity_Bridge_UnitS8 +661,PortCity_Bridge_UnitE8Out +662,PortCity_Bridge_UnitE8 +663,PortCity_Bridge_UnitW8Out +664,PortCity_Bridge_UnitW8 +665,PortCity_Bridge_UnitN10Out +666,PortCity_Bridge_UnitN10 +667,PortCity_Bridge_UnitS10Out +668,PortCity_Bridge_UnitS10 +669,PortCity_Bridge_UnitE10Out +670,PortCity_Bridge_UnitE10 +671,PortCity_Bridge_UnitW10Out +672,PortCity_Bridge_UnitW10 +673,PortCity_Bridge_UnitN12Out +674,PortCity_Bridge_UnitN12 +675,PortCity_Bridge_UnitS12Out +676,PortCity_Bridge_UnitS12 +677,PortCity_Bridge_UnitE12Out +678,PortCity_Bridge_UnitE12 +679,PortCity_Bridge_UnitW12Out +680,PortCity_Bridge_UnitW12 +683,DarkTemplarBlink +687,OverlordSingleTransport +688,SpawnLocustsTargeted +689,ViperParasiticBombRelay +690,ParasiticBombRelayDodge +691,VoidRaySwarmDamageBoostCancel +693,MorphToTransportOverlord +696,ChannelSnipe +699,DarkShrineResearch +700,LurkerDenMPResearch +701,ObserverSiegeMorphtoObserver +702,ObserverMorphtoObserverSiege +703,OverseerMorphtoOverseerSiegeMode +704,OverseerSiegeModeMorphtoOverseer +705,RavenScramblerMissile +707,RavenRepairDroneHeal +708,RavenShredderMissile +709,ChronoBoostEnergyCost +710,NexusMassRecall +714,ShieldBatteryRechargeChanneled diff --git a/sc2reader/data/LotV/70154_units.csv b/sc2reader/data/LotV/70154_units.csv new file mode 100644 index 00000000..9d5982e7 --- /dev/null +++ b/sc2reader/data/LotV/70154_units.csv @@ -0,0 +1,996 @@ +3,System_Snapshot_Dummy +21,Ball +22,StereoscopicOptionsUnit +23,Colossus +24,TechLab +25,Reactor +27,InfestorTerran +28,BanelingCocoon +29,Baneling +30,Mothership +31,PointDefenseDrone +32,Changeling +33,ChangelingZealot +34,ChangelingMarineShield +35,ChangelingMarine +36,ChangelingZerglingWings +37,ChangelingZergling +39,CommandCenter +40,SupplyDepot +41,Refinery +42,Barracks +43,EngineeringBay +44,MissileTurret +45,Bunker +46,SensorTower +47,GhostAcademy +48,Factory +49,Starport +51,Armory +52,FusionCore +53,AutoTurret +54,SiegeTankSieged +55,SiegeTank +56,VikingAssault +57,VikingFighter +58,CommandCenterFlying +59,BarracksTechLab +60,BarracksReactor +61,FactoryTechLab +62,FactoryReactor +63,StarportTechLab +64,StarportReactor +65,FactoryFlying +66,StarportFlying +67,SCV +68,BarracksFlying +69,SupplyDepotLowered +70,Marine +71,Reaper +72,Ghost +73,Marauder +74,Thor +75,Hellion +76,Medivac +77,Banshee +78,Raven +79,Battlecruiser +80,Nuke +81,Nexus +82,Pylon +83,Assimilator +84,Gateway +85,Forge +86,FleetBeacon +87,TwilightCouncil +88,PhotonCannon +89,Stargate +90,TemplarArchive +91,DarkShrine +92,RoboticsBay +93,RoboticsFacility +94,CyberneticsCore +95,Zealot +96,Stalker +97,HighTemplar +98,DarkTemplar +99,Sentry +100,Phoenix +101,Carrier +102,VoidRay +103,WarpPrism +104,Observer +105,Immortal +106,Probe +107,Interceptor +108,Hatchery +109,CreepTumor +110,Extractor +111,SpawningPool +112,EvolutionChamber +113,HydraliskDen +114,Spire +115,UltraliskCavern +116,InfestationPit +117,NydusNetwork +118,BanelingNest +119,RoachWarren +120,SpineCrawler +121,SporeCrawler +122,Lair +123,Hive +124,GreaterSpire +125,Egg +126,Drone +127,Zergling +128,Overlord +129,Hydralisk +130,Mutalisk +131,Ultralisk +132,Roach +133,Infestor +134,Corruptor +135,BroodLordCocoon +136,BroodLord +137,BanelingBurrowed +138,DroneBurrowed +139,HydraliskBurrowed +140,RoachBurrowed +141,ZerglingBurrowed +142,InfestorTerranBurrowed +143,RedstoneLavaCritterBurrowed +144,RedstoneLavaCritterInjuredBurrowed +145,RedstoneLavaCritter +146,RedstoneLavaCritterInjured +147,QueenBurrowed +148,Queen +149,InfestorBurrowed +150,OverlordCocoon +151,Overseer +152,PlanetaryFortress +153,UltraliskBurrowed +154,OrbitalCommand +155,WarpGate +156,OrbitalCommandFlying +157,ForceField +158,WarpPrismPhasing +159,CreepTumorBurrowed +160,CreepTumorQueen +161,SpineCrawlerUprooted +162,SporeCrawlerUprooted +163,Archon +164,NydusCanal +165,BroodlingEscort +166,GhostAlternate +167,GhostNova +168,RichMineralField +169,RichMineralField750 +170,Ursadon +172,XelNagaTower +176,InfestedTerransEgg +177,Larva +178,OverseerSiegeMode +179,ReaperPlaceholder +180,MarineACGluescreenDummy +181,FirebatACGluescreenDummy +182,MedicACGluescreenDummy +183,MarauderACGluescreenDummy +184,VultureACGluescreenDummy +185,SiegeTankACGluescreenDummy +186,VikingACGluescreenDummy +187,BansheeACGluescreenDummy +188,BattlecruiserACGluescreenDummy +189,OrbitalCommandACGluescreenDummy +190,BunkerACGluescreenDummy +191,BunkerUpgradedACGluescreenDummy +192,MissileTurretACGluescreenDummy +193,HellbatACGluescreenDummy +194,GoliathACGluescreenDummy +195,CycloneACGluescreenDummy +196,WraithACGluescreenDummy +197,ScienceVesselACGluescreenDummy +198,HerculesACGluescreenDummy +199,ThorACGluescreenDummy +200,PerditionTurretACGluescreenDummy +201,FlamingBettyACGluescreenDummy +202,DevastationTurretACGluescreenDummy +203,BlasterBillyACGluescreenDummy +204,SpinningDizzyACGluescreenDummy +205,ZerglingKerriganACGluescreenDummy +206,RaptorACGluescreenDummy +207,QueenCoopACGluescreenDummy +208,HydraliskACGluescreenDummy +209,HydraliskLurkerACGluescreenDummy +210,MutaliskBroodlordACGluescreenDummy +211,BroodLordACGluescreenDummy +212,UltraliskACGluescreenDummy +213,TorrasqueACGluescreenDummy +214,OverseerACGluescreenDummy +215,LurkerACGluescreenDummy +216,SpineCrawlerACGluescreenDummy +217,SporeCrawlerACGluescreenDummy +218,NydusNetworkACGluescreenDummy +219,OmegaNetworkACGluescreenDummy +220,ZerglingZagaraACGluescreenDummy +221,SwarmlingACGluescreenDummy +222,QueenZagaraACGluescreenDummy +223,BanelingACGluescreenDummy +224,SplitterlingACGluescreenDummy +225,AberrationACGluescreenDummy +226,ScourgeACGluescreenDummy +227,CorruptorACGluescreenDummy +228,OverseerZagaraACGluescreenDummy +229,BileLauncherACGluescreenDummy +230,SwarmQueenACGluescreenDummy +231,RoachACGluescreenDummy +232,RoachVileACGluescreenDummy +233,RavagerACGluescreenDummy +234,SwarmHostACGluescreenDummy +235,MutaliskACGluescreenDummy +236,GuardianACGluescreenDummy +237,DevourerACGluescreenDummy +238,ViperACGluescreenDummy +239,BrutaliskACGluescreenDummy +240,LeviathanACGluescreenDummy +241,ZealotACGluescreenDummy +242,ZealotAiurACGluescreenDummy +243,DragoonACGluescreenDummy +244,HighTemplarACGluescreenDummy +245,ArchonACGluescreenDummy +246,ImmortalACGluescreenDummy +247,ObserverACGluescreenDummy +248,PhoenixAiurACGluescreenDummy +249,ReaverACGluescreenDummy +250,TempestACGluescreenDummy +251,PhotonCannonACGluescreenDummy +252,ZealotVorazunACGluescreenDummy +253,ZealotShakurasACGluescreenDummy +254,StalkerShakurasACGluescreenDummy +255,DarkTemplarShakurasACGluescreenDummy +256,CorsairACGluescreenDummy +257,VoidRayACGluescreenDummy +258,VoidRayShakurasACGluescreenDummy +259,OracleACGluescreenDummy +260,DarkArchonACGluescreenDummy +261,DarkPylonACGluescreenDummy +262,ZealotPurifierACGluescreenDummy +263,SentryPurifierACGluescreenDummy +264,ImmortalKaraxACGluescreenDummy +265,ColossusACGluescreenDummy +266,ColossusPurifierACGluescreenDummy +267,PhoenixPurifierACGluescreenDummy +268,CarrierACGluescreenDummy +269,CarrierAiurACGluescreenDummy +270,KhaydarinMonolithACGluescreenDummy +271,ShieldBatteryACGluescreenDummy +272,EliteMarineACGluescreenDummy +273,MarauderCommandoACGluescreenDummy +274,SpecOpsGhostACGluescreenDummy +275,HellbatRangerACGluescreenDummy +276,StrikeGoliathACGluescreenDummy +277,HeavySiegeTankACGluescreenDummy +278,RaidLiberatorACGluescreenDummy +279,RavenTypeIIACGluescreenDummy +280,CovertBansheeACGluescreenDummy +281,RailgunTurretACGluescreenDummy +282,BlackOpsMissileTurretACGluescreenDummy +283,SupplicantACGluescreenDummy +284,StalkerTaldarimACGluescreenDummy +285,SentryTaldarimACGluescreenDummy +286,HighTemplarTaldarimACGluescreenDummy +287,ImmortalTaldarimACGluescreenDummy +288,ColossusTaldarimACGluescreenDummy +289,WarpPrismTaldarimACGluescreenDummy +290,PhotonCannonTaldarimACGluescreenDummy +291,StukovInfestedCivilianACGluescreenDummy +292,StukovInfestedMarineACGluescreenDummy +293,StukovInfestedSiegeTankACGluescreenDummy +294,StukovInfestedDiamondbackACGluescreenDummy +295,StukovInfestedBansheeACGluescreenDummy +296,SILiberatorACGluescreenDummy +297,StukovInfestedBunkerACGluescreenDummy +298,StukovInfestedMissileTurretACGluescreenDummy +299,StukovBroodQueenACGluescreenDummy +300,ZealotFenixACGluescreenDummy +301,SentryFenixACGluescreenDummy +302,AdeptFenixACGluescreenDummy +303,ImmortalFenixACGluescreenDummy +304,ColossusFenixACGluescreenDummy +305,DisruptorACGluescreenDummy +306,ObserverFenixACGluescreenDummy +307,ScoutACGluescreenDummy +308,CarrierFenixACGluescreenDummy +309,PhotonCannonFenixACGluescreenDummy +310,PrimalZerglingACGluescreenDummy +311,RavasaurACGluescreenDummy +312,PrimalRoachACGluescreenDummy +313,FireRoachACGluescreenDummy +314,PrimalGuardianACGluescreenDummy +315,PrimalHydraliskACGluescreenDummy +316,PrimalMutaliskACGluescreenDummy +317,PrimalImpalerACGluescreenDummy +318,PrimalSwarmHostACGluescreenDummy +319,CreeperHostACGluescreenDummy +320,PrimalUltraliskACGluescreenDummy +321,TyrannozorACGluescreenDummy +322,PrimalWurmACGluescreenDummy +323,HHReaperACGluescreenDummy +324,HHWidowMineACGluescreenDummy +325,HHHellionTankACGluescreenDummy +326,HHWraithACGluescreenDummy +327,HHVikingACGluescreenDummy +328,HHBattlecruiserACGluescreenDummy +329,HHRavenACGluescreenDummy +330,HHBomberPlatformACGluescreenDummy +331,HHMercStarportACGluescreenDummy +332,HHMissileTurretACGluescreenDummy +333,TychusReaperACGluescreenDummy +334,TychusFirebatACGluescreenDummy +335,TychusSpectreACGluescreenDummy +336,TychusMedicACGluescreenDummy +337,TychusMarauderACGluescreenDummy +338,TychusWarhoundACGluescreenDummy +339,TychusHERCACGluescreenDummy +340,TychusGhostACGluescreenDummy +341,TychusSCVAutoTurretACGluescreenDummy +342,ZeratulStalkerACGluescreenDummy +343,ZeratulSentryACGluescreenDummy +344,ZeratulDarkTemplarACGluescreenDummy +345,ZeratulImmortalACGluescreenDummy +346,ZeratulObserverACGluescreenDummy +347,ZeratulDisruptorACGluescreenDummy +348,ZeratulWarpPrismACGluescreenDummy +349,ZeratulPhotonCannonACGluescreenDummy +351,RenegadeLongboltMissileWeapon +352,NeedleSpinesWeapon +353,CorruptionWeapon +354,InfestedTerransWeapon +355,NeuralParasiteWeapon +356,PointDefenseDroneReleaseWeapon +357,HunterSeekerWeapon +358,MULE +360,ThorAAWeapon +361,PunisherGrenadesLMWeapon +362,VikingFighterWeapon +363,ATALaserBatteryLMWeapon +364,ATSLaserBatteryLMWeapon +365,LongboltMissileWeapon +366,D8ChargeWeapon +367,YamatoWeapon +368,IonCannonsWeapon +369,AcidSalivaWeapon +370,SpineCrawlerWeapon +371,SporeCrawlerWeapon +372,GlaiveWurmWeapon +373,GlaiveWurmM2Weapon +374,GlaiveWurmM3Weapon +375,StalkerWeapon +376,EMP2Weapon +377,BacklashRocketsLMWeapon +378,PhotonCannonWeapon +379,ParasiteSporeWeapon +381,Broodling +382,BroodLordBWeapon +385,AutoTurretReleaseWeapon +386,LarvaReleaseMissile +387,AcidSpinesWeapon +388,FrenzyWeapon +389,ContaminateWeapon +401,BeaconArmy +402,BeaconDefend +403,BeaconAttack +404,BeaconHarass +405,BeaconIdle +406,BeaconAuto +407,BeaconDetect +408,BeaconScout +409,BeaconClaim +410,BeaconExpand +411,BeaconRally +412,BeaconCustom1 +413,BeaconCustom2 +414,BeaconCustom3 +415,BeaconCustom4 +420,LiberatorAG +421,LurkerMP +422,OverlordTransport +425,HellionTank +426,Cyclone +427,WidowMine +428,Liberator +429,Adept +430,Disruptor +431,Oracle +432,Tempest +433,Ravager +434,SwarmHostMP +435,Viper +436,HighTemplarSkinPreview +437,MothershipCore +438,Viking +446,RenegadeMissileTurret +447,Rocks2x2NonConjoined +448,FungalGrowthMissile +449,NeuralParasiteTentacleMissile +450,Beacon_Protoss +451,Beacon_ProtossSmall +452,Beacon_Terran +453,Beacon_TerranSmall +454,Beacon_Zerg +455,Beacon_ZergSmall +456,Lyote +457,CarrionBird +458,KarakMale +459,KarakFemale +460,UrsadakFemaleExotic +461,UrsadakMale +462,UrsadakFemale +463,UrsadakCalf +464,UrsadakMaleExotic +465,UtilityBot +466,CommentatorBot1 +467,CommentatorBot2 +468,CommentatorBot3 +469,CommentatorBot4 +470,Scantipede +471,Dog +472,Sheep +473,Cow +474,InfestedTerransEggPlacement +475,InfestorTerransWeapon +476,MineralField +477,MineralField750 +478,VespeneGeyser +479,SpacePlatformGeyser +480,RichVespeneGeyser +481,DestructibleSearchlight +482,DestructibleBullhornLights +483,DestructibleStreetlight +484,DestructibleSpacePlatformSign +485,DestructibleStoreFrontCityProps +486,DestructibleBillboardTall +487,DestructibleBillboardScrollingText +488,DestructibleSpacePlatformBarrier +489,DestructibleSignsDirectional +490,DestructibleSignsConstruction +491,DestructibleSignsFunny +492,DestructibleSignsIcons +493,DestructibleSignsWarning +494,DestructibleGarage +495,DestructibleGarageLarge +496,DestructibleTrafficSignal +497,TrafficSignal +498,BraxisAlphaDestructible1x1 +499,BraxisAlphaDestructible2x2 +500,DestructibleDebris4x4 +501,DestructibleDebris6x6 +502,DestructibleRock2x4Vertical +503,DestructibleRock2x4Horizontal +504,DestructibleRock2x6Vertical +505,DestructibleRock2x6Horizontal +506,DestructibleRock4x4 +507,DestructibleRock6x6 +508,DestructibleRampDiagonalHugeULBR +509,DestructibleRampDiagonalHugeBLUR +510,DestructibleRampVerticalHuge +511,DestructibleRampHorizontalHuge +512,DestructibleDebrisRampDiagonalHugeULBR +513,DestructibleDebrisRampDiagonalHugeBLUR +514,WarpPrismSkinPreview +515,SiegeTankSkinPreview +516,ThorAP +517,ThorAALance +518,LiberatorSkinPreview +519,OverlordGenerateCreepKeybind +520,MengskStatueAlone +521,MengskStatue +522,WolfStatue +523,GlobeStatue +524,Weapon +525,GlaiveWurmBounceWeapon +526,BroodLordWeapon +527,BroodLordAWeapon +528,CreepBlocker1x1 +529,PermanentCreepBlocker1x1 +530,PathingBlocker1x1 +531,PathingBlocker2x2 +532,AutoTestAttackTargetGround +533,AutoTestAttackTargetAir +534,AutoTestAttacker +535,HelperEmitterSelectionArrow +536,MultiKillObject +537,ShapeGolfball +538,ShapeCone +539,ShapeCube +540,ShapeCylinder +541,ShapeDodecahedron +542,ShapeIcosahedron +543,ShapeOctahedron +544,ShapePyramid +545,ShapeRoundedCube +546,ShapeSphere +547,ShapeTetrahedron +548,ShapeThickTorus +549,ShapeThinTorus +550,ShapeTorus +551,Shape4PointStar +552,Shape5PointStar +553,Shape6PointStar +554,Shape8PointStar +555,ShapeArrowPointer +556,ShapeBowl +557,ShapeBox +558,ShapeCapsule +559,ShapeCrescentMoon +560,ShapeDecahedron +561,ShapeDiamond +562,ShapeFootball +563,ShapeGemstone +564,ShapeHeart +565,ShapeJack +566,ShapePlusSign +567,ShapeShamrock +568,ShapeSpade +569,ShapeTube +570,ShapeEgg +571,ShapeYenSign +572,ShapeX +573,ShapeWatermelon +574,ShapeWonSign +575,ShapeTennisball +576,ShapeStrawberry +577,ShapeSmileyFace +578,ShapeSoccerball +579,ShapeRainbow +580,ShapeSadFace +581,ShapePoundSign +582,ShapePear +583,ShapePineapple +584,ShapeOrange +585,ShapePeanut +586,ShapeO +587,ShapeLemon +588,ShapeMoneyBag +589,ShapeHorseshoe +590,ShapeHockeyStick +591,ShapeHockeyPuck +592,ShapeHand +593,ShapeGolfClub +594,ShapeGrape +595,ShapeEuroSign +596,ShapeDollarSign +597,ShapeBasketball +598,ShapeCarrot +599,ShapeCherry +600,ShapeBaseball +601,ShapeBaseballBat +602,ShapeBanana +603,ShapeApple +604,ShapeCashLarge +605,ShapeCashMedium +606,ShapeCashSmall +607,ShapeFootballColored +608,ShapeLemonSmall +609,ShapeOrangeSmall +610,ShapeTreasureChestOpen +611,ShapeTreasureChestClosed +612,ShapeWatermelonSmall +613,UnbuildableRocksDestructible +614,UnbuildableBricksDestructible +615,UnbuildablePlatesDestructible +616,Debris2x2NonConjoined +617,EnemyPathingBlocker1x1 +618,EnemyPathingBlocker2x2 +619,EnemyPathingBlocker4x4 +620,EnemyPathingBlocker8x8 +621,EnemyPathingBlocker16x16 +622,ScopeTest +623,SentryACGluescreenDummy +624,StukovInfestedTrooperACGluescreenDummy +640,CollapsibleTerranTowerDebris +641,DebrisRampLeft +642,DebrisRampRight +646,LocustMP +647,CollapsibleRockTowerDebris +648,NydusCanalAttacker +649,NydusCanalCreeper +650,SwarmHostBurrowedMP +651,WarHound +652,WidowMineBurrowed +653,LurkerMPEgg +654,LurkerMPBurrowed +655,LurkerDenMP +656,ExtendingBridgeNEWide8Out +657,ExtendingBridgeNEWide8 +658,ExtendingBridgeNWWide8Out +659,ExtendingBridgeNWWide8 +660,ExtendingBridgeNEWide10Out +661,ExtendingBridgeNEWide10 +662,ExtendingBridgeNWWide10Out +663,ExtendingBridgeNWWide10 +664,ExtendingBridgeNEWide12Out +665,ExtendingBridgeNEWide12 +666,ExtendingBridgeNWWide12Out +667,ExtendingBridgeNWWide12 +669,CollapsibleRockTowerDebrisRampRight +670,CollapsibleRockTowerDebrisRampLeft +671,XelNaga_Caverns_DoorE +672,XelNaga_Caverns_DoorEOpened +673,XelNaga_Caverns_DoorN +674,XelNaga_Caverns_DoorNE +675,XelNaga_Caverns_DoorNEOpened +676,XelNaga_Caverns_DoorNOpened +677,XelNaga_Caverns_DoorNW +678,XelNaga_Caverns_DoorNWOpened +679,XelNaga_Caverns_DoorS +680,XelNaga_Caverns_DoorSE +681,XelNaga_Caverns_DoorSEOpened +682,XelNaga_Caverns_DoorSOpened +683,XelNaga_Caverns_DoorSW +684,XelNaga_Caverns_DoorSWOpened +685,XelNaga_Caverns_DoorW +686,XelNaga_Caverns_DoorWOpened +687,XelNaga_Caverns_Floating_BridgeNE8Out +688,XelNaga_Caverns_Floating_BridgeNE8 +689,XelNaga_Caverns_Floating_BridgeNW8Out +690,XelNaga_Caverns_Floating_BridgeNW8 +691,XelNaga_Caverns_Floating_BridgeNE10Out +692,XelNaga_Caverns_Floating_BridgeNE10 +693,XelNaga_Caverns_Floating_BridgeNW10Out +694,XelNaga_Caverns_Floating_BridgeNW10 +695,XelNaga_Caverns_Floating_BridgeNE12Out +696,XelNaga_Caverns_Floating_BridgeNE12 +697,XelNaga_Caverns_Floating_BridgeNW12Out +698,XelNaga_Caverns_Floating_BridgeNW12 +699,XelNaga_Caverns_Floating_BridgeH8Out +700,XelNaga_Caverns_Floating_BridgeH8 +701,XelNaga_Caverns_Floating_BridgeV8Out +702,XelNaga_Caverns_Floating_BridgeV8 +703,XelNaga_Caverns_Floating_BridgeH10Out +704,XelNaga_Caverns_Floating_BridgeH10 +705,XelNaga_Caverns_Floating_BridgeV10Out +706,XelNaga_Caverns_Floating_BridgeV10 +707,XelNaga_Caverns_Floating_BridgeH12Out +708,XelNaga_Caverns_Floating_BridgeH12 +709,XelNaga_Caverns_Floating_BridgeV12Out +710,XelNaga_Caverns_Floating_BridgeV12 +713,CollapsibleTerranTowerPushUnitRampLeft +714,CollapsibleTerranTowerPushUnitRampRight +717,CollapsibleRockTowerPushUnit +718,CollapsibleTerranTowerPushUnit +719,CollapsibleRockTowerPushUnitRampRight +720,CollapsibleRockTowerPushUnitRampLeft +721,DigesterCreepSprayTargetUnit +722,DigesterCreepSprayUnit +723,NydusCanalAttackerWeapon +724,ViperConsumeStructureWeapon +727,ResourceBlocker +728,TempestWeapon +729,YoinkMissile +733,YoinkVikingAirMissile +735,YoinkVikingGroundMissile +737,YoinkSiegeTankMissile +739,WarHoundWeapon +741,EyeStalkWeapon +744,WidowMineWeapon +745,WidowMineAirWeapon +746,MothershipCoreWeaponWeapon +747,TornadoMissileWeapon +748,TornadoMissileDummyWeapon +749,TalonsMissileWeapon +750,CreepTumorMissile +751,LocustMPEggAMissileWeapon +752,LocustMPEggBMissileWeapon +753,LocustMPWeapon +755,RepulsorCannonWeapon +759,CollapsibleRockTowerDiagonal +760,CollapsibleTerranTowerDiagonal +761,CollapsibleTerranTowerRampLeft +762,CollapsibleTerranTowerRampRight +763,Ice2x2NonConjoined +764,IceProtossCrates +765,ProtossCrates +766,TowerMine +767,PickupPalletGas +768,PickupPalletMinerals +769,PickupScrapSalvage1x1 +770,PickupScrapSalvage2x2 +771,PickupScrapSalvage3x3 +772,RoughTerrain +773,UnbuildableBricksSmallUnit +774,UnbuildablePlatesSmallUnit +775,UnbuildablePlatesUnit +776,UnbuildableRocksSmallUnit +777,XelNagaHealingShrine +778,InvisibleTargetDummy +779,ProtossVespeneGeyser +780,CollapsibleRockTower +781,CollapsibleTerranTower +782,ThornLizard +783,CleaningBot +784,DestructibleRock6x6Weak +785,ProtossSnakeSegmentDemo +786,PhysicsCapsule +787,PhysicsCube +788,PhysicsCylinder +789,PhysicsKnot +790,PhysicsL +791,PhysicsPrimitives +792,PhysicsSphere +793,PhysicsStar +794,CreepBlocker4x4 +795,DestructibleCityDebris2x4Vertical +796,DestructibleCityDebris2x4Horizontal +797,DestructibleCityDebris2x6Vertical +798,DestructibleCityDebris2x6Horizontal +799,DestructibleCityDebris4x4 +800,DestructibleCityDebris6x6 +801,DestructibleCityDebrisHugeDiagonalBLUR +802,DestructibleCityDebrisHugeDiagonalULBR +803,TestZerg +804,PathingBlockerRadius1 +805,DestructibleRockEx12x4Vertical +806,DestructibleRockEx12x4Horizontal +807,DestructibleRockEx12x6Vertical +808,DestructibleRockEx12x6Horizontal +809,DestructibleRockEx14x4 +810,DestructibleRockEx16x6 +811,DestructibleRockEx1DiagonalHugeULBR +812,DestructibleRockEx1DiagonalHugeBLUR +813,DestructibleRockEx1VerticalHuge +814,DestructibleRockEx1HorizontalHuge +815,DestructibleIce2x4Vertical +816,DestructibleIce2x4Horizontal +817,DestructibleIce2x6Vertical +818,DestructibleIce2x6Horizontal +819,DestructibleIce4x4 +820,DestructibleIce6x6 +821,DestructibleIceDiagonalHugeULBR +822,DestructibleIceDiagonalHugeBLUR +823,DestructibleIceVerticalHuge +824,DestructibleIceHorizontalHuge +825,DesertPlanetSearchlight +826,DesertPlanetStreetlight +827,UnbuildableBricksUnit +828,UnbuildableRocksUnit +829,ZerusDestructibleArch +830,Artosilope +831,Anteplott +832,LabBot +833,Crabeetle +834,CollapsibleRockTowerRampRight +835,CollapsibleRockTowerRampLeft +836,LabMineralField +837,LabMineralField750 +852,SnowRefinery_Terran_ExtendingBridgeNEShort8Out +853,SnowRefinery_Terran_ExtendingBridgeNEShort8 +854,SnowRefinery_Terran_ExtendingBridgeNWShort8Out +855,SnowRefinery_Terran_ExtendingBridgeNWShort8 +860,Tarsonis_DoorN +861,Tarsonis_DoorNLowered +862,Tarsonis_DoorNE +863,Tarsonis_DoorNELowered +864,Tarsonis_DoorE +865,Tarsonis_DoorELowered +866,Tarsonis_DoorNW +867,Tarsonis_DoorNWLowered +868,CompoundMansion_DoorN +869,CompoundMansion_DoorNLowered +870,CompoundMansion_DoorNE +871,CompoundMansion_DoorNELowered +872,CompoundMansion_DoorE +873,CompoundMansion_DoorELowered +874,CompoundMansion_DoorNW +875,CompoundMansion_DoorNWLowered +876,RavagerCocoon +877,RavagerBurrowed +879,LocustMPFlying +880,AiurLightBridgeNE8Out +881,AiurLightBridgeNE8 +882,AiurLightBridgeNE10Out +883,AiurLightBridgeNE10 +884,AiurLightBridgeNE12Out +885,AiurLightBridgeNE12 +886,AiurLightBridgeNW8Out +887,AiurLightBridgeNW8 +888,AiurLightBridgeNW10Out +889,AiurLightBridgeNW10 +890,AiurLightBridgeNW12Out +891,AiurLightBridgeNW12 +892,AiurTempleBridgeNE8Out +894,AiurTempleBridgeNE10Out +896,AiurTempleBridgeNE12Out +898,AiurTempleBridgeNW8Out +900,AiurTempleBridgeNW10Out +902,AiurTempleBridgeNW12Out +904,ShakurasLightBridgeNE8Out +905,ShakurasLightBridgeNE8 +906,ShakurasLightBridgeNE10Out +907,ShakurasLightBridgeNE10 +908,ShakurasLightBridgeNE12Out +909,ShakurasLightBridgeNE12 +910,ShakurasLightBridgeNW8Out +911,ShakurasLightBridgeNW8 +912,ShakurasLightBridgeNW10Out +913,ShakurasLightBridgeNW10 +914,ShakurasLightBridgeNW12Out +915,ShakurasLightBridgeNW12 +916,VoidMPImmortalReviveCorpse +917,GuardianCocoonMP +918,GuardianMP +919,DevourerCocoonMP +920,DevourerMP +921,DefilerMPBurrowed +922,DefilerMP +923,OracleStasisTrap +924,DisruptorPhased +925,AiurLightBridgeAbandonedNE8Out +926,AiurLightBridgeAbandonedNE8 +927,AiurLightBridgeAbandonedNE10Out +928,AiurLightBridgeAbandonedNE10 +929,AiurLightBridgeAbandonedNE12Out +930,AiurLightBridgeAbandonedNE12 +931,AiurLightBridgeAbandonedNW8Out +932,AiurLightBridgeAbandonedNW8 +933,AiurLightBridgeAbandonedNW10Out +934,AiurLightBridgeAbandonedNW10 +935,AiurLightBridgeAbandonedNW12Out +936,AiurLightBridgeAbandonedNW12 +937,CollapsiblePurifierTowerDebris +938,PortCity_Bridge_UnitNE8Out +939,PortCity_Bridge_UnitNE8 +940,PortCity_Bridge_UnitSE8Out +941,PortCity_Bridge_UnitSE8 +942,PortCity_Bridge_UnitNW8Out +943,PortCity_Bridge_UnitNW8 +944,PortCity_Bridge_UnitSW8Out +945,PortCity_Bridge_UnitSW8 +946,PortCity_Bridge_UnitNE10Out +947,PortCity_Bridge_UnitNE10 +948,PortCity_Bridge_UnitSE10Out +949,PortCity_Bridge_UnitSE10 +950,PortCity_Bridge_UnitNW10Out +951,PortCity_Bridge_UnitNW10 +952,PortCity_Bridge_UnitSW10Out +953,PortCity_Bridge_UnitSW10 +954,PortCity_Bridge_UnitNE12Out +955,PortCity_Bridge_UnitNE12 +956,PortCity_Bridge_UnitSE12Out +957,PortCity_Bridge_UnitSE12 +958,PortCity_Bridge_UnitNW12Out +959,PortCity_Bridge_UnitNW12 +960,PortCity_Bridge_UnitSW12Out +961,PortCity_Bridge_UnitSW12 +962,PortCity_Bridge_UnitN8Out +963,PortCity_Bridge_UnitN8 +964,PortCity_Bridge_UnitS8Out +965,PortCity_Bridge_UnitS8 +966,PortCity_Bridge_UnitE8Out +967,PortCity_Bridge_UnitE8 +968,PortCity_Bridge_UnitW8Out +969,PortCity_Bridge_UnitW8 +970,PortCity_Bridge_UnitN10Out +971,PortCity_Bridge_UnitN10 +972,PortCity_Bridge_UnitS10Out +973,PortCity_Bridge_UnitS10 +974,PortCity_Bridge_UnitE10Out +975,PortCity_Bridge_UnitE10 +976,PortCity_Bridge_UnitW10Out +977,PortCity_Bridge_UnitW10 +978,PortCity_Bridge_UnitN12Out +979,PortCity_Bridge_UnitN12 +980,PortCity_Bridge_UnitS12Out +981,PortCity_Bridge_UnitS12 +982,PortCity_Bridge_UnitE12Out +983,PortCity_Bridge_UnitE12 +984,PortCity_Bridge_UnitW12Out +985,PortCity_Bridge_UnitW12 +986,PurifierRichMineralField +987,PurifierRichMineralField750 +1002,CollapsiblePurifierTowerPushUnit +1004,LocustMPPrecursor +1005,ReleaseInterceptorsBeacon +1006,AdeptPhaseShift +1007,RavagerCorrosiveBileMissile +1008,HydraliskImpaleMissile +1009,CycloneMissileLargeAir +1010,CycloneMissile +1011,CycloneMissileLarge +1012,OracleWeapon +1013,TempestWeaponGround +1014,RavagerWeaponMissile +1015,ScoutMPAirWeaponLeft +1016,ScoutMPAirWeaponRight +1017,ArbiterMPWeaponMissile +1018,GuardianMPWeapon +1019,DevourerMPWeaponMissile +1020,DefilerMPDarkSwarmWeapon +1021,QueenMPEnsnareMissile +1022,QueenMPSpawnBroodlingsMissile +1023,LightningBombWeapon +1024,HERCPlacement +1025,GrappleWeapon +1028,CausticSprayMissile +1029,ParasiticBombMissile +1030,ParasiticBombDummy +1031,AdeptWeapon +1032,AdeptUpgradeWeapon +1033,LiberatorMissile +1034,LiberatorDamageMissile +1035,LiberatorAGMissile +1036,KD8Charge +1037,KD8ChargeWeapon +1039,SlaynElementalGrabWeapon +1040,SlaynElementalGrabAirUnit +1041,SlaynElementalGrabGroundUnit +1042,SlaynElementalWeapon +1047,DestructibleExpeditionGate6x6 +1048,DestructibleZergInfestation3x3 +1049,HERC +1050,Moopy +1051,Replicant +1052,SeekerMissile +1053,AiurTempleBridgeDestructibleNE8Out +1054,AiurTempleBridgeDestructibleNE10Out +1055,AiurTempleBridgeDestructibleNE12Out +1056,AiurTempleBridgeDestructibleNW8Out +1057,AiurTempleBridgeDestructibleNW10Out +1058,AiurTempleBridgeDestructibleNW12Out +1059,AiurTempleBridgeDestructibleSW8Out +1060,AiurTempleBridgeDestructibleSW10Out +1061,AiurTempleBridgeDestructibleSW12Out +1062,AiurTempleBridgeDestructibleSE8Out +1063,AiurTempleBridgeDestructibleSE10Out +1064,AiurTempleBridgeDestructibleSE12Out +1066,FlyoverUnit +1067,CorsairMP +1068,ScoutMP +1070,ArbiterMP +1071,ScourgeMP +1072,DefilerMPPlagueWeapon +1073,QueenMP +1074,XelNagaDestructibleRampBlocker6S +1075,XelNagaDestructibleRampBlocker6SE +1076,XelNagaDestructibleRampBlocker6E +1077,XelNagaDestructibleRampBlocker6NE +1078,XelNagaDestructibleRampBlocker6N +1079,XelNagaDestructibleRampBlocker6NW +1080,XelNagaDestructibleRampBlocker6W +1081,XelNagaDestructibleRampBlocker6SW +1082,XelNagaDestructibleRampBlocker8S +1083,XelNagaDestructibleRampBlocker8SE +1084,XelNagaDestructibleRampBlocker8E +1085,XelNagaDestructibleRampBlocker8NE +1086,XelNagaDestructibleRampBlocker8N +1087,XelNagaDestructibleRampBlocker8NW +1088,XelNagaDestructibleRampBlocker8W +1089,XelNagaDestructibleRampBlocker8SW +1090,XelNagaDestructibleBlocker6S +1091,XelNagaDestructibleBlocker6SE +1092,XelNagaDestructibleBlocker6E +1093,XelNagaDestructibleBlocker6NE +1094,XelNagaDestructibleBlocker6N +1095,XelNagaDestructibleBlocker6NW +1096,XelNagaDestructibleBlocker6W +1097,XelNagaDestructibleBlocker6SW +1098,XelNagaDestructibleBlocker8S +1099,XelNagaDestructibleBlocker8SE +1100,XelNagaDestructibleBlocker8E +1101,XelNagaDestructibleBlocker8NE +1102,XelNagaDestructibleBlocker8N +1103,XelNagaDestructibleBlocker8NW +1104,XelNagaDestructibleBlocker8W +1105,XelNagaDestructibleBlocker8SW +1106,ReptileCrate +1107,SlaynSwarmHostSpawnFlyer +1108,SlaynElemental +1109,PurifierVespeneGeyser +1110,ShakurasVespeneGeyser +1111,CollapsiblePurifierTowerDiagonal +1112,CreepOnlyBlocker4x4 +1113,BattleStationMineralField +1114,BattleStationMineralField750 +1115,PurifierMineralField +1116,PurifierMineralField750 +1117,Beacon_Nova +1118,Beacon_NovaSmall +1119,Ursula +1120,Elsecaro_Colonist_Hut +1121,SnowGlazeStarterMP +1122,ShieldBattery +1123,TransportOverlordCocoon +1124,PylonOvercharged +1125,ObserverSiegeMode +1126,RavenRepairDrone +1128,ParasiticBombRelayDummy +1129,BypassArmorDrone +1130,AdeptPiercingWeapon +1131,HighTemplarWeaponMissile +1132,CycloneMissileLargeAirAlternative +1133,RavenScramblerMissile +1134,RavenRepairDroneReleaseWeapon +1135,RavenShredderMissileWeapon +1136,InfestedAcidSpinesWeapon +1137,InfestorEnsnareAttackMissile +1138,SNARE_PLACEHOLDER +1141,CorrosiveParasiteWeapon diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 0e25cfa8..7a3d4ecb 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -411,7 +411,7 @@ def load_build(expansion, version): # Load LotV Data lotv_builds = dict() -for version in ('base', '44401', '47185', '48258', '53644', '54724', '59587'): +for version in ('base', '44401', '47185', '48258', '53644', '54724', '59587', '70154'): lotv_builds[version] = load_build('LotV', version) datapacks = builds = {'WoL': wol_builds, 'HotS': hots_builds, 'LotV': lotv_builds} diff --git a/sc2reader/data/ability_lookup.csv b/sc2reader/data/ability_lookup.csv index fa4ed3aa..09b69177 100755 --- a/sc2reader/data/ability_lookup.csv +++ b/sc2reader/data/ability_lookup.csv @@ -160,7 +160,7 @@ HallucinationZealot,HallucinateZealot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, HangarQueue5,CancelLast,CancelSlot,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, HerdInteract,Herd,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, HoldFire,Stop,HoldFire,Cheer,Dance,,,,,,,,,,,,,,,,,,,,,,,,,,,, -HydraliskDenResearch,,ResearchEvolveMuscularAugments,EvolveGroovedSpines,EvolveMuscularAugments,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelHydraliskDenResearch, +HydraliskDenResearch,ResearchEvolveGroovedSpines,ResearchEvolveMuscularAugments,EvolveGroovedSpines,EvolveMuscularAugments,,,,,,,,,,,,,,,,,,,,,,,,,,,CancelHydraliskDenResearch, InfestationPitResearch,,,EvolvePathogenGlands,EvolveNeuralParasite,EvolveEnduringLocusts,,,,,,,,,,,,,,,,,,,,,,,,,,CancelInfestationPitResearch, InfestedTerrans,SpawnInfestedTerran,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, InfestedTerransLayEgg,SpawnInfestedTerran,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, @@ -858,3 +858,6 @@ ChronoBoostEnergyCost,ChronoBoostEnergyCost ObserverMorphtoObserverSiege,ObserverMorphtoObserverSiege RavenRepairDroneHeal,RavenRepairDroneHeal NexusMassRecall,NexusMassRecall +OverlordSingleTransport,Load,,UnloadAt +ParasiticBombRelayDodge,ParasiticBombRelayDodge +ViperParasiticBombRelay,ViperParasiticBombRelay diff --git a/sc2reader/data/unit_lookup.csv b/sc2reader/data/unit_lookup.csv index 519c782a..7327ef0d 100755 --- a/sc2reader/data/unit_lookup.csv +++ b/sc2reader/data/unit_lookup.csv @@ -999,3 +999,24 @@ TyrannozorACGluescreenDummy,TyrannozorACGluescreenDummy InfestorEnsnareAttackMissile,InfestorEnsnareAttackMissile HHMissileTurretACGluescreenDummy,HHMissileTurretACGluescreenDummy WarpPrismSkinPreview,WarpPrismSkinPreview +ZeratulWarpPrismACGluescreenDummy,ZeratulWarpPrismACGluescreenDummy +TychusMedicACGluescreenDummy,TychusMedicACGluescreenDummy +ParasiticBombRelayDummy,ParasiticBombRelayDummy +ZeratulDisruptorACGluescreenDummy,ZeratulDisruptorACGluescreenDummy +ZeratulImmortalACGluescreenDummy,ZeratulImmortalACGluescreenDummy +TychusHERCACGluescreenDummy,TychusHERCACGluescreenDummy +RenegadeMissileTurret,RenegadeMissileTurret +ZeratulDarkTemplarACGluescreenDummy,ZeratulDarkTemplarACGluescreenDummy +TychusFirebatACGluescreenDummy,TychusFirebatACGluescreenDummy +ZeratulObserverACGluescreenDummy,ZeratulObserverACGluescreenDummy +ZeratulSentryACGluescreenDummy,ZeratulSentryACGluescreenDummy +TychusGhostACGluescreenDummy,TychusGhostACGluescreenDummy +TychusWarhoundACGluescreenDummy,TychusWarhoundACGluescreenDummy +TychusMarauderACGluescreenDummy,TychusMarauderACGluescreenDummy +RenegadeLongboltMissileWeapon,RenegadeLongboltMissileWeapon +TychusSpectreACGluescreenDummy,TychusSpectreACGluescreenDummy +TychusSCVAutoTurretACGluescreenDummy,TychusSCVAutoTurretACGluescreenDummy +ZeratulStalkerACGluescreenDummy,ZeratulStalkerACGluescreenDummy +ZeratulPhotonCannonACGluescreenDummy,ZeratulPhotonCannonACGluescreenDummy +Viking,Viking +TychusReaperACGluescreenDummy,TychusReaperACGluescreenDummy diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 9bc76da2..8d165670 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -601,16 +601,17 @@ def register_default_datapacks(self): self.register_datapack(datapacks['WoL']['24944'], lambda r: r.expansion == 'WoL' and 24944 <= r.build) self.register_datapack(datapacks['HotS']['base'], lambda r: r.expansion == 'HotS' and r.build < 23925) self.register_datapack(datapacks['HotS']['23925'], lambda r: r.expansion == 'HotS' and 23925 <= r.build < 24247) - self.register_datapack(datapacks['HotS']['24247'], lambda r: r.expansion == 'HotS' and 24247 <= r.build <= 24764) + self.register_datapack(datapacks['HotS']['24247'], lambda r: r.expansion == 'HotS' and 24247 <= r.build < 24764) self.register_datapack(datapacks['HotS']['24764'], lambda r: r.expansion == 'HotS' and 24764 <= r.build < 38215) self.register_datapack(datapacks['HotS']['38215'], lambda r: r.expansion == 'HotS' and 38215 <= r.build) self.register_datapack(datapacks['LotV']['base'], lambda r: r.expansion == 'LotV' and 34784 <= r.build) - self.register_datapack(datapacks['LotV']['44401'], lambda r: r.expansion == 'LotV' and 44401 <= r.build) - self.register_datapack(datapacks['LotV']['47185'], lambda r: r.expansion == 'LotV' and 47185 <= r.build) - self.register_datapack(datapacks['LotV']['48258'], lambda r: r.expansion == 'LotV' and 48258 <= r.build) - self.register_datapack(datapacks['LotV']['53644'], lambda r: r.expansion == 'LotV' and 53644 <= r.build) - self.register_datapack(datapacks['LotV']['54724'], lambda r: r.expansion == 'LotV' and 54724 <= r.build) - self.register_datapack(datapacks['LotV']['59587'], lambda r: r.expansion == 'LotV' and 59587 <= r.build) + self.register_datapack(datapacks['LotV']['44401'], lambda r: r.expansion == 'LotV' and 44401 <= r.build < 47185) + self.register_datapack(datapacks['LotV']['47185'], lambda r: r.expansion == 'LotV' and 47185 <= r.build < 48258) + self.register_datapack(datapacks['LotV']['48258'], lambda r: r.expansion == 'LotV' and 48258 <= r.build < 53644) + self.register_datapack(datapacks['LotV']['53644'], lambda r: r.expansion == 'LotV' and 53644 <= r.build < 54724) + self.register_datapack(datapacks['LotV']['54724'], lambda r: r.expansion == 'LotV' and 54724 <= r.build < 59587) + self.register_datapack(datapacks['LotV']['59587'], lambda r: r.expansion == 'LotV' and 59587 <= r.build < 70154) + self.register_datapack(datapacks['LotV']['70154'], lambda r: r.expansion == 'LotV' and 70154 <= r.build) # Internal Methods