@battle-racing/br-common-lib 6.2.1-rc.1 → 6.2.1-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,6 +22,15 @@ const stopKartCommands = [
22
22
  { module: 'speed', action: 'change', params: { speed: 0, forUnlimitedTime: true } },
23
23
  { module: 'speed', action: 'deactivate' },
24
24
  ];
25
+ const buttonFeedbackCommands = [
26
+ {
27
+ module: 'sound',
28
+ action: 'play',
29
+ params: {
30
+ soundName: domains_1.SOUND_NAME.TUTORIAL_BUTTON_PRESS,
31
+ },
32
+ },
33
+ ];
25
34
  // The step fires the nitro, after it ends the speed module goes back to its default speed
26
35
  const returnToFinishCommands = [
27
36
  {
@@ -58,6 +67,13 @@ exports.allTutorialConfig = {
58
67
  step: domains_1.TUTORIAL_SCREEN_STEP.COUNTDOWN,
59
68
  },
60
69
  },
70
+ {
71
+ module: 'sound',
72
+ action: 'play',
73
+ params: {
74
+ soundName: domains_1.SOUND_NAME.TUTORIAL_COUNTDOWN,
75
+ },
76
+ },
61
77
  ],
62
78
  },
63
79
  {
@@ -67,7 +83,7 @@ exports.allTutorialConfig = {
67
83
  screenStep: domains_1.TUTORIAL_SCREEN_STEP.WELCOME,
68
84
  listenEvent: {
69
85
  on: domains_1.TUTORIAL_LISTEN_EVENT_ON.TIMEOUT,
70
- durationMs: 6000,
86
+ durationMs: 5000,
71
87
  },
72
88
  triggerCommands: [
73
89
  ...stopKartCommands,
@@ -94,7 +110,7 @@ exports.allTutorialConfig = {
94
110
  screenStep: domains_1.TUTORIAL_SCREEN_STEP.PERSONAL_ITEMS,
95
111
  listenEvent: {
96
112
  on: domains_1.TUTORIAL_LISTEN_EVENT_ON.TIMEOUT,
97
- durationMs: 4000,
113
+ durationMs: 5000,
98
114
  },
99
115
  triggerCommands: [
100
116
  ...stopKartCommands,
@@ -105,6 +121,13 @@ exports.allTutorialConfig = {
105
121
  step: domains_1.TUTORIAL_SCREEN_STEP.PERSONAL_ITEMS,
106
122
  },
107
123
  },
124
+ {
125
+ module: 'sound',
126
+ action: 'play',
127
+ params: {
128
+ soundName: domains_1.SOUND_NAME.TUTORIAL_SECURE_BELONGINGS,
129
+ },
130
+ },
108
131
  ],
109
132
  },
110
133
  {
@@ -125,6 +148,13 @@ exports.allTutorialConfig = {
125
148
  step: domains_1.TUTORIAL_SCREEN_STEP.SEAT_BELT,
126
149
  },
127
150
  },
151
+ {
152
+ module: 'sound',
153
+ action: 'play',
154
+ params: {
155
+ soundName: domains_1.SOUND_NAME.TUTORIAL_BUCKLE_UP,
156
+ },
157
+ },
128
158
  ],
129
159
  },
130
160
  {
@@ -213,6 +243,7 @@ exports.allTutorialConfig = {
213
243
  },
214
244
  triggerCommands: [
215
245
  ...stopKartCommands,
246
+ ...buttonFeedbackCommands,
216
247
  {
217
248
  module: 'screen',
218
249
  action: 'showTutorialView',
@@ -233,6 +264,7 @@ exports.allTutorialConfig = {
233
264
  },
234
265
  triggerCommands: [
235
266
  ...stopKartCommands,
267
+ ...buttonFeedbackCommands,
236
268
  {
237
269
  module: 'screen',
238
270
  action: 'showTutorialView',
@@ -295,6 +327,7 @@ exports.allTutorialConfig = {
295
327
  },
296
328
  triggerCommands: [
297
329
  ...stopKartCommands,
330
+ ...buttonFeedbackCommands,
298
331
  {
299
332
  module: 'screen',
300
333
  action: 'showTutorialView',
@@ -316,6 +349,7 @@ exports.allTutorialConfig = {
316
349
  },
317
350
  triggerCommands: [
318
351
  ...stopKartCommands,
352
+ ...buttonFeedbackCommands,
319
353
  {
320
354
  module: 'screen',
321
355
  action: 'showTutorialView',
@@ -337,6 +371,7 @@ exports.allTutorialConfig = {
337
371
  },
338
372
  triggerCommands: [
339
373
  ...stopKartCommands,
374
+ ...buttonFeedbackCommands,
340
375
  {
341
376
  module: 'screen',
342
377
  action: 'showTutorialView',
@@ -365,6 +400,7 @@ exports.allTutorialConfig = {
365
400
  },
366
401
  triggerCommands: [
367
402
  ...startDrivingCommands,
403
+ ...buttonFeedbackCommands,
368
404
  {
369
405
  module: 'screen',
370
406
  action: 'showTutorialView',
@@ -415,6 +451,13 @@ exports.allTutorialConfig = {
415
451
  hud: defaultTutorialHud,
416
452
  },
417
453
  },
454
+ {
455
+ module: 'sound',
456
+ action: 'play',
457
+ params: {
458
+ soundName: domains_1.SOUND_NAME.POWER_UP_SELECTION,
459
+ },
460
+ },
418
461
  ],
419
462
  },
420
463
  {
@@ -452,8 +495,7 @@ exports.allTutorialConfig = {
452
495
  name: 'Tutorial Completed Screen',
453
496
  screenStep: domains_1.TUTORIAL_SCREEN_STEP.TUTORIAL_COMPLETED,
454
497
  listenEvent: {
455
- on: domains_1.TUTORIAL_LISTEN_EVENT_ON.TIMEOUT,
456
- durationMs: 5000,
498
+ on: domains_1.TUTORIAL_LISTEN_EVENT_ON.OPERATOR,
457
499
  },
458
500
  triggerCommands: [
459
501
  ...stopKartCommands,
@@ -462,6 +504,15 @@ exports.allTutorialConfig = {
462
504
  action: 'showTutorialView',
463
505
  params: {
464
506
  step: domains_1.TUTORIAL_SCREEN_STEP.TUTORIAL_COMPLETED,
507
+ hud: defaultTutorialHud,
508
+ },
509
+ },
510
+ {
511
+ module: 'sound',
512
+ action: 'play',
513
+ params: {
514
+ soundName: domains_1.SOUND_NAME.TUTORIAL_FINAL,
515
+ durationMs: domains_1.PLAY_SOUND_DURATION.INFINITE,
465
516
  },
466
517
  },
467
518
  ],
@@ -53,10 +53,15 @@ export declare const playSoundActionCommandOptionsSchema: z.ZodObject<{
53
53
  readonly SYSTEM_STARTED: "system_started.mp3";
54
54
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
55
55
  readonly WINNER_LAUGH: "winner_laugh.mp3";
56
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
56
57
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
58
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
59
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
57
60
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
61
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
62
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
58
63
  }>;
59
- durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
64
+ durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
60
65
  }, z.core.$strip>;
61
66
  export declare const soundModuleCommandSchema: z.ZodObject<{
62
67
  module: z.ZodLiteral<"sound">;
@@ -86,10 +91,15 @@ export declare const soundModuleCommandSchema: z.ZodObject<{
86
91
  readonly SYSTEM_STARTED: "system_started.mp3";
87
92
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
88
93
  readonly WINNER_LAUGH: "winner_laugh.mp3";
94
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
89
95
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
96
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
97
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
90
98
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
99
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
100
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
91
101
  }>;
92
- durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
102
+ durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
93
103
  }, z.core.$strip>;
94
104
  }, z.core.$strip>;
95
105
  export declare const ballSensorDiskThrowerModuleCommandSchema: z.ZodUnion<readonly [z.ZodObject<{
@@ -966,6 +976,33 @@ export declare const screenModuleCommandSchema: z.ZodUnion<readonly [z.ZodObject
966
976
  revision: z.ZodOptional<z.ZodNumber>;
967
977
  presentationRevision: z.ZodOptional<z.ZodNumber>;
968
978
  step: z.ZodLiteral<"TutorialCompleted">;
979
+ hud: z.ZodObject<{
980
+ coins: z.ZodNonOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
981
+ position: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
982
+ current: z.ZodNullable<z.ZodNumber>;
983
+ total: z.ZodNullable<z.ZodNumber>;
984
+ }, z.core.$strip>>>;
985
+ laps: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
986
+ current: z.ZodNullable<z.ZodNumber>;
987
+ total: z.ZodNullable<z.ZodNumber>;
988
+ }, z.core.$strip>>>;
989
+ gameTimeLeft: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
990
+ minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
991
+ seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
992
+ }, z.core.$strip>>>;
993
+ powerUp: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
994
+ readonly BATTLE_GOD: "Battle God";
995
+ readonly BATTLE_STAR: "Battle Star";
996
+ readonly BATTLE_SHOT: "Battle Shot";
997
+ readonly BATTLE_NITRO: "Battle Nitro";
998
+ readonly BATTLE_PULSE: "Battle Pulse";
999
+ readonly BATTLE_TRAP: "Battle Trap";
1000
+ readonly BATTLE_SHIELD: "Battle Shield";
1001
+ readonly BATTLE_TURBO: "Battle Turbo";
1002
+ readonly BATTLE_BLUE_SHOT: "Battle Blue Shot";
1003
+ }>, z.ZodLiteral<"Clear PowerUp">]>>>;
1004
+ powerUpAnimationTimeSeconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1005
+ }, z.core.$strip>;
969
1006
  }, z.core.$strip>], "step">;
970
1007
  }, z.core.$strip>, z.ZodObject<{
971
1008
  module: z.ZodLiteral<"screen">;
@@ -1926,6 +1963,33 @@ export declare const allCommandsConfigSchema: z.ZodIntersection<z.ZodUnion<reado
1926
1963
  revision: z.ZodOptional<z.ZodNumber>;
1927
1964
  presentationRevision: z.ZodOptional<z.ZodNumber>;
1928
1965
  step: z.ZodLiteral<"TutorialCompleted">;
1966
+ hud: z.ZodObject<{
1967
+ coins: z.ZodNonOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
1968
+ position: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
1969
+ current: z.ZodNullable<z.ZodNumber>;
1970
+ total: z.ZodNullable<z.ZodNumber>;
1971
+ }, z.core.$strip>>>;
1972
+ laps: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
1973
+ current: z.ZodNullable<z.ZodNumber>;
1974
+ total: z.ZodNullable<z.ZodNumber>;
1975
+ }, z.core.$strip>>>;
1976
+ gameTimeLeft: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
1977
+ minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1978
+ seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1979
+ }, z.core.$strip>>>;
1980
+ powerUp: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
1981
+ readonly BATTLE_GOD: "Battle God";
1982
+ readonly BATTLE_STAR: "Battle Star";
1983
+ readonly BATTLE_SHOT: "Battle Shot";
1984
+ readonly BATTLE_NITRO: "Battle Nitro";
1985
+ readonly BATTLE_PULSE: "Battle Pulse";
1986
+ readonly BATTLE_TRAP: "Battle Trap";
1987
+ readonly BATTLE_SHIELD: "Battle Shield";
1988
+ readonly BATTLE_TURBO: "Battle Turbo";
1989
+ readonly BATTLE_BLUE_SHOT: "Battle Blue Shot";
1990
+ }>, z.ZodLiteral<"Clear PowerUp">]>>>;
1991
+ powerUpAnimationTimeSeconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1992
+ }, z.core.$strip>;
1929
1993
  }, z.core.$strip>], "step">;
