‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_globallogic_audio.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\music_shared;
5 #using scripts\shared\system_shared;
6 #using scripts\shared\util_shared;
7 
8 #insert scripts\shared\shared.gsh;
9 
10 #using scripts\zm\gametypes\_globallogic_utils;
11 
12 #using scripts\zm\_util;
13 
14 #namespace globallogic_audio;
15 
16 ‪REGISTER_SYSTEM( "globallogic_audio", &‪__init__, undefined )
17 
18 function ‪__init__()
19 {
21 }
22 
23 function ‪init()
24 {
25  game["music"]["defeat"] = "mus_defeat";
26  game["music"]["victory_spectator"] = "mus_defeat";
27  game["music"]["winning"] = "mus_time_running_out_winning";
28  game["music"]["losing"] = "mus_time_running_out_losing";
29  game["music"]["match_end"] = "mus_match_end";
30  game["music"]["victory_tie"] = "mus_defeat";
31 
32  game["music"]["suspense"] = [];
33  game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_01";
34  game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_02";
35  game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_03";
36  game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_04";
37  game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_05";
38  game["music"]["suspense"][game["music"]["suspense"].size] = "mus_suspense_06";
39 
40  game["dialog"]["mission_success"] = "mission_success";
41  game["dialog"]["mission_failure"] = "mission_fail";
42  game["dialog"]["mission_draw"] = "draw";
43 
44  game["dialog"]["round_success"] = "encourage_win";
45  game["dialog"]["round_failure"] = "encourage_lost";
46  game["dialog"]["round_draw"] = "draw";
47 
48  // status
49  game["dialog"]["timesup"] = "timesup";
50  game["dialog"]["winning"] = "winning";
51  game["dialog"]["losing"] = "losing";
52  game["dialog"]["min_draw"] = "min_draw";
53  game["dialog"]["lead_lost"] = "lead_lost";
54  game["dialog"]["lead_tied"] = "tied";
55  game["dialog"]["lead_taken"] = "lead_taken";
56  game["dialog"]["last_alive"] = "lastalive";
57 
58  game["dialog"]["boost"] = "generic_boost";
59 
60  if ( !isdefined( game["dialog"]["offense_obj"] ) )
61  game["dialog"]["offense_obj"] = "generic_boost";
62  if ( !isdefined( game["dialog"]["defense_obj"] ) )
63  game["dialog"]["defense_obj"] = "generic_boost";
64 
65  game["dialog"]["hardcore"] = "hardcore";
66  game["dialog"]["oldschool"] = "oldschool";
67  game["dialog"]["highspeed"] = "highspeed";
68  game["dialog"]["tactical"] = "tactical";
69 
70  game["dialog"]["challenge"] = "challengecomplete";
71  game["dialog"]["promotion"] = "promotion";
72 
73  game["dialog"]["bomb_acquired"] = "sd_bomb_taken";
74  game["dialog"]["bomb_taken"] = "sd_bomb_taken_taken";
75  game["dialog"]["bomb_lost"] = "sd_bomb_drop";
76  game["dialog"]["bomb_defused"] = "sd_bomb_defused";
77  game["dialog"]["bomb_planted"] = "sd_bomb_planted";
78 
79  game["dialog"]["obj_taken"] = "securedobj";
80  game["dialog"]["obj_lost"] = "lostobj";
81 
82  game["dialog"]["obj_defend"] = "defend_start";
83  game["dialog"]["obj_destroy"] = "destroy_start";
84  game["dialog"]["obj_capture"] = "capture_obj";
85  game["dialog"]["objs_capture"] = "capture_objs";
86 
87  game["dialog"]["hq_located"] = "hq_located";
88  game["dialog"]["hq_enemy_captured"] = "hq_capture";
89  game["dialog"]["hq_enemy_destroyed"] = "hq_defend";
90  game["dialog"]["hq_secured"] = "hq_secured";
91  game["dialog"]["hq_offline"] = "hq_offline";
92  game["dialog"]["hq_online"] = "hq_online";
93 
94  game["dialog"]["koth_located"] = "koth_located";
95  game["dialog"]["koth_captured"] = "koth_captured";
96  game["dialog"]["koth_lost"] = "koth_lost";
97  game["dialog"]["koth_secured"] = "koth_secured";
98  game["dialog"]["koth_contested"] = "koth_contest";
99  game["dialog"]["koth_offline"] = "koth_offline";
100  game["dialog"]["koth_online"] = "koth_online";
101 
102 
103  game["dialog"]["move_to_new"] = "new_positions";
104 
105  game["dialog"]["attack"] = "attack";
106  game["dialog"]["defend"] = "defend";
107  game["dialog"]["offense"] = "offense";
108  game["dialog"]["defense"] = "defense";
109 
110  game["dialog"]["halftime"] = "halftime";
111  game["dialog"]["overtime"] = "overtime";
112  game["dialog"]["side_switch"] = "switchingsides";
113 
114  game["dialog"]["flag_taken"] = "ourflag";
115  game["dialog"]["flag_dropped"] = "ourflag_drop";
116  game["dialog"]["flag_returned"] = "ourflag_return";
117  game["dialog"]["flag_captured"] = "ourflag_capt";
118  game["dialog"]["enemy_flag_taken"] = "enemyflag";
119  game["dialog"]["enemy_flag_dropped"] = "enemyflag_drop";
120  game["dialog"]["enemy_flag_returned"] = "enemyflag_return";
121  game["dialog"]["enemy_flag_captured"] = "enemyflag_capt";
122 
123  /*game["dialog"]["capturing_a"] = "dom_capturing_a";
124  game["dialog"]["capturing_b"] = "dom_capturing_b";
125  game["dialog"]["capturing_c"] = "dom_capturing_c";
126  game["dialog"]["capturing_d"] = "dom_capturing_d";
127  game["dialog"]["capturing_e"] = "dom_capturing_e";
128  game["dialog"]["capturing_f"] = "dom_capturing_f";
129  game["dialog"]["captured_a"] = "dom_capture_a";
130  game["dialog"]["captured_b"] = "dom_capture_b";
131  game["dialog"]["captured_c"] = "dom_capture_c";
132  game["dialog"]["captured_d"] = "dom_capture_d";
133  game["dialog"]["captured_e"] = "dom_capture_e";
134  game["dialog"]["captured_f"] = "dom_capture_f";*/
135 
136  game["dialog"]["securing_a"] = "dom_securing_a";
137  game["dialog"]["securing_b"] = "dom_securing_b";
138  game["dialog"]["securing_c"] = "dom_securing_c";
139  game["dialog"]["securing_d"] = "dom_securing_d";
140  game["dialog"]["securing_e"] = "dom_securing_e";
141  game["dialog"]["securing_f"] = "dom_securing_f";
142  game["dialog"]["secured_a"] = "dom_secured_a";
143  game["dialog"]["secured_b"] = "dom_secured_b";
144  game["dialog"]["secured_c"] = "dom_secured_c";
145  game["dialog"]["secured_d"] = "dom_secured_d";
146  game["dialog"]["secured_e"] = "dom_secured_e";
147  game["dialog"]["secured_f"] = "dom_secured_f";
148 
149  game["dialog"]["losing_a"] = "dom_losing_a";
150  game["dialog"]["losing_b"] = "dom_losing_b";
151  game["dialog"]["losing_c"] = "dom_losing_c";
152  game["dialog"]["losing_d"] = "dom_losing_d";
153  game["dialog"]["losing_e"] = "dom_losing_e";
154  game["dialog"]["losing_f"] = "dom_losing_f";
155  game["dialog"]["lost_a"] = "dom_lost_a";
156  game["dialog"]["lost_b"] = "dom_lost_b";
157  game["dialog"]["lost_c"] = "dom_lost_c";
158  game["dialog"]["lost_d"] = "dom_lost_d";
159  game["dialog"]["lost_e"] = "dom_lost_e";
160  game["dialog"]["lost_f"] = "dom_lost_f";
161 
162  /*game["dialog"]["enemy_taking_a"] = "enemy_take_a";
163  game["dialog"]["enemy_taking_b"] = "enemy_take_b";
164  game["dialog"]["enemy_taking_c"] = "enemy_take_c";
165  game["dialog"]["enemy_taking_d"] = "enemy_take_d";
166  game["dialog"]["enemy_taking_e"] = "enemy_take_e";
167  game["dialog"]["enemy_taking_f"] = "enemy_take_f";
168  game["dialog"]["enemy_has_a"] = "enemy_has_a";
169  game["dialog"]["enemy_has_b"] = "enemy_has_b";
170  game["dialog"]["enemy_has_c"] = "enemy_has_c";
171  game["dialog"]["enemy_has_d"] = "enemy_has_d";
172  game["dialog"]["enemy_has_e"] = "enemy_has_e";
173  game["dialog"]["enemy_has_f"] = "enemy_has_f";*/
174 
175  //War
176  game["dialog"]["secure_flag"] = "secure_flag";
177  game["dialog"]["securing_flag"] = "securing_flag";
178  game["dialog"]["losing_flag"] = "losing_flag";
179  game["dialog"]["lost_flag"] = "lost_flag";
180  game["dialog"]["oneflag_enemy"] = "oneflag_enemy";
181  game["dialog"]["oneflag_friendly"] = "oneflag_friendly";
182 
183  game["dialog"]["lost_all"] = "dom_lock_theytake";
184  game["dialog"]["secure_all"] = "dom_lock_wetake";
185 
186  //squads
187  game["dialog"]["squad_move"] = "squad_move";
188  game["dialog"]["squad_30sec"] = "squad_30sec";
189  game["dialog"]["squad_winning"] = "squad_onemin_vic";
190  game["dialog"]["squad_losing"] = "squad_onemin_loss";
191  game["dialog"]["squad_down"] = "squad_down";
192  game["dialog"]["squad_bomb"] = "squad_bomb";
193  game["dialog"]["squad_plant"] = "squad_plant";
194  game["dialog"]["squad_take"] = "squad_takeobj";
195 
196  //Player kicked
197  game["dialog"]["kicked"] = "player_kicked";
198 
199  //Equipment and turret destroyed lines
200  game["dialog"]["sentry_destroyed"] = "dest_sentry";
201  game["dialog"]["sentry_hacked"] = "kls_turret_hacked";
202  game["dialog"]["microwave_destroyed"] = "dest_microwave";
203  game["dialog"]["microwave_hacked"] = "kls_microwave_hacked";
204  game["dialog"]["sam_destroyed"] = "dest_sam";
205  game["dialog"]["tact_destroyed"] = "dest_tact";
206  game["dialog"]["equipment_destroyed"] = "dest_equip";
207  game["dialog"]["hacked_equip"] = "hacked_equip";
208  game["dialog"]["uav_destroyed"] = "kls_u2_destroyed";
209  game["dialog"]["cuav_destroyed"] = "kls_cu2_destroyed";
210 
211  level.dialogGroups = [];
212 
213  //level thread suspenseMusic();
214  level thread ‪post_match_snapshot_watcher();
215 }
216 
217 function ‪registerDialogGroup( group, skipIfCurrentlyPlayingGroup )
218 {
219  if ( !isdefined( level.dialogGroups ) )
220  {
221  level.dialogGroups = [];
222  }
223  else if ( isdefined(level.dialogGroup[group]) )
224  {
225  ‪util::error( "registerDialogGroup: Dialog group " + group + " already registered." );
226  return;
227  }
228 
229  level.dialogGroup[group] = SpawnStruct();
230  level.dialogGroup[group].group = group;
231  level.dialogGroup[group].skipIfCurrentlyPlayingGroup = skipIfCurrentlyPlayingGroup;
232  level.dialogGroup[group].currentCount = 0;
233 }
234 
236 {
237  self endon( "disconnect" );
238 
239  if ( game["state"] == "postgame" )
240  // if the games over do not change music state
241  return;
242  if ( !isdefined(level.nextMusicState) )
243  {
244  //wait 25;
245  self.pers["music"].currentState = "UNDERSCORE";
246  //self thread globallogic_audio::set_music_on_player( "UNDERSCORE", true );
247  self thread ‪suspenseMusic();
248  }
249 }
250 
252 {
253  self endon("disconnect");
254 
255 // self thread set_music_on_player( "SILENT", false );
256 
257 // wait (1);
258 
259  self thread ‪set_music_on_player( "UNDERSCORE", false );
260 }
261 
262 function ‪suspenseMusic( random )
263 {
264  level endon ( "game_ended" );
265  level endon ( "match_ending_soon" );
266  self endon( "disconnect" );
267 
268  //wait 35;
269 
270  while (1)
271  {
272  wait( randomintrange( 25, 60 ) );
273 
274  if ( !isdefined( self.pers["music"].inque ) )
275  {
276  // ensure that false is default
277  self.pers["music"].inque = false;
278  }
279 
280  if ( self.pers["music"].inque )
281  {
282  continue;
283  }
284 
285  if ( !isdefined( self.pers["music"].currentState ) )
286  {
287  // ensure that false is default
288  self.pers["music"].currentState = "SILENT";
289  }
290 
291  //self.underscoreChance = 100;
292  if( RandomInt( 100 ) < self.underscoreChance && self.pers["music"].currentState != "ACTION" && self.pers["music"].currentState != "TIME_OUT" )
293  {
294  self thread ‪suspenseMusicForPlayer();
295  self.underscoreChance = self.underscoreChance - 20;
296  }
297  }
298 }
299 
300 function ‪leaderDialogForOtherTeams( dialog, skip_team, squad_dialog )
301 {
302  foreach( team in level.teams )
303  {
304  if ( team != skip_team )
305  {
306  ‪leaderDialog( dialog, team, undefined, undefined, squad_dialog );
307  }
308  }
309 }
310 
311 function ‪announceRoundWinner( winner, ‪delay )
312 {
313  if ( ‪delay > 0 )
314  wait ‪delay;
315 
316  if ( !isdefined( winner ) || isPlayer( winner ) )
317  return;
318 
319  if ( isdefined( level.teams[ winner ] ) )
320  {
321  //thread util::playSoundOnPlayers( "mus_round_win"+"_"+level.teamPostfix[winner] );
322  //thread util::playSoundOnPlayers( "mus_round_loss"+"_"+level.teamPostfix[team] );
323  ‪leaderDialog( "round_success", winner );
324  ‪leaderDialogForOtherTeams( "round_failure", winner );
325  }
326  else
327  {
328  foreach ( team in level.teams )
329  {
330  thread ‪util::playSoundOnPlayers( "mus_round_draw"+"_"+level.teamPostfix[team] );
331  }
332  ‪leaderDialog( "round_draw" );
333  }
334 }
335 
336 
337 function ‪announceGameWinner( winner, ‪delay )
338 {
339  if ( ‪delay > 0 )
340  wait ‪delay;
341 
342  if ( !isdefined( winner ) || isPlayer( winner ) )
343  return;
344 
345  if ( isdefined( level.teams[ winner ] ) )
346  {
347  ‪leaderDialog( "mission_success", winner );
348  ‪leaderDialogForOtherTeams( "mission_failure", winner );
349  }
350  else
351  {
352  ‪leaderDialog( "mission_draw" );
353  }
354 }
355 
356 
357 function ‪doFlameAudio()
358 {
359  self endon("disconnect");
360  waittillframeend;
361 
362  if (!isdefined ( self.lastFlameHurtAudio ) )
363  self.lastFlameHurtAudio = 0;
364 
365  currentTime = gettime();
366 
367  if ( self.lastFlameHurtAudio + level.fire_audio_repeat_duration + RandomInt( level.fire_audio_random_max_duration ) < currentTime )
368  {
369  self playLocalSound("vox_pain_small");
370  self.lastFlameHurtAudio = currentTime;
371  }
372 }
373 
374 
375 function ‪leaderDialog( dialog, team, group, excludeList, squadDialog )
376 {
377  assert( isdefined( level.players ) );
378 
379  if ( level.splitscreen )
380  return;
381 
382  if ( level.wagerMatch )
383  return;
384 
385  if ( !isdefined( team ) )
386  {
387  dialogs = [];
388  foreach ( team in level.teams )
389  {
390  dialogs[team] = dialog;
391  }
392  ‪leaderDialogAllTeams( dialogs, group, excludeList );
393  return;
394  }
395 
396  if ( level.splitscreen )
397  {
398  if ( level.players.size )
399  level.players[0] ‪leaderDialogOnPlayer( dialog, group );
400  return;
401  }
402 
403 
404  if ( isdefined( excludeList ) )
405  {
406  for ( i = 0; i < level.players.size; i++ )
407  {
408  player = level.players[i];
409  if ( (isdefined( player.pers["team"] ) && (player.pers["team"] == team )) && !‪globallogic_utils::isExcluded( player, excludeList ) )
410  player ‪leaderDialogOnPlayer( dialog, group );
411  }
412  }
413  else
414  {
415  for ( i = 0; i < level.players.size; i++ )
416  {
417  player = level.players[i];
418  if ( isdefined( player.pers["team"] ) && (player.pers["team"] == team ) )
419  player ‪leaderDialogOnPlayer( dialog, group );
420  }
421  }
422 }
423 
424 function ‪leaderDialogAllTeams( dialogs, group, excludeList )
425 {
426  assert( isdefined( level.players ) );
427 
428  if ( level.splitscreen )
429  return;
430 
431  if ( level.splitscreen )
432  {
433  if ( level.players.size )
434  level.players[0] ‪leaderDialogOnPlayer( dialogs[level.players[0].team], group );
435  return;
436  }
437 
438  for ( i = 0; i < level.players.size; i++ )
439  {
440  player = level.players[i];
441  team = player.pers["team"];
442 
443  if ( !isdefined( team ) )
444  continue;
445 
446  if ( !isdefined( dialogs[team] ) )
447  continue;
448 
449  if ( isdefined( excludeList ) && ‪globallogic_utils::isExcluded( player, excludeList ) )
450  continue;
451 
452  player ‪leaderDialogOnPlayer( dialogs[team], group );
453  }
454 }
455 
456 function ‪flushDialog()
457 {
458  foreach( player in level.players )
459  {
460  player ‪flushDialogOnPlayer();
461  }
462 }
463 
465 {
466  self.leaderDialogGroups = [];
467  self.leaderDialogQueue = [];
468  self.leaderDialogActive = false;
469  self.currentLeaderDialogGroup = "";
470 }
471 
472 
473 function ‪flushGroupDialog( group )
474 {
475  foreach( player in level.players )
476  {
477  player ‪flushGroupDialogOnPlayer( group );
478  }
479 }
480 
482 {
483  self.leaderDialogGroups[group] = undefined;
484 
485  foreach( key, dialog in self.leaderDialogQueue )
486  {
487  if ( dialog == group )
488  self.leaderDialogQueue[key] = undefined;
489  }
490 }
491 
492 function ‪addGroupDialogToPlayer( dialog, group )
493 {
494  if ( !isdefined( level.dialogGroup[group]) )
495  {
496  ‪util::error( "leaderDialogOnPlayer: Dialog group " + group + " is not registered" );
497  return false;
498  }
499 
500  addToQueue = false;
501 
502  if ( !isdefined( self.leaderDialogGroups[group] ) )
503  {
504  addToQueue = true;
505  }
506 
507  if ( !level.dialogGroup[group].skipIfCurrentlyPlayingGroup )
508  {
509  // we will skip if we are actually playing this VO already, unless almost at the end
510  if ( self.currentLeaderDialog == dialog && self.currentLeaderDialogTime + 2000 > GetTime() )
511  {
512  // if we are currentlyPlaying this dialog then we dont want any of the groups dialogs to play
513  self.leaderDialogGroups[group] = undefined;
514 
515  foreach ( key, ‪leader_dialog in self.leaderDialogQueue)
516  {
517  if ( ‪leader_dialog == group )
518  {
519  for ( i = key + 1; i < self.leaderDialogQueue.size; i++ )
520  self.leaderDialogQueue[i-1] = self.leaderDialogQueue[i];
521  self.leaderDialogQueue[i-1] = undefined;
522  break;
523  }
524  }
525 
526  return false;
527  }
528 
529  }
530  else
531  {
532  // ignore the message if one from the same group is already playing
533  if ( self.currentLeaderDialogGroup == group )
534  {
535  return false;
536  }
537  }
538 
539  self.leaderDialogGroups[group] = dialog;
540 
541  return addToQueue;
542 }
543 
544 function ‪testDialogQueue(group)
545 {
546 }
547 
548 function ‪leaderDialogOnPlayer( dialog, group )
549 {
550  team = self.pers["team"];
551 
552  if ( level.splitscreen )
553  return;
554 
555  if ( !isdefined( team ) )
556  return;
557 
558  if ( !isdefined( level.teams[team] ) )
559  return;
560 
561  if ( isdefined( group ) )
562  {
563  // exit because the "group" dialog call is already in the queue
564  if ( !‪addGroupDialogToPlayer( dialog, group ) )
565  {
566  self ‪testDialogQueue(group);
567  return;
568  }
569 
570  dialog = group;
571  }
572 
573  if ( !self.leaderDialogActive )
574  self thread ‪playLeaderDialogOnPlayer( dialog );
575  else
576  self.leaderDialogQueue[self.leaderDialogQueue.size] = dialog;
577 }
578 
579 function ‪waitForSound( sound, extraTime )
580 {
581  if (!isdefined(extraTime) )
582  {
583  // allow the announcer to take a breath
584  extraTime = 0.1;
585  }
586 
587  time = soundgetplaybacktime( sound );
588 
589  if ( time < 0 )
590  wait( 3.0 + extraTime );
591  else
592  wait( time * 0.001 + extraTime );
593 }
594 
595 function ‪playLeaderDialogOnPlayer( dialog )
596 {
597  if( isdefined(level.allowAnnouncer) && !level.allowAnnouncer )
598  return;
599 
600  team = self.pers[ "team" ];
601 
602  self endon ( "disconnect" );
603 
604  self.leaderDialogActive = true;
605  if ( isdefined( self.leaderDialogGroups[dialog] ) )
606  {
607  group = dialog;
608  dialog = self.leaderDialogGroups[group];
609  self.leaderDialogGroups[group] = undefined;
610  self.currentLeaderDialogGroup = group;
611  self ‪testDialogQueue(group);
612  }
613 
614  if ( level.wagerMatch || !isdefined(game["voice"]) )
615  faction = "vox_wm_";
616  else
617  faction = game["voice"][team];
618 
619  sound_name = faction+game["dialog"][dialog];
620 
621  if( level.allowAnnouncer )
622  {
623  self playLocalSound( sound_name );
624  self.currentLeaderDialog = dialog;
625  self.currentLeaderDialogTime = GetTime();
626  }
627 
628  ‪waitForSound( sound_name );
629 
630  self.leaderDialogActive = false;
631  self.currentLeaderDialogGroup = "";
632  self.currentLeaderDialog = "";
633 
634  if ( self.leaderDialogQueue.size > 0 )
635  {
636  nextDialog = self.leaderDialogQueue[0];
637 
638  for ( i = 1; i < self.leaderDialogQueue.size; i++ )
639  self.leaderDialogQueue[i-1] = self.leaderDialogQueue[i];
640  self.leaderDialogQueue[i-1] = undefined;
641  if ( isdefined( self.leaderDialogGroups[dialog] ) )
642  self ‪testDialogQueue(dialog);
643 
644  self thread ‪playLeaderDialogOnPlayer( nextDialog );
645  }
646 }
647 
648 function ‪isTeamWinning( checkTeam )
649 {
650  score = game["teamScores"][checkTeam];
651 
652  foreach ( team in level.teams )
653  {
654  if ( team != checkTeam )
655  {
656  if ( game["teamScores"][team] >= score )
657  return false;
658  }
659  }
660 
661  return true;
662 }
663 
665 {
666  foreach ( team in level.teams )
667  {
668  if ( ‪isTeamWinning( team ) )
669  {
670  ‪leaderDialog( "winning", team, undefined, undefined, "squad_winning" );
671  ‪leaderDialogForOtherTeams( "losing", team, "squad_losing" );
672  return true;
673  }
674  }
675 
676  return false;
677 }
678 
680 {
681  level endon ( "game_ended" );
682 
683  level thread ‪musicTimesOut();
684 
685  level waittill ( "match_ending_soon" );
686 
688  {
689  if ( !level.splitScreen )
690  {
691  if( level.teamBased )
692  {
693  if( !‪announceTeamIsWinning() )
694  {
695  ‪leaderDialog( "min_draw" );
696  }
697  }
698 
699  level waittill ( "match_ending_very_soon" );
700 
701  foreach ( team in level.teams )
702  {
703  ‪leaderDialog( "timesup", team, undefined, undefined , "squad_30sec" );
704  }
705  }
706  }
707  else
708  {
709  level waittill ( "match_ending_vox" );
710 
711  ‪leaderDialog( "timesup" );
712  }
713 }
714 
716 {
717  level endon( "game_ended" );
718 
719  level waittill ( "match_ending_very_soon" );
720 
721  // removed action music replaced with ending soon for more consistant messaging. CDC
722  // if( !isdefined( level.playingActionMusic ) )
723  // level.playingActionMusic = false;
724 
725  //IPrintLnBold( "30 SECS LEFT: Time Out Music State" );
726 
727 // if( !level.playingActionMusic )
728  thread ‪globallogic_audio::set_music_on_team( "TIME_OUT", "both" , true, false );
729 }
730 
732 {
733  level endon( "game_ended" );
734  level.playingActionMusic = true;
735  wait(45);
736  level.playingActionMusic = false;
737 }
738 
739 function ‪play_2d_on_team( alias, team )
740 {
741  assert( isdefined( level.players ) );
742 
743  for ( i = 0; i < level.players.size; i++ )
744  {
745  player = level.players[i];
746  if ( isdefined( player.pers["team"] ) && (player.pers["team"] == team ) )
747  {
748  player playLocalSound( alias );
749  }
750  }
751 }
752 
753 function ‪set_music_on_team( state, team, save_state, return_state, wait_time )
754 {
755  if( SessionModeIsZombiesGame() )
756  return;
757 
758  // Assert if there are no players
759  assert( isdefined( level.players ) );
760 
761  if ( !isdefined( team ) )
762  {
763  team = "both";
764  }
765  if ( !isdefined( save_state ) )
766  {
767  save_sate = false;
768  }
769  if ( !isdefined( return_state ) )
770  {
771  return_state = false;
772  }
773  if ( !isdefined( wait_time ) )
774  {
775  wait_time = 0;
776  }
777 
778  for ( i = 0; i < level.players.size; i++ )
779  {
780  player = level.players[i];
781  if ( team == "both" )
782  {
783  // if no team is set or team is set to "both" set same state for all players
784  player thread ‪set_music_on_player ( state, save_state, return_state, wait_time );
785  }
786  else if ( isdefined( player.pers["team"] ) && (player.pers["team"] == team ) )
787  {
788  player thread ‪set_music_on_player ( state, save_state, return_state, wait_time );
789  }
790  }
791 }
792 function ‪set_music_on_player( state, save_state, return_state, wait_time )
793 {
794  //self is player
795  self endon( "disconnect" );
796 
797  if( SessionModeIsZombiesGame() )
798  return;
799 
800  assert( isplayer (self) );
801 
802  if ( !isdefined( save_state ) )
803  {
804  save_state = false;
805  }
806  if ( !isdefined( return_state ) )
807  {
808  return_state = false;
809  }
810  if ( !isdefined( wait_time ) )
811  {
812  wait_time = 0;
813  }
814  if ( !isdefined( state ) )
815  {
816  state = "UNDERSCORE";
817  }
818  music::setmusicstate( state, self );
819 
820  if ( isdefined ( self.pers["music"].currentState ) && save_state )
821  {
822  //If we want to save the sate we set return state to current state
823  self.pers["music"].returnState = state;
824  }
825 
826  // Set previous state to the current active state
827  self.pers["music"].previousState = self.pers["music"].currentState;
828 
829  self.pers["music"].currentState = state;
830  if ( isdefined ( self.pers["music"].returnState ) && return_state )
831  {
832  self ‪set_next_music_state ( self.pers["music"].returnState, wait_time);
833  }
834 
835 }
836 function ‪return_music_state_player( wait_time )
837 {
838  if ( !isdefined( wait_time ) )
839  {
840  wait_time = 0;
841  }
842 
843  self ‪set_next_music_state ( self.pers["music"].returnState, wait_time);
844 }
845 function ‪return_music_state_team( team, wait_time )
846 {
847  if ( !isdefined( wait_time ) )
848  {
849  wait_time = 0;
850  }
851  for ( i = 0; i < level.players.size; i++ )
852  {
853  player = level.players[i];
854  if ( team == "both" )
855  {
856  // if no team is set or team is set to "both" set same state for all players
857  player thread ‪set_next_music_state ( self.pers["music"].returnState, wait_time);
858  }
859  else if ( isdefined( player.pers["team"] ) && (player.pers["team"] == team ) )
860  {
861  player thread ‪set_next_music_state ( self.pers["music"].returnState, wait_time);
862  }
863  }
864 
865 }
866 function ‪set_next_music_state ( nextstate, wait_time )
867 {
868  // self is player
869  // set next state to latest in the que
870 
871  self endon( "disconnect" );
872 
873  self.pers["music"].nextstate = nextstate;
874  if ( !isdefined( self.pers["music"].inque ) )
875  {
876  // ensure that false is default
877  self.pers["music"].inque = false;
878  }
879  if ( self.pers["music"].inque )
880  {
881  // if we have a que waiting and another happens we do not change states yet
882  return;
883  //Debug Print CDC
884 
885  }
886  else
887  {
888  // set que to true while we wait
889  self.pers["music"].inque = true;
890 
891  // wait time from state call default is 0
892  if ( wait_time )
893  {
894  wait wait_time;
895  }
896  // Set the most current music state
897  self ‪set_music_on_player ( self.pers["music"].nextstate, false );
898 
899  // remove the que return
900  self.pers["music"].inque = false;
901  }
902 }
903 function ‪getRoundSwitchDialog( switchType )
904 {
905  switch( switchType )
906  {
907  case "halftime":
908  return "halftime";
909  case "overtime":
910  return "overtime";
911  default:
912  return "side_switch";
913  }
914 }
915 //Eckert - does a 2 stage sound fade out during and after AAR
917 {
918  level waittill ( "game_ended" );
919  level ‪util::clientNotify( "pm" );
920  level waittill ( "sfade" );
921  level ‪util::clientNotify( "pmf" );
922 }
‪flushGroupDialogOnPlayer
‪function flushGroupDialogOnPlayer(group)
Definition: _globallogic_audio.gsc:481
‪set_music_on_player
‪function set_music_on_player(state, wait_time=0, save_state=false, return_state=false)
Definition: _globallogic_audio.gsc:1053
‪isOneRound
‪function isOneRound()
Definition: util_shared.gsc:3497
‪leaderDialog
‪function leaderDialog(dialog, team, group, excludeList, squadDialog)
Definition: _globallogic_audio.gsc:375
‪addGroupDialogToPlayer
‪function addGroupDialogToPlayer(dialog, group)
Definition: _globallogic_audio.gsc:492
‪actionMusicSet
‪function actionMusicSet()
Definition: _globallogic_audio.gsc:731
‪return_music_state_player
‪function return_music_state_player(wait_time)
Definition: _globallogic_audio.gsc:836
‪on_start_gametype
‪function on_start_gametype(func, obj)
Definition: callbacks_shared.csc:285
‪waitForSound
‪function waitForSound(sound, extraTime)
Definition: _globallogic_audio.gsc:579
‪isExcluded
‪function isExcluded(entity, entityList)
Definition: _globallogic_utils.gsc:470
‪isLastRound
‪function isLastRound()
Definition: util_shared.gsc:3513
‪announceRoundWinner
‪function announceRoundWinner(winner, delay)
Definition: _globallogic_audio.gsc:311
‪suspenseMusicForPlayer
‪function suspenseMusicForPlayer()
Definition: _globallogic_audio.gsc:251
‪__init__
‪function __init__()
Definition: _globallogic_audio.gsc:22
‪delay
‪function delay(time_or_notify, str_endon, func, arg1, arg2, arg3, arg4, arg5, arg6)
Definition: util_shared.csc:784
‪set_music_on_team
‪function set_music_on_team(state, team="both", wait_time=0, save_state=false, return_state=false)
Definition: _globallogic_audio.gsc:1036
‪error
‪function error(msg)
Definition: _util.gsc:28
‪leaderDialogAllTeams
‪function leaderDialogAllTeams(dialogs, group, excludeList)
Definition: _globallogic_audio.gsc:424
‪registerDialogGroup
‪function registerDialogGroup(group, skipIfCurrentlyPlayingGroup)
Definition: _globallogic_audio.gsc:217
‪playLeaderDialogOnPlayer
‪function playLeaderDialogOnPlayer(dialog)
Definition: _globallogic_audio.gsc:595
‪suspenseMusic
‪function suspenseMusic(random)
Definition: _globallogic_audio.gsc:262
‪leaderDialogForOtherTeams
‪function leaderDialogForOtherTeams(dialog, skip_team, squad_dialog)
Definition: _globallogic_audio.gsc:300
‪init
‪function init()
Definition: _globallogic_audio.gsc:31
‪playSoundOnPlayers
‪function playSoundOnPlayers(sound, team)
Definition: _util.gsc:115
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪announceGameWinner
‪function announceGameWinner(winner, delay)
Definition: _globallogic_audio.gsc:337
‪announceTeamIsWinning
‪function announceTeamIsWinning()
Definition: _globallogic_audio.gsc:664
‪musicController
‪function musicController()
Definition: _globallogic_audio.gsc:679
‪set_next_music_state
‪function set_next_music_state(nextstate, wait_time)
Definition: _globallogic_audio.gsc:866
‪flushDialog
‪function flushDialog()
Definition: _globallogic_audio.gsc:456
‪return_music_state_team
‪function return_music_state_team(team, wait_time)
Definition: _globallogic_audio.gsc:845
‪testDialogQueue
‪function testDialogQueue(group)
Definition: _globallogic_audio.gsc:544
‪musicTimesOut
‪function musicTimesOut()
Definition: _globallogic_audio.gsc:715
‪clientNotify
‪function clientNotify(event)
Definition: util_shared.gsc:1416
‪flushGroupDialog
‪function flushGroupDialog(group)
Definition: _globallogic_audio.gsc:473
‪leader_dialog
‪function leader_dialog(dialogKey, team, excludeList, objectiveKey, killstreakId, dialogBufferKey)
Definition: _globallogic_audio.gsc:435
‪isTeamWinning
‪function isTeamWinning(checkTeam)
Definition: _globallogic_audio.gsc:648
‪doFlameAudio
‪function doFlameAudio()
Definition: _globallogic_audio.gsc:357
‪getRoundSwitchDialog
‪function getRoundSwitchDialog(switchType)
Definition: _globallogic_audio.gsc:903
‪play_2d_on_team
‪function play_2d_on_team(alias, team)
Definition: _globallogic_audio.gsc:845
‪sndStartMusicSystem
‪function sndStartMusicSystem()
Definition: _globallogic_audio.gsc:235
‪leaderDialogOnPlayer
‪function leaderDialogOnPlayer(dialog, group)
Definition: _globallogic_audio.gsc:548
‪flushDialogOnPlayer
‪function flushDialogOnPlayer()
Definition: _globallogic_audio.gsc:464
‪post_match_snapshot_watcher
‪function post_match_snapshot_watcher()
Definition: _globallogic_audio.gsc:872