sc2ai 0.0.0.pre → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/data/data.json +1 -0
  3. data/data/data_readable.json +22946 -0
  4. data/data/sc2ai/protocol/common.proto +59 -0
  5. data/data/sc2ai/protocol/data.proto +120 -0
  6. data/data/sc2ai/protocol/debug.proto +127 -0
  7. data/data/sc2ai/protocol/error.proto +221 -0
  8. data/data/sc2ai/protocol/query.proto +55 -0
  9. data/data/sc2ai/protocol/raw.proto +202 -0
  10. data/data/sc2ai/protocol/sc2api.proto +718 -0
  11. data/data/sc2ai/protocol/score.proto +108 -0
  12. data/data/sc2ai/protocol/spatial.proto +115 -0
  13. data/data/sc2ai/protocol/ui.proto +145 -0
  14. data/data/setup/setup.SC2Map +0 -0
  15. data/data/setup/setup.SC2Replay +0 -0
  16. data/data/stableid.json +37900 -0
  17. data/data/versions.json +554 -0
  18. data/exe/sc2ai +35 -0
  19. data/lib/docker_build/Dockerfile.ruby +74 -0
  20. data/lib/docker_build/docker-compose-base-image.yml +10 -0
  21. data/lib/docker_build/docker-compose-ladderzip.yml +9 -0
  22. data/lib/sc2ai/api/ability_id.rb +1951 -0
  23. data/lib/sc2ai/api/buff_id.rb +316 -0
  24. data/lib/sc2ai/api/data.rb +101 -0
  25. data/lib/sc2ai/api/effect_id.rb +20 -0
  26. data/lib/sc2ai/api/tech_tree.rb +82 -0
  27. data/lib/sc2ai/api/tech_tree_data.rb +2342 -0
  28. data/lib/sc2ai/api/unit_type_id.rb +2074 -0
  29. data/lib/sc2ai/api/upgrade_id.rb +312 -0
  30. data/lib/sc2ai/cli/cli.rb +177 -0
  31. data/lib/sc2ai/cli/ladderzip.rb +173 -0
  32. data/lib/sc2ai/cli/new.rb +88 -0
  33. data/lib/sc2ai/configuration.rb +145 -0
  34. data/lib/sc2ai/connection/connection_listener.rb +30 -0
  35. data/lib/sc2ai/connection/requests.rb +417 -0
  36. data/lib/sc2ai/connection/status_listener.rb +15 -0
  37. data/lib/sc2ai/connection.rb +146 -0
  38. data/lib/sc2ai/local_play/client/configurable_options.rb +115 -0
  39. data/lib/sc2ai/local_play/client.rb +159 -0
  40. data/lib/sc2ai/local_play/client_manager.rb +70 -0
  41. data/lib/sc2ai/local_play/map_file.rb +48 -0
  42. data/lib/sc2ai/local_play/match.rb +184 -0
  43. data/lib/sc2ai/overrides/array.rb +14 -0
  44. data/lib/sc2ai/overrides/async/process/child.rb +31 -0
  45. data/lib/sc2ai/overrides/kernel.rb +33 -0
  46. data/lib/sc2ai/paths.rb +294 -0
  47. data/lib/sc2ai/player/actions.rb +386 -0
  48. data/lib/sc2ai/player/debug.rb +224 -0
  49. data/lib/sc2ai/player/game_state.rb +131 -0
  50. data/lib/sc2ai/player/geometry.rb +766 -0
  51. data/lib/sc2ai/player/previous_state.rb +49 -0
  52. data/lib/sc2ai/player/units.rb +337 -0
  53. data/lib/sc2ai/player.rb +661 -0
  54. data/lib/sc2ai/ports.rb +152 -0
  55. data/lib/sc2ai/protocol/_meta_documentation.rb +39 -0
  56. data/lib/sc2ai/protocol/common_pb.rb +43 -0
  57. data/lib/sc2ai/protocol/data_pb.rb +47 -0
  58. data/lib/sc2ai/protocol/debug_pb.rb +56 -0
  59. data/lib/sc2ai/protocol/error_pb.rb +36 -0
  60. data/lib/sc2ai/protocol/extensions/color.rb +20 -0
  61. data/lib/sc2ai/protocol/extensions/point.rb +23 -0
  62. data/lib/sc2ai/protocol/extensions/point_2_d.rb +26 -0
  63. data/lib/sc2ai/protocol/extensions/position.rb +202 -0
  64. data/lib/sc2ai/protocol/extensions/power_source.rb +19 -0
  65. data/lib/sc2ai/protocol/extensions/unit.rb +489 -0
  66. data/lib/sc2ai/protocol/query_pb.rb +47 -0
  67. data/lib/sc2ai/protocol/raw_pb.rb +57 -0
  68. data/lib/sc2ai/protocol/sc2api_pb.rb +130 -0
  69. data/lib/sc2ai/protocol/score_pb.rb +40 -0
  70. data/lib/sc2ai/protocol/spatial_pb.rb +48 -0
  71. data/lib/sc2ai/protocol/ui_pb.rb +56 -0
  72. data/lib/sc2ai/unit_group/action_ext.rb +74 -0
  73. data/lib/sc2ai/unit_group/filter_ext.rb +379 -0
  74. data/lib/sc2ai/unit_group.rb +277 -0
  75. data/lib/sc2ai/version.rb +2 -1
  76. data/lib/sc2ai.rb +93 -2
  77. data/lib/templates/ladderzip/bin/ladder.tt +23 -0
  78. data/lib/templates/new/.ladderignore +20 -0
  79. data/lib/templates/new/Gemfile.tt +7 -0
  80. data/lib/templates/new/api/common.proto +59 -0
  81. data/lib/templates/new/api/data.proto +120 -0
  82. data/lib/templates/new/api/debug.proto +127 -0
  83. data/lib/templates/new/api/error.proto +221 -0
  84. data/lib/templates/new/api/query.proto +55 -0
  85. data/lib/templates/new/api/raw.proto +202 -0
  86. data/lib/templates/new/api/sc2api.proto +718 -0
  87. data/lib/templates/new/api/score.proto +108 -0
  88. data/lib/templates/new/api/spatial.proto +115 -0
  89. data/lib/templates/new/api/ui.proto +145 -0
  90. data/lib/templates/new/boot.rb.tt +6 -0
  91. data/lib/templates/new/my_bot.rb.tt +23 -0
  92. data/lib/templates/new/run_example_match.rb.tt +14 -0
  93. metadata +353 -9