1930
1994
  }, z.core.$strip>, z.ZodObject<{
1931
1995
  module: z.ZodLiteral<"screen">;
@@ -1991,10 +2055,15 @@ export declare const allCommandsConfigSchema: z.ZodIntersection<z.ZodUnion<reado
1991
2055
  readonly SYSTEM_STARTED: "system_started.mp3";
1992
2056
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
1993
2057
  readonly WINNER_LAUGH: "winner_laugh.mp3";
2058
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
1994
2059
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
2060
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
2061
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
1995
2062
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
2063
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
2064
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
1996
2065
  }>;
1997
- durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
2066
+ durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
1998
2067
  }, z.core.$strip>;
1999
2068
  }, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
2000
2069
  module: z.ZodLiteral<"emergency">;
@@ -26,7 +26,7 @@ exports.speedModuleCommandSchema = zod_1.z.union([
26
26
  ]);
27
27
  // --- Sound Commands ---
28
28
  exports.playSoundActionCommandOptionsSchema = hardware_1.playSoundOptionsSchema.omit({ durationMs: true }).extend({
29
- durationMs: arithmeticOrNumberSchema.optional(),
29
+ durationMs: zod_1.z.union([hardware_1.playSoundOptionsSchema.shape.durationMs.unwrap(), utils_1.arithmeticExpressionSchema]).optional(),
30
30
  });
31
31
  exports.soundModuleCommandSchema = zod_1.z.object({
32
32
  module: zod_1.z.literal('sound'),
@@ -60,8 +60,13 @@ export declare const damageSchema: z.ZodObject<{
60
60
  readonly SYSTEM_STARTED: "system_started.mp3";
61
61
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
62
62
  readonly WINNER_LAUGH: "winner_laugh.mp3";
63
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
63
64
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
65
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
66
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
64
67
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
68
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
69
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
65
70
  }>;
66
71
  rgbEffect: z.ZodEnum<{
67
72
  readonly SHOW_COLOR_KART: "Show Color Kart";
@@ -891,6 +891,33 @@ export declare const flowSchema: z.ZodObject<{
891
891
  revision: z.ZodOptional<z.ZodNumber>;
892
892
  presentationRevision: z.ZodOptional<z.ZodNumber>;
893
893
  step: z.ZodLiteral<"TutorialCompleted">;
894
+ hud: z.ZodObject<{
895
+ coins: z.ZodNonOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
896
+ position: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
897
+ current: z.ZodNullable<z.ZodNumber>;
898
+ total: z.ZodNullable<z.ZodNumber>;
899
+ }, z.core.$strip>>>;
900
+ laps: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
901
+ current: z.ZodNullable<z.ZodNumber>;
902
+ total: z.ZodNullable<z.ZodNumber>;
903
+ }, z.core.$strip>>>;
904
+ gameTimeLeft: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
905
+ minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
906
+ seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
907
+ }, z.core.$strip>>>;
908
+ powerUp: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
909
+ readonly BATTLE_GOD: "Battle God";
910
+ readonly BATTLE_STAR: "Battle Star";
911
+ readonly BATTLE_SHOT: "Battle Shot";
912
+ readonly BATTLE_NITRO: "Battle Nitro";
913
+ readonly BATTLE_PULSE: "Battle Pulse";
914
+ readonly BATTLE_TRAP: "Battle Trap";
915
+ readonly BATTLE_SHIELD: "Battle Shield";
916
+ readonly BATTLE_TURBO: "Battle Turbo";
917
+ readonly BATTLE_BLUE_SHOT: "Battle Blue Shot";
918
+ }>, z.ZodLiteral<"Clear PowerUp">]>>>;
919
+ powerUpAnimationTimeSeconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
920
+ }, z.core.$strip>;
894
921
  }, z.core.$strip>], "step">;
