sc2ai 0.0.0.pre → 0.0.2

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