1 #using scripts\codescripts\struct;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\music_shared;
5 #using scripts\shared\system_shared;
6 #using scripts\shared\util_shared;
8 #insert scripts\shared\shared.gsh;
10 #using scripts\zm\gametypes\_globallogic_utils;
12 #using scripts\zm\_util;
14 #namespace globallogic_audio;
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";
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";
40 game[
"dialog"][
"mission_success"] =
"mission_success";
41 game[
"dialog"][
"mission_failure"] =
"mission_fail";
42 game[
"dialog"][
"mission_draw"] =
"draw";
44 game[
"dialog"][
"round_success"] =
"encourage_win";
45 game[
"dialog"][
"round_failure"] =
"encourage_lost";
46 game[
"dialog"][
"round_draw"] =
"draw";
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";
58 game[
"dialog"][
"boost"] =
"generic_boost";
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";
65 game[
"dialog"][
"hardcore"] =
"hardcore";
66 game[
"dialog"][
"oldschool"] =
"oldschool";
67 game[
"dialog"][
"highspeed"] =
"highspeed";
68 game[
"dialog"][
"tactical"] =
"tactical";
70 game[
"dialog"][
"challenge"] =
"challengecomplete";
71 game[
"dialog"][
"promotion"] =
"promotion";
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";
79 game[
"dialog"][
"obj_taken"] =
"securedobj";
80 game[
"dialog"][
"obj_lost"] =
"lostobj";
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";
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";
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";
103 game[
"dialog"][
"move_to_new"] =
"new_positions";
105 game[
"dialog"][
"attack"] =
"attack";
106 game[
"dialog"][
"defend"] =
"defend";
107 game[
"dialog"][
"offense"] =
"offense";
108 game[
"dialog"][
"defense"] =
"defense";
110 game[
"dialog"][
"halftime"] =
"halftime";
111 game[
"dialog"][
"overtime"] =
"overtime";
112 game[
"dialog"][
"side_switch"] =
"switchingsides";
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";
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";
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";
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";
183 game[
"dialog"][
"lost_all"] =
"dom_lock_theytake";
184 game[
"dialog"][
"secure_all"] =
"dom_lock_wetake";
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";
197 game[
"dialog"][
"kicked"] =
"player_kicked";
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";
211 level.dialogGroups = [];
219 if ( !isdefined( level.dialogGroups ) )
221 level.dialogGroups = [];
223 else if ( isdefined(level.dialogGroup[group]) )
225 util::error(
"registerDialogGroup: Dialog group " + group +
" already registered." );
229 level.dialogGroup[group] = SpawnStruct();
230 level.dialogGroup[group].group = group;
231 level.dialogGroup[group].skipIfCurrentlyPlayingGroup = skipIfCurrentlyPlayingGroup;
232 level.dialogGroup[group].currentCount = 0;
237 self endon(
"disconnect" );
239 if ( game[
"state"] ==
"postgame" )
242 if ( !isdefined(level.nextMusicState) )
245 self.pers[
"music"].currentState =
"UNDERSCORE";
253 self endon(
"disconnect");
264 level endon (
"game_ended" );
265 level endon (
"match_ending_soon" );
266 self endon(
"disconnect" );
272 wait( randomintrange( 25, 60 ) );
274 if ( !isdefined(
self.pers[
"music"].inque ) )
277 self.pers[
"music"].inque =
false;
280 if (
self.pers[
"music"].inque )
285 if ( !isdefined(
self.pers[
"music"].currentState ) )
288 self.pers[
"music"].currentState =
"SILENT";
292 if( RandomInt( 100 ) <
self.underscoreChance &&
self.pers[
"music"].currentState !=
"ACTION" &&
self.pers[
"music"].currentState !=
"TIME_OUT" )
295 self.underscoreChance =
self.underscoreChance - 20;
302 foreach( team
in level.teams )
304 if ( team != skip_team )
306 leaderDialog( dialog, team, undefined, undefined, squad_dialog );
316 if ( !isdefined( winner ) || isPlayer( winner ) )
319 if ( isdefined( level.teams[ winner ] ) )
328 foreach ( team
in level.teams )
342 if ( !isdefined( winner ) || isPlayer( winner ) )
345 if ( isdefined( level.teams[ winner ] ) )
359 self endon(
"disconnect");
362 if (!isdefined (
self.lastFlameHurtAudio ) )
363 self.lastFlameHurtAudio = 0;
365 currentTime = gettime();
367 if (
self.lastFlameHurtAudio + level.fire_audio_repeat_duration + RandomInt( level.fire_audio_random_max_duration ) < currentTime )
369 self playLocalSound(
"vox_pain_small");
370 self.lastFlameHurtAudio = currentTime;
377 assert( isdefined( level.players ) );
379 if ( level.splitscreen )
382 if ( level.wagerMatch )
385 if ( !isdefined( team ) )
388 foreach ( team
in level.teams )
390 dialogs[team] = dialog;
396 if ( level.splitscreen )
398 if ( level.players.size )
404 if ( isdefined( excludeList ) )
406 for ( i = 0; i < level.players.size; i++ )
408 player = level.players[i];
415 for ( i = 0; i < level.players.size; i++ )
417 player = level.players[i];
418 if ( isdefined( player.pers[
"team"] ) && (player.pers[
"team"] == team ) )
426 assert( isdefined( level.players ) );
428 if ( level.splitscreen )
431 if ( level.splitscreen )
433 if ( level.players.size )
438 for ( i = 0; i < level.players.size; i++ )
440 player = level.players[i];
441 team = player.pers[
"team"];
443 if ( !isdefined( team ) )
446 if ( !isdefined( dialogs[team] ) )
458 foreach( player
in level.players )
466 self.leaderDialogGroups = [];
467 self.leaderDialogQueue = [];
468 self.leaderDialogActive =
false;
469 self.currentLeaderDialogGroup =
"";
475 foreach( player
in level.players )
483 self.leaderDialogGroups[group] = undefined;
485 foreach( key, dialog
in self.leaderDialogQueue )
487 if ( dialog == group )
488 self.leaderDialogQueue[key] = undefined;
494 if ( !isdefined( level.dialogGroup[group]) )
496 util::error(
"leaderDialogOnPlayer: Dialog group " + group +
" is not registered" );
502 if ( !isdefined(
self.leaderDialogGroups[group] ) )
507 if ( !level.dialogGroup[group].skipIfCurrentlyPlayingGroup )
510 if (
self.currentLeaderDialog == dialog &&
self.currentLeaderDialogTime + 2000 > GetTime() )
513 self.leaderDialogGroups[group] = undefined;
519 for ( i = key + 1; i <
self.leaderDialogQueue.size; i++ )
520 self.leaderDialogQueue[i-1] =
self.leaderDialogQueue[i];
521 self.leaderDialogQueue[i-1] = undefined;
533 if (
self.currentLeaderDialogGroup == group )
539 self.leaderDialogGroups[group] = dialog;
550 team =
self.pers[
"team"];
552 if ( level.splitscreen )
555 if ( !isdefined( team ) )
558 if ( !isdefined( level.teams[team] ) )
561 if ( isdefined( group ) )
573 if ( !
self.leaderDialogActive )
576 self.leaderDialogQueue[
self.leaderDialogQueue.size] = dialog;
581 if (!isdefined(extraTime) )
587 time = soundgetplaybacktime( sound );
590 wait( 3.0 + extraTime );
592 wait( time * 0.001 + extraTime );
597 if( isdefined(level.allowAnnouncer) && !level.allowAnnouncer )
600 team =
self.pers[
"team" ];
602 self endon (
"disconnect" );
604 self.leaderDialogActive =
true;
605 if ( isdefined(
self.leaderDialogGroups[dialog] ) )
608 dialog =
self.leaderDialogGroups[group];
609 self.leaderDialogGroups[group] = undefined;
610 self.currentLeaderDialogGroup = group;
614 if ( level.wagerMatch || !isdefined(game[
"voice"]) )
617 faction = game[
"voice"][team];
619 sound_name = faction+game[
"dialog"][dialog];
621 if( level.allowAnnouncer )
623 self playLocalSound( sound_name );
624 self.currentLeaderDialog = dialog;
625 self.currentLeaderDialogTime = GetTime();
630 self.leaderDialogActive =
false;
631 self.currentLeaderDialogGroup =
"";
632 self.currentLeaderDialog =
"";
634 if (
self.leaderDialogQueue.size > 0 )
636 nextDialog =
self.leaderDialogQueue[0];
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] ) )
650 score = game[
"teamScores"][checkTeam];
652 foreach ( team
in level.teams )
654 if ( team != checkTeam )
656 if ( game[
"teamScores"][team] >= score )
666 foreach ( team
in level.teams )
670 leaderDialog(
"winning", team, undefined, undefined,
"squad_winning" );
681 level endon (
"game_ended" );
685 level waittill (
"match_ending_soon" );
689 if ( !level.splitScreen )
691 if( level.teamBased )
699 level waittill (
"match_ending_very_soon" );
701 foreach ( team
in level.teams )
703 leaderDialog(
"timesup", team, undefined, undefined ,
"squad_30sec" );
709 level waittill (
"match_ending_vox" );
717 level endon(
"game_ended" );
719 level waittill (
"match_ending_very_soon" );
733 level endon(
"game_ended" );
734 level.playingActionMusic =
true;
736 level.playingActionMusic =
false;
741 assert( isdefined( level.players ) );
743 for ( i = 0; i < level.players.size; i++ )
745 player = level.players[i];
746 if ( isdefined( player.pers[
"team"] ) && (player.pers[
"team"] == team ) )
748 player playLocalSound( alias );
755 if( SessionModeIsZombiesGame() )
759 assert( isdefined( level.players ) );
761 if ( !isdefined( team ) )
765 if ( !isdefined( save_state ) )
769 if ( !isdefined( return_state ) )
771 return_state =
false;
773 if ( !isdefined( wait_time ) )
778 for ( i = 0; i < level.players.size; i++ )
780 player = level.players[i];
781 if ( team ==
"both" )
786 else if ( isdefined( player.pers[
"team"] ) && (player.pers[
"team"] == team ) )
795 self endon(
"disconnect" );
797 if( SessionModeIsZombiesGame() )
800 assert( isplayer (
self) );
802 if ( !isdefined( save_state ) )
806 if ( !isdefined( return_state ) )
808 return_state =
false;
810 if ( !isdefined( wait_time ) )
814 if ( !isdefined( state ) )
816 state =
"UNDERSCORE";
818 music::setmusicstate( state,
self );
820 if ( isdefined (
self.pers[
"music"].currentState ) && save_state )
823 self.pers[
"music"].returnState = state;
827 self.pers[
"music"].previousState =
self.pers[
"music"].currentState;
829 self.pers[
"music"].currentState = state;
830 if ( isdefined (
self.pers[
"music"].returnState ) && return_state )
838 if ( !isdefined( wait_time ) )
847 if ( !isdefined( wait_time ) )
851 for ( i = 0; i < level.players.size; i++ )
853 player = level.players[i];
854 if ( team ==
"both" )
859 else if ( isdefined( player.pers[
"team"] ) && (player.pers[
"team"] == team ) )
871 self endon(
"disconnect" );
873 self.pers[
"music"].nextstate = nextstate;
874 if ( !isdefined(
self.pers[
"music"].inque ) )
877 self.pers[
"music"].inque =
false;
879 if (
self.pers[
"music"].inque )
889 self.pers[
"music"].inque =
true;
900 self.pers[
"music"].inque =
false;
912 return "side_switch";
918 level waittill (
"game_ended" );
920 level waittill (
"sfade" );