895
922
  }, z.core.$strip>, z.ZodObject<{
896
923
  module: z.ZodLiteral<"screen">;
@@ -956,10 +983,15 @@ export declare const flowSchema: z.ZodObject<{
956
983
  readonly SYSTEM_STARTED: "system_started.mp3";
957
984
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
958
985
  readonly WINNER_LAUGH: "winner_laugh.mp3";
986
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
959
987
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
988
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
989
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
960
990
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
991
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
992
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
961
993
  }>;
962
- durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
994
+ durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
963
995
  }, z.core.$strip>;
964
996
  }, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
965
997
  module: z.ZodLiteral<"emergency">;
@@ -391,4 +391,31 @@ export declare const screenTutorialViewInputSchema: z.ZodDiscriminatedUnion<[z.Z
391
391
  revision: z.ZodOptional<z.ZodNumber>;
392
392
  presentationRevision: z.ZodOptional<z.ZodNumber>;
393
393
  step: z.ZodLiteral<"TutorialCompleted">;
394
+ hud: z.ZodObject<{
395
+ coins: z.ZodNonOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
396
+ position: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
397
+ current: z.ZodNullable<z.ZodNumber>;
398
+ total: z.ZodNullable<z.ZodNumber>;
399
+ }, z.core.$strip>>>;
400
+ laps: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
401
+ current: z.ZodNullable<z.ZodNumber>;
402
+ total: z.ZodNullable<z.ZodNumber>;
403
+ }, z.core.$strip>>>;
404
+ gameTimeLeft: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
405
+ minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
406
+ seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
407
+ }, z.core.$strip>>>;
408
+ powerUp: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
409
+ readonly BATTLE_GOD: "Battle God";
410
+ readonly BATTLE_STAR: "Battle Star";
411
+ readonly BATTLE_SHOT: "Battle Shot";
412
+ readonly BATTLE_NITRO: "Battle Nitro";
413
+ readonly BATTLE_PULSE: "Battle Pulse";
414
+ readonly BATTLE_TRAP: "Battle Trap";
415
+ readonly BATTLE_SHIELD: "Battle Shield";
416
+ readonly BATTLE_TURBO: "Battle Turbo";
417
+ readonly BATTLE_BLUE_SHOT: "Battle Blue Shot";
418
+ }>, z.ZodLiteral<"Clear PowerUp">]>>>;
419
+ powerUpAnimationTimeSeconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
420
+ }, z.core.$strip>;
394
421
  }, z.core.$strip>], "step">;
@@ -50,5 +50,5 @@ exports.screenTutorialViewInputSchema = zod_1.z.discriminatedUnion('step', [
50
50
  createHudTutorialStepSchema(Tutorial_const_1.TUTORIAL_SCREEN_STEP.POWER_UP_ROULETTE),
51
51
  createHudTutorialStepSchema(Tutorial_const_1.TUTORIAL_SCREEN_STEP.POWER_UP_NITRO_READY),
52
52
  createHudTutorialStepSchema(Tutorial_const_1.TUTORIAL_SCREEN_STEP.POWER_UP_RETURN_TO_HUD),
53
- createStaticTutorialStepSchema(Tutorial_const_1.TUTORIAL_SCREEN_STEP.TUTORIAL_COMPLETED),
53
+ createHudTutorialStepSchema(Tutorial_const_1.TUTORIAL_SCREEN_STEP.TUTORIAL_COMPLETED),
54
54
  ]);
@@ -27,8 +27,13 @@ export declare const playSoundOptionsSchema: z.ZodObject<{
27
27
  readonly SYSTEM_STARTED: "system_started.mp3";
28
28
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
29
29
  readonly WINNER_LAUGH: "winner_laugh.mp3";
30
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
30
31
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
32
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
33
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
31
34
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
35
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
36
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
32
37
  }>;
33
38
  durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>>;
34
39
  }, z.core.$strip>;
@@ -887,6 +887,33 @@ export declare const powerUpCommandSchema: z.ZodIntersection<z.ZodUnion<readonly
887
887
  revision: z.ZodOptional<z.ZodNumber>;
888
888
  presentationRevision: z.ZodOptional<z.ZodNumber>;
889
889
  step: z.ZodLiteral<"TutorialCompleted">;
890
+ hud: z.ZodObject<{
891
+ coins: z.ZodNonOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
892
+ position: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
893
+ current: z.ZodNullable<z.ZodNumber>;
894
+ total: z.ZodNullable<z.ZodNumber>;
895
+ }, z.core.$strip>>>;
896
+ laps: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
897
+ current: z.ZodNullable<z.ZodNumber>;
898
+ total: z.ZodNullable<z.ZodNumber>;
899
+ }, z.core.$strip>>>;
900
+ gameTimeLeft: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
901
+ minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
902
+ seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
903
+ }, z.core.$strip>>>;
904
+ powerUp: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
905
+ readonly BATTLE_GOD: "Battle God";
906
+ readonly BATTLE_STAR: "Battle Star";
907
+ readonly BATTLE_SHOT: "Battle Shot";
908
+ readonly BATTLE_NITRO: "Battle Nitro";
909
+ readonly BATTLE_PULSE: "Battle Pulse";
910
+ readonly BATTLE_TRAP: "Battle Trap";
911
+ readonly BATTLE_SHIELD: "Battle Shield";
912
+ readonly BATTLE_TURBO: "Battle Turbo";
913
+ readonly BATTLE_BLUE_SHOT: "Battle Blue Shot";
914
+ }>, z.ZodLiteral<"Clear PowerUp">]>>>;
915
+ powerUpAnimationTimeSeconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
916
+ }, z.core.$strip>;
890
917
  }, z.core.$strip>], "step">;
891
918
  }, z.core.$strip>, z.ZodObject<{
892
919
  module: z.ZodLiteral<"screen">;
@@ -952,10 +979,15 @@ export declare const powerUpCommandSchema: z.ZodIntersection<z.ZodUnion<readonly
952
979
  readonly SYSTEM_STARTED: "system_started.mp3";
953
980
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
954
981
  readonly WINNER_LAUGH: "winner_laugh.mp3";
982
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
955
983
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
984
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
985
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
956
986
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
987
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
988
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
957
989
  }>;
958
- durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
990
+ durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
959
991
  }, z.core.$strip>;
960
992
  }, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
961
993
  module: z.ZodLiteral<"emergency">;
@@ -1899,6 +1931,33 @@ export declare const powerUpSchema: z.ZodObject<{
1899
1931
  revision: z.ZodOptional<z.ZodNumber>;
1900
1932
  presentationRevision: z.ZodOptional<z.ZodNumber>;
1901
1933
  step: z.ZodLiteral<"TutorialCompleted">;
1934
+ hud: z.ZodObject<{
1935
+ coins: z.ZodNonOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
1936
+ position: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
1937
+ current: z.ZodNullable<z.ZodNumber>;
1938
+ total: z.ZodNullable<z.ZodNumber>;
1939
+ }, z.core.$strip>>>;
1940
+ laps: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
1941
+ current: z.ZodNullable<z.ZodNumber>;
1942
+ total: z.ZodNullable<z.ZodNumber>;
1943
+ }, z.core.$strip>>>;
1944
+ gameTimeLeft: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
1945
+ minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1946
+ seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1947
+ }, z.core.$strip>>>;
1948
+ powerUp: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
1949
+ readonly BATTLE_GOD: "Battle God";
1950
+ readonly BATTLE_STAR: "Battle Star";
1951
+ readonly BATTLE_SHOT: "Battle Shot";
1952
+ readonly BATTLE_NITRO: "Battle Nitro";
1953
+ readonly BATTLE_PULSE: "Battle Pulse";
1954
+ readonly BATTLE_TRAP: "Battle Trap";
1955
+ readonly BATTLE_SHIELD: "Battle Shield";
1956
+ readonly BATTLE_TURBO: "Battle Turbo";
1957
+ readonly BATTLE_BLUE_SHOT: "Battle Blue Shot";
1958
+ }>, z.ZodLiteral<"Clear PowerUp">]>>>;
1959
+ powerUpAnimationTimeSeconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1960
+ }, z.core.$strip>;
1902
1961
  }, z.core.$strip>], "step">;
