forked from RLBot/flatbuffers-schema
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmatchconfig.fbs
414 lines (379 loc) · 11.2 KB
/
matchconfig.fbs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
namespace rlbot.flat;
/// A bot controlled by the RLBot framework.
table CustomBot {}
/// A normal human player.
table Human {}
/// Various skill levels of Psyonix bots.
enum PsyonixSkill : ubyte {
Beginner,
Rookie,
Pro,
AllStar
}
/// A Psyonix bot, e.g. All Star bot.
table Psyonix {
bot_skill:PsyonixSkill;
}
/// A player that Rocket League treats as human, e.g. has a dedicated camera and can do training mode,
/// but is actually controlled by a bot.
table PartyMember {}
/// Possible player types.
union PlayerClass { CustomBot, Human, Psyonix, PartyMember }
/// Defines the car type, color, and other aspects of the player's appearance.
/// See https://wiki.rlbot.org/botmaking/bot-customization/
table PlayerLoadout {
team_color_id:uint;
custom_color_id:uint;
car_id:uint;
decal_id:uint;
wheels_id:uint;
boost_id:uint;
antenna_id:uint;
hat_id:uint;
paint_finish_id:uint;
custom_finish_id:uint;
engine_audio_id:uint;
trails_id:uint;
goal_explosion_id:uint;
loadout_paint:LoadoutPaint;
/// Sets the primary color of the car to the swatch that most closely matches the provided
/// RGB color value. If set, this overrides teamColorId.
primary_color_lookup:Color;
/// Sets the secondary color of the car to the swatch that most closely matches the provided
/// RGB color value. If set, this overrides customColorId.
secondary_color_lookup:Color;
}
/// Specification for 'painted' items. See https://wiki.rlbot.org/botmaking/bot-customization/
table LoadoutPaint {
car_paint_id:uint;
decal_paint_id:uint;
wheels_paint_id:uint;
boost_paint_id:uint;
antenna_paint_id:uint;
hat_paint_id:uint;
trails_paint_id:uint;
goal_explosion_paint_id:uint;
}
/// A PlayerConfiguration defines a player of a match.
table PlayerConfiguration {
/// The type of the player, i.e. human, Psyonix bot, or a custom bot.
// Cannot be named 'class' because that breaks Java.
// Cannot be named 'playerClass' because that breaks C#.
variety:PlayerClass (required);
/// The name of the player.
/// When match start, RLBot will ensure each bot has a unique name.
/// In other words, the MatchConfiguration sent upon match start may contain a "Nexto (2)" if there are two Nextos in the match.
name:string (required);
/// The team of the player. Blue is 0, orange is 1.
team:uint;
/// The root directory of the bot and the working directory for the run command.
root_dir:string (required);
/// The console command that starts this bot.
run_command:string (required);
/// The loadout of the player.
loadout:PlayerLoadout;
/// The spawn id of the player.
/// The value will be set by RLBot.
/// This value is mostly used internally to keep track of participants in the match.
/// The spawn id can be used to find the corresponding player in the GamePacket.
spawn_id:int;
/// A unique user-defined string that is used to connect clients to the right players/scripts.
/// If a bot/script has a run command, RLBot will pass this agent id to the process using an environment variable, RLBOT_AGENT_ID.
/// Upon connecting the process announces that it is responsible for this agent id and RLBot will pair the two.
/// The recommended format for agent ids is "developer_name/bot_name".
agent_id:string (required);
/// Whether this player is part of a hivemind bot where all players/cars are controlled by the same process.
/// Players in the hivemind must have the same name, team, run command, and agent id.
hivemind:bool;
}
/// Various game modes.
enum GameMode : ubyte {
Soccer,
Hoops,
Dropshot,
Hockey,
Rumble,
Heatseeker,
Gridiron,
Knockout
}
/// Match length mutator options.
enum MatchLengthMutator : ubyte {
FiveMinutes,
TenMinutes,
TwentyMinutes,
Unlimited
}
/// Max score mutator options.
enum MaxScoreMutator : ubyte {
Default,
OneGoal,
ThreeGoals,
FiveGoals,
SevenGoals,
Unlimited
}
/// Multi ball mutator options.
enum MultiBallMutator : ubyte {
One,
Two,
Four,
Six
}
/// Overtime mutator options.
enum OvertimeMutator : ubyte {
Unlimited,
FiveMaxFirstScore,
FiveMaxRandomTeam
}
/// Series length mutator options.
enum SeriesLengthMutator : ubyte {
Unlimited,
ThreeGames,
FiveGames,
SevenGames
}
/// Game speed mutator options.
enum GameSpeedMutator : ubyte {
Default,
SloMo,
TimeWarp
}
/// Ball max speed mutator options.
enum BallMaxSpeedMutator : ubyte {
Default,
Slow,
Fast,
SuperFast
}
/// Ball type mutator options.
enum BallTypeMutator : ubyte {
Default,
Cube,
Puck,
Basketball,
Beachball,
Anniversary,
Haunted,
Ekin,
SpookyCube
}
/// Ball weight mutator options.
enum BallWeightMutator : ubyte {
Default,
Light,
Heavy,
SuperLight,
CurveBall,
BeachBallCurve,
MagnusFutBall
}
/// Ball size mutator options.
enum BallSizeMutator : ubyte {
Default,
Small,
Medium,
Large,
Gigantic
}
/// Ball bounciness mutator options.
enum BallBouncinessMutator : ubyte {
Default,
Low,
High,
SuperHigh,
LowishBounciness,
}
/// Boost mutator options.
enum BoostMutator : ubyte {
NormalBoost,
UnlimitedBoost,
SlowRecharge,
RapidRecharge,
NoBoost
}
/// Rumble mutator options.
enum RumbleMutator : ubyte {
NoRumble, // Cannot be named None because that breaks Python.
DefaultRumble,
Slow,
Civilized,
DestructionDerby,
SpringLoaded,
SpikesOnly,
SpikeRush,
HauntedBallBeam,
Tactical,
BatmanRumble
}
/// Boost strength mutator options.
enum BoostStrengthMutator : ubyte {
One,
OneAndAHalf,
Two,
Five,
Ten
}
/// Gravity mutator options.
enum GravityMutator : ubyte {
Default,
Low,
High,
SuperHigh,
Reverse
}
/// Demolition mutator options.
enum DemolishMutator : ubyte {
Default,
Disabled,
FriendlyFire,
OnContact,
OnContactFF
}
/// Respawn time mutator options.
enum RespawnTimeMutator : ubyte {
ThreeSeconds,
TwoSeconds,
OneSecond,
DisableGoalReset
}
/// Max time mutator options.
enum MaxTimeMutator : ubyte {
Default,
ElevenMinutes
}
/// Game event mutator options.
enum GameEventMutator : ubyte {
Default,
Haunted,
Rugby
}
/// Audio mutator options.
enum AudioMutator : ubyte {
Default,
Haunted
}
/// All mutators options.
table MutatorSettings {
/// Duration of the match.
match_length:MatchLengthMutator;
/// Max score of match. If this score is reached, the team immediately wins.
max_score:MaxScoreMutator;
/// The number of balls.
multi_ball:MultiBallMutator;
/// The overtime rules and tiebreaker.
overtime:OvertimeMutator;
/// The series length (unsupported).
series_length:SeriesLengthMutator;
/// A game speed multiplier.
game_speed:GameSpeedMutator;
/// Ball max speed.
ball_max_speed:BallMaxSpeedMutator;
/// Ball type and shape.
ball_type:BallTypeMutator;
/// Ball weight and how much is curves.
ball_weight:BallWeightMutator;
/// Ball size.
ball_size:BallSizeMutator;
/// Ball bounciness.
ball_bounciness:BallBouncinessMutator;
/// Boost meter behaviour.
boost:BoostMutator;
/// Rumble item rules.
rumble:RumbleMutator;
/// Boost strength multiplier.
boost_strength:BoostStrengthMutator;
/// Strength of gravity.
gravity:GravityMutator;
/// Demolition conditions.
demolish:DemolishMutator;
/// Demolition respawn time.
respawn_time:RespawnTimeMutator;
/// Max real-time duration of match including kickoff, replays, and more.
/// If the score is tied upon time-out, the number of shots determine the winner.
max_time:MaxTimeMutator;
/// Additional game behaviour for custom modes.
game_event:GameEventMutator;
/// Additional audio options for custom modes.
audio:AudioMutator;
}
/// Possible behaviours when a match is started while another match is in progress.
enum ExistingMatchBehavior : ubyte {
/// Always restart the match, even if config is identical.
Restart,
/// Never restart an existing match if possible, just try to remove or spawn cars to match the configuration.
/// If we are not in the middle of a match, a match will be started. Handy for LAN matches.
ContinueAndSpawn,
/// Restart the match if any match settings differ.
/// No other otherwise.
RestartIfDifferent,
}
/// Possible to launch Rocket League.
enum Launcher : ubyte {
Steam,
Epic,
/// E.g. if you use Legendary.
/// The game path is specified in the MatchConfiguration.
Custom,
NoLaunch,
}
/// A ScriptConfiguration defines a script of a match.
table ScriptConfiguration {
/// The name of the script.
name:string (required);
/// The root directory of the script and the working directory for the run command.
root_dir:string (required);
/// A console command that will start up the script.
run_command:string (required);
/// The spawn id of the script.
/// This value is mostly used internally to keep track of participants in the match.
spawn_id:int;
/// A unique user-defined string that is used to connect clients to the right players/scripts.
/// If a bot/script has a run command, RLBot will pass this agent id to the process using an environment variable, RLBOT_AGENT_ID.
/// Upon connecting the process announces that it is responsible for this agent id and RLBot will pair the two.
/// The recommended format for agent ids is "developername/botname".
agent_id:string (required);
}
/// Definition of a match.
/// Can be sent to RLBot to request the start of a match.
table MatchConfiguration {
/// How to launch Rocket League.
/// If left unset, RLBot will not launch the game.
/// To use Legendary, use Custom and set launcher_arg="legendary".
launcher:Launcher;
/// Additional configuration for the launching method.
/// See launcher.
launcher_arg:string (required);
/// If true, RLBot will start the bots with a non-empty run command in their player configuration.
auto_start_bots:bool;
/// The name of a upk file, like UtopiaStadium_P, which should be loaded.
/// On Steam version of Rocket League this can be used to load custom map files,
/// but on Epic version it only works on the Psyonix maps.
/// Available maps can be found here: https://github.com/VirxEC/python-interface/blob/master/rlbot/utils/maps.py
game_map_upk:string (required);
/// The players in the match.
player_configurations:[PlayerConfiguration] (required);
/// The custom scripts used in the match.
script_configurations:[ScriptConfiguration] (required);
/// The game mode.
/// This affects a few of the game rules although many game modes can also be recreated solely from mutators.
/// See what mutators and game mode combinations make up the official modes at https://github.com/VirxEC/python-interface/tree/master/tests/gamemodes
game_mode:GameMode;
/// Whether to skip goal replays.
skip_replays:bool;
/// Whether to start without a kickoff countdown.
instant_start:bool;
/// Mutator settings.
mutators:MutatorSettings;
/// How to handle any ongoing match.
existing_match_behavior:ExistingMatchBehavior;
/// Whether debug rendering is displayed.
enable_rendering:bool;
/// Whether clients are allowed to manipulate the game state, e.g. teleporting cars and ball.
enable_state_setting:bool;
/// Whether the match replay should be saved.
auto_save_replay:bool;
/// If set to true, a free play match is launched instead of an exhibition match.
/// This allows the players to use training keybinds, Bakkesmod plugins, and other features that are only allowed in free play.
freeplay:bool;
}