sc2ai 0.0.0.pre → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/data.json +1 -0
- data/data/data_readable.json +22946 -0
- data/data/sc2ai/protocol/common.proto +59 -0
- data/data/sc2ai/protocol/data.proto +120 -0
- data/data/sc2ai/protocol/debug.proto +127 -0
- data/data/sc2ai/protocol/error.proto +221 -0
- data/data/sc2ai/protocol/query.proto +55 -0
- data/data/sc2ai/protocol/raw.proto +202 -0
- data/data/sc2ai/protocol/sc2api.proto +718 -0
- data/data/sc2ai/protocol/score.proto +108 -0
- data/data/sc2ai/protocol/spatial.proto +115 -0
- data/data/sc2ai/protocol/ui.proto +145 -0
- data/data/setup/setup.SC2Map +0 -0
- data/data/setup/setup.SC2Replay +0 -0
- data/data/stableid.json +37900 -0
- data/data/versions.json +554 -0
- data/exe/sc2ai +35 -0
- data/lib/docker_build/Dockerfile.ruby +74 -0
- data/lib/docker_build/docker-compose-base-image.yml +10 -0
- data/lib/docker_build/docker-compose-ladderzip.yml +9 -0
- data/lib/sc2ai/api/ability_id.rb +1951 -0
- data/lib/sc2ai/api/buff_id.rb +316 -0
- data/lib/sc2ai/api/data.rb +101 -0
- data/lib/sc2ai/api/effect_id.rb +20 -0
- data/lib/sc2ai/api/tech_tree.rb +82 -0
- data/lib/sc2ai/api/tech_tree_data.rb +2342 -0
- data/lib/sc2ai/api/unit_type_id.rb +2074 -0
- data/lib/sc2ai/api/upgrade_id.rb +312 -0
- data/lib/sc2ai/cli/cli.rb +177 -0
- data/lib/sc2ai/cli/ladderzip.rb +173 -0
- data/lib/sc2ai/cli/new.rb +88 -0
- data/lib/sc2ai/configuration.rb +145 -0
- data/lib/sc2ai/connection/connection_listener.rb +30 -0
- data/lib/sc2ai/connection/requests.rb +417 -0
- data/lib/sc2ai/connection/status_listener.rb +15 -0
- data/lib/sc2ai/connection.rb +146 -0
- data/lib/sc2ai/local_play/client/configurable_options.rb +115 -0
- data/lib/sc2ai/local_play/client.rb +159 -0
- data/lib/sc2ai/local_play/client_manager.rb +70 -0
- data/lib/sc2ai/local_play/map_file.rb +48 -0
- data/lib/sc2ai/local_play/match.rb +184 -0
- data/lib/sc2ai/overrides/array.rb +14 -0
- data/lib/sc2ai/overrides/async/process/child.rb +31 -0
- data/lib/sc2ai/overrides/kernel.rb +33 -0
- data/lib/sc2ai/paths.rb +294 -0
- data/lib/sc2ai/player/actions.rb +386 -0
- data/lib/sc2ai/player/debug.rb +224 -0
- data/lib/sc2ai/player/game_state.rb +131 -0
- data/lib/sc2ai/player/geometry.rb +766 -0
- data/lib/sc2ai/player/previous_state.rb +49 -0
- data/lib/sc2ai/player/units.rb +337 -0
- data/lib/sc2ai/player.rb +661 -0
- data/lib/sc2ai/ports.rb +152 -0
- data/lib/sc2ai/protocol/_meta_documentation.rb +39 -0
- data/lib/sc2ai/protocol/common_pb.rb +43 -0
- data/lib/sc2ai/protocol/data_pb.rb +47 -0
- data/lib/sc2ai/protocol/debug_pb.rb +56 -0
- data/lib/sc2ai/protocol/error_pb.rb +36 -0
- data/lib/sc2ai/protocol/extensions/color.rb +20 -0
- data/lib/sc2ai/protocol/extensions/point.rb +23 -0
- data/lib/sc2ai/protocol/extensions/point_2_d.rb +26 -0
- data/lib/sc2ai/protocol/extensions/position.rb +202 -0
- data/lib/sc2ai/protocol/extensions/power_source.rb +19 -0
- data/lib/sc2ai/protocol/extensions/unit.rb +489 -0
- data/lib/sc2ai/protocol/query_pb.rb +47 -0
- data/lib/sc2ai/protocol/raw_pb.rb +57 -0
- data/lib/sc2ai/protocol/sc2api_pb.rb +130 -0
- data/lib/sc2ai/protocol/score_pb.rb +40 -0
- data/lib/sc2ai/protocol/spatial_pb.rb +48 -0
- data/lib/sc2ai/protocol/ui_pb.rb +56 -0
- data/lib/sc2ai/unit_group/action_ext.rb +74 -0
- data/lib/sc2ai/unit_group/filter_ext.rb +379 -0
- data/lib/sc2ai/unit_group.rb +277 -0
- data/lib/sc2ai/version.rb +2 -1
- data/lib/sc2ai.rb +93 -2
- data/lib/templates/ladderzip/bin/ladder.tt +23 -0
- data/lib/templates/new/.ladderignore +20 -0
- data/lib/templates/new/Gemfile.tt +7 -0
- data/lib/templates/new/api/common.proto +59 -0
- data/lib/templates/new/api/data.proto +120 -0
- data/lib/templates/new/api/debug.proto +127 -0
- data/lib/templates/new/api/error.proto +221 -0
- data/lib/templates/new/api/query.proto +55 -0
- data/lib/templates/new/api/raw.proto +202 -0
- data/lib/templates/new/api/sc2api.proto +718 -0
- data/lib/templates/new/api/score.proto +108 -0
- data/lib/templates/new/api/spatial.proto +115 -0
- data/lib/templates/new/api/ui.proto +145 -0
- data/lib/templates/new/boot.rb.tt +6 -0
- data/lib/templates/new/my_bot.rb.tt +23 -0
- data/lib/templates/new/run_example_match.rb.tt +14 -0
- metadata +353 -9
@@ -0,0 +1,718 @@
|
|
1
|
+
|
2
|
+
syntax = "proto2";
|
3
|
+
|
4
|
+
package Api;
|
5
|
+
|
6
|
+
import "sc2ai/protocol/common.proto";
|
7
|
+
import "sc2ai/protocol/data.proto";
|
8
|
+
import "sc2ai/protocol/debug.proto";
|
9
|
+
import "sc2ai/protocol/error.proto";
|
10
|
+
import "sc2ai/protocol/query.proto";
|
11
|
+
import "sc2ai/protocol/raw.proto";
|
12
|
+
import "sc2ai/protocol/score.proto";
|
13
|
+
import "sc2ai/protocol/spatial.proto";
|
14
|
+
import "sc2ai/protocol/ui.proto";
|
15
|
+
|
16
|
+
//
|
17
|
+
// Notes:
|
18
|
+
// Single player flow:
|
19
|
+
// 1) Call Request.create_game with a valid single player map (a multiplayer map will end right away).
|
20
|
+
// 2) Call Request.join_game, wait for the response.
|
21
|
+
// 3) Request.end will terminate the game. Observations can still be made.
|
22
|
+
// Multi-player flow:
|
23
|
+
// 1) Launch two game instances with separate ports.
|
24
|
+
// 2) Designate a host, and Request.create_game with a multiplayer map.
|
25
|
+
// 3) Call Request.join on BOTH clients. Join will block until both clients connect.
|
26
|
+
// 4) Wait for a response from both clients. They can now play/step.
|
27
|
+
// 5) Steps should be syncronized. One client may time out if they are not. Multiple step sizes are ok.
|
28
|
+
// 4) Call Request.leave at any point or when the game ends. Observations will not be valid after this.
|
29
|
+
//
|
30
|
+
// States:
|
31
|
+
//
|
32
|
+
//------------------|---------------------------------------------------|-----------------------|
|
33
|
+
// Request | Valid in State | Transition to State |
|
34
|
+
//------------------|---------------------------------------------------|-----------------------|
|
35
|
+
// create_game | launched | init_game |
|
36
|
+
// | ended (singleplayer only) | init_game |
|
37
|
+
// join_game* | init_game (singleplayer or multiplayer host only) | in_game |
|
38
|
+
// | launched (multiplayer client only) | in_game |
|
39
|
+
// restart_game | ended | in_game |
|
40
|
+
// start_replay | launched | in_replay |
|
41
|
+
// | ended (singleplayer only) | |
|
42
|
+
// leave_game | in_game (required when finishing multiplayer) | launched |
|
43
|
+
// quick_save | in_game | |
|
44
|
+
// quick_load | in_game | |
|
45
|
+
// | ended | |
|
46
|
+
// quit | any | quit (not sent) |
|
47
|
+
// game_info | in_game | |
|
48
|
+
// | in_replay | |
|
49
|
+
// | ended | |
|
50
|
+
// observation | in_game | |
|
51
|
+
// | in_replay | |
|
52
|
+
// | ended | |
|
53
|
+
// step* | in_game (not available in realtime mode) | in_game |
|
54
|
+
// | in_replay | ended |
|
55
|
+
// action | in_game (not available to observers) | |
|
56
|
+
// obs_action | in_game (only for observers) | |
|
57
|
+
// | in_replay | |
|
58
|
+
// data | in_game | |
|
59
|
+
// | in_replay | |
|
60
|
+
// | ended | |
|
61
|
+
// query | in_game | |
|
62
|
+
// | in_replay | |
|
63
|
+
// | ended | |
|
64
|
+
// save_replay | in_game | |
|
65
|
+
// | ended (only after a game) | |
|
66
|
+
// map_command | in_game | |
|
67
|
+
// replay_info | any | |
|
68
|
+
// available_maps | any | |
|
69
|
+
// save_map | any | |
|
70
|
+
// ping | any | |
|
71
|
+
// debug | in_game | various |
|
72
|
+
//------------------|---------------------------------------------------|-----------------------|
|
73
|
+
//
|
74
|
+
// * In multiplayer, these require synchronization between clients.
|
75
|
+
//
|
76
|
+
// Notes:
|
77
|
+
// - if a request fails, the game remains in the current state.
|
78
|
+
//
|
79
|
+
|
80
|
+
//
|
81
|
+
// Request/Response
|
82
|
+
//
|
83
|
+
|
84
|
+
message Request {
|
85
|
+
oneof request {
|
86
|
+
// Game Setup
|
87
|
+
RequestCreateGame create_game = 1; // Send to host to initialize game.
|
88
|
+
RequestJoinGame join_game = 2; // Send to host and all clients for game to begin.
|
89
|
+
RequestRestartGame restart_game = 3; // Single player only. Reinitializes the game with the same player setup.
|
90
|
+
RequestStartReplay start_replay = 4; // Start playing a replay.
|
91
|
+
RequestLeaveGame leave_game = 5; // Multiplayer only. Disconnects from a multiplayer game, equivalent to surrender.
|
92
|
+
|
93
|
+
RequestQuickSave quick_save = 6; // Saves game to an in-memory bookmark.
|
94
|
+
RequestQuickLoad quick_load = 7; // Loads from an in-memory bookmark.
|
95
|
+
|
96
|
+
RequestQuit quit = 8; // Terminates the application.
|
97
|
+
|
98
|
+
// During Game
|
99
|
+
RequestGameInfo game_info = 9; // Static data about the current game and map.
|
100
|
+
RequestObservation observation = 10; // Snapshot of the current game state.
|
101
|
+
RequestAction action = 11; // Executes an action for a participant.
|
102
|
+
RequestObserverAction obs_action = 21; // Executes an action for an observer.
|
103
|
+
RequestStep step = 12; // Advances the game simulation.
|
104
|
+
RequestData data = 13; // Data about different gameplay elements. May be different for different games.
|
105
|
+
RequestQuery query = 14; // Additional methods for inspecting game state.
|
106
|
+
RequestSaveReplay save_replay = 15; // Generates a replay.
|
107
|
+
RequestMapCommand map_command = 22; // Execute a particular trigger through a string interface
|
108
|
+
|
109
|
+
// Other.
|
110
|
+
RequestReplayInfo replay_info = 16; // Returns metadata about a replay file. Does not load the replay.
|
111
|
+
RequestAvailableMaps available_maps = 17; // Returns directory of maps that can be played on.
|
112
|
+
RequestSaveMap save_map = 18; // Saves binary map data to the local temp directory.
|
113
|
+
|
114
|
+
// Debugging
|
115
|
+
RequestPing ping = 19; // Network ping for testing connection.
|
116
|
+
RequestDebug debug = 20; // Display debug information and execute debug actions.
|
117
|
+
}
|
118
|
+
optional uint32 id = 97;
|
119
|
+
}
|
120
|
+
|
121
|
+
message Response {
|
122
|
+
oneof response {
|
123
|
+
ResponseCreateGame create_game = 1;
|
124
|
+
ResponseJoinGame join_game = 2;
|
125
|
+
ResponseRestartGame restart_game = 3;
|
126
|
+
ResponseStartReplay start_replay = 4;
|
127
|
+
ResponseLeaveGame leave_game = 5;
|
128
|
+
|
129
|
+
ResponseQuickSave quick_save = 6;
|
130
|
+
ResponseQuickLoad quick_load = 7;
|
131
|
+
|
132
|
+
ResponseQuit quit = 8;
|
133
|
+
|
134
|
+
ResponseGameInfo game_info = 9;
|
135
|
+
ResponseObservation observation = 10;
|
136
|
+
ResponseAction action = 11;
|
137
|
+
ResponseObserverAction obs_action = 21;
|
138
|
+
ResponseStep step = 12;
|
139
|
+
ResponseData data = 13;
|
140
|
+
ResponseQuery query = 14;
|
141
|
+
ResponseSaveReplay save_replay = 15;
|
142
|
+
|
143
|
+
ResponseReplayInfo replay_info = 16;
|
144
|
+
ResponseAvailableMaps available_maps = 17;
|
145
|
+
ResponseSaveMap save_map = 18;
|
146
|
+
ResponseMapCommand map_command = 22;
|
147
|
+
|
148
|
+
// Debugging
|
149
|
+
ResponsePing ping = 19;
|
150
|
+
ResponseDebug debug = 20;
|
151
|
+
}
|
152
|
+
optional uint32 id = 97;
|
153
|
+
repeated string error = 98; // If command is missing, this will contain the error. Otherwise this will contain any warnings.
|
154
|
+
optional Status status = 99; // Should be sent back with all responses.
|
155
|
+
}
|
156
|
+
|
157
|
+
enum Status {
|
158
|
+
launched = 1; // Game has been launch and is not yet doing anything.
|
159
|
+
init_game = 2; // Create game has been called, and the host is awaiting players.
|
160
|
+
in_game = 3; // In a single or multiplayer game.
|
161
|
+
in_replay = 4; // In a replay.
|
162
|
+
ended = 5; // Game has ended, can still request game info, but ready for a new game.
|
163
|
+
quit = 6; // Application is shutting down.
|
164
|
+
unknown = 99; // Should not happen, but indicates an error if it occurs.
|
165
|
+
}
|
166
|
+
|
167
|
+
//-----------------------------------------------------------------------------
|
168
|
+
// If successful, puts the game into the status: init_game.
|
169
|
+
// The next expected request should be RequestJoinGame. Can also quit (exit).
|
170
|
+
message RequestCreateGame {
|
171
|
+
oneof Map {
|
172
|
+
LocalMap local_map = 1; // Local .SC2Map file
|
173
|
+
string battlenet_map_name = 2; // Map published to BattleNet
|
174
|
+
}
|
175
|
+
|
176
|
+
repeated PlayerSetup player_setup = 3;
|
177
|
+
|
178
|
+
optional bool disable_fog = 4;
|
179
|
+
|
180
|
+
optional uint32 random_seed = 5; // Sets the pseudo-random seed for the game.
|
181
|
+
optional bool realtime = 6; // If set, the game plays in real time.
|
182
|
+
}
|
183
|
+
|
184
|
+
message LocalMap {
|
185
|
+
// A map can be specified either by a file path or the data of the .SC2Map file.
|
186
|
+
// If you provide both, it will play the game using map_data and store map_path
|
187
|
+
// into the replay. (260 character max)
|
188
|
+
optional string map_path = 1;
|
189
|
+
optional bytes map_data = 7;
|
190
|
+
}
|
191
|
+
|
192
|
+
message ResponseCreateGame {
|
193
|
+
enum Error {
|
194
|
+
MissingMap = 1;
|
195
|
+
InvalidMapPath = 2;
|
196
|
+
InvalidMapData = 3;
|
197
|
+
InvalidMapName = 4;
|
198
|
+
InvalidMapHandle = 5;
|
199
|
+
MissingPlayerSetup = 6;
|
200
|
+
InvalidPlayerSetup = 7;
|
201
|
+
MultiplayerUnsupported = 8; // Multiplayer is not supported in the current build.
|
202
|
+
}
|
203
|
+
optional Error error = 1;
|
204
|
+
optional string error_details = 2;
|
205
|
+
}
|
206
|
+
|
207
|
+
//-----------------------------------------------------------------------------
|
208
|
+
// If successful, puts the game into the status: in_game. Will be able to
|
209
|
+
// request actions, observations and step the game.
|
210
|
+
message RequestJoinGame {
|
211
|
+
oneof participation {
|
212
|
+
Race race = 1; // Join as participant
|
213
|
+
uint32 observed_player_id = 2; // Join as observer
|
214
|
+
}
|
215
|
+
|
216
|
+
optional InterfaceOptions options = 3; // This is limited to what is specified in RequestCreateGame, but you can request less information if you want.
|
217
|
+
optional PortSet server_ports = 4; // Do not set in the single-player case. This is the port a server will use.
|
218
|
+
repeated PortSet client_ports = 5; // Do not set in the single-player case. These are the ports clients will use to initialize communication.
|
219
|
+
// Currently only a singe client is supported.
|
220
|
+
optional int32 shared_port = 6; // deprecated
|
221
|
+
optional string player_name = 7; // Use this to set the player's name to something other than autogenerated name.
|
222
|
+
optional string host_ip = 8; // Both game creator and joiner should provide the ip address of the game creator in order to play remotely. Defaults to localhost.
|
223
|
+
}
|
224
|
+
|
225
|
+
message PortSet {
|
226
|
+
optional int32 game_port = 1; // Game right now needs two internal ports to establish a multiplay game on the local host.
|
227
|
+
optional int32 base_port = 2;
|
228
|
+
}
|
229
|
+
|
230
|
+
message ResponseJoinGame {
|
231
|
+
optional uint32 player_id = 1;
|
232
|
+
|
233
|
+
enum Error {
|
234
|
+
MissingParticipation = 1;
|
235
|
+
InvalidObservedPlayerId = 2;
|
236
|
+
MissingOptions = 3;
|
237
|
+
MissingPorts = 4;
|
238
|
+
GameFull = 5;
|
239
|
+
LaunchError = 6;
|
240
|
+
|
241
|
+
// Multiplayer specific.
|
242
|
+
FeatureUnsupported = 7; // Multiplayer is not supported in the current build for the requested features.
|
243
|
+
NoSpaceForUser = 8;
|
244
|
+
MapDoesNotExist = 9;
|
245
|
+
CannotOpenMap = 10;
|
246
|
+
ChecksumError = 11;
|
247
|
+
NetworkError = 12;
|
248
|
+
OtherError = 13;
|
249
|
+
}
|
250
|
+
optional Error error = 2;
|
251
|
+
optional string error_details = 3;
|
252
|
+
}
|
253
|
+
|
254
|
+
//-----------------------------------------------------------------------------
|
255
|
+
message RequestRestartGame {
|
256
|
+
}
|
257
|
+
|
258
|
+
// The defaultRestartGameLoops is specified to be (1<<18) by default
|
259
|
+
message ResponseRestartGame {
|
260
|
+
enum Error {
|
261
|
+
LaunchError = 1;
|
262
|
+
}
|
263
|
+
optional Error error = 1;
|
264
|
+
optional string error_details = 2;
|
265
|
+
optional bool need_hard_reset = 3; // This will occur once the simulation_loop is greater then defaultRestartGameLoops
|
266
|
+
}
|
267
|
+
|
268
|
+
//-----------------------------------------------------------------------------
|
269
|
+
message RequestStartReplay {
|
270
|
+
oneof replay {
|
271
|
+
string replay_path = 1;
|
272
|
+
bytes replay_data = 5;
|
273
|
+
}
|
274
|
+
optional bytes map_data = 6; // Overrides the map path stored in the replay.
|
275
|
+
optional int32 observed_player_id = 2;
|
276
|
+
optional InterfaceOptions options = 3;
|
277
|
+
|
278
|
+
optional bool disable_fog = 4;
|
279
|
+
optional bool realtime = 7;
|
280
|
+
optional bool record_replay = 8; // Allow RequestSaveReplay from a replay. Useful for truncating a replay, or restoring tracker.events.
|
281
|
+
}
|
282
|
+
|
283
|
+
message ResponseStartReplay {
|
284
|
+
enum Error {
|
285
|
+
MissingReplay = 1;
|
286
|
+
InvalidReplayPath = 2;
|
287
|
+
InvalidReplayData = 3;
|
288
|
+
InvalidMapData = 4;
|
289
|
+
InvalidObservedPlayerId = 5;
|
290
|
+
MissingOptions = 6;
|
291
|
+
LaunchError = 7;
|
292
|
+
}
|
293
|
+
optional Error error = 1;
|
294
|
+
optional string error_details = 2;
|
295
|
+
}
|
296
|
+
|
297
|
+
//-----------------------------------------------------------------------------
|
298
|
+
message RequestMapCommand {
|
299
|
+
optional string trigger_cmd = 1;
|
300
|
+
}
|
301
|
+
|
302
|
+
message ResponseMapCommand {
|
303
|
+
enum Error {
|
304
|
+
NoTriggerError = 1;
|
305
|
+
}
|
306
|
+
optional Error error = 1;
|
307
|
+
optional string error_details = 2;
|
308
|
+
}
|
309
|
+
|
310
|
+
//-----------------------------------------------------------------------------
|
311
|
+
message RequestLeaveGame {
|
312
|
+
}
|
313
|
+
|
314
|
+
message ResponseLeaveGame {
|
315
|
+
}
|
316
|
+
|
317
|
+
//-----------------------------------------------------------------------------
|
318
|
+
message RequestQuickSave {
|
319
|
+
}
|
320
|
+
|
321
|
+
//-----------------------------------------------------------------------------
|
322
|
+
message ResponseQuickSave {
|
323
|
+
}
|
324
|
+
|
325
|
+
//-----------------------------------------------------------------------------
|
326
|
+
message RequestQuickLoad {
|
327
|
+
}
|
328
|
+
|
329
|
+
//-----------------------------------------------------------------------------
|
330
|
+
message ResponseQuickLoad {
|
331
|
+
}
|
332
|
+
|
333
|
+
//-----------------------------------------------------------------------------
|
334
|
+
message RequestQuit {
|
335
|
+
}
|
336
|
+
|
337
|
+
message ResponseQuit {
|
338
|
+
}
|
339
|
+
|
340
|
+
//-----------------------------------------------------------------------------
|
341
|
+
message RequestGameInfo {
|
342
|
+
}
|
343
|
+
|
344
|
+
message ResponseGameInfo {
|
345
|
+
optional string map_name = 1;
|
346
|
+
repeated string mod_names = 6;
|
347
|
+
optional string local_map_path = 2;
|
348
|
+
repeated PlayerInfo player_info = 3;
|
349
|
+
optional StartRaw start_raw = 4; // Populated if Raw interface is enabled.
|
350
|
+
optional InterfaceOptions options = 5;
|
351
|
+
}
|
352
|
+
|
353
|
+
//-----------------------------------------------------------------------------
|
354
|
+
message RequestObservation {
|
355
|
+
optional bool disable_fog = 1;
|
356
|
+
optional uint32 game_loop = 2; // In realtime the request will only return once the simulation game loop has reached this value. When not realtime this value is ignored.
|
357
|
+
}
|
358
|
+
|
359
|
+
message ResponseObservation {
|
360
|
+
repeated Action actions = 1; // Actions this player did since the last Observation.
|
361
|
+
repeated ActionError action_errors = 2; // Equivalent of UI "red text" errors.
|
362
|
+
optional Observation observation = 3;
|
363
|
+
repeated PlayerResult player_result = 4; // Only populated if the game ended during this step.
|
364
|
+
repeated ChatReceived chat = 5;
|
365
|
+
}
|
366
|
+
|
367
|
+
message ChatReceived {
|
368
|
+
optional uint32 player_id = 1;
|
369
|
+
optional string message = 2;
|
370
|
+
}
|
371
|
+
|
372
|
+
//-----------------------------------------------------------------------------
|
373
|
+
message RequestAction {
|
374
|
+
repeated Action actions = 1;
|
375
|
+
}
|
376
|
+
|
377
|
+
message ResponseAction {
|
378
|
+
repeated ActionResult result = 1;
|
379
|
+
}
|
380
|
+
|
381
|
+
//-----------------------------------------------------------------------------
|
382
|
+
message RequestObserverAction {
|
383
|
+
repeated ObserverAction actions = 1;
|
384
|
+
}
|
385
|
+
|
386
|
+
message ResponseObserverAction {
|
387
|
+
|
388
|
+
}
|
389
|
+
|
390
|
+
//-----------------------------------------------------------------------------
|
391
|
+
message RequestStep {
|
392
|
+
optional uint32 count = 1; // Number of game loops to simulate for the next frame.
|
393
|
+
}
|
394
|
+
|
395
|
+
message ResponseStep {
|
396
|
+
// Max simulation_loop is (1<<19) before "end of time" will occur
|
397
|
+
// The "end of time" is classified as the maximum number of game loops or absolute game time
|
398
|
+
// representable as a positive fixed point number.
|
399
|
+
// When we reach the "end of time", permanently pause the game and end the game for all.
|
400
|
+
optional uint32 simulation_loop = 1;
|
401
|
+
}
|
402
|
+
|
403
|
+
//-----------------------------------------------------------------------------
|
404
|
+
message RequestData {
|
405
|
+
optional bool ability_id = 1;
|
406
|
+
optional bool unit_type_id = 2;
|
407
|
+
optional bool upgrade_id = 3;
|
408
|
+
optional bool buff_id = 4;
|
409
|
+
optional bool effect_id = 5;
|
410
|
+
}
|
411
|
+
|
412
|
+
message ResponseData {
|
413
|
+
repeated AbilityData abilities = 1;
|
414
|
+
repeated UnitTypeData units = 2;
|
415
|
+
repeated UpgradeData upgrades = 3;
|
416
|
+
repeated BuffData buffs = 4;
|
417
|
+
repeated EffectData effects = 5;
|
418
|
+
}
|
419
|
+
|
420
|
+
//-----------------------------------------------------------------------------
|
421
|
+
message RequestSaveReplay {
|
422
|
+
}
|
423
|
+
|
424
|
+
message ResponseSaveReplay {
|
425
|
+
optional bytes data = 1;
|
426
|
+
}
|
427
|
+
|
428
|
+
//-----------------------------------------------------------------------------
|
429
|
+
message RequestReplayInfo {
|
430
|
+
oneof replay {
|
431
|
+
string replay_path = 1; // Limitation: might fail if the replay file is currently loaded.
|
432
|
+
bytes replay_data = 2;
|
433
|
+
}
|
434
|
+
optional bool download_data = 3; // Ensure the data and binary are downloaded if this is an old version replay.
|
435
|
+
}
|
436
|
+
|
437
|
+
message PlayerInfoExtra {
|
438
|
+
optional PlayerInfo player_info = 1;
|
439
|
+
optional PlayerResult player_result = 2;
|
440
|
+
optional int32 player_mmr = 3;
|
441
|
+
optional int32 player_apm = 4;
|
442
|
+
}
|
443
|
+
|
444
|
+
message ResponseReplayInfo {
|
445
|
+
optional string map_name = 1;
|
446
|
+
optional string local_map_path = 2;
|
447
|
+
repeated PlayerInfoExtra player_info = 3;
|
448
|
+
optional uint32 game_duration_loops = 4;
|
449
|
+
optional float game_duration_seconds = 5;
|
450
|
+
optional string game_version = 6;
|
451
|
+
optional string data_version = 11;
|
452
|
+
optional uint32 data_build = 7;
|
453
|
+
optional uint32 base_build = 8;
|
454
|
+
|
455
|
+
enum Error {
|
456
|
+
MissingReplay = 1;
|
457
|
+
InvalidReplayPath = 2;
|
458
|
+
InvalidReplayData = 3;
|
459
|
+
ParsingError = 4;
|
460
|
+
DownloadError = 5;
|
461
|
+
}
|
462
|
+
optional Error error = 9;
|
463
|
+
optional string error_details = 10;
|
464
|
+
}
|
465
|
+
|
466
|
+
//-----------------------------------------------------------------------------
|
467
|
+
message RequestAvailableMaps {
|
468
|
+
}
|
469
|
+
|
470
|
+
// This will only contain locally cached BattleNet maps.
|
471
|
+
// To download all ladder maps, log in and queue into a ladder match.
|
472
|
+
// To download any other map, play a custom game on that map.
|
473
|
+
message ResponseAvailableMaps {
|
474
|
+
repeated string local_map_paths = 1; // All the maps in the "Maps/" directory.
|
475
|
+
repeated string battlenet_map_names = 2; // All the maps in the BattleNet cache.
|
476
|
+
}
|
477
|
+
|
478
|
+
//-----------------------------------------------------------------------------
|
479
|
+
// Copies map data into the path specified.
|
480
|
+
message RequestSaveMap {
|
481
|
+
optional string map_path = 1; // Path the game process will write to, relative to the temp directory. (260 character max)
|
482
|
+
optional bytes map_data = 2; // Binary map data of a .SC2Map.
|
483
|
+
}
|
484
|
+
|
485
|
+
message ResponseSaveMap {
|
486
|
+
enum Error {
|
487
|
+
InvalidMapData = 1;
|
488
|
+
}
|
489
|
+
optional Error error = 1;
|
490
|
+
}
|
491
|
+
|
492
|
+
//-----------------------------------------------------------------------------
|
493
|
+
message RequestPing {
|
494
|
+
}
|
495
|
+
|
496
|
+
message ResponsePing {
|
497
|
+
optional string game_version = 1;
|
498
|
+
optional string data_version = 2;
|
499
|
+
optional uint32 data_build = 3;
|
500
|
+
optional uint32 base_build = 4;
|
501
|
+
}
|
502
|
+
|
503
|
+
//-----------------------------------------------------------------------------
|
504
|
+
message RequestDebug {
|
505
|
+
repeated DebugCommand debug = 1;
|
506
|
+
}
|
507
|
+
|
508
|
+
message ResponseDebug {
|
509
|
+
}
|
510
|
+
|
511
|
+
|
512
|
+
//
|
513
|
+
// Game Setup
|
514
|
+
//
|
515
|
+
|
516
|
+
enum Difficulty {
|
517
|
+
VeryEasy = 1;
|
518
|
+
Easy = 2;
|
519
|
+
Medium = 3;
|
520
|
+
MediumHard = 4;
|
521
|
+
Hard = 5;
|
522
|
+
Harder = 6;
|
523
|
+
VeryHard = 7;
|
524
|
+
CheatVision = 8;
|
525
|
+
CheatMoney = 9;
|
526
|
+
CheatInsane = 10;
|
527
|
+
}
|
528
|
+
|
529
|
+
enum PlayerType {
|
530
|
+
Participant = 1;
|
531
|
+
Computer = 2;
|
532
|
+
Observer = 3;
|
533
|
+
}
|
534
|
+
|
535
|
+
enum AIBuild {
|
536
|
+
RandomBuild = 1;
|
537
|
+
Rush = 2;
|
538
|
+
Timing = 3;
|
539
|
+
Power = 4;
|
540
|
+
Macro = 5;
|
541
|
+
Air = 6;
|
542
|
+
}
|
543
|
+
|
544
|
+
message PlayerSetup {
|
545
|
+
optional PlayerType type = 1;
|
546
|
+
|
547
|
+
// Only used for a computer player.
|
548
|
+
optional Race race = 2;
|
549
|
+
optional Difficulty difficulty = 3;
|
550
|
+
optional string player_name = 4;
|
551
|
+
optional AIBuild ai_build = 5;
|
552
|
+
}
|
553
|
+
|
554
|
+
message SpatialCameraSetup {
|
555
|
+
optional Size2DI resolution = 2;
|
556
|
+
optional Size2DI minimap_resolution = 3;
|
557
|
+
|
558
|
+
// Below are only relevant for feature layers.
|
559
|
+
optional float width = 1; // Set the screen camera width in world units.
|
560
|
+
optional bool crop_to_playable_area = 4; // Crop minimap to the playable area.
|
561
|
+
optional bool allow_cheating_layers = 5; // Return unit_type on the minimap, and potentially other cheating layers.
|
562
|
+
}
|
563
|
+
|
564
|
+
message InterfaceOptions {
|
565
|
+
// Interface options
|
566
|
+
optional bool raw = 1;
|
567
|
+
optional bool score = 2;
|
568
|
+
optional SpatialCameraSetup feature_layer = 3; // Omit to disable.
|
569
|
+
optional SpatialCameraSetup render = 4; // Omit to disable.
|
570
|
+
optional bool show_cloaked = 5; // By default cloaked units are completely hidden. This shows some details.
|
571
|
+
optional bool show_burrowed_shadows = 9; // By default burrowed units are completely hidden. This shows some details for those that produce a shadow.
|
572
|
+
optional bool show_placeholders = 8; // Return placeholder units (buildings to be constructed), both for raw and feature layers.
|
573
|
+
|
574
|
+
// By default raw actions select, act and revert the selection. This is useful
|
575
|
+
// if you're playing simultaneously with the agent so it doesn't steal your
|
576
|
+
// selection. This inflates APM (due to deselect) and makes the actions hard
|
577
|
+
// to follow in a replay. Setting this to true will cause raw actions to do
|
578
|
+
// select, act, but not revert the selection.
|
579
|
+
optional bool raw_affects_selection = 6;
|
580
|
+
|
581
|
+
// Changes the coordinates in raw.proto to be relative to the playable area.
|
582
|
+
// The map_size and playable_area will be the diagonal of the real playable area.
|
583
|
+
optional bool raw_crop_to_playable_area = 7;
|
584
|
+
}
|
585
|
+
|
586
|
+
message PlayerInfo {
|
587
|
+
// Identifier that will be used to reference this player.
|
588
|
+
// SC2 will always assign playerIds starting from 1 in standard Melee maps. This may not be true in custom maps.
|
589
|
+
optional uint32 player_id = 1;
|
590
|
+
optional PlayerType type = 2;
|
591
|
+
optional Race race_requested = 3;
|
592
|
+
optional Race race_actual = 4; // Only populated for your player or when watching replay
|
593
|
+
optional Difficulty difficulty = 5;
|
594
|
+
optional AIBuild ai_build = 7;
|
595
|
+
optional string player_name = 6;
|
596
|
+
}
|
597
|
+
|
598
|
+
|
599
|
+
//
|
600
|
+
// During Game
|
601
|
+
//
|
602
|
+
|
603
|
+
message PlayerCommon {
|
604
|
+
optional uint32 player_id = 1;
|
605
|
+
optional uint32 minerals = 2;
|
606
|
+
optional uint32 vespene = 3;
|
607
|
+
optional uint32 food_cap = 4;
|
608
|
+
optional uint32 food_used = 5;
|
609
|
+
optional uint32 food_army = 6;
|
610
|
+
optional uint32 food_workers = 7;
|
611
|
+
optional uint32 idle_worker_count = 8;
|
612
|
+
optional uint32 army_count = 9;
|
613
|
+
optional uint32 warp_gate_count = 10;
|
614
|
+
optional uint32 larva_count = 11;
|
615
|
+
}
|
616
|
+
|
617
|
+
message Observation {
|
618
|
+
optional uint32 game_loop = 9;
|
619
|
+
optional PlayerCommon player_common = 1;
|
620
|
+
repeated Alert alerts = 10;
|
621
|
+
repeated AvailableAbility abilities = 3; // Abilities available in the selection. Enabled if in this list, disabled otherwise.
|
622
|
+
optional Score score = 4;
|
623
|
+
|
624
|
+
optional ObservationRaw raw_data = 5; // Populated if Raw interface is enabled.
|
625
|
+
optional ObservationFeatureLayer feature_layer_data = 6; // Populated if Feature Layer interface is enabled.
|
626
|
+
optional ObservationRender render_data = 7; // Populated if Render interface is enabled.
|
627
|
+
optional ObservationUI ui_data = 8; // Populated if Feature Layer or Render interface is enabled.
|
628
|
+
}
|
629
|
+
|
630
|
+
message Action {
|
631
|
+
optional ActionRaw action_raw = 1; // Populated if Raw interface is enabled.
|
632
|
+
optional ActionSpatial action_feature_layer = 2; // Populated if Feature Layer interface is enabled.
|
633
|
+
optional ActionSpatial action_render = 3; // Not implemented. Populated if Render interface is enabled.
|
634
|
+
optional ActionUI action_ui = 4; // Populated if Feature Layer or Render interface is enabled.
|
635
|
+
optional ActionChat action_chat = 6; // Chat messages as a player typing into the chat channel.
|
636
|
+
optional uint32 game_loop = 7; // Populated for actions in ResponseObservation. The game loop on which the action was executed.
|
637
|
+
}
|
638
|
+
|
639
|
+
message ActionChat {
|
640
|
+
enum Channel {
|
641
|
+
Broadcast = 1;
|
642
|
+
Team = 2;
|
643
|
+
}
|
644
|
+
optional Channel channel = 1;
|
645
|
+
optional string message = 2;
|
646
|
+
}
|
647
|
+
|
648
|
+
message ActionError {
|
649
|
+
optional uint64 unit_tag = 1; // Only populated when using raw interface.
|
650
|
+
optional uint64 ability_id = 2;
|
651
|
+
optional ActionResult result = 3;
|
652
|
+
}
|
653
|
+
|
654
|
+
message ObserverAction {
|
655
|
+
oneof action {
|
656
|
+
ActionObserverPlayerPerspective player_perspective = 1; // Not implemented
|
657
|
+
ActionObserverCameraMove camera_move = 2;
|
658
|
+
ActionObserverCameraFollowPlayer camera_follow_player = 3;
|
659
|
+
ActionObserverCameraFollowUnits camera_follow_units = 4; // Not implemented
|
660
|
+
}
|
661
|
+
}
|
662
|
+
|
663
|
+
message ActionObserverPlayerPerspective {
|
664
|
+
optional uint32 player_id = 1; // 0 to observe "Everyone"
|
665
|
+
}
|
666
|
+
|
667
|
+
message ActionObserverCameraMove {
|
668
|
+
optional Point2D world_pos = 1;
|
669
|
+
|
670
|
+
// Distance between camera and terrain. Larger value zooms out camera.
|
671
|
+
// Defaults to standard camera distance if set to 0.
|
672
|
+
optional float distance = 2;
|
673
|
+
}
|
674
|
+
|
675
|
+
message ActionObserverCameraFollowPlayer {
|
676
|
+
optional uint32 player_id = 1; // Not implemented. Value must be [1, 15]
|
677
|
+
}
|
678
|
+
|
679
|
+
message ActionObserverCameraFollowUnits {
|
680
|
+
repeated uint64 unit_tags = 1;
|
681
|
+
}
|
682
|
+
|
683
|
+
enum Alert {
|
684
|
+
AlertError = 3;
|
685
|
+
AddOnComplete = 4;
|
686
|
+
BuildingComplete = 5;
|
687
|
+
BuildingUnderAttack = 6;
|
688
|
+
LarvaHatched = 7;
|
689
|
+
MergeComplete = 8;
|
690
|
+
MineralsExhausted = 9;
|
691
|
+
MorphComplete = 10;
|
692
|
+
MothershipComplete = 11;
|
693
|
+
MULEExpired = 12;
|
694
|
+
NuclearLaunchDetected = 1;
|
695
|
+
NukeComplete = 13;
|
696
|
+
NydusWormDetected = 2;
|
697
|
+
ResearchComplete = 14;
|
698
|
+
TrainError = 15;
|
699
|
+
TrainUnitComplete = 16;
|
700
|
+
TrainWorkerComplete = 17;
|
701
|
+
TransformationComplete = 18;
|
702
|
+
UnitUnderAttack = 19;
|
703
|
+
UpgradeComplete = 20;
|
704
|
+
VespeneExhausted = 21;
|
705
|
+
WarpInComplete = 22;
|
706
|
+
}
|
707
|
+
|
708
|
+
enum Result {
|
709
|
+
Victory = 1;
|
710
|
+
Defeat = 2;
|
711
|
+
Tie = 3;
|
712
|
+
Undecided = 4;
|
713
|
+
}
|
714
|
+
|
715
|
+
message PlayerResult {
|
716
|
+
optional uint32 player_id = 1;
|
717
|
+
optional Result result = 2;
|
718
|
+
}
|