1903
1962
  }, z.core.$strip>, z.ZodObject<{
1904
1963
  module: z.ZodLiteral<"screen">;
@@ -1964,10 +2023,15 @@ export declare const powerUpSchema: z.ZodObject<{
1964
2023
  readonly SYSTEM_STARTED: "system_started.mp3";
1965
2024
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
1966
2025
  readonly WINNER_LAUGH: "winner_laugh.mp3";
2026
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
1967
2027
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
2028
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
2029
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
1968
2030
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
2031
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
2032
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
1969
2033
  }>;
1970
- durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
2034
+ durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
1971
2035
  }, z.core.$strip>;
1972
2036
  }, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
1973
2037
  module: z.ZodLiteral<"emergency">;
@@ -2891,6 +2955,33 @@ export declare const powerUpSchema: z.ZodObject<{
2891
2955
  revision: z.ZodOptional<z.ZodNumber>;
2892
2956
  presentationRevision: z.ZodOptional<z.ZodNumber>;
2893
2957
  step: z.ZodLiteral<"TutorialCompleted">;
2958
+ hud: z.ZodObject<{
2959
+ coins: z.ZodNonOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
2960
+ position: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
2961
+ current: z.ZodNullable<z.ZodNumber>;
2962
+ total: z.ZodNullable<z.ZodNumber>;
2963
+ }, z.core.$strip>>>;
2964
+ laps: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
2965
+ current: z.ZodNullable<z.ZodNumber>;
2966
+ total: z.ZodNullable<z.ZodNumber>;
2967
+ }, z.core.$strip>>>;
2968
+ gameTimeLeft: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
2969
+ minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
2970
+ seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
2971
+ }, z.core.$strip>>>;
2972
+ powerUp: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
2973
+ readonly BATTLE_GOD: "Battle God";
2974
+ readonly BATTLE_STAR: "Battle Star";
2975
+ readonly BATTLE_SHOT: "Battle Shot";
2976
+ readonly BATTLE_NITRO: "Battle Nitro";
2977
+ readonly BATTLE_PULSE: "Battle Pulse";
2978
+ readonly BATTLE_TRAP: "Battle Trap";
2979
+ readonly BATTLE_SHIELD: "Battle Shield";
2980
+ readonly BATTLE_TURBO: "Battle Turbo";
2981
+ readonly BATTLE_BLUE_SHOT: "Battle Blue Shot";
2982
+ }>, z.ZodLiteral<"Clear PowerUp">]>>>;
2983
+ powerUpAnimationTimeSeconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
2984
+ }, z.core.$strip>;
2894
2985
  }, z.core.$strip>], "step">;
2895
2986
  }, z.core.$strip>, z.ZodObject<{
2896
2987
  module: z.ZodLiteral<"screen">;
@@ -2956,10 +3047,15 @@ export declare const powerUpSchema: z.ZodObject<{
2956
3047
  readonly SYSTEM_STARTED: "system_started.mp3";
2957
3048
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
2958
3049
  readonly WINNER_LAUGH: "winner_laugh.mp3";
3050
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
2959
3051
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
3052
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
3053
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
2960
3054
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
3055
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
3056
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
2961
3057
  }>;
2962
- durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
3058
+ durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
2963
3059
  }, z.core.$strip>;
2964
3060
  }, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
2965
3061
  module: z.ZodLiteral<"emergency">;
@@ -22,6 +22,11 @@ export declare const SOUND_NAME: {
22
22
  readonly SYSTEM_STARTED: "system_started.mp3";
23
23
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
24
24
  readonly WINNER_LAUGH: "winner_laugh.mp3";
25
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
25
26
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
27
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
28
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
26
29
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
30
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
31
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
27
32
  };
@@ -25,6 +25,11 @@ exports.SOUND_NAME = {
25
25
  SYSTEM_STARTED: 'system_started.mp3',
26
26
  WARNING_ALERT_THIS_IS_NOT_A_TEST: 'warning_alert_this_is_not_a_test.mp3',
27
27
  WINNER_LAUGH: 'winner_laugh.mp3',
28
+ TUTORIAL_COUNTDOWN: 'tutorial/3_2_1_go.mp3',
28
29
  TUTORIAL_WELCOME: 'tutorial/welcome_to_battle_racing.mp3',
30
+ TUTORIAL_SECURE_BELONGINGS: 'tutorial/secure_belongings.mp3',
31
+ TUTORIAL_BUCKLE_UP: 'tutorial/buckle_up.mp3',
29
32
  TUTORIAL_GAS_PEDAL: 'tutorial/gas_pedal.mp3',
33
+ TUTORIAL_BUTTON_PRESS: 'tutorial/button_press.mp3',
34
+ TUTORIAL_FINAL: 'tutorial/final_tutorial.mp3',
30
35
  };
@@ -23,6 +23,11 @@ export declare const soundNameSchema: z.ZodEnum<{
23
23
  readonly SYSTEM_STARTED: "system_started.mp3";
24
24
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
25
25
  readonly WINNER_LAUGH: "winner_laugh.mp3";
26
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
26
27
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
28
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
29
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
27
30
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
31
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
32
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
28
33
  }>;
@@ -34,6 +34,7 @@ export declare const TUTORIAL_PHASE_ID: {
34
34
  };
35
35
  export declare const TUTORIAL_LISTEN_EVENT_ON: {
36
36
  readonly TIMEOUT: "timeout";
37
+ readonly OPERATOR: "operator";
37
38
  readonly WHEEL_BUTTON: "wheelButton";
38
39
  readonly CHECKPOINT: "checkpoint";
39
40
  };
@@ -37,6 +37,7 @@ exports.TUTORIAL_PHASE_ID = {
37
37
  };
38
38
  exports.TUTORIAL_LISTEN_EVENT_ON = {
39
39
  TIMEOUT: 'timeout',
40
+ OPERATOR: 'operator',
40
41
  WHEEL_BUTTON: 'wheelButton',
41
42
  CHECKPOINT: 'checkpoint',
42
43
  };
@@ -35,6 +35,7 @@ export declare const tutorialPhaseIdSchema: z.ZodEnum<{
35
35
  }>;
36
36
  export declare const tutorialListenEventOnSchema: z.ZodEnum<{
37
37
  timeout: "timeout";
38
+ operator: "operator";
38
39
  wheelButton: "wheelButton";
39
40
  checkpoint: "checkpoint";
40
41
  }>;
@@ -180,6 +181,7 @@ export declare const tutorialParticipantSchema: z.ZodObject<{
180
181
  IN_PROGRESS: "IN_PROGRESS";
181
182
  SKIPPED: "SKIPPED";
182
183
  }>;