@@ -0,0 +1,2342 @@
1
+ module Api
2
+ module TechTree
3
+ class << self
4
+ private
5
+
6
+ def unit_type_creation_abilities_data = {Api::UnitTypeId::COMMANDCENTER =>
7
+ {Api::UnitTypeId::SCV =>
8
+ {ability: Api::AbilityId::COMMANDCENTERTRAIN_SCV},
9
+ Api::UnitTypeId::PLANETARYFORTRESS =>
10
+ {ability: Api::AbilityId::UPGRADETOPLANETARYFORTRESS_PLANETARYFORTRESS,
11
+ required_building: Api::UnitTypeId::ENGINEERINGBAY},
12
+ Api::UnitTypeId::ORBITALCOMMAND =>
13
+ {ability: Api::AbilityId::UPGRADETOORBITAL_ORBITALCOMMAND,
14
+ required_building: Api::UnitTypeId::BARRACKS}},
15
+ Api::UnitTypeId::BARRACKS =>
16
+ {Api::UnitTypeId::MARINE =>
17
+ {ability: Api::AbilityId::BARRACKSTRAIN_MARINE},
18
+ Api::UnitTypeId::REAPER =>
19
+ {ability: Api::AbilityId::BARRACKSTRAIN_REAPER},
20
+ Api::UnitTypeId::GHOST =>
21
+ {ability: Api::AbilityId::BARRACKSTRAIN_GHOST,
22
+ requires_techlab: true,
23
+ required_building: Api::UnitTypeId::GHOSTACADEMY},
24
+ Api::UnitTypeId::MARAUDER =>
25
+ {ability: Api::AbilityId::BARRACKSTRAIN_MARAUDER,
26
+ requires_techlab: true}},
27
+ Api::UnitTypeId::FACTORY =>
28
+ {Api::UnitTypeId::HELLION =>
29
+ {ability: Api::AbilityId::FACTORYTRAIN_HELLION},
30
+ Api::UnitTypeId::CYCLONE => {ability: Api::AbilityId::TRAIN_CYCLONE},
31
+ Api::UnitTypeId::WIDOWMINE =>
32
+ {ability: Api::AbilityId::FACTORYTRAIN_WIDOWMINE},
33
+ Api::UnitTypeId::SIEGETANK =>
34
+ {ability: Api::AbilityId::FACTORYTRAIN_SIEGETANK,
35
+ requires_techlab: true},
36
+ Api::UnitTypeId::THOR =>
37
+ {ability: Api::AbilityId::FACTORYTRAIN_THOR,
38
+ requires_techlab: true,
39
+ required_building: Api::UnitTypeId::ARMORY},
40
+ Api::UnitTypeId::HELLIONTANK =>
41
+ {ability: Api::AbilityId::TRAIN_HELLBAT,
42
+ required_building: Api::UnitTypeId::ARMORY}},
43
+ Api::UnitTypeId::STARPORT =>
44
+ {Api::UnitTypeId::MEDIVAC =>
45
+ {ability: Api::AbilityId::STARPORTTRAIN_MEDIVAC},
46
+ Api::UnitTypeId::VIKINGFIGHTER =>
47
+ {ability: Api::AbilityId::STARPORTTRAIN_VIKINGFIGHTER},
48
+ Api::UnitTypeId::LIBERATOR =>
49
+ {ability: Api::AbilityId::STARPORTTRAIN_LIBERATOR},
50
+ Api::UnitTypeId::BANSHEE =>
51
+ {ability: Api::AbilityId::STARPORTTRAIN_BANSHEE,
52
+ requires_techlab: true},
53
+ Api::UnitTypeId::RAVEN =>
54
+ {ability: Api::AbilityId::STARPORTTRAIN_RAVEN, requires_techlab: true},
55
+ Api::UnitTypeId::BATTLECRUISER =>
56
+ {ability: Api::AbilityId::STARPORTTRAIN_BATTLECRUISER,
57
+ requires_techlab: true,
58
+ required_building: Api::UnitTypeId::FUSIONCORE}},
59
+ Api::UnitTypeId::SCV =>
60
+ {Api::UnitTypeId::COMMANDCENTER =>
61
+ {ability: Api::AbilityId::TERRANBUILD_COMMANDCENTER,
62
+ requires_placement_position: true},
63
+ Api::UnitTypeId::SUPPLYDEPOT =>
64
+ {ability: Api::AbilityId::TERRANBUILD_SUPPLYDEPOT,
65
+ requires_placement_position: true},
66
+ Api::UnitTypeId::REFINERY =>
67
+ {ability: Api::AbilityId::TERRANBUILD_REFINERY},
68
+ Api::UnitTypeId::BARRACKS =>
69
+ {ability: Api::AbilityId::TERRANBUILD_BARRACKS,
70
+ required_building: Api::UnitTypeId::SUPPLYDEPOT,
71
+ requires_placement_position: true},
72
+ Api::UnitTypeId::ENGINEERINGBAY =>
73
+ {ability: Api::AbilityId::TERRANBUILD_ENGINEERINGBAY,
74
+ required_building: Api::UnitTypeId::COMMANDCENTER,
75
+ requires_placement_position: true},
76
+ Api::UnitTypeId::MISSILETURRET =>
77
+ {ability: Api::AbilityId::TERRANBUILD_MISSILETURRET,
78
+ required_building: Api::UnitTypeId::ENGINEERINGBAY,
79
+ requires_placement_position: true},
80
+ Api::UnitTypeId::BUNKER =>
81
+ {ability: Api::AbilityId::TERRANBUILD_BUNKER,
82
+ required_building: Api::UnitTypeId::BARRACKS,
83
+ requires_placement_position: true},
84
+ Api::UnitTypeId::SENSORTOWER =>
85
+ {ability: Api::AbilityId::TERRANBUILD_SENSORTOWER,
86
+ required_building: Api::UnitTypeId::ENGINEERINGBAY,
87
+ requires_placement_position: true},
88
+ Api::UnitTypeId::GHOSTACADEMY =>
89
+ {ability: Api::AbilityId::TERRANBUILD_GHOSTACADEMY,
90
+ required_building: Api::UnitTypeId::BARRACKS,
91
+ requires_placement_position: true},
92
+ Api::UnitTypeId::FACTORY =>
93
+ {ability: Api::AbilityId::TERRANBUILD_FACTORY,
94
+ required_building: Api::UnitTypeId::BARRACKS,
95
+ requires_placement_position: true},
96
+ Api::UnitTypeId::STARPORT =>
97
+ {ability: Api::AbilityId::TERRANBUILD_STARPORT,
98
+ required_building: Api::UnitTypeId::FACTORY,
99
+ requires_placement_position: true},
100
+ Api::UnitTypeId::ARMORY =>
101
+ {ability: Api::AbilityId::TERRANBUILD_ARMORY,
102
+ required_building: Api::UnitTypeId::FACTORY,
103
+ requires_placement_position: true},
104
+ Api::UnitTypeId::FUSIONCORE =>
105
+ {ability: Api::AbilityId::TERRANBUILD_FUSIONCORE,
106
+ required_building: Api::UnitTypeId::STARPORT,
107
+ requires_placement_position: true}},
108
+ Api::UnitTypeId::RAVEN =>
109
+ {Api::UnitTypeId::AUTOTURRET =>
110
+ {ability: Api::AbilityId::BUILDAUTOTURRET_AUTOTURRET}},
111
+ Api::UnitTypeId::NEXUS =>
112
+ {Api::UnitTypeId::PROBE => {ability: Api::AbilityId::NEXUSTRAIN_PROBE},
113
+ Api::UnitTypeId::MOTHERSHIP =>
114
+ {ability: Api::AbilityId::NEXUSTRAINMOTHERSHIP_MOTHERSHIP,
115
+ required_building: Api::UnitTypeId::FLEETBEACON}},
116
+ Api::UnitTypeId::GATEWAY =>
117
+ {Api::UnitTypeId::ZEALOT =>
118
+ {ability: Api::AbilityId::GATEWAYTRAIN_ZEALOT, requires_power: true},
119
+ Api::UnitTypeId::STALKER =>
120
+ {ability: Api::AbilityId::GATEWAYTRAIN_STALKER,
121
+ required_building: Api::UnitTypeId::CYBERNETICSCORE,
122
+ requires_power: true},
123
+ Api::UnitTypeId::HIGHTEMPLAR =>
124
+ {ability: Api::AbilityId::GATEWAYTRAIN_HIGHTEMPLAR,
125
+ required_building: Api::UnitTypeId::TEMPLARARCHIVE,
126
+ requires_power: true},
127
+ Api::UnitTypeId::DARKTEMPLAR =>
128
+ {ability: Api::AbilityId::GATEWAYTRAIN_DARKTEMPLAR,
129
+ required_building: Api::UnitTypeId::DARKSHRINE,
130
+ requires_power: true},
131
+ Api::UnitTypeId::SENTRY =>
132
+ {ability: Api::AbilityId::GATEWAYTRAIN_SENTRY,
133
+ required_building: Api::UnitTypeId::CYBERNETICSCORE,
134
+ requires_power: true},
135
+ Api::UnitTypeId::ADEPT =>
136
+ {ability: Api::AbilityId::TRAIN_ADEPT,
137
+ required_building: Api::UnitTypeId::CYBERNETICSCORE,
138
+ requires_power: true}},
139
+ Api::UnitTypeId::STARGATE =>
140
+ {Api::UnitTypeId::PHOENIX =>
141
+ {ability: Api::AbilityId::STARGATETRAIN_PHOENIX, requires_power: true},
142
+ Api::UnitTypeId::VOIDRAY =>
143
+ {ability: Api::AbilityId::STARGATETRAIN_VOIDRAY, requires_power: true},
144
+ Api::UnitTypeId::ORACLE =>
145
+ {ability: Api::AbilityId::STARGATETRAIN_ORACLE, requires_power: true},
146
+ Api::UnitTypeId::CARRIER =>
147
+ {ability: Api::AbilityId::STARGATETRAIN_CARRIER,
148
+ required_building: Api::UnitTypeId::FLEETBEACON,
149
+ requires_power: true},
150
+ Api::UnitTypeId::TEMPEST =>
151
+ {ability: Api::AbilityId::STARGATETRAIN_TEMPEST,
152
+ required_building: Api::UnitTypeId::FLEETBEACON,
153
+ requires_power: true}},
154
+ Api::UnitTypeId::ROBOTICSFACILITY =>
155
+ {Api::UnitTypeId::WARPPRISM =>
156
+ {ability: Api::AbilityId::ROBOTICSFACILITYTRAIN_WARPPRISM,
157
+ requires_power: true},
158
+ Api::UnitTypeId::OBSERVER =>
159
+ {ability: Api::AbilityId::ROBOTICSFACILITYTRAIN_OBSERVER,
160
+ requires_power: true},
161
+ Api::UnitTypeId::IMMORTAL =>
162
+ {ability: Api::AbilityId::ROBOTICSFACILITYTRAIN_IMMORTAL,
163
+ requires_power: true},
164
+ Api::UnitTypeId::COLOSSUS =>
165
+ {ability: Api::AbilityId::ROBOTICSFACILITYTRAIN_COLOSSUS,
166
+ required_building: Api::UnitTypeId::ROBOTICSBAY,
167
+ requires_power: true},
168
+ Api::UnitTypeId::DISRUPTOR =>
169
+ {ability: Api::AbilityId::TRAIN_DISRUPTOR,
170
+ required_building: Api::UnitTypeId::ROBOTICSBAY,
171
+ requires_power: true}},
172
+ Api::UnitTypeId::PROBE =>
173
+ {Api::UnitTypeId::NEXUS =>
174
+ {ability: Api::AbilityId::PROTOSSBUILD_NEXUS,
175
+ requires_placement_position: true},
176
+ Api::UnitTypeId::PYLON =>
177
+ {ability: Api::AbilityId::PROTOSSBUILD_PYLON,
178
+ requires_placement_position: true},
179
+ Api::UnitTypeId::ASSIMILATOR =>
180
+ {ability: Api::AbilityId::PROTOSSBUILD_ASSIMILATOR},
181
+ Api::UnitTypeId::GATEWAY =>
182
+ {ability: Api::AbilityId::PROTOSSBUILD_GATEWAY,
183
+ required_building: Api::UnitTypeId::PYLON,
184
+ requires_placement_position: true},
185
+ Api::UnitTypeId::FORGE =>
186
+ {ability: Api::AbilityId::PROTOSSBUILD_FORGE,
187
+ required_building: Api::UnitTypeId::PYLON,
188
+ requires_placement_position: true},
189
+ Api::UnitTypeId::FLEETBEACON =>
190
+ {ability: Api::AbilityId::PROTOSSBUILD_FLEETBEACON,
191
+ required_building: Api::UnitTypeId::STARGATE,
192
+ requires_placement_position: true},
193
+ Api::UnitTypeId::TWILIGHTCOUNCIL =>
194
+ {ability: Api::AbilityId::PROTOSSBUILD_TWILIGHTCOUNCIL,
195
+ required_building: Api::UnitTypeId::CYBERNETICSCORE,
196
+ requires_placement_position: true},
197
+ Api::UnitTypeId::PHOTONCANNON =>
198
+ {ability: Api::AbilityId::PROTOSSBUILD_PHOTONCANNON,
199
+ required_building: Api::UnitTypeId::FORGE,
200
+ requires_placement_position: true},
201
+ Api::UnitTypeId::STARGATE =>
202
+ {ability: Api::AbilityId::PROTOSSBUILD_STARGATE,
203
+ required_building: Api::UnitTypeId::CYBERNETICSCORE,
204
+ requires_placement_position: true},
205
+ Api::UnitTypeId::TEMPLARARCHIVE =>
206
+ {ability: Api::AbilityId::PROTOSSBUILD_TEMPLARARCHIVE,
207
+ required_building: Api::UnitTypeId::TWILIGHTCOUNCIL,
208
+ requires_placement_position: true},
209
+ Api::UnitTypeId::DARKSHRINE =>
210
+ {ability: Api::AbilityId::PROTOSSBUILD_DARKSHRINE,
211
+ required_building: Api::UnitTypeId::TWILIGHTCOUNCIL,
212
+ requires_placement_position: true},
213
+ Api::UnitTypeId::ROBOTICSBAY =>
214
+ {ability: Api::AbilityId::PROTOSSBUILD_ROBOTICSBAY,
215
+ required_building: Api::UnitTypeId::ROBOTICSFACILITY,
216
+ requires_placement_position: true},
217
+ Api::UnitTypeId::ROBOTICSFACILITY =>
218
+ {ability: Api::AbilityId::PROTOSSBUILD_ROBOTICSFACILITY,
219
+ required_building: Api::UnitTypeId::CYBERNETICSCORE,
220
+ requires_placement_position: true},
221
+ Api::UnitTypeId::CYBERNETICSCORE =>
222
+ {ability: Api::AbilityId::PROTOSSBUILD_CYBERNETICSCORE,
223
+ required_building: Api::UnitTypeId::GATEWAY,
224
+ requires_placement_position: true},
225
+ Api::UnitTypeId::SHIELDBATTERY =>
226
+ {ability: Api::AbilityId::BUILD_SHIELDBATTERY,
227
+ required_building: Api::UnitTypeId::CYBERNETICSCORE,
228
+ requires_placement_position: true}},
229
+ Api::UnitTypeId::HATCHERY =>
230
+ {Api::UnitTypeId::LAIR =>
231
+ {ability: Api::AbilityId::UPGRADETOLAIR_LAIR,
232
+ required_building: Api::UnitTypeId::SPAWNINGPOOL},
233
+ Api::UnitTypeId::QUEEN =>
234
+ {ability: Api::AbilityId::TRAINQUEEN_QUEEN,
235
+ required_building: Api::UnitTypeId::SPAWNINGPOOL}},
236
+ Api::UnitTypeId::SPIRE =>
237
+ {Api::UnitTypeId::GREATERSPIRE =>
238
+ {ability: Api::AbilityId::UPGRADETOGREATERSPIRE_GREATERSPIRE,
239
+ required_building: Api::UnitTypeId::HIVE}},
240
+ Api::UnitTypeId::NYDUSNETWORK =>
241
+ {Api::UnitTypeId::NYDUSCANAL =>
242
+ {ability: Api::AbilityId::BUILD_NYDUSWORM,
243
+ requires_placement_position: true}},
244
+ Api::UnitTypeId::LAIR =>
245
+ {Api::UnitTypeId::HIVE =>
246
+ {ability: Api::AbilityId::UPGRADETOHIVE_HIVE,
247
+ required_building: Api::UnitTypeId::INFESTATIONPIT},
248
+ Api::UnitTypeId::QUEEN =>
249
+ {ability: Api::AbilityId::TRAINQUEEN_QUEEN,
250
+ required_building: Api::UnitTypeId::SPAWNINGPOOL}},
251
+ Api::UnitTypeId::HIVE =>
252
+ {Api::UnitTypeId::QUEEN =>
253
+ {ability: Api::AbilityId::TRAINQUEEN_QUEEN,
254
+ required_building: Api::UnitTypeId::SPAWNINGPOOL}},
255
+ Api::UnitTypeId::DRONE =>
256
+ {Api::UnitTypeId::HATCHERY =>
257
+ {ability: Api::AbilityId::ZERGBUILD_HATCHERY,
258
+ requires_placement_position: true},
259
+ Api::UnitTypeId::EXTRACTOR =>
260
+ {ability: Api::AbilityId::ZERGBUILD_EXTRACTOR},
261
+ Api::UnitTypeId::SPAWNINGPOOL =>
262
+ {ability: Api::AbilityId::ZERGBUILD_SPAWNINGPOOL,
263
+ required_building: Api::UnitTypeId::HATCHERY,
264
+ requires_placement_position: true},
265
+ Api::UnitTypeId::EVOLUTIONCHAMBER =>
266
+ {ability: Api::AbilityId::ZERGBUILD_EVOLUTIONCHAMBER,
267
+ required_building: Api::UnitTypeId::HATCHERY,
268
+ requires_placement_position: true},
269
+ Api::UnitTypeId::HYDRALISKDEN =>
270
+ {ability: Api::AbilityId::ZERGBUILD_HYDRALISKDEN,
271
+ required_building: Api::UnitTypeId::LAIR,
272
+ requires_placement_position: true},
273
+ Api::UnitTypeId::SPIRE =>
274
+ {ability: Api::AbilityId::ZERGBUILD_SPIRE,
275
+ required_building: Api::UnitTypeId::LAIR,
276
+ requires_placement_position: true},
277
+ Api::UnitTypeId::ULTRALISKCAVERN =>
278
+ {ability: Api::AbilityId::ZERGBUILD_ULTRALISKCAVERN,
279
+ required_building: Api::UnitTypeId::HIVE,
280
+ requires_placement_position: true},
281
+ Api::UnitTypeId::INFESTATIONPIT =>
282
+ {ability: Api::AbilityId::ZERGBUILD_INFESTATIONPIT,
283
+ required_building: Api::UnitTypeId::LAIR,
284
+ requires_placement_position: true},
285
+ Api::UnitTypeId::NYDUSNETWORK =>
286
+ {ability: Api::AbilityId::ZERGBUILD_NYDUSNETWORK,
287
+ required_building: Api::UnitTypeId::LAIR,
288
+ requires_placement_position: true},
289
+ Api::UnitTypeId::BANELINGNEST =>
290
+ {ability: Api::AbilityId::ZERGBUILD_BANELINGNEST,
291
+ required_building: Api::UnitTypeId::SPAWNINGPOOL,
292
+ requires_placement_position: true},
293
+ Api::UnitTypeId::LURKERDENMP =>
294
+ {ability: Api::AbilityId::BUILD_LURKERDEN,
295
+ required_building: Api::UnitTypeId::HYDRALISKDEN,
296
+ requires_placement_position: true},
297
+ Api::UnitTypeId::ROACHWARREN =>
298
+ {ability: Api::AbilityId::ZERGBUILD_ROACHWARREN,
299
+ required_building: Api::UnitTypeId::SPAWNINGPOOL,
300
+ requires_placement_position: true},
301
+ Api::UnitTypeId::SPINECRAWLER =>
302
+ {ability: Api::AbilityId::ZERGBUILD_SPINECRAWLER,
303
+ required_building: Api::UnitTypeId::SPAWNINGPOOL,
304
+ requires_placement_position: true},
305
+ Api::UnitTypeId::SPORECRAWLER =>
306
+ {ability: Api::AbilityId::ZERGBUILD_SPORECRAWLER,
307
+ required_building: Api::UnitTypeId::SPAWNINGPOOL,
308
+ requires_placement_position: true}},
309
+ Api::UnitTypeId::OVERLORD =>
310
+ {Api::UnitTypeId::OVERSEER =>
311
+ {ability: Api::AbilityId::MORPH_OVERSEER,
312
+ required_building: Api::UnitTypeId::LAIR},
313
+ Api::UnitTypeId::OVERLORDTRANSPORT =>
314
+ {ability: Api::AbilityId::MORPH_OVERLORDTRANSPORT,
315
+ required_building: Api::UnitTypeId::LAIR}},
316
+ Api::UnitTypeId::HYDRALISK =>
317
+ {Api::UnitTypeId::LURKERMP =>
318
+ {ability: Api::AbilityId::MORPH_LURKER,
319
+ required_building: Api::UnitTypeId::LURKERDENMP}},
320
+ Api::UnitTypeId::ROACH =>
321
+ {Api::UnitTypeId::RAVAGER =>
322
+ {ability: Api::AbilityId::MORPHTORAVAGER_RAVAGER,
323
+ required_building: Api::UnitTypeId::HATCHERY}},
324
+ Api::UnitTypeId::CORRUPTOR =>
325
+ {Api::UnitTypeId::BROODLORD =>
326
+ {ability: Api::AbilityId::MORPHTOBROODLORD_BROODLORD,
327
+ required_building: Api::UnitTypeId::GREATERSPIRE}},
328
+ Api::UnitTypeId::QUEEN =>
329
+ {Api::UnitTypeId::CREEPTUMORQUEEN =>
330
+ {ability: Api::AbilityId::BUILD_CREEPTUMOR_QUEEN,
331
+ requires_placement_position: true},
332
+ Api::UnitTypeId::CREEPTUMOR =>
333
+ {ability: Api::AbilityId::BUILD_CREEPTUMOR,
334
+ requires_placement_position: true}},
335
+ Api::UnitTypeId::OVERSEER =>
336
+ {Api::UnitTypeId::CHANGELING =>
337
+ {ability: Api::AbilityId::SPAWNCHANGELING_SPAWNCHANGELING}},
338
+ Api::UnitTypeId::PLANETARYFORTRESS =>
339
+ {Api::UnitTypeId::SCV =>
340
+ {ability: Api::AbilityId::COMMANDCENTERTRAIN_SCV}},
341
+ Api::UnitTypeId::ORBITALCOMMAND =>
342
+ {Api::UnitTypeId::SCV =>
343
+ {ability: Api::AbilityId::COMMANDCENTERTRAIN_SCV}},
344
+ Api::UnitTypeId::WARPGATE =>
345
+ {Api::UnitTypeId::ZEALOT =>
346
+ {ability: Api::AbilityId::WARPGATETRAIN_ZEALOT,
347
+ requires_placement_position: true,
348
+ requires_power: true},
349
+ Api::UnitTypeId::STALKER =>
350
+ {ability: Api::AbilityId::WARPGATETRAIN_STALKER,
351
+ required_building: Api::UnitTypeId::CYBERNETICSCORE,
352
+ requires_placement_position: true,
353
+ requires_power: true},
354
+ Api::UnitTypeId::HIGHTEMPLAR =>
355
+ {ability: Api::AbilityId::WARPGATETRAIN_HIGHTEMPLAR,
356
+ required_building: Api::UnitTypeId::TEMPLARARCHIVE,
357
+ requires_placement_position: true,
358
+ requires_power: true},
359
+ Api::UnitTypeId::DARKTEMPLAR =>
360
+ {ability: Api::AbilityId::WARPGATETRAIN_DARKTEMPLAR,
361
+ required_building: Api::UnitTypeId::DARKSHRINE,
362
+ requires_placement_position: true,
363
+ requires_power: true},
364
+ Api::UnitTypeId::SENTRY =>
365
+ {ability: Api::AbilityId::WARPGATETRAIN_SENTRY,
366
+ required_building: Api::UnitTypeId::CYBERNETICSCORE,
367
+ requires_placement_position: true,
368
+ requires_power: true},
369
+ Api::UnitTypeId::ADEPT =>
370
+ {ability: Api::AbilityId::TRAINWARP_ADEPT,
371
+ required_building: Api::UnitTypeId::CYBERNETICSCORE,
372
+ requires_placement_position: true,
373
+ requires_power: true}},
374
+ Api::UnitTypeId::CREEPTUMORBURROWED =>
375
+ {Api::UnitTypeId::CREEPTUMOR =>
376
+ {ability: Api::AbilityId::BUILD_CREEPTUMOR,
377
+ requires_placement_position: true}},
378
+ Api::UnitTypeId::CREEPTUMORQUEEN =>
379
+ {Api::UnitTypeId::CREEPTUMOR =>
380
+ {ability: Api::AbilityId::BUILD_CREEPTUMOR_TUMOR,
381
+ requires_placement_position: true}},
382
+ Api::UnitTypeId::LARVA =>
383
+ {Api::UnitTypeId::DRONE => {ability: Api::AbilityId::LARVATRAIN_DRONE},
384
+ Api::UnitTypeId::OVERLORD =>
385
+ {ability: Api::AbilityId::LARVATRAIN_OVERLORD},
386
+ Api::UnitTypeId::ZERGLING =>
387
+ {ability: Api::AbilityId::LARVATRAIN_ZERGLING,
388
+ required_building: Api::UnitTypeId::SPAWNINGPOOL},
389
+ Api::UnitTypeId::HYDRALISK =>
390
+ {ability: Api::AbilityId::LARVATRAIN_HYDRALISK,
391
+ required_building: Api::UnitTypeId::HYDRALISKDEN},
392
+ Api::UnitTypeId::MUTALISK =>
393
+ {ability: Api::AbilityId::LARVATRAIN_MUTALISK,
394
+ required_building: Api::UnitTypeId::SPIRE},
395
+ Api::UnitTypeId::ULTRALISK =>
396
+ {ability: Api::AbilityId::LARVATRAIN_ULTRALISK,
397
+ required_building: Api::UnitTypeId::ULTRALISKCAVERN},
398
+ Api::UnitTypeId::ROACH =>
399
+ {ability: Api::AbilityId::LARVATRAIN_ROACH,
400
+ required_building: Api::UnitTypeId::ROACHWARREN},
401
+ Api::UnitTypeId::INFESTOR =>
402
+ {ability: Api::AbilityId::LARVATRAIN_INFESTOR,
403
+ required_building: Api::UnitTypeId::INFESTATIONPIT},
404
+ Api::UnitTypeId::CORRUPTOR =>
405
+ {ability: Api::AbilityId::LARVATRAIN_CORRUPTOR,
406
+ required_building: Api::UnitTypeId::SPIRE},
407
+ Api::UnitTypeId::VIPER =>
408
+ {ability: Api::AbilityId::LARVATRAIN_VIPER,
409
+ required_building: Api::UnitTypeId::HIVE},
410
+ Api::UnitTypeId::SWARMHOSTMP =>
411
+ {ability: Api::AbilityId::TRAIN_SWARMHOST,
412
+ required_building: Api::UnitTypeId::INFESTATIONPIT}},
413
+ Api::UnitTypeId::SWARMHOSTBURROWEDMP =>
414
+ {Api::UnitTypeId::LOCUSTMPFLYING =>
415
+ {ability: Api::AbilityId::EFFECT_SPAWNLOCUSTS}},
416
+ Api::UnitTypeId::SWARMHOSTMP =>
417
+ {Api::UnitTypeId::LOCUSTMPFLYING =>
418
+ {ability: Api::AbilityId::EFFECT_SPAWNLOCUSTS}},
419
+ Api::UnitTypeId::ORACLE =>
420
+ {Api::UnitTypeId::ORACLESTASISTRAP =>
421
+ {ability: Api::AbilityId::BUILD_STASISTRAP,
422
+ requires_placement_position: true}},
423
+ Api::UnitTypeId::OVERLORDTRANSPORT =>
424
+ {Api::UnitTypeId::OVERSEER =>
425
+ {ability: Api::AbilityId::MORPH_OVERSEER,
426
+ required_building: Api::UnitTypeId::LAIR}},
427
+ Api::UnitTypeId::OVERSEERSIEGEMODE =>
428
+ {Api::UnitTypeId::CHANGELING =>
429
+ {ability: Api::AbilityId::SPAWNCHANGELING_SPAWNCHANGELING}}}
430
+
431
+ # We want to be able to research an upgrade by doing
432
+ # can_research(UpgradeId, return_idle_structures=True) -> returns list of idle structures that can research it
433
+ # So we need to assign each upgrade id one building type, and its research ability and requirements (e.g. armory for infantry level 2)
434
+ #
435
+ # i.e.
436
+ # upgrade_research_abilities_data = {
437
+ # UnitTypeId.ENGINEERINGBAY: {
438
+ # UpgradeId.TERRANINFANTRYWEAPONSLEVEL1:
439
+ # {
440
+ # ability: AbilityId.ENGINEERINGBAYRESEARCH_TERRANINFANTRYWEAPONSLEVEL1,
441
+ # required_building: None,
442
+ # requires_power: False, # If a pylon nearby is required
443
+ # },
444
+ # UpgradeId.TERRANINFANTRYWEAPONSLEVEL2: {
445
+ # ability: AbilityId.ENGINEERINGBAYRESEARCH_TERRANINFANTRYWEAPONSLEVEL2,
446
+ # required_building: UnitTypeId.ARMORY,
447
+ # requires_power: False, # If a pylon nearby is required
448
+ # },
449
+ # }
450
+ # }
451
+ def upgrade_research_abilities_data = {Api::UnitTypeId::ENGINEERINGBAY =>
452
+ {Api::UpgradeId::HISECAUTOTRACKING =>
453
+ {ability: Api::AbilityId::RESEARCH_HISECAUTOTRACKING},
454
+ Api::UpgradeId::TERRANBUILDINGARMOR =>
455
+ {ability: Api::AbilityId::RESEARCH_TERRANSTRUCTUREARMORUPGRADE},
456
+ Api::UpgradeId::TERRANINFANTRYWEAPONSLEVEL1 =>
457
+ {ability: Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYWEAPONSLEVEL1},
458
+ Api::UpgradeId::TERRANINFANTRYARMORSLEVEL1 =>
459
+ {ability: Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYARMORLEVEL1},
460
+ Api::UpgradeId::TERRANINFANTRYWEAPONSLEVEL2 =>
461
+ {ability: Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYWEAPONSLEVEL2,
462
+ required_building: Api::UnitTypeId::ARMORY,
463
+ required_upgrade: Api::UpgradeId::TERRANINFANTRYWEAPONSLEVEL1},
464
+ Api::UpgradeId::TERRANINFANTRYWEAPONSLEVEL3 =>
465
+ {ability: Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYWEAPONSLEVEL3,
466
+ required_building: Api::UnitTypeId::ARMORY,
467
+ required_upgrade: Api::UpgradeId::TERRANINFANTRYWEAPONSLEVEL2},
468
+ Api::UpgradeId::TERRANINFANTRYARMORSLEVEL2 =>
469
+ {ability: Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYARMORLEVEL2,
470
+ required_building: Api::UnitTypeId::ARMORY,
471
+ required_upgrade: Api::UpgradeId::TERRANINFANTRYARMORSLEVEL1},
472
+ Api::UpgradeId::TERRANINFANTRYARMORSLEVEL3 =>
473
+ {ability: Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYARMORLEVEL3,
474
+ required_building: Api::UnitTypeId::ARMORY,
475
+ required_upgrade: Api::UpgradeId::TERRANINFANTRYARMORSLEVEL2}},
476
+ Api::UnitTypeId::GHOSTACADEMY =>
477
+ {Api::UpgradeId::PERSONALCLOAKING =>
478
+ {ability: Api::AbilityId::RESEARCH_PERSONALCLOAKING}},
479
+ Api::UnitTypeId::ARMORY =>
480
+ {Api::UpgradeId::TERRANVEHICLEWEAPONSLEVEL1 =>
481
+ {ability: Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEWEAPONSLEVEL1},
482
+ Api::UpgradeId::TERRANSHIPWEAPONSLEVEL1 =>
483
+ {ability: Api::AbilityId::ARMORYRESEARCH_TERRANSHIPWEAPONSLEVEL1},
484
+ Api::UpgradeId::TERRANVEHICLEANDSHIPARMORSLEVEL1 =>
485
+ {ability: Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1},
486
+ Api::UpgradeId::TERRANVEHICLEWEAPONSLEVEL2 =>
487
+ {ability: Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEWEAPONSLEVEL2,
488
+ required_upgrade: Api::UpgradeId::TERRANVEHICLEWEAPONSLEVEL1},
489
+ Api::UpgradeId::TERRANVEHICLEWEAPONSLEVEL3 =>
490
+ {ability: Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEWEAPONSLEVEL3,
491
+ required_upgrade: Api::UpgradeId::TERRANVEHICLEWEAPONSLEVEL2},
492
+ Api::UpgradeId::TERRANSHIPWEAPONSLEVEL2 =>
493
+ {ability: Api::AbilityId::ARMORYRESEARCH_TERRANSHIPWEAPONSLEVEL2,
494
+ required_upgrade: Api::UpgradeId::TERRANSHIPWEAPONSLEVEL1},
495
+ Api::UpgradeId::TERRANSHIPWEAPONSLEVEL3 =>
496
+ {ability: Api::AbilityId::ARMORYRESEARCH_TERRANSHIPWEAPONSLEVEL3,
497
+ required_upgrade: Api::UpgradeId::TERRANSHIPWEAPONSLEVEL2},
498
+ Api::UpgradeId::TERRANVEHICLEANDSHIPARMORSLEVEL2 =>
499
+ {ability: Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2,
500
+ required_upgrade: Api::UpgradeId::TERRANVEHICLEANDSHIPARMORSLEVEL1},
501
+ Api::UpgradeId::TERRANVEHICLEANDSHIPARMORSLEVEL3 =>
502
+ {ability: Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3,
503
+ required_upgrade: Api::UpgradeId::TERRANVEHICLEANDSHIPARMORSLEVEL2}},
504
+ Api::UnitTypeId::FUSIONCORE =>
505
+ {Api::UpgradeId::BATTLECRUISERENABLESPECIALIZATIONS =>
506
+ {ability: Api::AbilityId::RESEARCH_BATTLECRUISERWEAPONREFIT},
507
+ Api::UpgradeId::LIBERATORAGRANGEUPGRADE =>
508
+ {ability: Api::AbilityId::FUSIONCORERESEARCH_RESEARCHBALLISTICRANGE},
509
+ Api::UpgradeId::MEDIVACCADUCEUSREACTOR =>
510
+ {ability: Api::AbilityId::FUSIONCORERESEARCH_RESEARCHMEDIVACENERGYUPGRADE}},
511
+ Api::UnitTypeId::BARRACKSTECHLAB =>
512
+ {Api::UpgradeId::STIMPACK =>
513
+ {ability: Api::AbilityId::BARRACKSTECHLABRESEARCH_STIMPACK},
514
+ Api::UpgradeId::SHIELDWALL =>
515
+ {ability: Api::AbilityId::RESEARCH_COMBATSHIELD},
516
+ Api::UpgradeId::PUNISHERGRENADES =>
517
+ {ability: Api::AbilityId::RESEARCH_CONCUSSIVESHELLS}},
518
+ Api::UnitTypeId::FACTORYTECHLAB =>
519
+ {Api::UpgradeId::HIGHCAPACITYBARRELS =>
520
+ {ability: Api::AbilityId::RESEARCH_INFERNALPREIGNITER},
521
+ Api::UpgradeId::TEMPESTGROUNDATTACKUPGRADE =>
522
+ {ability: Api::AbilityId::FACTORYTECHLABRESEARCH_CYCLONERESEARCHHURRICANETHRUSTERS},
523
+ Api::UpgradeId::DRILLCLAWS =>
524
+ {ability: Api::AbilityId::RESEARCH_DRILLINGCLAWS,
525
+ required_building: Api::UnitTypeId::ARMORY},
526
+ Api::UpgradeId::SMARTSERVOS =>
527
+ {ability: Api::AbilityId::RESEARCH_SMARTSERVOS,
528
+ required_building: Api::UnitTypeId::ARMORY}},
529
+ Api::UnitTypeId::STARPORTTECHLAB =>
530
+ {Api::UpgradeId::BANSHEECLOAK =>
531
+ {ability: Api::AbilityId::RESEARCH_BANSHEECLOAKINGFIELD},
532
+ Api::UpgradeId::BANSHEESPEED =>
533
+ {ability: Api::AbilityId::RESEARCH_BANSHEEHYPERFLIGHTROTORS},
534
+ Api::UpgradeId::AMPLIFIEDSHIELDING =>
535
+ {ability: Api::AbilityId::STARPORTTECHLABRESEARCH_RESEARCHRAVENINTERFERENCEMATRIX}},
536
+ Api::UnitTypeId::FORGE =>
537
+ {Api::UpgradeId::PROTOSSGROUNDWEAPONSLEVEL1 =>
538
+ {ability: Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDWEAPONSLEVEL1,
539
+ requires_power: true},
540
+ Api::UpgradeId::PROTOSSGROUNDARMORSLEVEL1 =>
541
+ {ability: Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDARMORLEVEL1,
542
+ requires_power: true},
543
+ Api::UpgradeId::PROTOSSSHIELDSLEVEL1 =>
544
+ {ability: Api::AbilityId::FORGERESEARCH_PROTOSSSHIELDSLEVEL1,
545
+ requires_power: true},
546
+ Api::UpgradeId::PROTOSSGROUNDWEAPONSLEVEL2 =>
547
+ {ability: Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDWEAPONSLEVEL2,
548
+ required_building: Api::UnitTypeId::TWILIGHTCOUNCIL,
549
+ required_upgrade: Api::UpgradeId::PROTOSSGROUNDWEAPONSLEVEL1,
550
+ requires_power: true},
551
+ Api::UpgradeId::PROTOSSGROUNDWEAPONSLEVEL3 =>
552
+ {ability: Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDWEAPONSLEVEL3,
553
+ required_building: Api::UnitTypeId::TWILIGHTCOUNCIL,
554
+ required_upgrade: Api::UpgradeId::PROTOSSGROUNDWEAPONSLEVEL2,
555
+ requires_power: true},
556
+ Api::UpgradeId::PROTOSSGROUNDARMORSLEVEL2 =>
557
+ {ability: Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDARMORLEVEL2,
558
+ required_building: Api::UnitTypeId::TWILIGHTCOUNCIL,
559
+ required_upgrade: Api::UpgradeId::PROTOSSGROUNDARMORSLEVEL1,
560
+ requires_power: true},
561
+ Api::UpgradeId::PROTOSSGROUNDARMORSLEVEL3 =>
562
+ {ability: Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDARMORLEVEL3,
563
+ required_building: Api::UnitTypeId::TWILIGHTCOUNCIL,
564
+ required_upgrade: Api::UpgradeId::PROTOSSGROUNDARMORSLEVEL2,
565
+ requires_power: true},
566
+ Api::UpgradeId::PROTOSSSHIELDSLEVEL2 =>
567
+ {ability: Api::AbilityId::FORGERESEARCH_PROTOSSSHIELDSLEVEL2,
568
+ required_building: Api::UnitTypeId::TWILIGHTCOUNCIL,
569
+ required_upgrade: Api::UpgradeId::PROTOSSSHIELDSLEVEL1,
570
+ requires_power: true},
571
+ Api::UpgradeId::PROTOSSSHIELDSLEVEL3 =>
572
+ {ability: Api::AbilityId::FORGERESEARCH_PROTOSSSHIELDSLEVEL3,
573
+ required_building: Api::UnitTypeId::TWILIGHTCOUNCIL,
574
+ required_upgrade: Api::UpgradeId::PROTOSSSHIELDSLEVEL2,
575
+ requires_power: true}},
576
+ Api::UnitTypeId::FLEETBEACON =>
577
+ {Api::UpgradeId::PHOENIXRANGEUPGRADE =>
578
+ {ability: Api::AbilityId::RESEARCH_PHOENIXANIONPULSECRYSTALS,
579
+ requires_power: true},
580
+ Api::UpgradeId::VOIDRAYSPEEDUPGRADE =>
581
+ {ability: Api::AbilityId::FLEETBEACONRESEARCH_RESEARCHVOIDRAYSPEEDUPGRADE,
582
+ requires_power: true},
583
+ Api::UpgradeId::MICROBIALSHROUD =>
584
+ {ability: Api::AbilityId::FLEETBEACONRESEARCH_TEMPESTRESEARCHGROUNDATTACKUPGRADE,
585
+ requires_power: true}},
586
+ Api::UnitTypeId::TWILIGHTCOUNCIL =>
587
+ {Api::UpgradeId::CHARGE =>
588
+ {ability: Api::AbilityId::RESEARCH_CHARGE, requires_power: true},
589
+ Api::UpgradeId::BLINKTECH =>
590
+ {ability: Api::AbilityId::RESEARCH_BLINK, requires_power: true},
591
+ Api::UpgradeId::ADEPTPIERCINGATTACK =>
592
+ {ability: Api::AbilityId::RESEARCH_ADEPTRESONATINGGLAIVES,
593
+ requires_power: true}},
594
+ Api::UnitTypeId::TEMPLARARCHIVE =>
595
+ {Api::UpgradeId::PSISTORMTECH =>
596
+ {ability: Api::AbilityId::RESEARCH_PSISTORM, requires_power: true}},
597
+ Api::UnitTypeId::DARKSHRINE =>
598
+ {Api::UpgradeId::DARKTEMPLARBLINKUPGRADE =>
599
+ {ability: Api::AbilityId::RESEARCH_SHADOWSTRIKE,
600
+ requires_power: true}},
601
+ Api::UnitTypeId::ROBOTICSBAY =>
602
+ {Api::UpgradeId::OBSERVERGRAVITICBOOSTER =>
603
+ {ability: Api::AbilityId::RESEARCH_GRAVITICBOOSTER,
604
+ requires_power: true},
605
+ Api::UpgradeId::GRAVITICDRIVE =>
606
+ {ability: Api::AbilityId::RESEARCH_GRAVITICDRIVE,
607
+ requires_power: true},
608
+ Api::UpgradeId::EXTENDEDTHERMALLANCE =>
609
+ {ability: Api::AbilityId::RESEARCH_EXTENDEDTHERMALLANCE,
610
+ requires_power: true}},
611
+ Api::UnitTypeId::CYBERNETICSCORE =>
612
+ {Api::UpgradeId::PROTOSSAIRWEAPONSLEVEL1 =>
613
+ {ability: Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRWEAPONSLEVEL1,
614
+ requires_power: true},
615
+ Api::UpgradeId::PROTOSSAIRARMORSLEVEL1 =>
616
+ {ability: Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRARMORLEVEL1,
617
+ requires_power: true},
618
+ Api::UpgradeId::WARPGATERESEARCH =>
619
+ {ability: Api::AbilityId::RESEARCH_WARPGATE, requires_power: true},
620
+ Api::UpgradeId::PROTOSSAIRWEAPONSLEVEL2 =>
621
+ {ability: Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRWEAPONSLEVEL2,
622
+ required_building: Api::UnitTypeId::FLEETBEACON,
623
+ required_upgrade: Api::UpgradeId::PROTOSSAIRWEAPONSLEVEL1,
624
+ requires_power: true},
625
+ Api::UpgradeId::PROTOSSAIRWEAPONSLEVEL3 =>
626
+ {ability: Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRWEAPONSLEVEL3,
627
+ required_building: Api::UnitTypeId::FLEETBEACON,
628
+ required_upgrade: Api::UpgradeId::PROTOSSAIRWEAPONSLEVEL2,
629
+ requires_power: true},
630
+ Api::UpgradeId::PROTOSSAIRARMORSLEVEL2 =>
631
+ {ability: Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRARMORLEVEL2,
632
+ required_building: Api::UnitTypeId::FLEETBEACON,
633
+ required_upgrade: Api::UpgradeId::PROTOSSAIRARMORSLEVEL1,
634
+ requires_power: true},
635
+ Api::UpgradeId::PROTOSSAIRARMORSLEVEL3 =>
636
+ {ability: Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRARMORLEVEL3,
637
+ required_building: Api::UnitTypeId::FLEETBEACON,
638
+ required_upgrade: Api::UpgradeId::PROTOSSAIRARMORSLEVEL2,
639
+ requires_power: true}},
640
+ Api::UnitTypeId::HATCHERY =>
641
+ {Api::UpgradeId::OVERLORDSPEED =>
642
+ {ability: Api::AbilityId::RESEARCH_PNEUMATIZEDCARAPACE},
643
+ Api::UpgradeId::BURROW => {ability: Api::AbilityId::RESEARCH_BURROW}},
644
+ Api::UnitTypeId::SPAWNINGPOOL =>
645
+ {Api::UpgradeId::ZERGLINGMOVEMENTSPEED =>
646
+ {ability: Api::AbilityId::RESEARCH_ZERGLINGMETABOLICBOOST},
647
+ Api::UpgradeId::ZERGLINGATTACKSPEED =>
648
+ {ability: Api::AbilityId::RESEARCH_ZERGLINGADRENALGLANDS,
649
+ required_building: Api::UnitTypeId::HIVE}},
650
+ Api::UnitTypeId::EVOLUTIONCHAMBER =>
651
+ {Api::UpgradeId::ZERGMELEEWEAPONSLEVEL1 =>
652
+ {ability: Api::AbilityId::RESEARCH_ZERGMELEEWEAPONSLEVEL1},
653
+ Api::UpgradeId::ZERGGROUNDARMORSLEVEL1 =>
654
+ {ability: Api::AbilityId::RESEARCH_ZERGGROUNDARMORLEVEL1},
655
+ Api::UpgradeId::ZERGMISSILEWEAPONSLEVEL1 =>
656
+ {ability: Api::AbilityId::RESEARCH_ZERGMISSILEWEAPONSLEVEL1},
657
+ Api::UpgradeId::ZERGMELEEWEAPONSLEVEL2 =>
658
+ {ability: Api::AbilityId::RESEARCH_ZERGMELEEWEAPONSLEVEL2,
659
+ required_building: Api::UnitTypeId::LAIR,
660
+ required_upgrade: Api::UpgradeId::ZERGMELEEWEAPONSLEVEL1},
661
+ Api::UpgradeId::ZERGMELEEWEAPONSLEVEL3 =>
662
+ {ability: Api::AbilityId::RESEARCH_ZERGMELEEWEAPONSLEVEL3,
663
+ required_building: Api::UnitTypeId::HIVE,
664
+ required_upgrade: Api::UpgradeId::ZERGMELEEWEAPONSLEVEL2},
665
+ Api::UpgradeId::ZERGGROUNDARMORSLEVEL2 =>
666
+ {ability: Api::AbilityId::RESEARCH_ZERGGROUNDARMORLEVEL2,
667
+ required_building: Api::UnitTypeId::LAIR,
668
+ required_upgrade: Api::UpgradeId::ZERGGROUNDARMORSLEVEL1},
669
+ Api::UpgradeId::ZERGGROUNDARMORSLEVEL3 =>
670
+ {ability: Api::AbilityId::RESEARCH_ZERGGROUNDARMORLEVEL3,
671
+ required_building: Api::UnitTypeId::HIVE,
672
+ required_upgrade: Api::UpgradeId::ZERGGROUNDARMORSLEVEL2},
673
+ Api::UpgradeId::ZERGMISSILEWEAPONSLEVEL2 =>
674
+ {ability: Api::AbilityId::RESEARCH_ZERGMISSILEWEAPONSLEVEL2,
675
+ required_building: Api::UnitTypeId::LAIR,
676
+ required_upgrade: Api::UpgradeId::ZERGMISSILEWEAPONSLEVEL1},
677
+ Api::UpgradeId::ZERGMISSILEWEAPONSLEVEL3 =>
678
+ {ability: Api::AbilityId::RESEARCH_ZERGMISSILEWEAPONSLEVEL3,
679
+ required_building: Api::UnitTypeId::HIVE,
680
+ required_upgrade: Api::UpgradeId::ZERGMISSILEWEAPONSLEVEL2}},
681
+ Api::UnitTypeId::HYDRALISKDEN =>
682
+ {Api::UpgradeId::EVOLVEGROOVEDSPINES =>
683
+ {ability: Api::AbilityId::RESEARCH_GROOVEDSPINES},
684
+ Api::UpgradeId::EVOLVEMUSCULARAUGMENTS =>
685
+ {ability: Api::AbilityId::RESEARCH_MUSCULARAUGMENTS}},
686
+ Api::UnitTypeId::SPIRE =>
687
+ {Api::UpgradeId::ZERGFLYERWEAPONSLEVEL1 =>
688
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL1},
689
+ Api::UpgradeId::ZERGFLYERARMORSLEVEL1 =>
690
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL1},
691
+ Api::UpgradeId::ZERGFLYERWEAPONSLEVEL2 =>
692
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL2,
693
+ required_building: Api::UnitTypeId::LAIR,
694
+ required_upgrade: Api::UpgradeId::ZERGFLYERWEAPONSLEVEL1},
695
+ Api::UpgradeId::ZERGFLYERWEAPONSLEVEL3 =>
696
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL3,
697
+ required_building: Api::UnitTypeId::HIVE,
698
+ required_upgrade: Api::UpgradeId::ZERGFLYERWEAPONSLEVEL2},
699
+ Api::UpgradeId::ZERGFLYERARMORSLEVEL2 =>
700
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL2,
701
+ required_building: Api::UnitTypeId::LAIR,
702
+ required_upgrade: Api::UpgradeId::ZERGFLYERARMORSLEVEL1},
703
+ Api::UpgradeId::ZERGFLYERARMORSLEVEL3 =>
704
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL3,
705
+ required_building: Api::UnitTypeId::HIVE,
706
+ required_upgrade: Api::UpgradeId::ZERGFLYERARMORSLEVEL2}},
707
+ Api::UnitTypeId::ULTRALISKCAVERN =>
708
+ {Api::UpgradeId::ANABOLICSYNTHESIS =>
709
+ {ability: Api::AbilityId::RESEARCH_ANABOLICSYNTHESIS},
710
+ Api::UpgradeId::CHITINOUSPLATING =>
711
+ {ability: Api::AbilityId::RESEARCH_CHITINOUSPLATING}},
712
+ Api::UnitTypeId::INFESTATIONPIT =>
713
+ {Api::UpgradeId::NEURALPARASITE =>
714
+ {ability: Api::AbilityId::RESEARCH_NEURALPARASITE}},
715
+ Api::UnitTypeId::BANELINGNEST =>
716
+ {Api::UpgradeId::CENTRIFICALHOOKS =>
717
+ {ability: Api::AbilityId::RESEARCH_CENTRIFUGALHOOKS,
718
+ required_building: Api::UnitTypeId::LAIR}},
719
+ Api::UnitTypeId::ROACHWARREN =>
720
+ {Api::UpgradeId::GLIALRECONSTITUTION =>
721
+ {ability: Api::AbilityId::RESEARCH_GLIALREGENERATION,
722
+ required_building: Api::UnitTypeId::LAIR},
723
+ Api::UpgradeId::TUNNELINGCLAWS =>
724
+ {ability: Api::AbilityId::RESEARCH_TUNNELINGCLAWS,
725
+ required_building: Api::UnitTypeId::LAIR}},
726
+ Api::UnitTypeId::LAIR =>
727
+ {Api::UpgradeId::OVERLORDSPEED =>
728
+ {ability: Api::AbilityId::RESEARCH_PNEUMATIZEDCARAPACE},
729
+ Api::UpgradeId::BURROW => {ability: Api::AbilityId::RESEARCH_BURROW}},
730
+ Api::UnitTypeId::HIVE =>
731
+ {Api::UpgradeId::OVERLORDSPEED =>
732
+ {ability: Api::AbilityId::RESEARCH_PNEUMATIZEDCARAPACE},
733
+ Api::UpgradeId::BURROW => {ability: Api::AbilityId::RESEARCH_BURROW}},
734
+ Api::UnitTypeId::GREATERSPIRE =>
735
+ {Api::UpgradeId::ZERGFLYERWEAPONSLEVEL1 =>
736
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL1},
737
+ Api::UpgradeId::ZERGFLYERARMORSLEVEL1 =>
738
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL1},
739
+ Api::UpgradeId::ZERGFLYERWEAPONSLEVEL2 =>
740
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL2,
741
+ required_building: Api::UnitTypeId::LAIR,
742
+ required_upgrade: Api::UpgradeId::ZERGFLYERWEAPONSLEVEL1},
743
+ Api::UpgradeId::ZERGFLYERWEAPONSLEVEL3 =>
744
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL3,
745
+ required_building: Api::UnitTypeId::HIVE,
746
+ required_upgrade: Api::UpgradeId::ZERGFLYERWEAPONSLEVEL2},
747
+ Api::UpgradeId::ZERGFLYERARMORSLEVEL2 =>
748
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL2,
749
+ required_building: Api::UnitTypeId::LAIR,
750
+ required_upgrade: Api::UpgradeId::ZERGFLYERARMORSLEVEL1},
751
+ Api::UpgradeId::ZERGFLYERARMORSLEVEL3 =>
752
+ {ability: Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL3,
753
+ required_building: Api::UnitTypeId::HIVE,
754
+ required_upgrade: Api::UpgradeId::ZERGFLYERARMORSLEVEL2}},
755
+ Api::UnitTypeId::LURKERDENMP =>
756
+ {Api::UpgradeId::DIGGINGCLAWS =>
757
+ {ability: Api::AbilityId::RESEARCH_ADAPTIVETALONS,
758
+ required_building: Api::UnitTypeId::HIVE},
759
+ Api::UpgradeId::LURKERRANGE =>
760
+ {ability: Api::AbilityId::LURKERDENRESEARCH_RESEARCHLURKERRANGE,
761
+ required_building: Api::UnitTypeId::HIVE}}}
762
+
763
+ # unit_created_from_data = {
764
+ # UnitTypeId.ADEPT: [UnitTypeId.GATEWAY, UnitTypeId.WARPGATE],
765
+ # UnitTypeId.ARMORY: [UnitTypeId.SCV],
766
+ # UnitTypeId.ASSIMILATOR: [UnitTypeId.PROBE],
767
+ # }
768
+ def unit_created_from_data = {Api::UnitTypeId::SCV =>
769
+ [Api::UnitTypeId::COMMANDCENTER,
770
+ Api::UnitTypeId::PLANETARYFORTRESS,
771
+ Api::UnitTypeId::ORBITALCOMMAND],
772
+ Api::UnitTypeId::PLANETARYFORTRESS => [Api::UnitTypeId::COMMANDCENTER],
773
+ Api::UnitTypeId::ORBITALCOMMAND => [Api::UnitTypeId::COMMANDCENTER],
774
+ Api::UnitTypeId::MARINE => [Api::UnitTypeId::BARRACKS],
775
+ Api::UnitTypeId::REAPER => [Api::UnitTypeId::BARRACKS],
776
+ Api::UnitTypeId::GHOST => [Api::UnitTypeId::BARRACKS],
777
+ Api::UnitTypeId::MARAUDER => [Api::UnitTypeId::BARRACKS],
778
+ Api::UnitTypeId::HELLION => [Api::UnitTypeId::FACTORY],
779
+ Api::UnitTypeId::CYCLONE => [Api::UnitTypeId::FACTORY],
780
+ Api::UnitTypeId::WIDOWMINE => [Api::UnitTypeId::FACTORY],
781
+ Api::UnitTypeId::SIEGETANK => [Api::UnitTypeId::FACTORY],
782
+ Api::UnitTypeId::THOR => [Api::UnitTypeId::FACTORY],
783
+ Api::UnitTypeId::HELLIONTANK => [Api::UnitTypeId::FACTORY],
784
+ Api::UnitTypeId::MEDIVAC => [Api::UnitTypeId::STARPORT],
785
+ Api::UnitTypeId::VIKINGFIGHTER => [Api::UnitTypeId::STARPORT],
786
+ Api::UnitTypeId::LIBERATOR => [Api::UnitTypeId::STARPORT],
787
+ Api::UnitTypeId::BANSHEE => [Api::UnitTypeId::STARPORT],
788
+ Api::UnitTypeId::RAVEN => [Api::UnitTypeId::STARPORT],
789
+ Api::UnitTypeId::BATTLECRUISER => [Api::UnitTypeId::STARPORT],
790
+ Api::UnitTypeId::COMMANDCENTER => [Api::UnitTypeId::SCV],
791
+ Api::UnitTypeId::SUPPLYDEPOT => [Api::UnitTypeId::SCV],
792
+ Api::UnitTypeId::REFINERY => [Api::UnitTypeId::SCV],
793
+ Api::UnitTypeId::BARRACKS => [Api::UnitTypeId::SCV],
794
+ Api::UnitTypeId::ENGINEERINGBAY => [Api::UnitTypeId::SCV],
795
+ Api::UnitTypeId::MISSILETURRET => [Api::UnitTypeId::SCV],
796
+ Api::UnitTypeId::BUNKER => [Api::UnitTypeId::SCV],
797
+ Api::UnitTypeId::SENSORTOWER => [Api::UnitTypeId::SCV],
798
+ Api::UnitTypeId::GHOSTACADEMY => [Api::UnitTypeId::SCV],
799
+ Api::UnitTypeId::FACTORY => [Api::UnitTypeId::SCV],
800
+ Api::UnitTypeId::STARPORT => [Api::UnitTypeId::SCV],
801
+ Api::UnitTypeId::ARMORY => [Api::UnitTypeId::SCV],
802
+ Api::UnitTypeId::FUSIONCORE => [Api::UnitTypeId::SCV],
803
+ Api::UnitTypeId::AUTOTURRET => [Api::UnitTypeId::RAVEN],
804
+ Api::UnitTypeId::PROBE => [Api::UnitTypeId::NEXUS],
805
+ Api::UnitTypeId::MOTHERSHIP => [Api::UnitTypeId::NEXUS],
806
+ Api::UnitTypeId::ZEALOT =>
807
+ [Api::UnitTypeId::GATEWAY, Api::UnitTypeId::WARPGATE],
808
+ Api::UnitTypeId::STALKER =>
809
+ [Api::UnitTypeId::GATEWAY, Api::UnitTypeId::WARPGATE],
810
+ Api::UnitTypeId::HIGHTEMPLAR =>
811
+ [Api::UnitTypeId::GATEWAY, Api::UnitTypeId::WARPGATE],
812
+ Api::UnitTypeId::DARKTEMPLAR =>
813
+ [Api::UnitTypeId::GATEWAY, Api::UnitTypeId::WARPGATE],
814
+ Api::UnitTypeId::SENTRY =>
815
+ [Api::UnitTypeId::GATEWAY, Api::UnitTypeId::WARPGATE],
816
+ Api::UnitTypeId::ADEPT =>
817
+ [Api::UnitTypeId::GATEWAY, Api::UnitTypeId::WARPGATE],
818
+ Api::UnitTypeId::PHOENIX => [Api::UnitTypeId::STARGATE],
819
+ Api::UnitTypeId::VOIDRAY => [Api::UnitTypeId::STARGATE],
820
+ Api::UnitTypeId::ORACLE => [Api::UnitTypeId::STARGATE],
821
+ Api::UnitTypeId::CARRIER => [Api::UnitTypeId::STARGATE],
822
+ Api::UnitTypeId::TEMPEST => [Api::UnitTypeId::STARGATE],
823
+ Api::UnitTypeId::WARPPRISM => [Api::UnitTypeId::ROBOTICSFACILITY],
824
+ Api::UnitTypeId::OBSERVER => [Api::UnitTypeId::ROBOTICSFACILITY],
825
+ Api::UnitTypeId::IMMORTAL => [Api::UnitTypeId::ROBOTICSFACILITY],
826
+ Api::UnitTypeId::COLOSSUS => [Api::UnitTypeId::ROBOTICSFACILITY],
827
+ Api::UnitTypeId::DISRUPTOR => [Api::UnitTypeId::ROBOTICSFACILITY],
828
+ Api::UnitTypeId::NEXUS => [Api::UnitTypeId::PROBE],
829
+ Api::UnitTypeId::PYLON => [Api::UnitTypeId::PROBE],
830
+ Api::UnitTypeId::ASSIMILATOR => [Api::UnitTypeId::PROBE],
831
+ Api::UnitTypeId::GATEWAY => [Api::UnitTypeId::PROBE],
832
+ Api::UnitTypeId::FORGE => [Api::UnitTypeId::PROBE],
833
+ Api::UnitTypeId::FLEETBEACON => [Api::UnitTypeId::PROBE],
834
+ Api::UnitTypeId::TWILIGHTCOUNCIL => [Api::UnitTypeId::PROBE],
835
+ Api::UnitTypeId::PHOTONCANNON => [Api::UnitTypeId::PROBE],
836
+ Api::UnitTypeId::STARGATE => [Api::UnitTypeId::PROBE],
837
+ Api::UnitTypeId::TEMPLARARCHIVE => [Api::UnitTypeId::PROBE],
838
+ Api::UnitTypeId::DARKSHRINE => [Api::UnitTypeId::PROBE],
839
+ Api::UnitTypeId::ROBOTICSBAY => [Api::UnitTypeId::PROBE],
840
+ Api::UnitTypeId::ROBOTICSFACILITY => [Api::UnitTypeId::PROBE],
841
+ Api::UnitTypeId::CYBERNETICSCORE => [Api::UnitTypeId::PROBE],
842
+ Api::UnitTypeId::SHIELDBATTERY => [Api::UnitTypeId::PROBE],
843
+ Api::UnitTypeId::LAIR => [Api::UnitTypeId::HATCHERY],
844
+ Api::UnitTypeId::QUEEN =>
845
+ [Api::UnitTypeId::HATCHERY,
846
+ Api::UnitTypeId::LAIR,
847
+ Api::UnitTypeId::HIVE],
848
+ Api::UnitTypeId::GREATERSPIRE => [Api::UnitTypeId::SPIRE],
849
+ Api::UnitTypeId::NYDUSCANAL => [Api::UnitTypeId::NYDUSNETWORK],
850
+ Api::UnitTypeId::HIVE => [Api::UnitTypeId::LAIR],
851
+ Api::UnitTypeId::HATCHERY => [Api::UnitTypeId::DRONE],
852
+ Api::UnitTypeId::EXTRACTOR => [Api::UnitTypeId::DRONE],
853
+ Api::UnitTypeId::SPAWNINGPOOL => [Api::UnitTypeId::DRONE],
854
+ Api::UnitTypeId::EVOLUTIONCHAMBER => [Api::UnitTypeId::DRONE],
855
+ Api::UnitTypeId::HYDRALISKDEN => [Api::UnitTypeId::DRONE],
856
+ Api::UnitTypeId::SPIRE => [Api::UnitTypeId::DRONE],
857
+ Api::UnitTypeId::ULTRALISKCAVERN => [Api::UnitTypeId::DRONE],
858
+ Api::UnitTypeId::INFESTATIONPIT => [Api::UnitTypeId::DRONE],
859
+ Api::UnitTypeId::NYDUSNETWORK => [Api::UnitTypeId::DRONE],
860
+ Api::UnitTypeId::BANELINGNEST => [Api::UnitTypeId::DRONE],
861
+ Api::UnitTypeId::LURKERDENMP => [Api::UnitTypeId::DRONE],
862
+ Api::UnitTypeId::ROACHWARREN => [Api::UnitTypeId::DRONE],
863
+ Api::UnitTypeId::SPINECRAWLER => [Api::UnitTypeId::DRONE],
864
+ Api::UnitTypeId::SPORECRAWLER => [Api::UnitTypeId::DRONE],
865
+ Api::UnitTypeId::OVERSEER =>
866
+ [Api::UnitTypeId::OVERLORD, Api::UnitTypeId::OVERLORDTRANSPORT],
867
+ Api::UnitTypeId::OVERLORDTRANSPORT => [Api::UnitTypeId::OVERLORD],
868
+ Api::UnitTypeId::LURKERMP => [Api::UnitTypeId::HYDRALISK],
869
+ Api::UnitTypeId::RAVAGER => [Api::UnitTypeId::ROACH],
870
+ Api::UnitTypeId::BROODLORD => [Api::UnitTypeId::CORRUPTOR],
871
+ Api::UnitTypeId::CREEPTUMORQUEEN => [Api::UnitTypeId::QUEEN],
872
+ Api::UnitTypeId::CREEPTUMOR =>
873
+ [Api::UnitTypeId::QUEEN,
874
+ Api::UnitTypeId::CREEPTUMORBURROWED,
875
+ Api::UnitTypeId::CREEPTUMORQUEEN],
876
+ Api::UnitTypeId::CHANGELING =>
877
+ [Api::UnitTypeId::OVERSEER, Api::UnitTypeId::OVERSEERSIEGEMODE],
878
+ Api::UnitTypeId::DRONE => [Api::UnitTypeId::LARVA],
879
+ Api::UnitTypeId::OVERLORD => [Api::UnitTypeId::LARVA],
880
+ Api::UnitTypeId::ZERGLING => [Api::UnitTypeId::LARVA],
881
+ Api::UnitTypeId::HYDRALISK => [Api::UnitTypeId::LARVA],
882
+ Api::UnitTypeId::MUTALISK => [Api::UnitTypeId::LARVA],
883
+ Api::UnitTypeId::ULTRALISK => [Api::UnitTypeId::LARVA],
884
+ Api::UnitTypeId::ROACH => [Api::UnitTypeId::LARVA],
885
+ Api::UnitTypeId::INFESTOR => [Api::UnitTypeId::LARVA],
886
+ Api::UnitTypeId::CORRUPTOR => [Api::UnitTypeId::LARVA],
887
+ Api::UnitTypeId::VIPER => [Api::UnitTypeId::LARVA],
888
+ Api::UnitTypeId::SWARMHOSTMP => [Api::UnitTypeId::LARVA],
889
+ Api::UnitTypeId::LOCUSTMPFLYING =>
890
+ [Api::UnitTypeId::SWARMHOSTBURROWEDMP, Api::UnitTypeId::SWARMHOSTMP],
891
+ Api::UnitTypeId::ORACLESTASISTRAP => [Api::UnitTypeId::ORACLE]}
892
+
893
+ # unit_created_from_data = {
894
+ # UpgradeId.ADEPTPIERCINGATTACK: UnitTypeId.TWILIGHTCOUNCIL,
895
+ # UpgradeId.ANABOLICSYNTHESIS: UnitTypeId.ULTRALISKCAVERN,
896
+ # UpgradeId.BANSHEECLOAK: UnitTypeId.STARPORTTECHLAB,
897
+ # }
898
+ def upgrade_researched_from_data = {Api::UpgradeId::HISECAUTOTRACKING => Api::UnitTypeId::ENGINEERINGBAY,
899
+ Api::UpgradeId::TERRANBUILDINGARMOR => Api::UnitTypeId::ENGINEERINGBAY,
900
+ Api::UpgradeId::TERRANINFANTRYWEAPONSLEVEL1 =>
901
+ Api::UnitTypeId::ENGINEERINGBAY,
902
+ Api::UpgradeId::TERRANINFANTRYARMORSLEVEL1 =>
903
+ Api::UnitTypeId::ENGINEERINGBAY,
904
+ Api::UpgradeId::TERRANINFANTRYWEAPONSLEVEL2 =>
905
+ Api::UnitTypeId::ENGINEERINGBAY,
906
+ Api::UpgradeId::TERRANINFANTRYWEAPONSLEVEL3 =>
907
+ Api::UnitTypeId::ENGINEERINGBAY,
908
+ Api::UpgradeId::TERRANINFANTRYARMORSLEVEL2 =>
909
+ Api::UnitTypeId::ENGINEERINGBAY,
910
+ Api::UpgradeId::TERRANINFANTRYARMORSLEVEL3 =>
911
+ Api::UnitTypeId::ENGINEERINGBAY,
912
+ Api::UpgradeId::PERSONALCLOAKING => Api::UnitTypeId::GHOSTACADEMY,
913
+ Api::UpgradeId::TERRANVEHICLEWEAPONSLEVEL1 => Api::UnitTypeId::ARMORY,
914
+ Api::UpgradeId::TERRANSHIPWEAPONSLEVEL1 => Api::UnitTypeId::ARMORY,
915
+ Api::UpgradeId::TERRANVEHICLEANDSHIPARMORSLEVEL1 => Api::UnitTypeId::ARMORY,
916
+ Api::UpgradeId::TERRANVEHICLEWEAPONSLEVEL2 => Api::UnitTypeId::ARMORY,
917
+ Api::UpgradeId::TERRANVEHICLEWEAPONSLEVEL3 => Api::UnitTypeId::ARMORY,
918
+ Api::UpgradeId::TERRANSHIPWEAPONSLEVEL2 => Api::UnitTypeId::ARMORY,
919
+ Api::UpgradeId::TERRANSHIPWEAPONSLEVEL3 => Api::UnitTypeId::ARMORY,
920
+ Api::UpgradeId::TERRANVEHICLEANDSHIPARMORSLEVEL2 => Api::UnitTypeId::ARMORY,
921
+ Api::UpgradeId::TERRANVEHICLEANDSHIPARMORSLEVEL3 => Api::UnitTypeId::ARMORY,
922
+ Api::UpgradeId::BATTLECRUISERENABLESPECIALIZATIONS =>
923
+ Api::UnitTypeId::FUSIONCORE,
924
+ Api::UpgradeId::LIBERATORAGRANGEUPGRADE => Api::UnitTypeId::FUSIONCORE,
925
+ Api::UpgradeId::MEDIVACCADUCEUSREACTOR => Api::UnitTypeId::FUSIONCORE,
926
+ Api::UpgradeId::STIMPACK => Api::UnitTypeId::BARRACKSTECHLAB,
927
+ Api::UpgradeId::SHIELDWALL => Api::UnitTypeId::BARRACKSTECHLAB,
928
+ Api::UpgradeId::PUNISHERGRENADES => Api::UnitTypeId::BARRACKSTECHLAB,
929
+ Api::UpgradeId::HIGHCAPACITYBARRELS => Api::UnitTypeId::FACTORYTECHLAB,
930
+ Api::UpgradeId::TEMPESTGROUNDATTACKUPGRADE =>
931
+ Api::UnitTypeId::FACTORYTECHLAB,
932
+ Api::UpgradeId::DRILLCLAWS => Api::UnitTypeId::FACTORYTECHLAB,
933
+ Api::UpgradeId::SMARTSERVOS => Api::UnitTypeId::FACTORYTECHLAB,
934
+ Api::UpgradeId::BANSHEECLOAK => Api::UnitTypeId::STARPORTTECHLAB,
935
+ Api::UpgradeId::BANSHEESPEED => Api::UnitTypeId::STARPORTTECHLAB,
936
+ Api::UpgradeId::AMPLIFIEDSHIELDING => Api::UnitTypeId::STARPORTTECHLAB,
937
+ Api::UpgradeId::PROTOSSGROUNDWEAPONSLEVEL1 => Api::UnitTypeId::FORGE,
938
+ Api::UpgradeId::PROTOSSGROUNDARMORSLEVEL1 => Api::UnitTypeId::FORGE,
939
+ Api::UpgradeId::PROTOSSSHIELDSLEVEL1 => Api::UnitTypeId::FORGE,
940
+ Api::UpgradeId::PROTOSSGROUNDWEAPONSLEVEL2 => Api::UnitTypeId::FORGE,
941
+ Api::UpgradeId::PROTOSSGROUNDWEAPONSLEVEL3 => Api::UnitTypeId::FORGE,
942
+ Api::UpgradeId::PROTOSSGROUNDARMORSLEVEL2 => Api::UnitTypeId::FORGE,
943
+ Api::UpgradeId::PROTOSSGROUNDARMORSLEVEL3 => Api::UnitTypeId::FORGE,
944
+ Api::UpgradeId::PROTOSSSHIELDSLEVEL2 => Api::UnitTypeId::FORGE,
945
+ Api::UpgradeId::PROTOSSSHIELDSLEVEL3 => Api::UnitTypeId::FORGE,
946
+ Api::UpgradeId::PHOENIXRANGEUPGRADE => Api::UnitTypeId::FLEETBEACON,
947
+ Api::UpgradeId::VOIDRAYSPEEDUPGRADE => Api::UnitTypeId::FLEETBEACON,
948
+ Api::UpgradeId::MICROBIALSHROUD => Api::UnitTypeId::FLEETBEACON,
949
+ Api::UpgradeId::CHARGE => Api::UnitTypeId::TWILIGHTCOUNCIL,
950
+ Api::UpgradeId::BLINKTECH => Api::UnitTypeId::TWILIGHTCOUNCIL,
951
+ Api::UpgradeId::ADEPTPIERCINGATTACK => Api::UnitTypeId::TWILIGHTCOUNCIL,
952
+ Api::UpgradeId::PSISTORMTECH => Api::UnitTypeId::TEMPLARARCHIVE,
953
+ Api::UpgradeId::DARKTEMPLARBLINKUPGRADE => Api::UnitTypeId::DARKSHRINE,
954
+ Api::UpgradeId::OBSERVERGRAVITICBOOSTER => Api::UnitTypeId::ROBOTICSBAY,
955
+ Api::UpgradeId::GRAVITICDRIVE => Api::UnitTypeId::ROBOTICSBAY,
956
+ Api::UpgradeId::EXTENDEDTHERMALLANCE => Api::UnitTypeId::ROBOTICSBAY,
957
+ Api::UpgradeId::PROTOSSAIRWEAPONSLEVEL1 => Api::UnitTypeId::CYBERNETICSCORE,
958
+ Api::UpgradeId::PROTOSSAIRARMORSLEVEL1 => Api::UnitTypeId::CYBERNETICSCORE,
959
+ Api::UpgradeId::WARPGATERESEARCH => Api::UnitTypeId::CYBERNETICSCORE,
960
+ Api::UpgradeId::PROTOSSAIRWEAPONSLEVEL2 => Api::UnitTypeId::CYBERNETICSCORE,
961
+ Api::UpgradeId::PROTOSSAIRWEAPONSLEVEL3 => Api::UnitTypeId::CYBERNETICSCORE,
962
+ Api::UpgradeId::PROTOSSAIRARMORSLEVEL2 => Api::UnitTypeId::CYBERNETICSCORE,
963
+ Api::UpgradeId::PROTOSSAIRARMORSLEVEL3 => Api::UnitTypeId::CYBERNETICSCORE,
964
+ Api::UpgradeId::OVERLORDSPEED => Api::UnitTypeId::HATCHERY,
965
+ Api::UpgradeId::BURROW => Api::UnitTypeId::HATCHERY,
966
+ Api::UpgradeId::ZERGLINGMOVEMENTSPEED => Api::UnitTypeId::SPAWNINGPOOL,
967
+ Api::UpgradeId::ZERGLINGATTACKSPEED => Api::UnitTypeId::SPAWNINGPOOL,
968
+ Api::UpgradeId::ZERGMELEEWEAPONSLEVEL1 => Api::UnitTypeId::EVOLUTIONCHAMBER,
969
+ Api::UpgradeId::ZERGGROUNDARMORSLEVEL1 => Api::UnitTypeId::EVOLUTIONCHAMBER,
970
+ Api::UpgradeId::ZERGMISSILEWEAPONSLEVEL1 =>
971
+ Api::UnitTypeId::EVOLUTIONCHAMBER,
972
+ Api::UpgradeId::ZERGMELEEWEAPONSLEVEL2 => Api::UnitTypeId::EVOLUTIONCHAMBER,
973
+ Api::UpgradeId::ZERGMELEEWEAPONSLEVEL3 => Api::UnitTypeId::EVOLUTIONCHAMBER,
974
+ Api::UpgradeId::ZERGGROUNDARMORSLEVEL2 => Api::UnitTypeId::EVOLUTIONCHAMBER,
975
+ Api::UpgradeId::ZERGGROUNDARMORSLEVEL3 => Api::UnitTypeId::EVOLUTIONCHAMBER,
976
+ Api::UpgradeId::ZERGMISSILEWEAPONSLEVEL2 =>
977
+ Api::UnitTypeId::EVOLUTIONCHAMBER,
978
+ Api::UpgradeId::ZERGMISSILEWEAPONSLEVEL3 =>
979
+ Api::UnitTypeId::EVOLUTIONCHAMBER,
980
+ Api::UpgradeId::EVOLVEGROOVEDSPINES => Api::UnitTypeId::HYDRALISKDEN,
981
+ Api::UpgradeId::EVOLVEMUSCULARAUGMENTS => Api::UnitTypeId::HYDRALISKDEN,
982
+ Api::UpgradeId::ZERGFLYERWEAPONSLEVEL1 => Api::UnitTypeId::SPIRE,
983
+ Api::UpgradeId::ZERGFLYERARMORSLEVEL1 => Api::UnitTypeId::SPIRE,
984
+ Api::UpgradeId::ZERGFLYERWEAPONSLEVEL2 => Api::UnitTypeId::SPIRE,
985
+ Api::UpgradeId::ZERGFLYERWEAPONSLEVEL3 => Api::UnitTypeId::SPIRE,
986
+ Api::UpgradeId::ZERGFLYERARMORSLEVEL2 => Api::UnitTypeId::SPIRE,
987
+ Api::UpgradeId::ZERGFLYERARMORSLEVEL3 => Api::UnitTypeId::SPIRE,
988
+ Api::UpgradeId::ANABOLICSYNTHESIS => Api::UnitTypeId::ULTRALISKCAVERN,
989
+ Api::UpgradeId::CHITINOUSPLATING => Api::UnitTypeId::ULTRALISKCAVERN,
990
+ Api::UpgradeId::NEURALPARASITE => Api::UnitTypeId::INFESTATIONPIT,
991
+ Api::UpgradeId::CENTRIFICALHOOKS => Api::UnitTypeId::BANELINGNEST,
992
+ Api::UpgradeId::GLIALRECONSTITUTION => Api::UnitTypeId::ROACHWARREN,
993
+ Api::UpgradeId::TUNNELINGCLAWS => Api::UnitTypeId::ROACHWARREN,
994
+ Api::UpgradeId::DIGGINGCLAWS => Api::UnitTypeId::LURKERDENMP,
995
+ Api::UpgradeId::LURKERRANGE => Api::UnitTypeId::LURKERDENMP}
996
+
997
+ def unit_abilities_data = {Api::UnitTypeId::COLOSSUS =>
998
+ [Api::AbilityId::STOP_STOP,
999
+ Api::AbilityId::MOVE_MOVE,
1000
+ Api::AbilityId::PATROL_PATROL,
1001
+ Api::AbilityId::HOLDPOSITION_HOLD,
1002
+ Api::AbilityId::ATTACK_ATTACK,
1003
+ Api::AbilityId::SMART],
1004
+ Api::UnitTypeId::TECHLAB =>
1005
+ [Api::AbilityId::BARRACKSTECHLABRESEARCH_STIMPACK,
1006
+ Api::AbilityId::RESEARCH_COMBATSHIELD,
1007
+ Api::AbilityId::RESEARCH_CONCUSSIVESHELLS,
1008
+ Api::AbilityId::RESEARCH_INFERNALPREIGNITER,
1009
+ Api::AbilityId::RESEARCH_DRILLINGCLAWS,
1010
+ Api::AbilityId::RESEARCH_RAVENCORVIDREACTOR,
1011
+ Api::AbilityId::RESEARCH_BANSHEECLOAKINGFIELD],
1012
+ Api::UnitTypeId::REACTOR => [],
1013
+ Api::UnitTypeId::INFESTORTERRAN =>
1014
+ [Api::AbilityId::STOP_STOP,
1015
+ Api::AbilityId::MOVE_MOVE,
1016
+ Api::AbilityId::PATROL_PATROL,
1017
+ Api::AbilityId::HOLDPOSITION_HOLD,
1018
+ Api::AbilityId::ATTACK_ATTACK,
1019
+ Api::AbilityId::SMART,
1020
+ Api::AbilityId::BURROWDOWN_INFESTORTERRAN],
1021
+ Api::UnitTypeId::BANELINGCOCOON =>
1022
+ [Api::AbilityId::RALLY_BUILDING, Api::AbilityId::SMART],
1023
+ Api::UnitTypeId::BANELING =>
1024
+ [Api::AbilityId::STOP_STOP,
1025
+ Api::AbilityId::MOVE_MOVE,
1026
+ Api::AbilityId::PATROL_PATROL,
1027
+ Api::AbilityId::HOLDPOSITION_HOLD,
1028
+ Api::AbilityId::ATTACK_ATTACK,
1029
+ Api::AbilityId::EXPLODE_EXPLODE,
1030
+ Api::AbilityId::BEHAVIOR_BUILDINGATTACKON,
1031
+ Api::AbilityId::SMART,
1032
+ Api::AbilityId::BURROWDOWN_BANELING],
1033
+ Api::UnitTypeId::MOTHERSHIP =>
1034
+ [Api::AbilityId::STOP_STOP,
1035
+ Api::AbilityId::MOVE_MOVE,
1036
+ Api::AbilityId::PATROL_PATROL,
1037
+ Api::AbilityId::HOLDPOSITION_HOLD,
1038
+ Api::AbilityId::ATTACK_ATTACK,
1039
+ Api::AbilityId::EFFECT_MASSRECALL_STRATEGICRECALL,
1040
+ Api::AbilityId::EFFECT_TIMEWARP,
1041
+ Api::AbilityId._250MMSTRIKECANNONS_CANCEL,
1042
+ Api::AbilityId::SMART],
1043
+ Api::UnitTypeId::POINTDEFENSEDRONE => [],
1044
+ Api::UnitTypeId::CHANGELING =>
1045
+ [Api::AbilityId::STOP_STOP,
1046
+ Api::AbilityId::MOVE_MOVE,
1047
+ Api::AbilityId::PATROL_PATROL,
1048
+ Api::AbilityId::HOLDPOSITION_HOLD,
1049
+ Api::AbilityId::SCAN_MOVE,
1050
+ Api::AbilityId::SMART],
1051
+ Api::UnitTypeId::CHANGELINGZEALOT =>
1052
+ [Api::AbilityId::STOP_STOP,
1053
+ Api::AbilityId::MOVE_MOVE,
1054
+ Api::AbilityId::PATROL_PATROL,
1055
+ Api::AbilityId::HOLDPOSITION_HOLD,
1056
+ Api::AbilityId::SCAN_MOVE,
1057
+ Api::AbilityId::SMART],
1058
+ Api::UnitTypeId::CHANGELINGMARINESHIELD =>
1059
+ [Api::AbilityId::STOP_STOP,
1060
+ Api::AbilityId::MOVE_MOVE,
1061
+ Api::AbilityId::PATROL_PATROL,
1062
+ Api::AbilityId::HOLDPOSITION_HOLD,
1063
+ Api::AbilityId::SCAN_MOVE,
1064
+ Api::AbilityId::SMART],
1065
+ Api::UnitTypeId::CHANGELINGMARINE =>
1066
+ [Api::AbilityId::STOP_STOP,
1067
+ Api::AbilityId::MOVE_MOVE,
1068
+ Api::AbilityId::PATROL_PATROL,
1069
+ Api::AbilityId::HOLDPOSITION_HOLD,
1070
+ Api::AbilityId::SCAN_MOVE,
1071
+ Api::AbilityId::SMART],
1072
+ Api::UnitTypeId::CHANGELINGZERGLINGWINGS =>
1073
+ [Api::AbilityId::STOP_STOP,
1074
+ Api::AbilityId::MOVE_MOVE,
1075
+ Api::AbilityId::PATROL_PATROL,
1076
+ Api::AbilityId::HOLDPOSITION_HOLD,
1077
+ Api::AbilityId::SCAN_MOVE,
1078
+ Api::AbilityId::SMART],
1079
+ Api::UnitTypeId::CHANGELINGZERGLING =>
1080
+ [Api::AbilityId::STOP_STOP,
1081
+ Api::AbilityId::MOVE_MOVE,
1082
+ Api::AbilityId::PATROL_PATROL,
1083
+ Api::AbilityId::HOLDPOSITION_HOLD,
1084
+ Api::AbilityId::SCAN_MOVE,
1085
+ Api::AbilityId::SMART],
1086
+ Api::UnitTypeId::COMMANDCENTER =>
1087
+ [Api::AbilityId::RALLY_COMMANDCENTER,
1088
+ Api::AbilityId::LOADALL_COMMANDCENTER,
1089
+ Api::AbilityId::LIFT_COMMANDCENTER,
1090
+ Api::AbilityId::COMMANDCENTERTRAIN_SCV,
1091
+ Api::AbilityId::SMART,
1092
+ Api::AbilityId::UPGRADETOPLANETARYFORTRESS_PLANETARYFORTRESS,
1093
+ Api::AbilityId::UPGRADETOORBITAL_ORBITALCOMMAND],
1094
+ Api::UnitTypeId::SUPPLYDEPOT => [Api::AbilityId::MORPH_SUPPLYDEPOT_LOWER],
1095
+ Api::UnitTypeId::REFINERY => [],
1096
+ Api::UnitTypeId::BARRACKS =>
1097
+ [Api::AbilityId::RALLY_BUILDING,
1098
+ Api::AbilityId::BUILD_TECHLAB_BARRACKS,
1099
+ Api::AbilityId::BUILD_REACTOR_BARRACKS,
1100
+ Api::AbilityId::LIFT_BARRACKS,
1101
+ Api::AbilityId::BARRACKSTRAIN_MARINE,
1102
+ Api::AbilityId::BARRACKSTRAIN_REAPER,
1103
+ Api::AbilityId::SMART,
1104
+ Api::AbilityId::BARRACKSTRAIN_GHOST,
1105
+ Api::AbilityId::BARRACKSTRAIN_MARAUDER],
1106
+ Api::UnitTypeId::ENGINEERINGBAY =>
1107
+ [Api::AbilityId::RESEARCH_HISECAUTOTRACKING,
1108
+ Api::AbilityId::RESEARCH_TERRANSTRUCTUREARMORUPGRADE,
1109
+ Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYWEAPONSLEVEL1,
1110
+ Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYARMORLEVEL1,
1111
+ Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYWEAPONSLEVEL2,
1112
+ Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYWEAPONSLEVEL3,
1113
+ Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYARMORLEVEL2,
1114
+ Api::AbilityId::ENGINEERINGBAYRESEARCH_TERRANINFANTRYARMORLEVEL3],
1115
+ Api::UnitTypeId::MISSILETURRET =>
1116
+ [Api::AbilityId::STOP_STOP,
1117
+ Api::AbilityId::ATTACK_ATTACK,
1118
+ Api::AbilityId::SMART],
1119
+ Api::UnitTypeId::BUNKER =>
1120
+ [Api::AbilityId::EFFECT_SALVAGE,
1121
+ Api::AbilityId::RALLY_BUILDING,
1122
+ Api::AbilityId::LOAD_BUNKER,
1123
+ Api::AbilityId::SMART],
1124
+ Api::UnitTypeId::SENSORTOWER => [],
1125
+ Api::UnitTypeId::GHOSTACADEMY =>
1126
+ [Api::AbilityId::RESEARCH_PERSONALCLOAKING, Api::AbilityId::BUILD_NUKE],
1127
+ Api::UnitTypeId::FACTORY =>
1128
+ [Api::AbilityId::RALLY_BUILDING,
1129
+ Api::AbilityId::BUILD_TECHLAB_FACTORY,
1130
+ Api::AbilityId::BUILD_REACTOR_FACTORY,
1131
+ Api::AbilityId::LIFT_FACTORY,
1132
+ Api::AbilityId::FACTORYTRAIN_HELLION,
1133
+ Api::AbilityId::TRAIN_CYCLONE,
1134
+ Api::AbilityId::FACTORYTRAIN_WIDOWMINE,
1135
+ Api::AbilityId::SMART,
1136
+ Api::AbilityId::FACTORYTRAIN_SIEGETANK,
1137
+ Api::AbilityId::FACTORYTRAIN_THOR,
1138
+ Api::AbilityId::TRAIN_HELLBAT],
1139
+ Api::UnitTypeId::STARPORT =>
1140
+ [Api::AbilityId::RALLY_BUILDING,
1141
+ Api::AbilityId::BUILD_TECHLAB_STARPORT,
1142
+ Api::AbilityId::BUILD_REACTOR_STARPORT,
1143
+ Api::AbilityId::LIFT_STARPORT,
1144
+ Api::AbilityId::STARPORTTRAIN_MEDIVAC,
1145
+ Api::AbilityId::STARPORTTRAIN_VIKINGFIGHTER,
1146
+ Api::AbilityId::STARPORTTRAIN_LIBERATOR,
1147
+ Api::AbilityId::SMART,
1148
+ Api::AbilityId::STARPORTTRAIN_BANSHEE,
1149
+ Api::AbilityId::STARPORTTRAIN_RAVEN,
1150
+ Api::AbilityId::STARPORTTRAIN_BATTLECRUISER],
1151
+ Api::UnitTypeId::ARMORY =>
1152
+ [Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEWEAPONSLEVEL1,
1153
+ Api::AbilityId::ARMORYRESEARCH_TERRANSHIPWEAPONSLEVEL1,
1154
+ Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1,
1155
+ Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEWEAPONSLEVEL2,
1156
+ Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEWEAPONSLEVEL3,
1157
+ Api::AbilityId::ARMORYRESEARCH_TERRANSHIPWEAPONSLEVEL2,
1158
+ Api::AbilityId::ARMORYRESEARCH_TERRANSHIPWEAPONSLEVEL3,
1159
+ Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2,
1160
+ Api::AbilityId::ARMORYRESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3],
1161
+ Api::UnitTypeId::FUSIONCORE =>
1162
+ [Api::AbilityId::RESEARCH_BATTLECRUISERWEAPONREFIT,
1163
+ Api::AbilityId::FUSIONCORERESEARCH_RESEARCHBALLISTICRANGE,
1164
+ Api::AbilityId::FUSIONCORERESEARCH_RESEARCHMEDIVACENERGYUPGRADE],
1165
+ Api::UnitTypeId::AUTOTURRET =>
1166
+ [Api::AbilityId::STOP_STOP,
1167
+ Api::AbilityId::ATTACK_ATTACK,
1168
+ Api::AbilityId::SMART],
1169
+ Api::UnitTypeId::SIEGETANKSIEGED =>
1170
+ [Api::AbilityId::STOP_STOP,
1171
+ Api::AbilityId::ATTACK_ATTACK,
1172
+ Api::AbilityId::UNSIEGE_UNSIEGE,
1173
+ Api::AbilityId::SMART],
1174
+ Api::UnitTypeId::SIEGETANK =>
1175
+ [Api::AbilityId::STOP_STOP,
1176
+ Api::AbilityId::MOVE_MOVE,
1177
+ Api::AbilityId::PATROL_PATROL,
1178
+ Api::AbilityId::HOLDPOSITION_HOLD,
1179
+ Api::AbilityId::ATTACK_ATTACK,
1180
+ Api::AbilityId::SIEGEMODE_SIEGEMODE,
1181
+ Api::AbilityId::SMART],
1182
+ Api::UnitTypeId::VIKINGASSAULT =>
1183
+ [Api::AbilityId::STOP_STOP,
1184
+ Api::AbilityId::MOVE_MOVE,
1185
+ Api::AbilityId::PATROL_PATROL,
1186
+ Api::AbilityId::HOLDPOSITION_HOLD,
1187
+ Api::AbilityId::ATTACK_ATTACK,
1188
+ Api::AbilityId::MORPH_VIKINGFIGHTERMODE,
1189
+ Api::AbilityId::SMART],
1190
+ Api::UnitTypeId::VIKINGFIGHTER =>
1191
+ [Api::AbilityId::STOP_STOP,
1192
+ Api::AbilityId::MOVE_MOVE,
1193
+ Api::AbilityId::PATROL_PATROL,
1194
+ Api::AbilityId::HOLDPOSITION_HOLD,
1195
+ Api::AbilityId::ATTACK_ATTACK,
1196
+ Api::AbilityId::MORPH_VIKINGASSAULTMODE,
1197
+ Api::AbilityId::SMART],
1198
+ Api::UnitTypeId::COMMANDCENTERFLYING =>
1199
+ [Api::AbilityId::STOP_STOP,
1200
+ Api::AbilityId::MOVE_MOVE,
1201
+ Api::AbilityId::PATROL_PATROL,
1202
+ Api::AbilityId::HOLDPOSITION_HOLD,
1203
+ Api::AbilityId::LOADALL_COMMANDCENTER,
1204
+ Api::AbilityId::LAND_COMMANDCENTER,
1205
+ Api::AbilityId::SMART],
1206
+ Api::UnitTypeId::BARRACKSTECHLAB =>
1207
+ [Api::AbilityId::BARRACKSTECHLABRESEARCH_STIMPACK,
1208
+ Api::AbilityId::RESEARCH_COMBATSHIELD,
1209
+ Api::AbilityId::RESEARCH_CONCUSSIVESHELLS],
1210
+ Api::UnitTypeId::BARRACKSREACTOR => [],
1211
+ Api::UnitTypeId::FACTORYTECHLAB =>
1212
+ [Api::AbilityId::RESEARCH_INFERNALPREIGNITER,
1213
+ Api::AbilityId::FACTORYTECHLABRESEARCH_CYCLONERESEARCHHURRICANETHRUSTERS,
1214
+ Api::AbilityId::RESEARCH_DRILLINGCLAWS,
1215
+ Api::AbilityId::RESEARCH_SMARTSERVOS],
1216
+ Api::UnitTypeId::FACTORYREACTOR => [],
1217
+ Api::UnitTypeId::STARPORTTECHLAB =>
1218
+ [Api::AbilityId::RESEARCH_BANSHEECLOAKINGFIELD,
1219
+ Api::AbilityId::RESEARCH_BANSHEEHYPERFLIGHTROTORS,
1220
+ Api::AbilityId::STARPORTTECHLABRESEARCH_RESEARCHRAVENINTERFERENCEMATRIX],
1221
+ Api::UnitTypeId::STARPORTREACTOR => [],
1222
+ Api::UnitTypeId::FACTORYFLYING =>
1223
+ [Api::AbilityId::STOP_STOP,
1224
+ Api::AbilityId::MOVE_MOVE,
1225
+ Api::AbilityId::PATROL_PATROL,
1226
+ Api::AbilityId::HOLDPOSITION_HOLD,
1227
+ Api::AbilityId::BUILD_TECHLAB_FACTORY,
1228
+ Api::AbilityId::BUILD_REACTOR_FACTORY,
1229
+ Api::AbilityId::LAND_FACTORY,
1230
+ Api::AbilityId::SMART],
1231
+ Api::UnitTypeId::STARPORTFLYING =>
1232
+ [Api::AbilityId::STOP_STOP,
1233
+ Api::AbilityId::MOVE_MOVE,
1234
+ Api::AbilityId::PATROL_PATROL,
1235
+ Api::AbilityId::HOLDPOSITION_HOLD,
1236
+ Api::AbilityId::BUILD_TECHLAB_STARPORT,
1237
+ Api::AbilityId::BUILD_REACTOR_STARPORT,
1238
+ Api::AbilityId::LAND_STARPORT,
1239
+ Api::AbilityId::SMART],
1240
+ Api::UnitTypeId::SCV =>
1241
+ [Api::AbilityId::STOP_STOP,
1242
+ Api::AbilityId::MOVE_MOVE,
1243
+ Api::AbilityId::PATROL_PATROL,
1244
+ Api::AbilityId::HOLDPOSITION_HOLD,
1245
+ Api::AbilityId::ATTACK_ATTACK,
1246
+ Api::AbilityId::EFFECT_SPRAY_TERRAN,
1247
+ Api::AbilityId::HARVEST_GATHER_SCV,
1248
+ Api::AbilityId::EFFECT_REPAIR_SCV,
1249
+ Api::AbilityId::TERRANBUILD_COMMANDCENTER,
1250
+ Api::AbilityId::TERRANBUILD_SUPPLYDEPOT,
1251
+ Api::AbilityId::TERRANBUILD_REFINERY,
1252
+ Api::AbilityId::SMART,
1253
+ Api::AbilityId::TERRANBUILD_BARRACKS,
1254
+ Api::AbilityId::TERRANBUILD_ENGINEERINGBAY,
1255
+ Api::AbilityId::TERRANBUILD_MISSILETURRET,
1256
+ Api::AbilityId::TERRANBUILD_BUNKER,
1257
+ Api::AbilityId::TERRANBUILD_SENSORTOWER,
1258
+ Api::AbilityId::TERRANBUILD_GHOSTACADEMY,
1259
+ Api::AbilityId::TERRANBUILD_FACTORY,
1260
+ Api::AbilityId::TERRANBUILD_STARPORT,
1261
+ Api::AbilityId::TERRANBUILD_ARMORY,
1262
+ Api::AbilityId::TERRANBUILD_FUSIONCORE],
1263
+ Api::UnitTypeId::BARRACKSFLYING =>
1264
+ [Api::AbilityId::STOP_STOP,
1265
+ Api::AbilityId::MOVE_MOVE,
1266
+ Api::AbilityId::PATROL_PATROL,
1267
+ Api::AbilityId::HOLDPOSITION_HOLD,
1268
+ Api::AbilityId::BUILD_TECHLAB_BARRACKS,
1269
+ Api::AbilityId::BUILD_REACTOR_BARRACKS,
1270
+ Api::AbilityId::LAND_BARRACKS,
1271
+ Api::AbilityId::SMART],
1272
+ Api::UnitTypeId::SUPPLYDEPOTLOWERED =>
1273
+ [Api::AbilityId::MORPH_SUPPLYDEPOT_RAISE],
1274
+ Api::UnitTypeId::MARINE =>
1275
+ [Api::AbilityId::STOP_STOP,
1276
+ Api::AbilityId::MOVE_MOVE,
1277
+ Api::AbilityId::PATROL_PATROL,
1278
+ Api::AbilityId::HOLDPOSITION_HOLD,
1279
+ Api::AbilityId::ATTACK_ATTACK,
1280
+ Api::AbilityId::SMART,
1281
+ Api::AbilityId::EFFECT_STIM_MARINE],
1282
+ Api::UnitTypeId::REAPER =>
1283
+ [Api::AbilityId::STOP_STOP,
1284
+ Api::AbilityId::MOVE_MOVE,
1285
+ Api::AbilityId::PATROL_PATROL,
1286
+ Api::AbilityId::HOLDPOSITION_HOLD,
1287
+ Api::AbilityId::ATTACK_ATTACK,
1288
+ Api::AbilityId::KD8CHARGE_KD8CHARGE,
1289
+ Api::AbilityId::SMART],
1290
+ Api::UnitTypeId::GHOST =>
1291
+ [Api::AbilityId::STOP_STOP,
1292
+ Api::AbilityId::MOVE_MOVE,
1293
+ Api::AbilityId::PATROL_PATROL,
1294
+ Api::AbilityId::HOLDPOSITION_HOLD,
1295
+ Api::AbilityId::ATTACK_ATTACK,
1296
+ Api::AbilityId::BEHAVIOR_HOLDFIREON_GHOST,
1297
+ Api::AbilityId::EMP_EMP,
1298
+ Api::AbilityId::EFFECT_GHOSTSNIPE,
1299
+ Api::AbilityId::SMART,
1300
+ Api::AbilityId::BEHAVIOR_CLOAKON_GHOST],
1301
+ Api::UnitTypeId::MARAUDER =>
1302
+ [Api::AbilityId::STOP_STOP,
1303
+ Api::AbilityId::MOVE_MOVE,
1304
+ Api::AbilityId::PATROL_PATROL,
1305
+ Api::AbilityId::HOLDPOSITION_HOLD,
1306
+ Api::AbilityId::ATTACK_ATTACK,
1307
+ Api::AbilityId::SMART,
1308
+ Api::AbilityId::EFFECT_STIM_MARAUDER],
1309
+ Api::UnitTypeId::THOR =>
1310
+ [Api::AbilityId::STOP_STOP,
1311
+ Api::AbilityId::MOVE_MOVE,
1312
+ Api::AbilityId::PATROL_PATROL,
1313
+ Api::AbilityId::HOLDPOSITION_HOLD,
1314
+ Api::AbilityId::ATTACK_ATTACK,
1315
+ Api::AbilityId::MORPH_THORHIGHIMPACTMODE,
1316
+ Api::AbilityId::SMART],
1317
+ Api::UnitTypeId::HELLION =>
1318
+ [Api::AbilityId::STOP_STOP,
1319
+ Api::AbilityId::MOVE_MOVE,
1320
+ Api::AbilityId::PATROL_PATROL,
1321
+ Api::AbilityId::HOLDPOSITION_HOLD,
1322
+ Api::AbilityId::ATTACK_ATTACK,
1323
+ Api::AbilityId::SMART,
1324
+ Api::AbilityId::MORPH_HELLBAT],
1325
+ Api::UnitTypeId::MEDIVAC =>
1326
+ [Api::AbilityId::STOP_STOP,
1327
+ Api::AbilityId::MOVE_MOVE,
1328
+ Api::AbilityId::PATROL_PATROL,
1329
+ Api::AbilityId::HOLDPOSITION_HOLD,
1330
+ Api::AbilityId::SCAN_MOVE,
1331
+ Api::AbilityId::MEDIVACHEAL_HEAL,
1332
+ Api::AbilityId::LOAD_MEDIVAC,
1333
+ Api::AbilityId::EFFECT_MEDIVACIGNITEAFTERBURNERS,
1334
+ Api::AbilityId::SMART],
1335
+ Api::UnitTypeId::BANSHEE =>
1336
+ [Api::AbilityId::STOP_STOP,
1337
+ Api::AbilityId::MOVE_MOVE,
1338
+ Api::AbilityId::PATROL_PATROL,
1339
+ Api::AbilityId::HOLDPOSITION_HOLD,
1340
+ Api::AbilityId::ATTACK_ATTACK,
1341
+ Api::AbilityId::SMART,
1342
+ Api::AbilityId::BEHAVIOR_CLOAKON_BANSHEE],
1343
+ Api::UnitTypeId::RAVEN =>
1344
+ [Api::AbilityId::STOP_STOP,
1345
+ Api::AbilityId::MOVE_MOVE,
1346
+ Api::AbilityId::PATROL_PATROL,
1347
+ Api::AbilityId::HOLDPOSITION_HOLD,
1348
+ Api::AbilityId::SCAN_MOVE,
1349
+ Api::AbilityId::BUILDAUTOTURRET_AUTOTURRET,
1350
+ Api::AbilityId::EFFECT_ANTIARMORMISSILE,
1351
+ Api::AbilityId::SMART,
1352
+ Api::AbilityId::EFFECT_INTERFERENCEMATRIX],
1353
+ Api::UnitTypeId::BATTLECRUISER =>
1354
+ [Api::AbilityId::EFFECT_TACTICALJUMP,
1355
+ Api::AbilityId::ATTACK_BATTLECRUISER,
1356
+ Api::AbilityId::MOVE_BATTLECRUISER,
1357
+ Api::AbilityId::PATROL_BATTLECRUISER,
1358
+ Api::AbilityId::HOLDPOSITION_BATTLECRUISER,
1359
+ Api::AbilityId::STOP_BATTLECRUISER,
1360
+ Api::AbilityId::SMART,
1361
+ Api::AbilityId::YAMATO_YAMATOGUN],
1362
+ Api::UnitTypeId::NUKE => [],
1363
+ Api::UnitTypeId::NEXUS =>
1364
+ [Api::AbilityId::RALLY_NEXUS,
1365
+ Api::AbilityId::NEXUSTRAIN_PROBE,
1366
+ Api::AbilityId::BATTERYOVERCHARGE_BATTERYOVERCHARGE,
1367
+ Api::AbilityId::EFFECT_CHRONOBOOSTENERGYCOST,
1368
+ Api::AbilityId::EFFECT_MASSRECALL_NEXUS,
1369
+ Api::AbilityId::SMART,
1370
+ Api::AbilityId::NEXUSTRAINMOTHERSHIP_MOTHERSHIP],
1371
+ Api::UnitTypeId::PYLON => [],
1372
+ Api::UnitTypeId::ASSIMILATOR => [],
1373
+ Api::UnitTypeId::GATEWAY =>
1374
+ [Api::AbilityId::RALLY_BUILDING,
1375
+ Api::AbilityId::GATEWAYTRAIN_ZEALOT,
1376
+ Api::AbilityId::SMART,
1377
+ Api::AbilityId::GATEWAYTRAIN_STALKER,
1378
+ Api::AbilityId::GATEWAYTRAIN_HIGHTEMPLAR,
1379
+ Api::AbilityId::GATEWAYTRAIN_DARKTEMPLAR,
1380
+ Api::AbilityId::GATEWAYTRAIN_SENTRY,
1381
+ Api::AbilityId::TRAIN_ADEPT,
1382
+ Api::AbilityId::MORPH_WARPGATE],
1383
+ Api::UnitTypeId::FORGE =>
1384
+ [Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDWEAPONSLEVEL1,
1385
+ Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDARMORLEVEL1,
1386
+ Api::AbilityId::FORGERESEARCH_PROTOSSSHIELDSLEVEL1,
1387
+ Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDWEAPONSLEVEL2,
1388
+ Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDWEAPONSLEVEL3,
1389
+ Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDARMORLEVEL2,
1390
+ Api::AbilityId::FORGERESEARCH_PROTOSSGROUNDARMORLEVEL3,
1391
+ Api::AbilityId::FORGERESEARCH_PROTOSSSHIELDSLEVEL2,
1392
+ Api::AbilityId::FORGERESEARCH_PROTOSSSHIELDSLEVEL3],
1393
+ Api::UnitTypeId::FLEETBEACON =>
1394
+ [Api::AbilityId::RESEARCH_PHOENIXANIONPULSECRYSTALS,
1395
+ Api::AbilityId::FLEETBEACONRESEARCH_RESEARCHVOIDRAYSPEEDUPGRADE,
1396
+ Api::AbilityId::FLEETBEACONRESEARCH_TEMPESTRESEARCHGROUNDATTACKUPGRADE],
1397
+ Api::UnitTypeId::TWILIGHTCOUNCIL =>
1398
+ [Api::AbilityId::RESEARCH_CHARGE,
1399
+ Api::AbilityId::RESEARCH_BLINK,
1400
+ Api::AbilityId::RESEARCH_ADEPTRESONATINGGLAIVES],
1401
+ Api::UnitTypeId::PHOTONCANNON =>
1402
+ [Api::AbilityId::STOP_STOP,
1403
+ Api::AbilityId::ATTACK_ATTACK,
1404
+ Api::AbilityId::SMART],
1405
+ Api::UnitTypeId::STARGATE =>
1406
+ [Api::AbilityId::RALLY_BUILDING,
1407
+ Api::AbilityId::STARGATETRAIN_PHOENIX,
1408
+ Api::AbilityId::STARGATETRAIN_VOIDRAY,
1409
+ Api::AbilityId::STARGATETRAIN_ORACLE,
1410
+ Api::AbilityId::SMART,
1411
+ Api::AbilityId::STARGATETRAIN_CARRIER,
1412
+ Api::AbilityId::STARGATETRAIN_TEMPEST],
1413
+ Api::UnitTypeId::TEMPLARARCHIVE => [Api::AbilityId::RESEARCH_PSISTORM],
1414
+ Api::UnitTypeId::DARKSHRINE => [Api::AbilityId::RESEARCH_SHADOWSTRIKE],
1415
+ Api::UnitTypeId::ROBOTICSBAY =>
1416
+ [Api::AbilityId::RESEARCH_GRAVITICBOOSTER,
1417
+ Api::AbilityId::RESEARCH_GRAVITICDRIVE,
1418
+ Api::AbilityId::RESEARCH_EXTENDEDTHERMALLANCE],
1419
+ Api::UnitTypeId::ROBOTICSFACILITY =>
1420
+ [Api::AbilityId::RALLY_BUILDING,
1421
+ Api::AbilityId::ROBOTICSFACILITYTRAIN_WARPPRISM,
1422
+ Api::AbilityId::ROBOTICSFACILITYTRAIN_OBSERVER,
1423
+ Api::AbilityId::ROBOTICSFACILITYTRAIN_IMMORTAL,
1424
+ Api::AbilityId::SMART,
1425
+ Api::AbilityId::ROBOTICSFACILITYTRAIN_COLOSSUS,
1426
+ Api::AbilityId::TRAIN_DISRUPTOR],
1427
+ Api::UnitTypeId::CYBERNETICSCORE =>
1428
+ [Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRWEAPONSLEVEL1,
1429
+ Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRARMORLEVEL1,
1430
+ Api::AbilityId::RESEARCH_WARPGATE,
1431
+ Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRWEAPONSLEVEL2,
1432
+ Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRWEAPONSLEVEL3,
1433
+ Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRARMORLEVEL2,
1434
+ Api::AbilityId::CYBERNETICSCORERESEARCH_PROTOSSAIRARMORLEVEL3],
1435
+ Api::UnitTypeId::ZEALOT =>
1436
+ [Api::AbilityId::STOP_STOP,
1437
+ Api::AbilityId::MOVE_MOVE,
1438
+ Api::AbilityId::PATROL_PATROL,
1439
+ Api::AbilityId::HOLDPOSITION_HOLD,
1440
+ Api::AbilityId::ATTACK_ATTACK,
1441
+ Api::AbilityId::SMART,
1442
+ Api::AbilityId::EFFECT_CHARGE],
1443
+ Api::UnitTypeId::STALKER =>
1444
+ [Api::AbilityId::STOP_STOP,
1445
+ Api::AbilityId::MOVE_MOVE,
1446
+ Api::AbilityId::PATROL_PATROL,
1447
+ Api::AbilityId::HOLDPOSITION_HOLD,
1448
+ Api::AbilityId::ATTACK_ATTACK,
1449
+ Api::AbilityId::SMART,
1450
+ Api::AbilityId::EFFECT_BLINK_STALKER],
1451
+ Api::UnitTypeId::HIGHTEMPLAR =>
1452
+ [Api::AbilityId::STOP_STOP,
1453
+ Api::AbilityId::MOVE_MOVE,
1454
+ Api::AbilityId::PATROL_PATROL,
1455
+ Api::AbilityId::HOLDPOSITION_HOLD,
1456
+ Api::AbilityId::SCAN_MOVE,
1457
+ Api::AbilityId::ATTACK_ATTACK,
1458
+ Api::AbilityId::FEEDBACK_FEEDBACK,
1459
+ Api::AbilityId::SMART,
1460
+ Api::AbilityId::PSISTORM_PSISTORM,
1461
+ Api::AbilityId::MORPH_ARCHON],
1462
+ Api::UnitTypeId::DARKTEMPLAR =>
1463
+ [Api::AbilityId::STOP_STOP,
1464
+ Api::AbilityId::MOVE_MOVE,
1465
+ Api::AbilityId::PATROL_PATROL,
1466
+ Api::AbilityId::HOLDPOSITION_HOLD,
1467
+ Api::AbilityId::ATTACK_ATTACK,
1468
+ Api::AbilityId::SMART,
1469
+ Api::AbilityId::EFFECT_SHADOWSTRIDE,
1470
+ Api::AbilityId::MORPH_ARCHON],
1471
+ Api::UnitTypeId::SENTRY =>
1472
+ [Api::AbilityId::STOP_STOP,
1473
+ Api::AbilityId::MOVE_MOVE,
1474
+ Api::AbilityId::PATROL_PATROL,
1475
+ Api::AbilityId::HOLDPOSITION_HOLD,
1476
+ Api::AbilityId::ATTACK_ATTACK,
1477
+ Api::AbilityId::GUARDIANSHIELD_GUARDIANSHIELD,
1478
+ Api::AbilityId::HALLUCINATION_ARCHON,
1479
+ Api::AbilityId::HALLUCINATION_COLOSSUS,
1480
+ Api::AbilityId::HALLUCINATION_HIGHTEMPLAR,
1481
+ Api::AbilityId::HALLUCINATION_IMMORTAL,
1482
+ Api::AbilityId::HALLUCINATION_PHOENIX,
1483
+ Api::AbilityId::HALLUCINATION_PROBE,
1484
+ Api::AbilityId::HALLUCINATION_STALKER,
1485
+ Api::AbilityId::HALLUCINATION_VOIDRAY,
1486
+ Api::AbilityId::HALLUCINATION_WARPPRISM,
1487
+ Api::AbilityId::HALLUCINATION_ZEALOT,
1488
+ Api::AbilityId::FORCEFIELD_FORCEFIELD,
1489
+ Api::AbilityId::HALLUCINATION_ORACLE,
1490
+ Api::AbilityId::HALLUCINATION_DISRUPTOR,
1491
+ Api::AbilityId::HALLUCINATION_ADEPT,
1492
+ Api::AbilityId::SMART],
1493
+ Api::UnitTypeId::PHOENIX =>
1494
+ [Api::AbilityId::STOP_STOP,
1495
+ Api::AbilityId::MOVE_MOVE,
1496
+ Api::AbilityId::PATROL_PATROL,
1497
+ Api::AbilityId::HOLDPOSITION_HOLD,
1498
+ Api::AbilityId::ATTACK_ATTACK,
1499
+ Api::AbilityId::GRAVITONBEAM_GRAVITONBEAM,
1500
+ Api::AbilityId::SMART],
1501
+ Api::UnitTypeId::CARRIER =>
1502
+ [Api::AbilityId::STOP_STOP,
1503
+ Api::AbilityId::MOVE_MOVE,
1504
+ Api::AbilityId::PATROL_PATROL,
1505
+ Api::AbilityId::HOLDPOSITION_HOLD,
1506
+ Api::AbilityId::ATTACK_ATTACK,
1507
+ Api::AbilityId::CANCEL_HANGARQUEUE5,
1508
+ Api::AbilityId::BUILD_INTERCEPTORS,
1509
+ Api::AbilityId::SMART],
1510
+ Api::UnitTypeId::VOIDRAY =>
1511
+ [Api::AbilityId::STOP_STOP,
1512
+ Api::AbilityId::MOVE_MOVE,
1513
+ Api::AbilityId::PATROL_PATROL,
1514
+ Api::AbilityId::HOLDPOSITION_HOLD,
1515
+ Api::AbilityId::ATTACK_ATTACK,
1516
+ Api::AbilityId::EFFECT_VOIDRAYPRISMATICALIGNMENT,
1517
+ Api::AbilityId::SMART],
1518
+ Api::UnitTypeId::WARPPRISM =>
1519
+ [Api::AbilityId::STOP_STOP,
1520
+ Api::AbilityId::MOVE_MOVE,
1521
+ Api::AbilityId::PATROL_PATROL,
1522
+ Api::AbilityId::HOLDPOSITION_HOLD,
1523
+ Api::AbilityId::SCAN_MOVE,
1524
+ Api::AbilityId::LOAD_WARPPRISM,
1525
+ Api::AbilityId::MORPH_WARPPRISMPHASINGMODE,
1526
+ Api::AbilityId::SMART],
1527
+ Api::UnitTypeId::OBSERVER =>
1528
+ [Api::AbilityId::STOP_STOP,
1529
+ Api::AbilityId::MOVE_MOVE,
1530
+ Api::AbilityId::PATROL_PATROL,
1531
+ Api::AbilityId::HOLDPOSITION_HOLD,
1532
+ Api::AbilityId::SCAN_MOVE,
1533
+ Api::AbilityId::MORPH_SURVEILLANCEMODE,
1534
+ Api::AbilityId::SMART],
1535
+ Api::UnitTypeId::IMMORTAL =>
1536
+ [Api::AbilityId::STOP_STOP,
1537
+ Api::AbilityId::MOVE_MOVE,
1538
+ Api::AbilityId::PATROL_PATROL,
1539
+ Api::AbilityId::HOLDPOSITION_HOLD,
1540
+ Api::AbilityId::ATTACK_ATTACK,
1541
+ Api::AbilityId::SMART],
1542
+ Api::UnitTypeId::PROBE =>
1543
+ [Api::AbilityId::STOP_STOP,
1544
+ Api::AbilityId::MOVE_MOVE,
1545
+ Api::AbilityId::PATROL_PATROL,
1546
+ Api::AbilityId::HOLDPOSITION_HOLD,
1547
+ Api::AbilityId::ATTACK_ATTACK,
1548
+ Api::AbilityId::EFFECT_SPRAY_PROTOSS,
1549
+ Api::AbilityId::HARVEST_GATHER_PROBE,
1550
+ Api::AbilityId::PROTOSSBUILD_NEXUS,
1551
+ Api::AbilityId::PROTOSSBUILD_PYLON,
1552
+ Api::AbilityId::PROTOSSBUILD_ASSIMILATOR,
1553
+ Api::AbilityId::SMART,
1554
+ Api::AbilityId::PROTOSSBUILD_GATEWAY,
1555
+ Api::AbilityId::PROTOSSBUILD_FORGE,
1556
+ Api::AbilityId::PROTOSSBUILD_FLEETBEACON,
1557
+ Api::AbilityId::PROTOSSBUILD_TWILIGHTCOUNCIL,
1558
+ Api::AbilityId::PROTOSSBUILD_PHOTONCANNON,
1559
+ Api::AbilityId::PROTOSSBUILD_STARGATE,
1560
+ Api::AbilityId::PROTOSSBUILD_TEMPLARARCHIVE,
1561
+ Api::AbilityId::PROTOSSBUILD_DARKSHRINE,
1562
+ Api::AbilityId::PROTOSSBUILD_ROBOTICSBAY,
1563
+ Api::AbilityId::PROTOSSBUILD_ROBOTICSFACILITY,
1564
+ Api::AbilityId::PROTOSSBUILD_CYBERNETICSCORE,
1565
+ Api::AbilityId::BUILD_SHIELDBATTERY],
1566
+ Api::UnitTypeId::INTERCEPTOR =>
1567
+ [Api::AbilityId::STOP_STOP,
1568
+ Api::AbilityId::MOVE_MOVE,
1569
+ Api::AbilityId::PATROL_PATROL,
1570
+ Api::AbilityId::HOLDPOSITION_HOLD,
1571
+ Api::AbilityId::ATTACK_ATTACK,
1572
+ Api::AbilityId::SMART],
1573
+ Api::UnitTypeId::HATCHERY =>
1574
+ [Api::AbilityId::RALLY_HATCHERY_UNITS,
1575
+ Api::AbilityId::RALLY_HATCHERY_WORKERS,
1576
+ Api::AbilityId::RESEARCH_PNEUMATIZEDCARAPACE,
1577
+ Api::AbilityId::RESEARCH_BURROW,
1578
+ Api::AbilityId::SMART,
1579
+ Api::AbilityId::UPGRADETOLAIR_LAIR,
1580
+ Api::AbilityId::TRAINQUEEN_QUEEN],
1581
+ Api::UnitTypeId::CREEPTUMOR => [],
1582
+ Api::UnitTypeId::EXTRACTOR => [],
1583
+ Api::UnitTypeId::SPAWNINGPOOL =>
1584
+ [Api::AbilityId::RESEARCH_ZERGLINGMETABOLICBOOST,
1585
+ Api::AbilityId::RESEARCH_ZERGLINGADRENALGLANDS],
1586
+ Api::UnitTypeId::EVOLUTIONCHAMBER =>
1587
+ [Api::AbilityId::RESEARCH_ZERGMELEEWEAPONSLEVEL1,
1588
+ Api::AbilityId::RESEARCH_ZERGGROUNDARMORLEVEL1,
1589
+ Api::AbilityId::RESEARCH_ZERGMISSILEWEAPONSLEVEL1,
1590
+ Api::AbilityId::RESEARCH_ZERGMELEEWEAPONSLEVEL2,
1591
+ Api::AbilityId::RESEARCH_ZERGMELEEWEAPONSLEVEL3,
1592
+ Api::AbilityId::RESEARCH_ZERGGROUNDARMORLEVEL2,
1593
+ Api::AbilityId::RESEARCH_ZERGGROUNDARMORLEVEL3,
1594
+ Api::AbilityId::RESEARCH_ZERGMISSILEWEAPONSLEVEL2,
1595
+ Api::AbilityId::RESEARCH_ZERGMISSILEWEAPONSLEVEL3],
1596
+ Api::UnitTypeId::HYDRALISKDEN =>
1597
+ [Api::AbilityId::RESEARCH_GROOVEDSPINES,
1598
+ Api::AbilityId::RESEARCH_MUSCULARAUGMENTS],
1599
+ Api::UnitTypeId::SPIRE =>
1600
+ [Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL1,
1601
+ Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL1,
1602
+ Api::AbilityId::UPGRADETOGREATERSPIRE_GREATERSPIRE,
1603
+ Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL2,
1604
+ Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL3,
1605
+ Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL2,
1606
+ Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL3],
1607
+ Api::UnitTypeId::ULTRALISKCAVERN =>
1608
+ [Api::AbilityId::RESEARCH_ANABOLICSYNTHESIS,
1609
+ Api::AbilityId::RESEARCH_CHITINOUSPLATING],
1610
+ Api::UnitTypeId::INFESTATIONPIT =>
1611
+ [Api::AbilityId::RESEARCH_NEURALPARASITE],
1612
+ Api::UnitTypeId::NYDUSNETWORK =>
1613
+ [Api::AbilityId::STOP_STOP,
1614
+ Api::AbilityId::RALLY_BUILDING,
1615
+ Api::AbilityId::LOAD_NYDUSNETWORK,
1616
+ Api::AbilityId::BUILD_NYDUSWORM,
1617
+ Api::AbilityId::SMART],
1618
+ Api::UnitTypeId::BANELINGNEST =>
1619
+ [Api::AbilityId::RESEARCH_CENTRIFUGALHOOKS],
1620
+ Api::UnitTypeId::ROACHWARREN =>
1621
+ [Api::AbilityId::RESEARCH_GLIALREGENERATION,
1622
+ Api::AbilityId::RESEARCH_TUNNELINGCLAWS],
1623
+ Api::UnitTypeId::SPINECRAWLER =>
1624
+ [Api::AbilityId::STOP_STOP,
1625
+ Api::AbilityId::ATTACK_ATTACK,
1626
+ Api::AbilityId::SPINECRAWLERUPROOT_SPINECRAWLERUPROOT,
1627
+ Api::AbilityId::SMART],
1628
+ Api::UnitTypeId::SPORECRAWLER =>
1629
+ [Api::AbilityId::STOP_STOP,
1630
+ Api::AbilityId::ATTACK_ATTACK,
1631
+ Api::AbilityId::SPORECRAWLERUPROOT_SPORECRAWLERUPROOT,
1632
+ Api::AbilityId::SMART],
1633
+ Api::UnitTypeId::LAIR =>
1634
+ [Api::AbilityId::RALLY_HATCHERY_UNITS,
1635
+ Api::AbilityId::RALLY_HATCHERY_WORKERS,
1636
+ Api::AbilityId::RESEARCH_PNEUMATIZEDCARAPACE,
1637
+ Api::AbilityId::RESEARCH_BURROW,
1638
+ Api::AbilityId::SMART,
1639
+ Api::AbilityId::UPGRADETOHIVE_HIVE,
1640
+ Api::AbilityId::TRAINQUEEN_QUEEN],
1641
+ Api::UnitTypeId::HIVE =>
1642
+ [Api::AbilityId::RALLY_HATCHERY_UNITS,
1643
+ Api::AbilityId::RALLY_HATCHERY_WORKERS,
1644
+ Api::AbilityId::RESEARCH_PNEUMATIZEDCARAPACE,
1645
+ Api::AbilityId::RESEARCH_BURROW,
1646
+ Api::AbilityId::SMART,
1647
+ Api::AbilityId::TRAINQUEEN_QUEEN],
1648
+ Api::UnitTypeId::GREATERSPIRE =>
1649
+ [Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL1,
1650
+ Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL1,
1651
+ Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL2,
1652
+ Api::AbilityId::RESEARCH_ZERGFLYERATTACKLEVEL3,
1653
+ Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL2,
1654
+ Api::AbilityId::RESEARCH_ZERGFLYERARMORLEVEL3],
1655
+ Api::UnitTypeId::EGG =>
1656
+ [Api::AbilityId::RALLY_BUILDING, Api::AbilityId::SMART],
1657
+ Api::UnitTypeId::DRONE =>
1658
+ [Api::AbilityId::STOP_STOP,
1659
+ Api::AbilityId::MOVE_MOVE,
1660
+ Api::AbilityId::PATROL_PATROL,
1661
+ Api::AbilityId::HOLDPOSITION_HOLD,
1662
+ Api::AbilityId::ATTACK_ATTACK,
1663
+ Api::AbilityId::EFFECT_SPRAY_ZERG,
1664
+ Api::AbilityId::ZERGBUILD_HATCHERY,
1665
+ Api::AbilityId::ZERGBUILD_EXTRACTOR,
1666
+ Api::AbilityId::HARVEST_GATHER_DRONE,
1667
+ Api::AbilityId::SMART,
1668
+ Api::AbilityId::ZERGBUILD_SPAWNINGPOOL,
1669
+ Api::AbilityId::ZERGBUILD_EVOLUTIONCHAMBER,
1670
+ Api::AbilityId::ZERGBUILD_HYDRALISKDEN,
1671
+ Api::AbilityId::ZERGBUILD_SPIRE,
1672
+ Api::AbilityId::ZERGBUILD_ULTRALISKCAVERN,
1673
+ Api::AbilityId::ZERGBUILD_INFESTATIONPIT,
1674
+ Api::AbilityId::ZERGBUILD_NYDUSNETWORK,
1675
+ Api::AbilityId::ZERGBUILD_BANELINGNEST,
1676
+ Api::AbilityId::BUILD_LURKERDEN,
1677
+ Api::AbilityId::ZERGBUILD_ROACHWARREN,
1678
+ Api::AbilityId::ZERGBUILD_SPINECRAWLER,
1679
+ Api::AbilityId::ZERGBUILD_SPORECRAWLER,
1680
+ Api::AbilityId::BURROWDOWN_DRONE],
1681
+ Api::UnitTypeId::ZERGLING =>
1682
+ [Api::AbilityId::STOP_STOP,
1683
+ Api::AbilityId::MOVE_MOVE,
1684
+ Api::AbilityId::PATROL_PATROL,
1685
+ Api::AbilityId::HOLDPOSITION_HOLD,
1686
+ Api::AbilityId::ATTACK_ATTACK,
1687
+ Api::AbilityId::SMART,
1688
+ Api::AbilityId::BURROWDOWN_ZERGLING,
1689
+ Api::AbilityId::MORPHTOBANELING_CANCEL],
1690
+ Api::UnitTypeId::OVERLORD =>
1691
+ [Api::AbilityId::STOP_STOP,
1692
+ Api::AbilityId::MOVE_MOVE,
1693
+ Api::AbilityId::PATROL_PATROL,
1694
+ Api::AbilityId::HOLDPOSITION_HOLD,
1695
+ Api::AbilityId::SCAN_MOVE,
1696
+ Api::AbilityId::SMART,
1697
+ Api::AbilityId::MORPH_OVERSEER,
1698
+ Api::AbilityId::BEHAVIOR_GENERATECREEPON,
1699
+ Api::AbilityId::MORPH_OVERLORDTRANSPORT],
1700
+ Api::UnitTypeId::HYDRALISK =>
1701
+ [Api::AbilityId::STOP_STOP,
1702
+ Api::AbilityId::MOVE_MOVE,
1703
+ Api::AbilityId::PATROL_PATROL,
1704
+ Api::AbilityId::HOLDPOSITION_HOLD,
1705
+ Api::AbilityId::ATTACK_ATTACK,
1706
+ Api::AbilityId::SMART,
1707
+ Api::AbilityId::BURROWDOWN_HYDRALISK,
1708
+ Api::AbilityId::MORPH_LURKER],
1709
+ Api::UnitTypeId::MUTALISK =>
1710
+ [Api::AbilityId::STOP_STOP,
1711
+ Api::AbilityId::MOVE_MOVE,
1712
+ Api::AbilityId::PATROL_PATROL,
1713
+ Api::AbilityId::HOLDPOSITION_HOLD,
1714
+ Api::AbilityId::ATTACK_ATTACK,
1715
+ Api::AbilityId::SMART],
1716
+ Api::UnitTypeId::ULTRALISK =>
1717
+ [Api::AbilityId::STOP_STOP,
1718
+ Api::AbilityId::MOVE_MOVE,
1719
+ Api::AbilityId::PATROL_PATROL,
1720
+ Api::AbilityId::HOLDPOSITION_HOLD,
1721
+ Api::AbilityId::ATTACK_ATTACK,
1722
+ Api::AbilityId::SMART,
1723
+ Api::AbilityId::BURROWDOWN_ULTRALISK],
1724
+ Api::UnitTypeId::ROACH =>
1725
+ [Api::AbilityId::STOP_STOP,
1726
+ Api::AbilityId::MOVE_MOVE,
1727
+ Api::AbilityId::PATROL_PATROL,
1728
+ Api::AbilityId::HOLDPOSITION_HOLD,
1729
+ Api::AbilityId::ATTACK_ATTACK,
1730
+ Api::AbilityId::SMART,
1731
+ Api::AbilityId::BURROWDOWN_ROACH,
1732
+ Api::AbilityId::MORPHTORAVAGER_RAVAGER],
1733
+ Api::UnitTypeId::INFESTOR =>
1734
+ [Api::AbilityId::STOP_STOP,
1735
+ Api::AbilityId::MOVE_MOVE,
1736
+ Api::AbilityId::PATROL_PATROL,
1737
+ Api::AbilityId::HOLDPOSITION_HOLD,
1738
+ Api::AbilityId::SCAN_MOVE,
1739
+ Api::AbilityId::FUNGALGROWTH_FUNGALGROWTH,
1740
+ Api::AbilityId::AMORPHOUSARMORCLOUD_AMORPHOUSARMORCLOUD,
1741
+ Api::AbilityId::SMART,
1742
+ Api::AbilityId::NEURALPARASITE_NEURALPARASITE,
1743
+ Api::AbilityId::BURROWDOWN_INFESTORTERRAN,
1744
+ Api::AbilityId::BURROWDOWN_INFESTOR],
1745
+ Api::UnitTypeId::CORRUPTOR =>
1746
+ [Api::AbilityId::STOP_STOP,
1747
+ Api::AbilityId::MOVE_MOVE,
1748
+ Api::AbilityId::PATROL_PATROL,
1749
+ Api::AbilityId::HOLDPOSITION_HOLD,
1750
+ Api::AbilityId::ATTACK_ATTACK,
1751
+ Api::AbilityId::CAUSTICSPRAY_CAUSTICSPRAY,
1752
+ Api::AbilityId::SMART,
1753
+ Api::AbilityId::MORPHTOBROODLORD_BROODLORD],
1754
+ Api::UnitTypeId::BROODLORDCOCOON => [],
1755
+ Api::UnitTypeId::BROODLORD =>
1756
+ [Api::AbilityId::STOP_STOP,
1757
+ Api::AbilityId::MOVE_MOVE,
1758
+ Api::AbilityId::PATROL_PATROL,
1759
+ Api::AbilityId::HOLDPOSITION_HOLD,
1760
+ Api::AbilityId::ATTACK_ATTACK,
1761
+ Api::AbilityId::SMART],
1762
+ Api::UnitTypeId::BANELINGBURROWED =>
1763
+ [Api::AbilityId::EXPLODE_EXPLODE, Api::AbilityId::BURROWUP_BANELING],
1764
+ Api::UnitTypeId::DRONEBURROWED => [Api::AbilityId::BURROWUP_DRONE],
1765
+ Api::UnitTypeId::HYDRALISKBURROWED => [Api::AbilityId::BURROWUP_HYDRALISK],
1766
+ Api::UnitTypeId::ROACHBURROWED =>
1767
+ [Api::AbilityId::STOP_STOP,
1768
+ Api::AbilityId::BURROWUP_ROACH,
1769
+ Api::AbilityId::MOVE_MOVE,
1770
+ Api::AbilityId::PATROL_PATROL,
1771
+ Api::AbilityId::HOLDPOSITION_HOLD,
1772
+ Api::AbilityId::SCAN_MOVE,
1773
+ Api::AbilityId::SMART],
1774
+ Api::UnitTypeId::ZERGLINGBURROWED => [Api::AbilityId::BURROWUP_ZERGLING],
1775
+ Api::UnitTypeId::INFESTORTERRANBURROWED =>
1776
+ [Api::AbilityId::BURROWUP_INFESTORTERRAN],
1777
+ Api::UnitTypeId::QUEENBURROWED => [Api::AbilityId::BURROWUP_QUEEN],
1778
+ Api::UnitTypeId::QUEEN =>
1779
+ [Api::AbilityId::STOP_STOP,
1780
+ Api::AbilityId::MOVE_MOVE,
1781
+ Api::AbilityId::PATROL_PATROL,
1782
+ Api::AbilityId::HOLDPOSITION_HOLD,
1783
+ Api::AbilityId::ATTACK_ATTACK,
1784
+ Api::AbilityId::EFFECT_INJECTLARVA,
1785
+ Api::AbilityId::TRANSFUSION_TRANSFUSION,
1786
+ Api::AbilityId::BUILD_CREEPTUMOR_QUEEN,
1787
+ Api::AbilityId::SMART,
1788
+ Api::AbilityId::BURROWDOWN_QUEEN,
1789
+ Api::AbilityId::BUILD_CREEPTUMOR],
1790
+ Api::UnitTypeId::INFESTORBURROWED =>
1791
+ [Api::AbilityId::STOP_STOP,
1792
+ Api::AbilityId::MOVE_MOVE,
1793
+ Api::AbilityId::PATROL_PATROL,
1794
+ Api::AbilityId::HOLDPOSITION_HOLD,
1795
+ Api::AbilityId::SCAN_MOVE,
1796
+ Api::AbilityId::BURROWUP_INFESTORTERRAN,
1797
+ Api::AbilityId::BURROWUP_INFESTOR,
1798
+ Api::AbilityId::SMART,
1799
+ Api::AbilityId::NEURALPARASITE_NEURALPARASITE],
1800
+ Api::UnitTypeId::OVERLORDCOCOON => [],
1801
+ Api::UnitTypeId::OVERSEER =>
1802
+ [Api::AbilityId::STOP_STOP,
1803
+ Api::AbilityId::MOVE_MOVE,
1804
+ Api::AbilityId::PATROL_PATROL,
1805
+ Api::AbilityId::HOLDPOSITION_HOLD,
1806
+ Api::AbilityId::SCAN_MOVE,
1807
+ Api::AbilityId::SPAWNCHANGELING_SPAWNCHANGELING,
1808
+ Api::AbilityId::CONTAMINATE_CONTAMINATE,
1809
+ Api::AbilityId::MORPH_OVERSIGHTMODE,
1810
+ Api::AbilityId::SMART],
1811
+ Api::UnitTypeId::PLANETARYFORTRESS =>
1812
+ [Api::AbilityId::STOP_STOP,
1813
+ Api::AbilityId::ATTACK_ATTACK,
1814
+ Api::AbilityId::RALLY_COMMANDCENTER,
1815
+ Api::AbilityId::LOADALL_COMMANDCENTER,
1816
+ Api::AbilityId::COMMANDCENTERTRAIN_SCV,
1817
+ Api::AbilityId::SMART],
1818
+ Api::UnitTypeId::ULTRALISKBURROWED => [Api::AbilityId::BURROWUP_ULTRALISK],
1819
+ Api::UnitTypeId::ORBITALCOMMAND =>
1820
+ [Api::AbilityId::CALLDOWNMULE_CALLDOWNMULE,
1821
+ Api::AbilityId::RALLY_COMMANDCENTER,
1822
+ Api::AbilityId::SUPPLYDROP_SUPPLYDROP,
1823
+ Api::AbilityId::SCANNERSWEEP_SCAN,
1824
+ Api::AbilityId::COMMANDCENTERTRAIN_SCV,
1825
+ Api::AbilityId::LIFT_ORBITALCOMMAND,
1826
+ Api::AbilityId::SMART],
1827
+ Api::UnitTypeId::WARPGATE =>
1828
+ [Api::AbilityId::WARPGATETRAIN_ZEALOT,
1829
+ Api::AbilityId::MORPH_GATEWAY,
1830
+ Api::AbilityId::SMART,
1831
+ Api::AbilityId::WARPGATETRAIN_STALKER,
1832
+ Api::AbilityId::WARPGATETRAIN_HIGHTEMPLAR,
1833
+ Api::AbilityId::WARPGATETRAIN_DARKTEMPLAR,
1834
+ Api::AbilityId::WARPGATETRAIN_SENTRY,
1835
+ Api::AbilityId::TRAINWARP_ADEPT],
1836
+ Api::UnitTypeId::ORBITALCOMMANDFLYING =>
1837
+ [Api::AbilityId::STOP_STOP,
1838
+ Api::AbilityId::MOVE_MOVE,
1839
+ Api::AbilityId::PATROL_PATROL,
1840
+ Api::AbilityId::HOLDPOSITION_HOLD,
1841
+ Api::AbilityId::LAND_ORBITALCOMMAND,
1842
+ Api::AbilityId::SMART],
1843
+ Api::UnitTypeId::WARPPRISMPHASING =>
1844
+ [Api::AbilityId::STOP_STOP,
1845
+ Api::AbilityId::LOAD_WARPPRISM,
1846
+ Api::AbilityId::MORPH_WARPPRISMTRANSPORTMODE,
1847
+ Api::AbilityId::SMART],
1848
+ Api::UnitTypeId::CREEPTUMORBURROWED =>
1849
+ [Api::AbilityId::BUILD_CREEPTUMOR_TUMOR,
1850
+ Api::AbilityId::SMART,
1851
+ Api::AbilityId::BUILD_CREEPTUMOR],
1852
+ Api::UnitTypeId::CREEPTUMORQUEEN =>
1853
+ [Api::AbilityId::BUILD_CREEPTUMOR_TUMOR, Api::AbilityId::SMART],
1854
+ Api::UnitTypeId::SPINECRAWLERUPROOTED =>
1855
+ [Api::AbilityId::STOP_STOP,
1856
+ Api::AbilityId::MOVE_MOVE,
1857
+ Api::AbilityId::PATROL_PATROL,
1858
+ Api::AbilityId::HOLDPOSITION_HOLD,
1859
+ Api::AbilityId::SCAN_MOVE,
1860
+ Api::AbilityId::SMART,
1861
+ Api::AbilityId::SPINECRAWLERROOT_SPINECRAWLERROOT],
1862
+ Api::UnitTypeId::SPORECRAWLERUPROOTED =>
1863
+ [Api::AbilityId::STOP_STOP,
1864
+ Api::AbilityId::MOVE_MOVE,
1865
+ Api::AbilityId::PATROL_PATROL,
1866
+ Api::AbilityId::HOLDPOSITION_HOLD,
1867
+ Api::AbilityId::SCAN_MOVE,
1868
+ Api::AbilityId::SMART,
1869
+ Api::AbilityId::SPORECRAWLERROOT_SPORECRAWLERROOT],
1870
+ Api::UnitTypeId::ARCHON =>
1871
+ [Api::AbilityId::STOP_STOP,
1872
+ Api::AbilityId::MOVE_MOVE,
1873
+ Api::AbilityId::PATROL_PATROL,
1874
+ Api::AbilityId::HOLDPOSITION_HOLD,
1875
+ Api::AbilityId::ATTACK_ATTACK,
1876
+ Api::AbilityId::SMART],
1877
+ Api::UnitTypeId::NYDUSCANAL =>
1878
+ [Api::AbilityId::STOP_STOP,
1879
+ Api::AbilityId::RALLY_BUILDING,
1880
+ Api::AbilityId::LOAD_NYDUSWORM,
1881
+ Api::AbilityId::SMART],
1882
+ Api::UnitTypeId::GHOSTNOVA =>
1883
+ [Api::AbilityId::STOP_STOP,
1884
+ Api::AbilityId::MOVE_MOVE,
1885
+ Api::AbilityId::PATROL_PATROL,
1886
+ Api::AbilityId::HOLDPOSITION_HOLD,
1887
+ Api::AbilityId::ATTACK_ATTACK,
1888
+ Api::AbilityId::BEHAVIOR_HOLDFIREON_GHOST,
1889
+ Api::AbilityId::EMP_EMP,
1890
+ Api::AbilityId::EFFECT_GHOSTSNIPE,
1891
+ Api::AbilityId::SMART,
1892
+ Api::AbilityId::BEHAVIOR_CLOAKON_GHOST],
1893
+ Api::UnitTypeId::INFESTEDTERRANSEGG =>
1894
+ [Api::AbilityId::MOVE_MOVE,
1895
+ Api::AbilityId::PATROL_PATROL,
1896
+ Api::AbilityId::HOLDPOSITION_HOLD,
1897
+ Api::AbilityId::SMART],
1898
+ Api::UnitTypeId::LARVA =>
1899
+ [Api::AbilityId::LARVATRAIN_DRONE,
1900
+ Api::AbilityId::LARVATRAIN_OVERLORD,
1901
+ Api::AbilityId::LARVATRAIN_ZERGLING,
1902
+ Api::AbilityId::LARVATRAIN_HYDRALISK,
1903
+ Api::AbilityId::LARVATRAIN_MUTALISK,
1904
+ Api::AbilityId::LARVATRAIN_ULTRALISK,
1905
+ Api::AbilityId::LARVATRAIN_ROACH,
1906
+ Api::AbilityId::LARVATRAIN_INFESTOR,
1907
+ Api::AbilityId::LARVATRAIN_CORRUPTOR,
1908
+ Api::AbilityId::LARVATRAIN_VIPER,
1909
+ Api::AbilityId::TRAIN_SWARMHOST],
1910
+ Api::UnitTypeId::MULE =>
1911
+ [Api::AbilityId::STOP_STOP,
1912
+ Api::AbilityId::MOVE_MOVE,
1913
+ Api::AbilityId::PATROL_PATROL,
1914
+ Api::AbilityId::HOLDPOSITION_HOLD,
1915
+ Api::AbilityId::SCAN_MOVE,
1916
+ Api::AbilityId::EFFECT_REPAIR_MULE,
1917
+ Api::AbilityId::HARVEST_GATHER_MULE,
1918
+ Api::AbilityId::SMART],
1919
+ Api::UnitTypeId::BROODLING =>
1920
+ [Api::AbilityId::STOP_STOP,
1921
+ Api::AbilityId::MOVE_MOVE,
1922
+ Api::AbilityId::PATROL_PATROL,
1923
+ Api::AbilityId::HOLDPOSITION_HOLD,
1924
+ Api::AbilityId::ATTACK_ATTACK,
1925
+ Api::AbilityId::SMART],
1926
+ Api::UnitTypeId::ADEPT =>
1927
+ [Api::AbilityId::STOP_STOP,
1928
+ Api::AbilityId::MOVE_MOVE,
1929
+ Api::AbilityId::PATROL_PATROL,
1930
+ Api::AbilityId::HOLDPOSITION_HOLD,
1931
+ Api::AbilityId::ATTACK_ATTACK,
1932
+ Api::AbilityId::ADEPTPHASESHIFT_ADEPTPHASESHIFT,
1933
+ Api::AbilityId::SMART],
1934
+ Api::UnitTypeId::INFESTEDTERRANSEGGPLACEMENT => [],
1935
+ Api::UnitTypeId::HELLIONTANK =>
1936
+ [Api::AbilityId::STOP_STOP,
1937
+ Api::AbilityId::MOVE_MOVE,
1938
+ Api::AbilityId::PATROL_PATROL,
1939
+ Api::AbilityId::HOLDPOSITION_HOLD,
1940
+ Api::AbilityId::ATTACK_ATTACK,
1941
+ Api::AbilityId::SMART,
1942
+ Api::AbilityId::MORPH_HELLION],
1943
+ Api::UnitTypeId::MOTHERSHIPCORE =>
1944
+ [Api::AbilityId::STOP_STOP,
1945
+ Api::AbilityId::MOVE_MOVE,
1946
+ Api::AbilityId::PATROL_PATROL,
1947
+ Api::AbilityId::HOLDPOSITION_HOLD,
1948
+ Api::AbilityId::ATTACK_ATTACK,
1949
+ Api::AbilityId::EFFECT_MASSRECALL_MOTHERSHIPCORE,
1950
+ Api::AbilityId::EFFECT_PHOTONOVERCHARGE,
1951
+ Api::AbilityId::EFFECT_TIMEWARP,
1952
+ Api::AbilityId::SMART,
1953
+ Api::AbilityId::MORPH_MOTHERSHIP],
1954
+ Api::UnitTypeId::LOCUSTMP =>
1955
+ [Api::AbilityId::STOP_STOP,
1956
+ Api::AbilityId::MOVE_MOVE,
1957
+ Api::AbilityId::PATROL_PATROL,
1958
+ Api::AbilityId::HOLDPOSITION_HOLD,
1959
+ Api::AbilityId::ATTACK_ATTACK,
1960
+ Api::AbilityId::SMART],
1961
+ Api::UnitTypeId::NYDUSCANALATTACKER =>
1962
+ [Api::AbilityId::STOP_STOP,
1963
+ Api::AbilityId::ATTACK_ATTACK,
1964
+ Api::AbilityId::SMART],
1965
+ Api::UnitTypeId::NYDUSCANALCREEPER =>
1966
+ [Api::AbilityId::STOP_STOP,
1967
+ Api::AbilityId::ATTACK_ATTACK,
1968
+ Api::AbilityId::DIGESTERCREEPSPRAY_DIGESTERCREEPSPRAY,
1969
+ Api::AbilityId::SMART],
1970
+ Api::UnitTypeId::SWARMHOSTBURROWEDMP =>
1971
+ [Api::AbilityId::EFFECT_SPAWNLOCUSTS, Api::AbilityId::SMART],
1972
+ Api::UnitTypeId::SWARMHOSTMP =>
1973
+ [Api::AbilityId::STOP_STOP,
1974
+ Api::AbilityId::MOVE_MOVE,
1975
+ Api::AbilityId::PATROL_PATROL,
1976
+ Api::AbilityId::HOLDPOSITION_HOLD,
1977
+ Api::AbilityId::SCAN_MOVE,
1978
+ Api::AbilityId::EFFECT_SPAWNLOCUSTS,
1979
+ Api::AbilityId::SMART,
1980
+ Api::AbilityId::BURROWDOWN_SWARMHOST],
1981
+ Api::UnitTypeId::ORACLE =>
1982
+ [Api::AbilityId::STOP_STOP,
1983
+ Api::AbilityId::MOVE_MOVE,
1984
+ Api::AbilityId::PATROL_PATROL,
1985
+ Api::AbilityId::HOLDPOSITION_HOLD,
1986
+ Api::AbilityId::SCAN_MOVE,
1987
+ Api::AbilityId::ATTACK_ATTACK,
1988
+ Api::AbilityId::ORACLEREVELATION_ORACLEREVELATION,
1989
+ Api::AbilityId::BEHAVIOR_PULSARBEAMON,
1990
+ Api::AbilityId::BUILD_STASISTRAP,
1991
+ Api::AbilityId::SMART],
1992
+ Api::UnitTypeId::TEMPEST =>
1993
+ [Api::AbilityId::STOP_STOP,
1994
+ Api::AbilityId::MOVE_MOVE,
1995
+ Api::AbilityId::PATROL_PATROL,
1996
+ Api::AbilityId::HOLDPOSITION_HOLD,
1997
+ Api::AbilityId::ATTACK_ATTACK,
1998
+ Api::AbilityId::SMART],
1999
+ Api::UnitTypeId::WARHOUND =>
2000
+ [Api::AbilityId::STOP_STOP,
2001
+ Api::AbilityId::MOVE_MOVE,
2002
+ Api::AbilityId::PATROL_PATROL,
2003
+ Api::AbilityId::HOLDPOSITION_HOLD,
2004
+ Api::AbilityId::ATTACK_ATTACK,
2005
+ Api::AbilityId::TORNADOMISSILE_TORNADOMISSILE,
2006
+ Api::AbilityId::SMART],
2007
+ Api::UnitTypeId::WIDOWMINE =>
2008
+ [Api::AbilityId::STOP_STOP,
2009
+ Api::AbilityId::MOVE_MOVE,
2010
+ Api::AbilityId::PATROL_PATROL,
2011
+ Api::AbilityId::HOLDPOSITION_HOLD,
2012
+ Api::AbilityId::SCAN_MOVE,
2013
+ Api::AbilityId::BURROWDOWN_WIDOWMINE,
2014
+ Api::AbilityId::SMART],
2015
+ Api::UnitTypeId::VIPER =>
2016
+ [Api::AbilityId::STOP_STOP,
2017
+ Api::AbilityId::MOVE_MOVE,
2018
+ Api::AbilityId::PATROL_PATROL,
2019
+ Api::AbilityId::HOLDPOSITION_HOLD,
2020
+ Api::AbilityId::SCAN_MOVE,
2021
+ Api::AbilityId::BLINDINGCLOUD_BLINDINGCLOUD,
2022
+ Api::AbilityId::EFFECT_ABDUCT,
2023
+ Api::AbilityId::VIPERCONSUMESTRUCTURE_VIPERCONSUME,
2024
+ Api::AbilityId::PARASITICBOMB_PARASITICBOMB,
2025
+ Api::AbilityId::SMART],
2026
+ Api::UnitTypeId::WIDOWMINEBURROWED =>
2027
+ [Api::AbilityId::BURROWUP_WIDOWMINE,
2028
+ Api::AbilityId::WIDOWMINEATTACK_WIDOWMINEATTACK,
2029
+ Api::AbilityId::SMART],
2030
+ Api::UnitTypeId::LURKERMPEGG =>
2031
+ [Api::AbilityId::RALLY_BUILDING, Api::AbilityId::SMART],
2032
+ Api::UnitTypeId::LURKERMP =>
2033
+ [Api::AbilityId::STOP_STOP,
2034
+ Api::AbilityId::MOVE_MOVE,
2035
+ Api::AbilityId::PATROL_PATROL,
2036
+ Api::AbilityId::HOLDPOSITION_HOLD,
2037
+ Api::AbilityId::SCAN_MOVE,
2038
+ Api::AbilityId::ATTACK_ATTACK,
2039
+ Api::AbilityId::BURROWDOWN_LURKER,
2040
+ Api::AbilityId::SMART],
2041
+ Api::UnitTypeId::LURKERMPBURROWED =>
2042
+ [Api::AbilityId::STOP_STOP,
2043
+ Api::AbilityId::ATTACK_ATTACK,
2044
+ Api::AbilityId::BURROWUP_LURKER,
2045
+ Api::AbilityId::BEHAVIOR_HOLDFIREON_LURKER,
2046
+ Api::AbilityId::SMART],
2047
+ Api::UnitTypeId::LURKERDENMP =>
2048
+ [Api::AbilityId::RESEARCH_ADAPTIVETALONS,
2049
+ Api::AbilityId::LURKERDENRESEARCH_RESEARCHLURKERRANGE],
2050
+ Api::UnitTypeId::RESOURCEBLOCKER => [],
2051
+ Api::UnitTypeId::ICEPROTOSSCRATES => [],
2052
+ Api::UnitTypeId::PROTOSSCRATES => [],
2053
+ Api::UnitTypeId::TOWERMINE => [],
2054
+ Api::UnitTypeId::RAVAGERCOCOON =>
2055
+ [Api::AbilityId::RALLY_BUILDING, Api::AbilityId::SMART],
2056
+ Api::UnitTypeId::RAVAGER =>
2057
+ [Api::AbilityId::STOP_STOP,
2058
+ Api::AbilityId::MOVE_MOVE,
2059
+ Api::AbilityId::PATROL_PATROL,
2060
+ Api::AbilityId::HOLDPOSITION_HOLD,
2061
+ Api::AbilityId::ATTACK_ATTACK,
2062
+ Api::AbilityId::EFFECT_CORROSIVEBILE,
2063
+ Api::AbilityId::SMART,
2064
+ Api::AbilityId::BURROWDOWN_RAVAGER],
2065
+ Api::UnitTypeId::LIBERATOR =>
2066
+ [Api::AbilityId::STOP_STOP,
2067
+ Api::AbilityId::MOVE_MOVE,
2068
+ Api::AbilityId::PATROL_PATROL,
2069
+ Api::AbilityId::HOLDPOSITION_HOLD,
2070
+ Api::AbilityId::ATTACK_ATTACK,
2071
+ Api::AbilityId::MORPH_LIBERATORAGMODE,
2072
+ Api::AbilityId::SMART],
2073
+ Api::UnitTypeId::RAVAGERBURROWED => [Api::AbilityId::BURROWUP_RAVAGER],
2074
+ Api::UnitTypeId::THORAP =>
2075
+ [Api::AbilityId::STOP_STOP,
2076
+ Api::AbilityId::MOVE_MOVE,
2077
+ Api::AbilityId::PATROL_PATROL,
2078
+ Api::AbilityId::HOLDPOSITION_HOLD,
2079
+ Api::AbilityId::ATTACK_ATTACK,
2080
+ Api::AbilityId::MORPH_THOREXPLOSIVEMODE,
2081
+ Api::AbilityId::SMART],
2082
+ Api::UnitTypeId::CYCLONE =>
2083
+ [Api::AbilityId::STOP_STOP,
2084
+ Api::AbilityId::MOVE_MOVE,
2085
+ Api::AbilityId::PATROL_PATROL,
2086
+ Api::AbilityId::HOLDPOSITION_HOLD,
2087
+ Api::AbilityId::ATTACK_ATTACK,
2088
+ Api::AbilityId::LOCKON_LOCKON,
2089
+ Api::AbilityId::SMART],
2090
+ Api::UnitTypeId::LOCUSTMPFLYING =>
2091
+ [Api::AbilityId::STOP_STOP,
2092
+ Api::AbilityId::MOVE_MOVE,
2093
+ Api::AbilityId::PATROL_PATROL,
2094
+ Api::AbilityId::HOLDPOSITION_HOLD,
2095
+ Api::AbilityId::ATTACK_ATTACK,
2096
+ Api::AbilityId::EFFECT_LOCUSTSWOOP,
2097
+ Api::AbilityId::SMART],
2098
+ Api::UnitTypeId::DISRUPTOR =>
2099
+ [Api::AbilityId::STOP_STOP,
2100
+ Api::AbilityId::MOVE_MOVE,
2101
+ Api::AbilityId::PATROL_PATROL,
2102
+ Api::AbilityId::HOLDPOSITION_HOLD,
2103
+ Api::AbilityId::SCAN_MOVE,
2104
+ Api::AbilityId::EFFECT_PURIFICATIONNOVA,
2105
+ Api::AbilityId::SMART],
2106
+ Api::UnitTypeId::VOIDMPIMMORTALREVIVECORPSE =>
2107
+ [Api::AbilityId::RALLY_BUILDING,
2108
+ Api::AbilityId::VOIDMPIMMORTALREVIVEREBUILD_IMMORTAL,
2109
+ Api::AbilityId::SMART],
2110
+ Api::UnitTypeId::GUARDIANCOCOONMP => [],
2111
+ Api::UnitTypeId::GUARDIANMP =>
2112
+ [Api::AbilityId::STOP_STOP,
2113
+ Api::AbilityId::MOVE_MOVE,
2114
+ Api::AbilityId::PATROL_PATROL,
2115
+ Api::AbilityId::HOLDPOSITION_HOLD,
2116
+ Api::AbilityId::ATTACK_ATTACK,
2117
+ Api::AbilityId::SMART],
2118
+ Api::UnitTypeId::DEVOURERCOCOONMP => [],
2119
+ Api::UnitTypeId::DEVOURERMP =>
2120
+ [Api::AbilityId::STOP_STOP,
2121
+ Api::AbilityId::MOVE_MOVE,
2122
+ Api::AbilityId::PATROL_PATROL,
2123
+ Api::AbilityId::HOLDPOSITION_HOLD,
2124
+ Api::AbilityId::ATTACK_ATTACK,
2125
+ Api::AbilityId::SMART],
2126
+ Api::UnitTypeId::DEFILERMPBURROWED =>
2127
+ [Api::AbilityId::DEFILERMPUNBURROW_BURROWUP],
2128
+ Api::UnitTypeId::DEFILERMP =>
2129
+ [Api::AbilityId::STOP_STOP,
2130
+ Api::AbilityId::MOVE_MOVE,
2131
+ Api::AbilityId::PATROL_PATROL,
2132
+ Api::AbilityId::HOLDPOSITION_HOLD,
2133
+ Api::AbilityId::SCAN_MOVE,
2134
+ Api::AbilityId::DEFILERMPCONSUME_DEFILERMPCONSUME,
2135
+ Api::AbilityId::DEFILERMPDARKSWARM_DEFILERMPDARKSWARM,
2136
+ Api::AbilityId::DEFILERMPPLAGUE_DEFILERMPPLAGUE,
2137
+ Api::AbilityId::SMART,
2138
+ Api::AbilityId::DEFILERMPBURROW_BURROWDOWN],
2139
+ Api::UnitTypeId::ORACLESTASISTRAP => [],
2140
+ Api::UnitTypeId::DISRUPTORPHASED =>
2141
+ [Api::AbilityId::STOP_STOP,
2142
+ Api::AbilityId::MOVE_MOVE,
2143
+ Api::AbilityId::PATROL_PATROL,
2144
+ Api::AbilityId::HOLDPOSITION_HOLD,
2145
+ Api::AbilityId::SCAN_MOVE,
2146
+ Api::AbilityId::SMART],
2147
+ Api::UnitTypeId::LIBERATORAG =>
2148
+ [Api::AbilityId::STOP_STOP,
2149
+ Api::AbilityId::ATTACK_ATTACK,
2150
+ Api::AbilityId::MORPH_LIBERATORAAMODE,
2151
+ Api::AbilityId::SMART],
2152
+ Api::UnitTypeId::RELEASEINTERCEPTORSBEACON => [],
2153
+ Api::UnitTypeId::ADEPTPHASESHIFT =>
2154
+ [Api::AbilityId::STOP_STOP,
2155
+ Api::AbilityId::MOVE_MOVE,
2156
+ Api::AbilityId::PATROL_PATROL,
2157
+ Api::AbilityId::HOLDPOSITION_HOLD,
2158
+ Api::AbilityId::SCAN_MOVE,
2159
+ Api::AbilityId::ATTACK_ATTACK,
2160
+ Api::AbilityId::CANCEL_ADEPTSHADEPHASESHIFT,
2161
+ Api::AbilityId::SMART],
2162
+ Api::UnitTypeId::THORAALANCE => [],
2163
+ Api::UnitTypeId::HERCPLACEMENT =>
2164
+ [Api::AbilityId::STOP_STOP,
2165
+ Api::AbilityId::MOVE_MOVE,
2166
+ Api::AbilityId::PATROL_PATROL,
2167
+ Api::AbilityId::HOLDPOSITION_HOLD,
2168
+ Api::AbilityId::ATTACK_ATTACK,
2169
+ Api::AbilityId::SMART],
2170
+ Api::UnitTypeId::HERC =>
2171
+ [Api::AbilityId::STOP_STOP,
2172
+ Api::AbilityId::MOVE_MOVE,
2173
+ Api::AbilityId::PATROL_PATROL,
2174
+ Api::AbilityId::HOLDPOSITION_HOLD,
2175
+ Api::AbilityId::ATTACK_ATTACK,
2176
+ Api::AbilityId::SMART],
2177
+ Api::UnitTypeId::REPLICANT =>
2178
+ [Api::AbilityId::STOP_STOP,
2179
+ Api::AbilityId::MOVE_MOVE,
2180
+ Api::AbilityId::PATROL_PATROL,
2181
+ Api::AbilityId::HOLDPOSITION_HOLD,
2182
+ Api::AbilityId::ATTACK_ATTACK,
2183
+ Api::AbilityId::SMART],
2184
+ Api::UnitTypeId::CORSAIRMP =>
2185
+ [Api::AbilityId::STOP_STOP,
2186
+ Api::AbilityId::MOVE_MOVE,
2187
+ Api::AbilityId::PATROL_PATROL,
2188
+ Api::AbilityId::HOLDPOSITION_HOLD,
2189
+ Api::AbilityId::ATTACK_ATTACK,
2190
+ Api::AbilityId::CORSAIRMPDISRUPTIONWEB_CORSAIRMPDISRUPTIONWEB,
2191
+ Api::AbilityId::SMART],
2192
+ Api::UnitTypeId::SCOUTMP =>
2193
+ [Api::AbilityId::STOP_STOP,
2194
+ Api::AbilityId::MOVE_MOVE,
2195
+ Api::AbilityId::PATROL_PATROL,
2196
+ Api::AbilityId::HOLDPOSITION_HOLD,
2197
+ Api::AbilityId::ATTACK_ATTACK,
2198
+ Api::AbilityId::SMART],
2199
+ Api::UnitTypeId::ARBITERMP =>
2200
+ [Api::AbilityId::STOP_STOP,
2201
+ Api::AbilityId::MOVE_MOVE,
2202
+ Api::AbilityId::PATROL_PATROL,
2203
+ Api::AbilityId::HOLDPOSITION_HOLD,
2204
+ Api::AbilityId::ATTACK_ATTACK,
2205
+ Api::AbilityId::ARBITERMPSTASISFIELD_ARBITERMPSTASISFIELD,
2206
+ Api::AbilityId::ARBITERMPRECALL_ARBITERMPRECALL,
2207
+ Api::AbilityId::SMART],
2208
+ Api::UnitTypeId::SCOURGEMP =>
2209
+ [Api::AbilityId::STOP_STOP,
2210
+ Api::AbilityId::MOVE_MOVE,
2211
+ Api::AbilityId::PATROL_PATROL,
2212
+ Api::AbilityId::HOLDPOSITION_HOLD,
2213
+ Api::AbilityId::ATTACK_ATTACK,
2214
+ Api::AbilityId::SMART],
2215
+ Api::UnitTypeId::QUEENMP =>
2216
+ [Api::AbilityId::STOP_STOP,
2217
+ Api::AbilityId::MOVE_MOVE,
2218
+ Api::AbilityId::PATROL_PATROL,
2219
+ Api::AbilityId::HOLDPOSITION_HOLD,
2220
+ Api::AbilityId::ATTACK_ATTACK,
2221
+ Api::AbilityId::QUEENMPENSNARE_QUEENMPENSNARE,
2222
+ Api::AbilityId::QUEENMPSPAWNBROODLINGS_QUEENMPSPAWNBROODLINGS,
2223
+ Api::AbilityId::QUEENMPINFESTCOMMANDCENTER_QUEENMPINFESTCOMMANDCENTER,
2224
+ Api::AbilityId::SMART],
2225
+ Api::UnitTypeId::ELSECARO_COLONIST_HUT =>
2226
+ [Api::AbilityId::RALLY_BUILDING, Api::AbilityId::SMART],
2227
+ Api::UnitTypeId::TRANSPORTOVERLORDCOCOON => [],
2228
+ Api::UnitTypeId::OVERLORDTRANSPORT =>
2229
+ [Api::AbilityId::STOP_STOP,
2230
+ Api::AbilityId::MOVE_MOVE,
2231
+ Api::AbilityId::PATROL_PATROL,
2232
+ Api::AbilityId::HOLDPOSITION_HOLD,
2233
+ Api::AbilityId::SCAN_MOVE,
2234
+ Api::AbilityId::LOAD_OVERLORD,
2235
+ Api::AbilityId::SMART,
2236
+ Api::AbilityId::MORPH_OVERSEER,
2237
+ Api::AbilityId::BEHAVIOR_GENERATECREEPON],
2238
+ Api::UnitTypeId::PYLONOVERCHARGED => [],
2239
+ Api::UnitTypeId::BYPASSARMORDRONE =>
2240
+ [Api::AbilityId::STOP_STOP,
2241
+ Api::AbilityId::MOVE_MOVE,
2242
+ Api::AbilityId::ATTACK_ATTACK,
2243
+ Api::AbilityId::SMART],
2244
+ Api::UnitTypeId::SHIELDBATTERY =>
2245
+ [Api::AbilityId::STOP_STOP,
2246
+ Api::AbilityId::SHIELDBATTERYRECHARGEEX5_SHIELDBATTERYRECHARGE,
2247
+ Api::AbilityId::SMART],
2248
+ Api::UnitTypeId::OBSERVERSIEGEMODE =>
2249
+ [Api::AbilityId::STOP_STOP, Api::AbilityId::MORPH_OBSERVERMODE],
2250
+ Api::UnitTypeId::OVERSEERSIEGEMODE =>
2251
+ [Api::AbilityId::STOP_STOP,
2252
+ Api::AbilityId::SPAWNCHANGELING_SPAWNCHANGELING,
2253
+ Api::AbilityId::CONTAMINATE_CONTAMINATE,
2254
+ Api::AbilityId::MORPH_OVERSEERMODE,
2255
+ Api::AbilityId::SMART],
2256
+ Api::UnitTypeId::RAVENREPAIRDRONE =>
2257
+ [Api::AbilityId::STOP_STOP,
2258
+ Api::AbilityId::EFFECT_REPAIR_REPAIRDRONE,
2259
+ Api::AbilityId::SMART],
2260
+ Api::UnitTypeId::VIKING => [],
2261
+ Api::UnitTypeId::REFINERYRICH => [],
2262
+ Api::UnitTypeId::ASSIMILATORRICH => [],
2263
+ Api::UnitTypeId::EXTRACTORRICH => []}
2264
+
2265
+ def unit_alias_data = {Api::UnitTypeId::CHANGELINGZEALOT => Api::UnitTypeId::CHANGELING,
2266
+ Api::UnitTypeId::CHANGELINGMARINESHIELD => Api::UnitTypeId::CHANGELING,
2267
+ Api::UnitTypeId::CHANGELINGMARINE => Api::UnitTypeId::CHANGELING,
2268
+ Api::UnitTypeId::CHANGELINGZERGLINGWINGS => Api::UnitTypeId::CHANGELING,
2269
+ Api::UnitTypeId::CHANGELINGZERGLING => Api::UnitTypeId::CHANGELING,
2270
+ Api::UnitTypeId::SIEGETANKSIEGED => Api::UnitTypeId::SIEGETANK,
2271
+ Api::UnitTypeId::VIKINGASSAULT => Api::UnitTypeId::VIKINGFIGHTER,
2272
+ Api::UnitTypeId::COMMANDCENTERFLYING => Api::UnitTypeId::COMMANDCENTER,
2273
+ Api::UnitTypeId::FACTORYFLYING => Api::UnitTypeId::FACTORY,
2274
+ Api::UnitTypeId::STARPORTFLYING => Api::UnitTypeId::STARPORT,
2275
+ Api::UnitTypeId::BARRACKSFLYING => Api::UnitTypeId::BARRACKS,
2276
+ Api::UnitTypeId::SUPPLYDEPOTLOWERED => Api::UnitTypeId::SUPPLYDEPOT,
2277
+ Api::UnitTypeId::BANELINGBURROWED => Api::UnitTypeId::BANELING,
2278
+ Api::UnitTypeId::DRONEBURROWED => Api::UnitTypeId::DRONE,
2279
+ Api::UnitTypeId::HYDRALISKBURROWED => Api::UnitTypeId::HYDRALISK,
2280
+ Api::UnitTypeId::ROACHBURROWED => Api::UnitTypeId::ROACH,
2281
+ Api::UnitTypeId::ZERGLINGBURROWED => Api::UnitTypeId::ZERGLING,
2282
+ Api::UnitTypeId::INFESTORTERRANBURROWED => Api::UnitTypeId::INFESTORTERRAN,
2283
+ Api::UnitTypeId::QUEENBURROWED => Api::UnitTypeId::QUEEN,
2284
+ Api::UnitTypeId::INFESTORBURROWED => Api::UnitTypeId::INFESTOR,
2285
+ Api::UnitTypeId::ULTRALISKBURROWED => Api::UnitTypeId::ULTRALISK,
2286
+ Api::UnitTypeId::ORBITALCOMMANDFLYING => Api::UnitTypeId::ORBITALCOMMAND,
2287
+ Api::UnitTypeId::WARPPRISMPHASING => Api::UnitTypeId::WARPPRISM,
2288
+ Api::UnitTypeId::CREEPTUMORBURROWED => Api::UnitTypeId::CREEPTUMOR,
2289
+ Api::UnitTypeId::CREEPTUMORQUEEN => Api::UnitTypeId::CREEPTUMOR,
2290
+ Api::UnitTypeId::SPINECRAWLERUPROOTED => Api::UnitTypeId::SPINECRAWLER,
2291
+ Api::UnitTypeId::SPORECRAWLERUPROOTED => Api::UnitTypeId::SPORECRAWLER,
2292
+ Api::UnitTypeId::GHOSTNOVA => Api::UnitTypeId::GHOST,
2293
+ Api::UnitTypeId::SWARMHOSTBURROWEDMP => Api::UnitTypeId::SWARMHOSTMP,
2294
+ Api::UnitTypeId::WIDOWMINEBURROWED => Api::UnitTypeId::WIDOWMINE,
2295
+ Api::UnitTypeId::LURKERMPBURROWED => Api::UnitTypeId::LURKERMP,
2296
+ Api::UnitTypeId::RAVAGERBURROWED => Api::UnitTypeId::RAVAGER,
2297
+ Api::UnitTypeId::THORAP => Api::UnitTypeId::THOR,
2298
+ Api::UnitTypeId::LOCUSTMPFLYING => Api::UnitTypeId::LOCUSTMP,
2299
+ Api::UnitTypeId::LIBERATORAG => Api::UnitTypeId::LIBERATOR,
2300
+ Api::UnitTypeId::ADEPTPHASESHIFT => Api::UnitTypeId::ADEPT,
2301
+ Api::UnitTypeId::HERCPLACEMENT => Api::UnitTypeId::HERC,
2302
+ Api::UnitTypeId::PYLONOVERCHARGED => Api::UnitTypeId::PYLON,
2303
+ Api::UnitTypeId::OBSERVERSIEGEMODE => Api::UnitTypeId::OBSERVER,
2304
+ Api::UnitTypeId::OVERSEERSIEGEMODE => Api::UnitTypeId::OVERSEER}
2305
+
2306
+ def unit_tech_alias_data = {Api::UnitTypeId::SIEGETANKSIEGED => [Api::UnitTypeId::SIEGETANK],
2307
+ Api::UnitTypeId::VIKINGASSAULT => [Api::UnitTypeId::VIKING],
2308
+ Api::UnitTypeId::VIKINGFIGHTER => [Api::UnitTypeId::VIKING],
2309
+ Api::UnitTypeId::COMMANDCENTERFLYING => [Api::UnitTypeId::COMMANDCENTER],
2310
+ Api::UnitTypeId::BARRACKSTECHLAB => [Api::UnitTypeId::TECHLAB],
2311
+ Api::UnitTypeId::BARRACKSREACTOR => [Api::UnitTypeId::REACTOR],
2312
+ Api::UnitTypeId::FACTORYTECHLAB => [Api::UnitTypeId::TECHLAB],
2313
+ Api::UnitTypeId::FACTORYREACTOR => [Api::UnitTypeId::REACTOR],
2314
+ Api::UnitTypeId::STARPORTTECHLAB => [Api::UnitTypeId::TECHLAB],
2315
+ Api::UnitTypeId::STARPORTREACTOR => [Api::UnitTypeId::REACTOR],
2316
+ Api::UnitTypeId::FACTORYFLYING => [Api::UnitTypeId::FACTORY],
2317
+ Api::UnitTypeId::STARPORTFLYING => [Api::UnitTypeId::STARPORT],
2318
+ Api::UnitTypeId::BARRACKSFLYING => [Api::UnitTypeId::BARRACKS],
2319
+ Api::UnitTypeId::SUPPLYDEPOTLOWERED => [Api::UnitTypeId::SUPPLYDEPOT],
2320
+ Api::UnitTypeId::LAIR => [Api::UnitTypeId::HATCHERY],
2321
+ Api::UnitTypeId::HIVE =>
2322
+ [Api::UnitTypeId::HATCHERY, Api::UnitTypeId::LAIR],
2323
+ Api::UnitTypeId::GREATERSPIRE => [Api::UnitTypeId::SPIRE],
2324
+ Api::UnitTypeId::QUEENBURROWED => [Api::UnitTypeId::QUEEN],
2325
+ Api::UnitTypeId::OVERSEER => [Api::UnitTypeId::OVERLORD],
2326
+ Api::UnitTypeId::PLANETARYFORTRESS => [Api::UnitTypeId::COMMANDCENTER],
2327
+ Api::UnitTypeId::ORBITALCOMMAND => [Api::UnitTypeId::COMMANDCENTER],
2328
+ Api::UnitTypeId::WARPGATE => [Api::UnitTypeId::GATEWAY],
2329
+ Api::UnitTypeId::ORBITALCOMMANDFLYING => [Api::UnitTypeId::COMMANDCENTER],
2330
+ Api::UnitTypeId::WARPPRISMPHASING => [Api::UnitTypeId::WARPPRISM],
2331
+ Api::UnitTypeId::CREEPTUMORBURROWED => [Api::UnitTypeId::CREEPTUMOR],
2332
+ Api::UnitTypeId::CREEPTUMORQUEEN => [Api::UnitTypeId::CREEPTUMOR],
2333
+ Api::UnitTypeId::WIDOWMINEBURROWED => [Api::UnitTypeId::WIDOWMINE],
2334
+ Api::UnitTypeId::THORAP => [Api::UnitTypeId::THOR],
2335
+ Api::UnitTypeId::LIBERATORAG => [Api::UnitTypeId::LIBERATOR],
2336
+ Api::UnitTypeId::OVERLORDTRANSPORT => [Api::UnitTypeId::OVERLORD],
2337
+ Api::UnitTypeId::PYLONOVERCHARGED =>
2338
+ [Api::UnitTypeId::PYLON, Api::UnitTypeId::PYLON],
2339
+ Api::UnitTypeId::OVERSEERSIEGEMODE => [Api::UnitTypeId::OVERLORD]}
2340
+ end
2341
+ end
2342
+ end