brdb 0.10.0

A library for reading and writing Brickadia's World files.
Documentation
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
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
// Autogenerated from the inventory dump:
//   node scripts/gen_brick_sizes.mjs   (in brickadia-zoo)
// Do not edit by hand.

/// Authored half-extent `[x, y, z]` (grid brick units) for every basic
/// brick asset. Basic-brick extents are asset-defined and not carried in
/// saves, so these come from the in-game reflection dump. Sorted by name.
pub static BRICK_HALF_EXTENTS: &[(&str, [i32; 3])] = &[
    ("B_1x1F_Octo", [5, 5, 2]),
    ("B_1x1F_Round", [5, 5, 2]),
    ("B_1x1F_Speaker", [5, 5, 2]),
    ("B_1x1_Brick_Side", [5, 5, 6]),
    ("B_1x1_Brick_Side_Lip", [5, 5, 6]),
    ("B_1x1_Coin", [5, 5, 1]),
    ("B_1x1_Coin_Diagonal", [5, 5, 1]),
    ("B_1x1_Cone", [5, 5, 6]),
    ("B_1x1_Gate_AudioReference", [5, 5, 2]),
    ("B_1x1_Gate_BrickAssetReference", [5, 5, 2]),
    ("B_1x1_Gate_Clock", [5, 5, 2]),
    ("B_1x1_Gate_DeltaTime", [5, 5, 2]),
    ("B_1x1_Gate_EntityTypeReference", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Append", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Average", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Clear", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_CopyFrom", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Fill", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Find", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Get", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_GetLength", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Insert", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Max", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Min", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Pop", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Push", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_RemoveAtIndex", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Resize", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Reverse", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_SetAtIndex", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Shuffle", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Slice", [6, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Sort", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_SortMultiple", [10, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Sum", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ArrayVar_Swap", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Branch", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_AddInventoryBrick", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_AddInventoryEntity", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_AddInventoryEntry", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_AddInventoryItem", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_AddInventoryItemAdv", [9, 5, 2]),
    ("B_1x1_Gate_Exec_Character_GetAim", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_GetAmmo", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_GetCurrentInventorySlot", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_GetDamage", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_GetFromController", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_GetInventoryEntry", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_GetWeaponChamberAmmo", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_GrantAmmo", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_IncDamage", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_IncWeaponChamberAmmo", [6, 5, 2]),
    ("B_1x1_Gate_Exec_Character_SetAmmo", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_SetDamage", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_SetInventoryBrick", [6, 5, 2]),
    ("B_1x1_Gate_Exec_Character_SetInventoryEntity", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_SetInventoryEntry", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_SetInventoryItem", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_SetInventoryItemAdv", [10, 5, 2]),
    ("B_1x1_Gate_Exec_Character_SetTempPermission", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Character_SetWeaponChamberAmmo", [6, 5, 2]),
    ("B_1x1_Gate_Exec_Character_ShowHint", [5, 5, 2]),
    ("B_1x1_Gate_Exec_ChatCommand", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Cycle", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_AddLocationRotation", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_AddVelocity", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_DestroySpawned", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_DestroySpawnedPrefab", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_GetAngularVelocity", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_GetLinearVelocity", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_GetLocation", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_GetLocationRotation", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_GetRotation", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_GetSpeed", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_GetTag", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_GetTeam", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_GetVelocity", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_GetVelocityAtPoint", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_IsFrozen", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_PlayAudioAt", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_RelativeTeleport", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_SetAngularVelocity", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_SetFrozen", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_SetGravityDirection", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_SetLinearVelocity", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_SetLocation", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_SetLocationRotation", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_SetRotation", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_SetTag", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_SetTeam", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_SetVelocity", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Entity_Teleport", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_BroadcastChatMessage", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_BroadcastStatusMessage", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_FillArrayFromPlayers", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_FillArrayFromTeamMembers", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_GetCurrentRound", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_GetLeaderboardValue", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_GetTeam", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_GetTeamByName", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_GetTeamLeaderboardValue", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_GetTeamName", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_IncrementLeaderboardValue", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_IncrementTeamLeaderboardValue", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_PlayerWins", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_SetLeaderboardValue", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_SetTeam", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_SetTeamLeaderboardValue", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_SetTeamPinned", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Gamemode_TeamWins", [5, 5, 2]),
    ("B_1x1_Gate_Exec_GetOwnTransform", [5, 5, 2]),
    ("B_1x1_Gate_Exec_MapVar_Clear", [5, 5, 2]),
    ("B_1x1_Gate_Exec_MapVar_CopyFrom", [5, 5, 2]),
    ("B_1x1_Gate_Exec_MapVar_Get", [5, 5, 2]),
    ("B_1x1_Gate_Exec_MapVar_GetKeys", [5, 5, 2]),
    ("B_1x1_Gate_Exec_MapVar_GetLength", [5, 5, 2]),
    ("B_1x1_Gate_Exec_MapVar_GetValues", [5, 5, 2]),
    ("B_1x1_Gate_Exec_MapVar_Has", [5, 5, 2]),
    ("B_1x1_Gate_Exec_MapVar_Remove", [5, 5, 2]),
    ("B_1x1_Gate_Exec_MapVar_Set", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayClientAudio", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayGlobalAudio", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_DisplayText", [7, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_ForceRespawn", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_GetDisplayName", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_GetFromEntity", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_GetUserId", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_GetUserName", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_HasPermission", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_HasRole", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_IsTrustedByBrickOwner", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_SetCanRespawn", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_ShowChatMessage", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_ShowMessageBox", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PlayerState_ShowStatusMessage", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PrefabSpawner", [5, 5, 2]),
    ("B_1x1_Gate_Exec_PrintToConsole", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Random", [5, 5, 2]),
    ("B_1x1_Gate_Exec_SpawnExplosion", [7, 5, 2]),
    ("B_1x1_Gate_Exec_SpawnExplosionAt", [7, 5, 2]),
    ("B_1x1_Gate_Exec_Sweep", [8, 5, 2]),
    ("B_1x1_Gate_Exec_SweepSimple", [8, 5, 2]),
    ("B_1x1_Gate_Exec_Toggle", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Union", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Var_Get", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Var_Increment", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Var_Set", [5, 5, 2]),
    ("B_1x1_Gate_Exec_WholeGridInteracted", [5, 5, 2]),
    ("B_1x1_Gate_Exec_WholeGridTargeted", [6, 5, 2]),
    ("B_1x1_Gate_Exec_Zone_GetEntities", [5, 5, 2]),
    ("B_1x1_Gate_Exec_Zone_GetPlayers", [5, 5, 2]),
    ("B_1x1_Gate_Expr_BitwiseAND", [5, 5, 2]),
    ("B_1x1_Gate_Expr_BitwiseBitCount", [5, 5, 2]),
    ("B_1x1_Gate_Expr_BitwiseNAND", [5, 5, 2]),
    ("B_1x1_Gate_Expr_BitwiseNOR", [5, 5, 2]),
    ("B_1x1_Gate_Expr_BitwiseNOT", [5, 5, 2]),
    ("B_1x1_Gate_Expr_BitwiseOR", [5, 5, 2]),
    ("B_1x1_Gate_Expr_BitwiseShiftLeft", [5, 5, 2]),
    ("B_1x1_Gate_Expr_BitwiseShiftRight", [5, 5, 2]),
    ("B_1x1_Gate_Expr_BitwiseShiftRightLogical", [5, 5, 2]),
    ("B_1x1_Gate_Expr_BitwiseXOR", [5, 5, 2]),
    ("B_1x1_Gate_Expr_Ceil", [5, 5, 2]),
    ("B_1x1_Gate_Expr_ChangeDetector", [5, 5, 2]),
    ("B_1x1_Gate_Expr_ChangeDetectorExec", [5, 5, 2]),
    ("B_1x1_Gate_Expr_ColorBlend", [5, 5, 2]),
    ("B_1x1_Gate_Expr_ColorConvert", [5, 5, 2]),
    ("B_1x1_Gate_Expr_ColorToHex", [5, 5, 2]),
    ("B_1x1_Gate_Expr_CompareEqual", [5, 5, 2]),
    ("B_1x1_Gate_Expr_CompareGreater", [5, 5, 2]),
    ("B_1x1_Gate_Expr_CompareGreaterOrEqual", [5, 5, 2]),
    ("B_1x1_Gate_Expr_CompareLess", [5, 5, 2]),
    ("B_1x1_Gate_Expr_CompareLessOrEqual", [5, 5, 2]),
    ("B_1x1_Gate_Expr_CompareNotEqual", [5, 5, 2]),
    ("B_1x1_Gate_Expr_Convert", [5, 5, 2]),
    ("B_1x1_Gate_Expr_DirectionToRotation", [5, 5, 2]),
    ("B_1x1_Gate_Expr_EdgeDetector", [5, 5, 2]),
    ("B_1x1_Gate_Expr_EdgeDetectorExec", [5, 5, 2]),
    ("B_1x1_Gate_Expr_EnumToInteger", [5, 5, 2]),
    ("B_1x1_Gate_Expr_Floor", [5, 5, 2]),
    ("B_1x1_Gate_Expr_Gamemode_IsBuilderTeam", [5, 5, 2]),
    ("B_1x1_Gate_Expr_Gamemode_IsUnaffiliatedTeam", [5, 5, 2]),
    ("B_1x1_Gate_Expr_IntegerToEnum", [5, 5, 2]),
    ("B_1x1_Gate_Expr_InvertRotation", [5, 5, 2]),
    ("B_1x1_Gate_Expr_ItemToPickup", [5, 5, 2]),
    ("B_1x1_Gate_Expr_LogicalAND", [5, 5, 2]),
    ("B_1x1_Gate_Expr_LogicalNAND", [5, 5, 2]),
    ("B_1x1_Gate_Expr_LogicalNOR", [5, 5, 2]),
    ("B_1x1_Gate_Expr_LogicalNOT", [5, 5, 2]),
    ("B_1x1_Gate_Expr_LogicalOR", [5, 5, 2]),
    ("B_1x1_Gate_Expr_LogicalXOR", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MakeColor", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MakeColorHex", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MakeColorSRGB", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MakeQuaternion", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MakeRotation", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MakeVector", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathAbs", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathAcos", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathAcosh", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathAdd", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathAsin", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathAsinh", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathAtan", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathAtan2", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathAtanh", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathBlend", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathClamp", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathCos", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathCosh", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathDegreesToRadians", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathDivide", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathEasing", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathExp", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathLn", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathLogBase", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathMax", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathMin", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathModulo", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathModuloFloored", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathMultiply", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathNegate", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathPow", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathRadiansToDegrees", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathSign", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathSin", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathSinh", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathSqrt", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathSubtract", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathTan", [5, 5, 2]),
    ("B_1x1_Gate_Expr_MathTanh", [5, 5, 2]),
    ("B_1x1_Gate_Expr_NearlyEqual", [5, 5, 2]),
    ("B_1x1_Gate_Expr_QuatAngleBetween", [5, 5, 2]),
    ("B_1x1_Gate_Expr_QuatBetween", [5, 5, 2]),
    ("B_1x1_Gate_Expr_QuatDotProduct", [5, 5, 2]),
    ("B_1x1_Gate_Expr_QuatFromAxisAngle", [5, 5, 2]),
    ("B_1x1_Gate_Expr_QuatSlerp", [5, 5, 2]),
    ("B_1x1_Gate_Expr_QuatToAxisAngle", [5, 5, 2]),
    ("B_1x1_Gate_Expr_Remap", [6, 5, 2]),
    ("B_1x1_Gate_Expr_RotateVector", [5, 5, 2]),
    ("B_1x1_Gate_Expr_RotationToDirection", [5, 5, 2]),
    ("B_1x1_Gate_Expr_Round", [5, 5, 2]),
    ("B_1x1_Gate_Expr_Select", [5, 5, 2]),
    ("B_1x1_Gate_Expr_SplitColor", [5, 5, 2]),
    ("B_1x1_Gate_Expr_SplitColorSRGB", [5, 5, 2]),
    ("B_1x1_Gate_Expr_SplitQuaternion", [5, 5, 2]),
    ("B_1x1_Gate_Expr_SplitRotation", [5, 5, 2]),
    ("B_1x1_Gate_Expr_SplitVector", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_CharacterToCodepoint", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_CodepointToCharacter", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_Concatenate", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_Contains", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_EndsWith", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_Find", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_FormatText", [9, 5, 2]),
    ("B_1x1_Gate_Expr_String_Length", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_ParseInt", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_ParseNumber", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_Replace", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_Split", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_StartsWith", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_Substring", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_ToLower", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_ToUpper", [5, 5, 2]),
    ("B_1x1_Gate_Expr_String_Trim", [5, 5, 2]),
    ("B_1x1_Gate_Expr_Swap", [5, 5, 2]),
    ("B_1x1_Gate_Expr_VecCrossProduct", [5, 5, 2]),
    ("B_1x1_Gate_Expr_VecDistance", [5, 5, 2]),
    ("B_1x1_Gate_Expr_VecDistanceSquared", [5, 5, 2]),
    ("B_1x1_Gate_Expr_VecDotProduct", [5, 5, 2]),
    ("B_1x1_Gate_Expr_VecMagnitude", [5, 5, 2]),
    ("B_1x1_Gate_Expr_VecMagnitudeSquared", [5, 5, 2]),
    ("B_1x1_Gate_Expr_VecNormalize", [5, 5, 2]),
    ("B_1x1_Gate_Expr_VecScale", [5, 5, 2]),
    ("B_1x1_Gate_Fake_Gamemode_CharacterDamagedEvent", [7, 5, 2]),
    ("B_1x1_Gate_Fake_Gamemode_CharacterDiedEvent", [6, 5, 2]),
    ("B_1x1_Gate_Fake_Gamemode_CharacterFiredWeaponEvent", [7, 5, 2]),
    ("B_1x1_Gate_Fake_Gamemode_CharacterSpawnedEvent", [5, 5, 2]),
    ("B_1x1_Gate_Fake_Gamemode_ControllerJoinedEvent", [5, 5, 2]),
    ("B_1x1_Gate_Fake_Gamemode_ControllerJoinedTeamEvent", [6, 5, 2]),
    ("B_1x1_Gate_Fake_Gamemode_ControllerLeftEvent", [5, 5, 2]),
    ("B_1x1_Gate_Fake_Gamemode_ControllerLeftTeamEvent", [5, 5, 2]),
    ("B_1x1_Gate_Fake_Gamemode_RoundEndEvent", [5, 5, 2]),
    ("B_1x1_Gate_Fake_Gamemode_RoundStartEvent", [5, 5, 2]),
    ("B_1x1_Gate_FindPlayer", [5, 5, 2]),
    ("B_1x1_Gate_FontReference", [5, 5, 2]),
    ("B_1x1_Gate_FormatDate", [5, 5, 2]),
    ("B_1x1_Gate_GetUnixEpoch", [5, 5, 2]),
    ("B_1x1_Gate_Internal_CharacterZoneEvent_Entered", [5, 5, 2]),
    ("B_1x1_Gate_Internal_CharacterZoneEvent_Left", [5, 5, 2]),
    ("B_1x1_Gate_Internal_EntityZoneEvent_Entered", [5, 5, 2]),
    ("B_1x1_Gate_Internal_EntityZoneEvent_Left", [5, 5, 2]),
    ("B_1x1_Gate_Internal_ProjectileZoneEvent_Entered", [6, 5, 2]),
    ("B_1x1_Gate_Internal_ProjectileZoneEvent_Left", [6, 5, 2]),
    ("B_1x1_Gate_Internal_ReadBrickGrid", [5, 5, 2]),
    ("B_1x1_Gate_Internal_ZoneEvent_BrickChanged", [5, 5, 2]),
    ("B_1x1_Gate_Internal_ZoneEvent_BrickRemoved", [5, 5, 2]),
    ("B_1x1_Gate_ItemReference", [5, 5, 2]),
    ("B_1x1_Gate_MicrochipInput", [5, 5, 2]),
    ("B_1x1_Gate_MicrochipOutput", [5, 5, 2]),
    ("B_1x1_Gate_OneShotAudioReference", [5, 5, 2]),
    ("B_1x1_Gate_PickupReference", [5, 5, 2]),
    ("B_1x1_Gate_ProjectileReference", [5, 5, 2]),
    ("B_1x1_Gate_Pseudo_BufferSeconds", [5, 5, 2]),
    ("B_1x1_Gate_Pseudo_BufferTicks", [5, 5, 2]),
    ("B_1x1_Gate_Pseudo_CustomEvent", [10, 5, 2]),
    ("B_1x1_Gate_Pseudo_CustomEvent_Global", [10, 5, 2]),
    ("B_1x1_Gate_Pseudo_Dampen", [5, 5, 2]),
    ("B_1x1_Gate_Pseudo_QueueSeconds", [10, 5, 2]),
    ("B_1x1_Gate_Pseudo_QueueTicks", [10, 5, 2]),
    ("B_1x1_Gate_Pseudo_SendCustomEvent", [10, 5, 2]),
    ("B_1x1_Gate_Pseudo_SendCustomEvent_Global", [10, 5, 2]),
    ("B_1x1_Gate_Pseudo_Timer", [5, 5, 2]),
    ("B_1x1_Gate_Pseudo_Tween", [5, 5, 2]),
    ("B_1x1_Gate_SeatControlSplitter", [5, 5, 2]),
    ("B_1x1_Gate_ServerUptime", [5, 5, 2]),
    ("B_1x1_Gate_Variable", [5, 5, 2]),
    ("B_1x1_Gate_Variable_Array", [5, 5, 2]),
    ("B_1x1_Gate_Variable_Map", [5, 5, 2]),
    ("B_1x1_Gate_WeaponResourceReference", [5, 5, 2]),
    ("B_1x1_Gate_WeightBrick", [5, 5, 2]),
    ("B_1x1_Gate_WheelEngineAudioReference", [5, 5, 2]),
    ("B_1x1_Gate_WheelEngineSlim", [5, 5, 2]),
    ("B_1x1_Microchip", [5, 5, 2]),
    ("B_1x1_Reroute_Node", [1, 1, 1]),
    ("B_1x1_Round", [5, 5, 6]),
    ("B_1x1_SoundEmitter", [5, 5, 2]),
    ("B_1x1f_Inverse_Tile_Corner", [5, 5, 2]),
    ("B_1x1f_Tile_Corner", [5, 5, 2]),
    ("B_1x2_MetalIngot", [10, 5, 2]),
    ("B_1x2_Overhang", [6, 10, 5]),
    ("B_1x2f_Plate_Center", [10, 5, 2]),
    ("B_1x2f_Plate_Center_Inv", [10, 5, 2]),
    ("B_1x4_Brick_Side", [20, 5, 6]),
    ("B_1x_Octo", [5, 5, 5]),
    ("B_1x_Octo_90Deg", [5, 5, 5]),
    ("B_1x_Octo_90Deg_Inv", [5, 5, 5]),
    ("B_1x_Octo_T", [5, 5, 5]),
    ("B_1x_Octo_T_Inv", [5, 5, 5]),
    ("B_2x1_Slipper", [10, 5, 6]),
    ("B_2x2F_Octo", [10, 10, 2]),
    ("B_2x2F_Octo_Converter", [10, 10, 2]),
    ("B_2x2F_Octo_Converter_Inv", [10, 10, 2]),
    ("B_2x2F_Round", [10, 10, 2]),
    ("B_2x2F_Speaker", [10, 10, 2]),
    ("B_2x2F_Target", [10, 10, 2]),
    ("B_2x2_Cannon", [10, 10, 40]),
    ("B_2x2_Cone", [10, 10, 12]),
    ("B_2x2_Corner", [10, 10, 6]),
    ("B_2x2_Overhang", [6, 10, 10]),
    ("B_2x2_Round", [10, 10, 6]),
    ("B_2x2_Slipper", [10, 10, 6]),
    ("B_2x2_Thruster", [10, 10, 8]),
    ("B_2x2f_Plate_Center", [10, 10, 2]),
    ("B_2x2f_Plate_Center_Inv", [10, 10, 2]),
    ("B_2x4_Door_Frame", [10, 20, 36]),
    ("B_2x_Octo", [10, 10, 10]),
    ("B_2x_Octo_90Deg", [10, 10, 10]),
    ("B_2x_Octo_90Deg_Inv", [10, 10, 10]),
    ("B_2x_Octo_Cone", [10, 10, 10]),
    ("B_2x_Octo_T", [10, 10, 10]),
    ("B_2x_Octo_T_Inv", [10, 10, 10]),
    ("B_4x4_Round", [20, 20, 6]),
    ("B_8x8_Lattice_Plate", [40, 40, 2]),
    ("B_Bishop", [5, 5, 10]),
    ("B_Bone", [10, 10, 2]),
    ("B_BoneStraight", [10, 5, 2]),
    ("B_Bot_Spawn_Point", [20, 20, 2]),
    ("B_Branch", [20, 11, 2]),
    ("B_Bush", [15, 15, 16]),
    ("B_Button", [5, 5, 2]),
    ("B_Button_Pressed", [5, 5, 2]),
    ("B_Button_Square", [5, 5, 2]),
    ("B_Button_Square_Pressed", [5, 5, 2]),
    ("B_Cauldron", [10, 10, 10]),
    ("B_Chalice", [5, 5, 10]),
    ("B_CheckPoint", [20, 20, 2]),
    ("B_Coffin", [5, 20, 30]),
    ("B_Coffin_Lid", [10, 20, 30]),
    ("B_DestinationPoint", [20, 20, 2]),
    ("B_Fern", [10, 10, 2]),
    ("B_Flame", [5, 5, 10]),
    ("B_Flower", [10, 10, 2]),
    ("B_Fork", [4, 10, 2]),
    ("B_Frog", [10, 10, 7]),
    ("B_Frog_Small", [5, 5, 4]),
    ("B_GoalPoint", [20, 20, 2]),
    ("B_Gravestone", [10, 20, 20]),
    ("B_Gyroscope", [5, 5, 2]),
    ("B_Handle", [5, 10, 6]),
    ("B_Hedge_1x1", [5, 5, 6]),
    ("B_Hedge_1x1_Corner", [5, 5, 6]),
    ("B_Hedge_1x2", [5, 10, 6]),
    ("B_Hedge_1x4", [5, 20, 6]),
    ("B_Inverted_Cone", [5, 5, 8]),
    ("B_Jar", [9, 9, 12]),
    ("B_Joint_Bearing", [5, 5, 1]),
    ("B_Joint_Bearing_Micro", [1, 1, 1]),
    ("B_Joint_Motor", [5, 5, 1]),
    ("B_Joint_Motor_Micro", [1, 1, 1]),
    ("B_Joint_RigidBearing", [5, 5, 1]),
    ("B_Joint_RigidBearing_Micro", [1, 1, 1]),
    ("B_Joint_Servo", [5, 5, 1]),
    ("B_Joint_Servo_Micro", [1, 1, 1]),
    ("B_Joint_Socket", [5, 5, 2]),
    ("B_Joint_Socket_Micro", [1, 1, 1]),
    ("B_Joint_Wheel", [5, 5, 1]),
    ("B_Joint_Wheel_Micro", [1, 1, 1]),
    ("B_Joint_Wheel_Micro_Suspension", [1, 1, 1]),
    ("B_Joint_Wheel_Suspension", [5, 5, 1]),
    ("B_King", [5, 5, 12]),
    ("B_Knight", [5, 5, 8]),
    ("B_Ladder", [12, 15, 12]),
    ("B_Leaf_Bush", [26, 26, 20]),
    ("B_Lotus_1x1", [5, 5, 3]),
    ("B_Lotus_2x2", [10, 10, 5]),
    ("B_Pawn", [5, 5, 6]),
    ("B_Pine_Tree", [20, 20, 38]),
    ("B_Pumpkin", [10, 10, 7]),
    ("B_Pumpkin_Carved", [10, 10, 7]),
    ("B_Queen", [5, 5, 12]),
    ("B_Rat", [5, 15, 4]),
    ("B_Rook", [5, 5, 6]),
    ("B_Rose", [5, 5, 4]),
    ("B_Sausage", [10, 5, 2]),
    ("B_Seat", [10, 10, 11]),
    ("B_Small_Flower", [5, 5, 2]),
    ("B_SpawnPoint", [20, 20, 2]),
    ("B_Spawn_Point_Prefab", [40, 40, 2]),
    ("B_Spoon", [4, 10, 2]),
    ("B_Swirl_Plate", [5, 5, 4]),
    ("B_Switch_Flipped", [5, 5, 3]),
    ("B_Switch_Test", [5, 5, 3]),
    ("B_Tulip", [5, 5, 6]),
    ("B_Turkey_Body", [15, 10, 7]),
    ("B_Turkey_Leg", [10, 5, 3]),
    ("B_Vehicle_Engine", [10, 11, 10]),
    ("Brickadia", [0, 0, 0]),
];

/// Authored half-extent of a basic brick by asset name, if known.
pub fn brick_half_extent(name: &str) -> Option<[i32; 3]> {
    BRICK_HALF_EXTENTS
        .binary_search_by(|(n, _)| n.cmp(&name))
        .ok()
        .map(|i| BRICK_HALF_EXTENTS[i].1)
}