184
+ skipOrder: z.ZodOptional<z.ZodNumber>;
183
185
  currentPhaseId: z.ZodEnum<{
184
186
  starting_point: "starting_point";
185
187
  controls_and_hud: "controls_and_hud";
@@ -213,6 +215,8 @@ export declare const tutorialParticipantSchema: z.ZodObject<{
213
215
  latestCheckpointProgress: z.ZodOptional<z.ZodNumber>;
214
216
  coins: z.ZodDefault<z.ZodNumber>;
215
217
  currentLap: z.ZodDefault<z.ZodNumber>;
218
+ totalProgress: z.ZodDefault<z.ZodNumber>;
219
+ latestCheckpointTimeISO: z.ZodOptional<z.ZodISODateTime>;
216
220
  totalLaps: z.ZodDefault<z.ZodNumber>;
217
221
  position: z.ZodOptional<z.ZodObject<{
218
222
  current: z.ZodNumber;
@@ -247,6 +251,7 @@ export declare const tutorialSessionSchema: z.ZodObject<{
247
251
  IN_PROGRESS: "IN_PROGRESS";
248
252
  SKIPPED: "SKIPPED";
249
253
  }>;
254
+ skipOrder: z.ZodOptional<z.ZodNumber>;
250
255
  currentPhaseId: z.ZodEnum<{
251
256
  starting_point: "starting_point";
252
257
  controls_and_hud: "controls_and_hud";
@@ -280,6 +285,8 @@ export declare const tutorialSessionSchema: z.ZodObject<{
280
285
  latestCheckpointProgress: z.ZodOptional<z.ZodNumber>;
281
286
  coins: z.ZodDefault<z.ZodNumber>;
282
287
  currentLap: z.ZodDefault<z.ZodNumber>;
288
+ totalProgress: z.ZodDefault<z.ZodNumber>;
289
+ latestCheckpointTimeISO: z.ZodOptional<z.ZodISODateTime>;
283
290
  totalLaps: z.ZodDefault<z.ZodNumber>;
284
291
  position: z.ZodOptional<z.ZodObject<{
285
292
  current: z.ZodNumber;
@@ -43,6 +43,7 @@ exports.tutorialPhaseIdSchema = zod_1.z.enum([
43
43
  ]);
44
44
  exports.tutorialListenEventOnSchema = zod_1.z.enum([
45
45
  Tutorial_const_1.TUTORIAL_LISTEN_EVENT_ON.TIMEOUT,
46
+ Tutorial_const_1.TUTORIAL_LISTEN_EVENT_ON.OPERATOR,
46
47
  Tutorial_const_1.TUTORIAL_LISTEN_EVENT_ON.WHEEL_BUTTON,
47
48
  Tutorial_const_1.TUTORIAL_LISTEN_EVENT_ON.CHECKPOINT,
48
49
  ]);
@@ -99,6 +100,7 @@ exports.tutorialParticipantSchema = zod_1.z.object({
99
100
  kartGuid: zod_1.z.string().min(1),
100
101
  playerId: zod_1.z.string().optional(),
101
102
  status: exports.tutorialStatusSchema,
103
+ skipOrder: zod_1.z.number().int().positive().optional(),
102
104
  currentPhaseId: exports.tutorialPhaseIdSchema,
103
105
  currentStep: exports.tutorialScreenStepSchema,
104
106
  revision: zod_1.z.number().int().nonnegative(),
@@ -106,7 +108,9 @@ exports.tutorialParticipantSchema = zod_1.z.object({
106
108
  latestCheckpointId: zod_1.z.string().optional(),
107
109
  latestCheckpointProgress: zod_1.z.number().optional(),
108
110
  coins: zod_1.z.number().int().default(0),
109
- currentLap: zod_1.z.number().int().default(1),
111
+ currentLap: zod_1.z.number().int().default(0),
112
+ totalProgress: zod_1.z.number().default(0),
113
+ latestCheckpointTimeISO: zod_1.z.iso.datetime().optional(),
110
114
  totalLaps: zod_1.z.number().int().default(1),
111
115
  position: zod_1.z
112
116
  .object({
@@ -3,6 +3,9 @@ export declare const tutorialTimeoutListenEventSchema: z.ZodObject<{
3
3
  on: z.ZodLiteral<"timeout">;
4
4
  durationMs: z.ZodNumber;
5
5
  }, z.core.$strip>;
6
+ export declare const tutorialOperatorListenEventSchema: z.ZodObject<{
7
+ on: z.ZodLiteral<"operator">;
8
+ }, z.core.$strip>;
6
9
  export declare const tutorialWheelButtonListenEventSchema: z.ZodObject<{
7
10
  on: z.ZodLiteral<"wheelButton">;
8
11
  button: z.ZodEnum<{
@@ -23,6 +26,8 @@ export declare const tutorialCheckpointListenEventSchema: z.ZodObject<{
23
26
  export declare const tutorialListenEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
24
27
  on: z.ZodLiteral<"timeout">;
25
28
  durationMs: z.ZodNumber;
29
+ }, z.core.$strip>, z.ZodObject<{
30
+ on: z.ZodLiteral<"operator">;
26
31
  }, z.core.$strip>, z.ZodObject<{
27
32
  on: z.ZodLiteral<"wheelButton">;
28
33
  button: z.ZodEnum<{
@@ -67,6 +72,8 @@ export declare const tutorialStepConfigSchema: z.ZodObject<{
67
72
  listenEvent: z.ZodDiscriminatedUnion<[z.ZodObject<{
68
73
  on: z.ZodLiteral<"timeout">;
69
74
  durationMs: z.ZodNumber;
75
+ }, z.core.$strip>, z.ZodObject<{
76
+ on: z.ZodLiteral<"operator">;
70
77
  }, z.core.$strip>, z.ZodObject<{
71
78
  on: z.ZodLiteral<"wheelButton">;
72
79
  button: z.ZodEnum<{
@@ -971,6 +978,33 @@ export declare const tutorialStepConfigSchema: z.ZodObject<{
971
978
  revision: z.ZodOptional<z.ZodNumber>;
972
979
  presentationRevision: z.ZodOptional<z.ZodNumber>;
973
980
  step: z.ZodLiteral<"TutorialCompleted">;
981
+ hud: z.ZodObject<{
982
+ coins: z.ZodNonOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
983
+ position: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
984
+ current: z.ZodNullable<z.ZodNumber>;
985
+ total: z.ZodNullable<z.ZodNumber>;
986
+ }, z.core.$strip>>>;
987
+ laps: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
988
+ current: z.ZodNullable<z.ZodNumber>;
989
+ total: z.ZodNullable<z.ZodNumber>;
990
+ }, z.core.$strip>>>;
991
+ gameTimeLeft: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
992
+ minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
993
+ seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
994
+ }, z.core.$strip>>>;
995
+ powerUp: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
996
+ readonly BATTLE_GOD: "Battle God";
997
+ readonly BATTLE_STAR: "Battle Star";
998
+ readonly BATTLE_SHOT: "Battle Shot";
999
+ readonly BATTLE_NITRO: "Battle Nitro";
1000
+ readonly BATTLE_PULSE: "Battle Pulse";
1001
+ readonly BATTLE_TRAP: "Battle Trap";
1002
+ readonly BATTLE_SHIELD: "Battle Shield";
1003
+ readonly BATTLE_TURBO: "Battle Turbo";
1004
+ readonly BATTLE_BLUE_SHOT: "Battle Blue Shot";
1005
+ }>, z.ZodLiteral<"Clear PowerUp">]>>>;
1006
+ powerUpAnimationTimeSeconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1007
+ }, z.core.$strip>;
974
1008
  }, z.core.$strip>], "step">;
975
1009
  }, z.core.$strip>, z.ZodObject<{
976
1010
  module: z.ZodLiteral<"screen">;
@@ -1036,10 +1070,15 @@ export declare const tutorialStepConfigSchema: z.ZodObject<{
1036
1070
  readonly SYSTEM_STARTED: "system_started.mp3";
1037
1071
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
1038
1072
  readonly WINNER_LAUGH: "winner_laugh.mp3";
1073
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
1039
1074
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
1075
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
1076
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
1040
1077
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
1078
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
1079
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
1041
1080
  }>;
1042
- durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
1081
+ durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
1043
1082
  }, z.core.$strip>;
1044
1083
  }, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
1045
1084
  module: z.ZodLiteral<"emergency">;
@@ -1114,6 +1153,8 @@ export declare const tutorialPhaseConfigSchema: z.ZodObject<{
1114
1153
  listenEvent: z.ZodDiscriminatedUnion<[z.ZodObject<{
1115
1154
  on: z.ZodLiteral<"timeout">;
1116
1155
  durationMs: z.ZodNumber;
1156
+ }, z.core.$strip>, z.ZodObject<{
1157
+ on: z.ZodLiteral<"operator">;
1117
1158
  }, z.core.$strip>, z.ZodObject<{
1118
1159
  on: z.ZodLiteral<"wheelButton">;
1119
1160
  button: z.ZodEnum<{
@@ -2018,6 +2059,33 @@ export declare const tutorialPhaseConfigSchema: z.ZodObject<{
2018
2059
  revision: z.ZodOptional<z.ZodNumber>;
2019
2060
  presentationRevision: z.ZodOptional<z.ZodNumber>;
2020
2061
  step: z.ZodLiteral<"TutorialCompleted">;
2062
+ hud: z.ZodObject<{
2063
+ coins: z.ZodNonOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
2064
+ position: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
2065
+ current: z.ZodNullable<z.ZodNumber>;
2066
+ total: z.ZodNullable<z.ZodNumber>;
2067
+ }, z.core.$strip>>>;
2068
+ laps: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
2069
+ current: z.ZodNullable<z.ZodNumber>;
2070
+ total: z.ZodNullable<z.ZodNumber>;
2071
+ }, z.core.$strip>>>;
2072
+ gameTimeLeft: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
2073
+ minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
2074
+ seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
2075
+ }, z.core.$strip>>>;
2076
+ powerUp: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
2077
+ readonly BATTLE_GOD: "Battle God";
2078
+ readonly BATTLE_STAR: "Battle Star";
2079
+ readonly BATTLE_SHOT: "Battle Shot";
2080
+ readonly BATTLE_NITRO: "Battle Nitro";
2081
+ readonly BATTLE_PULSE: "Battle Pulse";
2082
+ readonly BATTLE_TRAP: "Battle Trap";
2083
+ readonly BATTLE_SHIELD: "Battle Shield";
2084
+ readonly BATTLE_TURBO: "Battle Turbo";
2085
+ readonly BATTLE_BLUE_SHOT: "Battle Blue Shot";
2086
+ }>, z.ZodLiteral<"Clear PowerUp">]>>>;
2087
+ powerUpAnimationTimeSeconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
2088
+ }, z.core.$strip>;
2021
2089
  }, z.core.$strip>], "step">;
2022
2090
  }, z.core.$strip>, z.ZodObject<{
2023
2091
  module: z.ZodLiteral<"screen">;
@@ -2083,10 +2151,15 @@ export declare const tutorialPhaseConfigSchema: z.ZodObject<{
2083
2151
  readonly SYSTEM_STARTED: "system_started.mp3";
2084
2152
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
2085
2153
  readonly WINNER_LAUGH: "winner_laugh.mp3";
2154
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
2086
2155
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
2156
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
2157
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
2087
2158
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
2159
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
2160
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
2088
2161
  }>;
2089
- durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
2162
+ durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
2090
2163
  }, z.core.$strip>;
2091
2164
  }, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
2092
2165
  module: z.ZodLiteral<"emergency">;
@@ -2165,6 +2238,8 @@ export declare const tutorialMasterConfigSchema: z.ZodObject<{
2165
2238
  listenEvent: z.ZodDiscriminatedUnion<[z.ZodObject<{
2166
2239
  on: z.ZodLiteral<"timeout">;
2167
2240
  durationMs: z.ZodNumber;
2241
+ }, z.core.$strip>, z.ZodObject<{
2242
+ on: z.ZodLiteral<"operator">;
2168
2243
  }, z.core.$strip>, z.ZodObject<{
2169
2244
  on: z.ZodLiteral<"wheelButton">;
2170
2245
  button: z.ZodEnum<{
@@ -3069,6 +3144,33 @@ export declare const tutorialMasterConfigSchema: z.ZodObject<{
3069
3144
  revision: z.ZodOptional<z.ZodNumber>;
3070
3145
  presentationRevision: z.ZodOptional<z.ZodNumber>;
3071
3146
  step: z.ZodLiteral<"TutorialCompleted">;
3147
+ hud: z.ZodObject<{
3148
+ coins: z.ZodNonOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
3149
+ position: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
3150
+ current: z.ZodNullable<z.ZodNumber>;
3151
+ total: z.ZodNullable<z.ZodNumber>;
3152
+ }, z.core.$strip>>>;
3153
+ laps: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
3154
+ current: z.ZodNullable<z.ZodNumber>;
3155
+ total: z.ZodNullable<z.ZodNumber>;
3156
+ }, z.core.$strip>>>;
3157
+ gameTimeLeft: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
3158
+ minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3159
+ seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3160
+ }, z.core.$strip>>>;
3161
+ powerUp: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
3162
+ readonly BATTLE_GOD: "Battle God";
3163
+ readonly BATTLE_STAR: "Battle Star";
3164
+ readonly BATTLE_SHOT: "Battle Shot";
3165
+ readonly BATTLE_NITRO: "Battle Nitro";
3166
+ readonly BATTLE_PULSE: "Battle Pulse";
3167
+ readonly BATTLE_TRAP: "Battle Trap";
3168
+ readonly BATTLE_SHIELD: "Battle Shield";
3169
+ readonly BATTLE_TURBO: "Battle Turbo";
3170
+ readonly BATTLE_BLUE_SHOT: "Battle Blue Shot";
3171
+ }>, z.ZodLiteral<"Clear PowerUp">]>>>;
3172
+ powerUpAnimationTimeSeconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3173
+ }, z.core.$strip>;
3072
3174
  }, z.core.$strip>], "step">;
3073
3175
  }, z.core.$strip>, z.ZodObject<{
3074
3176
  module: z.ZodLiteral<"screen">;
@@ -3134,10 +3236,15 @@ export declare const tutorialMasterConfigSchema: z.ZodObject<{
3134
3236
  readonly SYSTEM_STARTED: "system_started.mp3";
3135
3237
  readonly WARNING_ALERT_THIS_IS_NOT_A_TEST: "warning_alert_this_is_not_a_test.mp3";
3136
3238
  readonly WINNER_LAUGH: "winner_laugh.mp3";
3239
+ readonly TUTORIAL_COUNTDOWN: "tutorial/3_2_1_go.mp3";
3137
3240
  readonly TUTORIAL_WELCOME: "tutorial/welcome_to_battle_racing.mp3";
3241
+ readonly TUTORIAL_SECURE_BELONGINGS: "tutorial/secure_belongings.mp3";
3242
+ readonly TUTORIAL_BUCKLE_UP: "tutorial/buckle_up.mp3";
3138
3243
  readonly TUTORIAL_GAS_PEDAL: "tutorial/gas_pedal.mp3";
3244
+ readonly TUTORIAL_BUTTON_PRESS: "tutorial/button_press.mp3";
3245
+ readonly TUTORIAL_FINAL: "tutorial/final_tutorial.mp3";
3139
3246
  }>;
3140
- durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
3247
+ durationMs: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>]>>;
3141
3248
  }, z.core.$strip>;
3142
3249
  }, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
3143
3250
  module: z.ZodLiteral<"emergency">;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tutorialMasterConfigSchema = exports.tutorialPhaseConfigSchema = exports.tutorialStepConfigSchema = exports.tutorialListenEventSchema = exports.tutorialCheckpointListenEventSchema = exports.tutorialWheelButtonListenEventSchema = exports.tutorialTimeoutListenEventSchema = void 0;
3
+ exports.tutorialMasterConfigSchema = exports.tutorialPhaseConfigSchema = exports.tutorialStepConfigSchema = exports.tutorialListenEventSchema = exports.tutorialCheckpointListenEventSchema = exports.tutorialWheelButtonListenEventSchema = exports.tutorialOperatorListenEventSchema = exports.tutorialTimeoutListenEventSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const Command_schema_1 = require("../command/Command.schema");
6
6
  const Tutorial_const_1 = require("./Tutorial.const");
@@ -9,6 +9,9 @@ exports.tutorialTimeoutListenEventSchema = zod_1.z.object({
9
9
  on: zod_1.z.literal(Tutorial_const_1.TUTORIAL_LISTEN_EVENT_ON.TIMEOUT),
10
10
  durationMs: zod_1.z.number().int().positive(),
11
11
  });
12
+ exports.tutorialOperatorListenEventSchema = zod_1.z.object({
13
+ on: zod_1.z.literal(Tutorial_const_1.TUTORIAL_LISTEN_EVENT_ON.OPERATOR),
14
+ });
12
15
  exports.tutorialWheelButtonListenEventSchema = zod_1.z.object({
13
16
  on: zod_1.z.literal(Tutorial_const_1.TUTORIAL_LISTEN_EVENT_ON.WHEEL_BUTTON),
14
17
  button: Tutorial_schema_1.tutorialSteeringWheelButtonSchema,
@@ -19,6 +22,7 @@ exports.tutorialCheckpointListenEventSchema = zod_1.z.object({
19
22
  });
20
23
  exports.tutorialListenEventSchema = zod_1.z.discriminatedUnion('on', [
21
24
  exports.tutorialTimeoutListenEventSchema,
25
+ exports.tutorialOperatorListenEventSchema,
22
26
  exports.tutorialWheelButtonListenEventSchema,
23
27
  exports.tutorialCheckpointListenEventSchema,
24
28
  ]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@battle-racing/br-common-lib",
3
- "version": "6.2.1-rc.1",
3
+ "version": "6.2.1-rc.3",
4
4
  "description": "Common library for all Battle Racing Repositorios",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  AllCommandsConfig,
3
+ PLAY_SOUND_DURATION,
3
4
  POWER_UP_NAME,
4
5
  SOUND_NAME,
5
6
  ScreenTutorialHud,
@@ -35,6 +36,16 @@ const stopKartCommands: AllCommandsConfig[] = [
35
36
  { module: 'speed', action: 'deactivate' },
36
37
  ];
37
38
 
39
+ const buttonFeedbackCommands: AllCommandsConfig[] = [
40
+ {
41
+ module: 'sound',
42
+ action: 'play',
43
+ params: {
44
+ soundName: SOUND_NAME.TUTORIAL_BUTTON_PRESS,
45
+ },
46
+ },
47
+ ];
48
+
38
49
  // The step fires the nitro, after it ends the speed module goes back to its default speed
39
50
  const returnToFinishCommands: AllCommandsConfig[] = [
40
51
  {
@@ -72,6 +83,13 @@ export const allTutorialConfig: TutorialMasterConfig = {
72
83
  step: TUTORIAL_SCREEN_STEP.COUNTDOWN,
73
84
  },
74
85
  },
86
+ {
87
+ module: 'sound',
88
+ action: 'play',
89
+ params: {
90
+ soundName: SOUND_NAME.TUTORIAL_COUNTDOWN,
91
+ },
92
+ },
75
93
  ],
76
94
  },
77
95
  {
@@ -81,7 +99,7 @@ export const allTutorialConfig: TutorialMasterConfig = {
81
99
  screenStep: TUTORIAL_SCREEN_STEP.WELCOME,
82
100
  listenEvent: {
83
101
  on: TUTORIAL_LISTEN_EVENT_ON.TIMEOUT,
84
- durationMs: 6000,
102
+ durationMs: 5000,
85
103
  },
86
104
  triggerCommands: [
87
105
  ...stopKartCommands,
@@ -108,7 +126,7 @@ export const allTutorialConfig: TutorialMasterConfig = {
108
126
  screenStep: TUTORIAL_SCREEN_STEP.PERSONAL_ITEMS,
109
127
  listenEvent: {
110
128
  on: TUTORIAL_LISTEN_EVENT_ON.TIMEOUT,
111
- durationMs: 4000,
129
+ durationMs: 5000,
112
130
  },
113
131
  triggerCommands: [
114
132
  ...stopKartCommands,
@@ -119,6 +137,13 @@ export const allTutorialConfig: TutorialMasterConfig = {
119
137
  step: TUTORIAL_SCREEN_STEP.PERSONAL_ITEMS,
120
138
  },
121
139
  },
140
+ {
141
+ module: 'sound',
142
+ action: 'play',
143
+ params: {
144
+ soundName: SOUND_NAME.TUTORIAL_SECURE_BELONGINGS,
145
+ },
146
+ },
122
147
  ],
123
148
  },
124
149
  {
@@ -139,6 +164,13 @@ export const allTutorialConfig: TutorialMasterConfig = {
139
164
  step: TUTORIAL_SCREEN_STEP.SEAT_BELT,
140
165
  },
141
166
  },
167
+ {
168
+ module: 'sound',
169
+ action: 'play',
170
+ params: {
171
+ soundName: SOUND_NAME.TUTORIAL_BUCKLE_UP,
172
+ },
173
+ },
142
174
  ],
143
175
  },
144
176
  {
@@ -227,6 +259,7 @@ export const allTutorialConfig: TutorialMasterConfig = {
227
259
  },
228
260
  triggerCommands: [
229
261
  ...stopKartCommands,
262
+ ...buttonFeedbackCommands,
230
263
  {
231
264
  module: 'screen',
232
265
  action: 'showTutorialView',
@@ -247,6 +280,7 @@ export const allTutorialConfig: TutorialMasterConfig = {
247
280
  },
248
281
  triggerCommands: [
249
282
  ...stopKartCommands,
283
+ ...buttonFeedbackCommands,
250
284
  {
251
285
  module: 'screen',
252
286
  action: 'showTutorialView',
@@ -309,6 +343,7 @@ export const allTutorialConfig: TutorialMasterConfig = {
309
343
  },
310
344
  triggerCommands: [
311
345
  ...stopKartCommands,
346
+ ...buttonFeedbackCommands,
312
347
  {
313
348
  module: 'screen',
314
349
  action: 'showTutorialView',
@@ -330,6 +365,7 @@ export const allTutorialConfig: TutorialMasterConfig = {
330
365
  },
331
366
  triggerCommands: [
332
367
  ...stopKartCommands,
368
+ ...buttonFeedbackCommands,
333
369
  {
334
370
  module: 'screen',
335
371
  action: 'showTutorialView',
@@ -351,6 +387,7 @@ export const allTutorialConfig: TutorialMasterConfig = {
351
387
  },
352
388
  triggerCommands: [
353
389
  ...stopKartCommands,
390
+ ...buttonFeedbackCommands,
354
391
  {
355
392
  module: 'screen',
356
393
  action: 'showTutorialView',
@@ -379,6 +416,7 @@ export const allTutorialConfig: TutorialMasterConfig = {
379
416
  },
380
417
  triggerCommands: [
381
418
  ...startDrivingCommands,
419
+ ...buttonFeedbackCommands,
382
420
  {
383
421
  module: 'screen',
384
422
  action: 'showTutorialView',
@@ -429,6 +467,13 @@ export const allTutorialConfig: TutorialMasterConfig = {
429
467
  hud: defaultTutorialHud,
430
468
  },
431
469
  },
470
+ {
471
+ module: 'sound',
472
+ action: 'play',
473
+ params: {
474
+ soundName: SOUND_NAME.POWER_UP_SELECTION,
475
+ },
476
+ },
432
477
  ],
433
478
  },
434
479
  {
@@ -466,8 +511,7 @@ export const allTutorialConfig: TutorialMasterConfig = {
466
511
  name: 'Tutorial Completed Screen',
467
512
  screenStep: TUTORIAL_SCREEN_STEP.TUTORIAL_COMPLETED,
468
513
  listenEvent: {
469
- on: TUTORIAL_LISTEN_EVENT_ON.TIMEOUT,
470
- durationMs: 5000,
514
+ on: TUTORIAL_LISTEN_EVENT_ON.OPERATOR,
471
515
  },
472
516
  triggerCommands: [
473
517
  ...stopKartCommands,
@@ -476,6 +520,15 @@ export const allTutorialConfig: TutorialMasterConfig = {
476
520
  action: 'showTutorialView',
477
521
  params: {
478
522
  step: TUTORIAL_SCREEN_STEP.TUTORIAL_COMPLETED,
523
+ hud: defaultTutorialHud,
524
+ },
525
+ },
526
+ {
527
+ module: 'sound',
528
+ action: 'play',
529
+ params: {
530
+ soundName: SOUND_NAME.TUTORIAL_FINAL,
531
+ durationMs: PLAY_SOUND_DURATION.INFINITE,
479
532
  },
480
533
  },
481
534
  ],
@@ -45,7 +45,7 @@ export const speedModuleCommandSchema = z.union([
45
45
 
46
46
  // --- Sound Commands ---
47
47
  export const playSoundActionCommandOptionsSchema = playSoundOptionsSchema.omit({ durationMs: true }).extend({
48
- durationMs: arithmeticOrNumberSchema.optional(),
48
+ durationMs: z.union([playSoundOptionsSchema.shape.durationMs.unwrap(), arithmeticExpressionSchema]).optional(),
49
49
  });
50
50
 
51
51
  export const soundModuleCommandSchema = z.object({
@@ -60,5 +60,5 @@ export const screenTutorialViewInputSchema = z.discriminatedUnion('step', [
60
60
  createHudTutorialStepSchema(TUTORIAL_SCREEN_STEP.POWER_UP_NITRO_READY),
61
61
  createHudTutorialStepSchema(TUTORIAL_SCREEN_STEP.POWER_UP_RETURN_TO_HUD),
62
62
 
63
- createStaticTutorialStepSchema(TUTORIAL_SCREEN_STEP.TUTORIAL_COMPLETED),
63
+ createHudTutorialStepSchema(TUTORIAL_SCREEN_STEP.TUTORIAL_COMPLETED),
64
64
  ]);
@@ -22,6 +22,11 @@ export const SOUND_NAME = {
22
22
  SYSTEM_STARTED: 'system_started.mp3',
23
23
  WARNING_ALERT_THIS_IS_NOT_A_TEST: 'warning_alert_this_is_not_a_test.mp3',
24
24
  WINNER_LAUGH: 'winner_laugh.mp3',
25
+ TUTORIAL_COUNTDOWN: 'tutorial/3_2_1_go.mp3',
25
26
  TUTORIAL_WELCOME: 'tutorial/welcome_to_battle_racing.mp3',
27
+ TUTORIAL_SECURE_BELONGINGS: 'tutorial/secure_belongings.mp3',
28
+ TUTORIAL_BUCKLE_UP: 'tutorial/buckle_up.mp3',
26
29
  TUTORIAL_GAS_PEDAL: 'tutorial/gas_pedal.mp3',
30
+ TUTORIAL_BUTTON_PRESS: 'tutorial/button_press.mp3',
31
+ TUTORIAL_FINAL: 'tutorial/final_tutorial.mp3',
27
32
  } as const;
@@ -41,6 +41,7 @@ export const TUTORIAL_PHASE_ID = {
41
41
 
42
42
  export const TUTORIAL_LISTEN_EVENT_ON = {
43
43
  TIMEOUT: 'timeout',
44
+ OPERATOR: 'operator',
44
45
  WHEEL_BUTTON: 'wheelButton',
45
46
  CHECKPOINT: 'checkpoint',
46
47
  } as const;
@@ -52,6 +52,7 @@ export const tutorialPhaseIdSchema = z.enum([
52
52
 
53
53
  export const tutorialListenEventOnSchema = z.enum([
54
54
  TUTORIAL_LISTEN_EVENT_ON.TIMEOUT,
55
+ TUTORIAL_LISTEN_EVENT_ON.OPERATOR,
55
56
  TUTORIAL_LISTEN_EVENT_ON.WHEEL_BUTTON,
56
57
  TUTORIAL_LISTEN_EVENT_ON.CHECKPOINT,
57
58
  ]);
@@ -118,6 +119,7 @@ export const tutorialParticipantSchema = z.object({
118
119
  kartGuid: z.string().min(1),
119
120
  playerId: z.string().optional(),
120
121
  status: tutorialStatusSchema,
122
+ skipOrder: z.number().int().positive().optional(),
121
123
  currentPhaseId: tutorialPhaseIdSchema,
122
124
  currentStep: tutorialScreenStepSchema,
123
125
  revision: z.number().int().nonnegative(),
@@ -125,7 +127,9 @@ export const tutorialParticipantSchema = z.object({
125
127
  latestCheckpointId: z.string().optional(),
126
128
  latestCheckpointProgress: z.number().optional(),
127
129
  coins: z.number().int().default(0),
128
- currentLap: z.number().int().default(1),
130
+ currentLap: z.number().int().default(0),
131
+ totalProgress: z.number().default(0),
132
+ latestCheckpointTimeISO: z.iso.datetime().optional(),
129
133
  totalLaps: z.number().int().default(1),
130
134
  position: z
131
135
  .object({
@@ -13,6 +13,10 @@ export const tutorialTimeoutListenEventSchema = z.object({
13
13
  durationMs: z.number().int().positive(),
14
14
  });
15
15
 
16
+ export const tutorialOperatorListenEventSchema = z.object({
17
+ on: z.literal(TUTORIAL_LISTEN_EVENT_ON.OPERATOR),
18
+ });
19
+
16
20
  export const tutorialWheelButtonListenEventSchema = z.object({
17
21
  on: z.literal(TUTORIAL_LISTEN_EVENT_ON.WHEEL_BUTTON),
18
22
  button: tutorialSteeringWheelButtonSchema,
@@ -25,6 +29,7 @@ export const tutorialCheckpointListenEventSchema = z.object({
25
29
 
26
30
  export const tutorialListenEventSchema = z.discriminatedUnion('on', [
27
31
  tutorialTimeoutListenEventSchema,
32
+ tutorialOperatorListenEventSchema,
28
33
  tutorialWheelButtonListenEventSchema,
29
34
  tutorialCheckpointListenEventSchema,
30
35
  ]);