mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
762 lines
17 KiB
Plaintext
762 lines
17 KiB
Plaintext
#include maps/mp/zombies/_zm_sidequests;
|
|
#include maps/mp/zombies/_zm_zonemgr;
|
|
#include maps/mp/zombies/_zm_audio;
|
|
#include maps/mp/_ambientpackage;
|
|
#include maps/mp/zm_alcatraz_utility;
|
|
#include maps/mp/zombies/_zm_utility;
|
|
#include maps/mp/_utility;
|
|
#include common_scripts/utility;
|
|
|
|
main()
|
|
{
|
|
level.sndperksacolaloopoverride = ::sndperksacolaloop;
|
|
level.sndperksacolajingleoverride = ::sndperksacolajingle;
|
|
thread sndstingersetup();
|
|
thread sndlastlifesetup();
|
|
thread sndsetupendgamemusicstates();
|
|
thread sndspectatorsetup();
|
|
if ( is_classic() )
|
|
{
|
|
thread sndmusicegg();
|
|
}
|
|
}
|
|
|
|
sndspectatorsetup()
|
|
{
|
|
flag_wait( "initial_players_connected" );
|
|
players = getplayers();
|
|
_a31 = players;
|
|
_k31 = getFirstArrayKey( _a31 );
|
|
while ( isDefined( _k31 ) )
|
|
{
|
|
player = _a31[ _k31 ];
|
|
player thread sndspectatorafterliferevert();
|
|
_k31 = getNextArrayKey( _a31, _k31 );
|
|
}
|
|
}
|
|
|
|
sndspectatorafterliferevert()
|
|
{
|
|
self endon( "disconnect" );
|
|
while ( 1 )
|
|
{
|
|
self waittill( "spawned_spectator" );
|
|
while ( self.sessionstate == "spectator" )
|
|
{
|
|
wait 1;
|
|
}
|
|
self clientnotify( "sndSR" );
|
|
}
|
|
}
|
|
|
|
sndsetupendgamemusicstates()
|
|
{
|
|
flag_wait( "start_zombie_round_logic" );
|
|
level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_final_good", "mus_zombie_game_over_final_good", 1, 0, undefined, "SILENCE" );
|
|
level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_final_bad", "mus_zombie_game_over_final_bad", 1, 0, undefined, "SILENCE" );
|
|
level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_nomove", "mus_zombie_game_over_nomove", 1, 0, undefined, "SILENCE" );
|
|
}
|
|
|
|
sndperksacolajingle( perksacola )
|
|
{
|
|
if ( !isDefined( self.jingle_is_playing ) )
|
|
{
|
|
self.jingle_is_playing = 0;
|
|
}
|
|
if ( !isDefined( self.script_sound ) )
|
|
{
|
|
return;
|
|
}
|
|
if ( !isDefined( self.sndent ) )
|
|
{
|
|
return;
|
|
}
|
|
if ( self.jingle_is_playing == 0 && level.music_override == 0 )
|
|
{
|
|
self.jingle_is_playing = 1;
|
|
self.sndent stoploopsound( 1 );
|
|
self.sndent playsoundwithnotify( self.script_sound, "sndJingleDone" );
|
|
self.sndent waittill( "sndJingleDone" );
|
|
self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 );
|
|
self.jingle_is_playing = 0;
|
|
}
|
|
}
|
|
|
|
sndperksacolaloop()
|
|
{
|
|
self endon( "death" );
|
|
self.sndent = spawn( "script_origin", self.origin );
|
|
self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 );
|
|
while ( 1 )
|
|
{
|
|
wait randomfloatrange( 31, 45 );
|
|
if ( randomint( 100 ) < 15 )
|
|
{
|
|
self thread sndperksacolajingle();
|
|
}
|
|
}
|
|
}
|
|
|
|
sndeventstingertriggers()
|
|
{
|
|
flag_wait( "start_zombie_round_logic" );
|
|
triggers = getentarray( "sndMusicEventStinger", "targetname" );
|
|
_a105 = triggers;
|
|
_k105 = getFirstArrayKey( _a105 );
|
|
while ( isDefined( _k105 ) )
|
|
{
|
|
trigger = _a105[ _k105 ];
|
|
trigger thread sndeventstingertriggerthink();
|
|
_k105 = getNextArrayKey( _a105, _k105 );
|
|
}
|
|
}
|
|
|
|
sndeventstingertriggerthink()
|
|
{
|
|
struct = getstruct( self.target, "targetname" );
|
|
while ( 1 )
|
|
{
|
|
self waittill( "trigger" );
|
|
playsoundatposition( struct.script_sound, struct.origin );
|
|
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trigger_stinger" );
|
|
wait 5;
|
|
}
|
|
}
|
|
|
|
sndeventtension()
|
|
{
|
|
flag_wait( "start_zombie_round_logic" );
|
|
wait 30;
|
|
struct = spawnstruct();
|
|
while ( 1 )
|
|
{
|
|
tension = sndgettensionlevel( struct );
|
|
waittime = tension.waittime;
|
|
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( tension.tension_level );
|
|
level thread waitfornexttension( waittime );
|
|
level waittill( "sndNextTensionEvent" );
|
|
}
|
|
}
|
|
|
|
sndgettensionlevel( struct )
|
|
{
|
|
tension_level = 0;
|
|
players = getplayers();
|
|
_a148 = players;
|
|
_k148 = getFirstArrayKey( _a148 );
|
|
while ( isDefined( _k148 ) )
|
|
{
|
|
player = _a148[ _k148 ];
|
|
if ( is_true( player.laststand ) )
|
|
{
|
|
tension_level++;
|
|
}
|
|
_k148 = getNextArrayKey( _a148, _k148 );
|
|
}
|
|
num_zombs = get_current_zombie_count();
|
|
if ( num_zombs >= 12 )
|
|
{
|
|
tension_level++;
|
|
}
|
|
enemies = getaispeciesarray( "axis", "all" );
|
|
_a161 = enemies;
|
|
_k161 = getFirstArrayKey( _a161 );
|
|
while ( isDefined( _k161 ) )
|
|
{
|
|
enemy = _a161[ _k161 ];
|
|
if ( enemy.animname == "brutus_zombie" )
|
|
{
|
|
tension_level++;
|
|
}
|
|
_k161 = getNextArrayKey( _a161, _k161 );
|
|
}
|
|
if ( tension_level > 2 )
|
|
{
|
|
struct.tension_level = "tension_high";
|
|
struct.waittime = 90;
|
|
}
|
|
else
|
|
{
|
|
struct.tension_level = "tension_low";
|
|
struct.waittime = 140;
|
|
}
|
|
return struct;
|
|
}
|
|
|
|
waitfornexttension( time )
|
|
{
|
|
level endon( "sndNextTensionEvent" );
|
|
wait time;
|
|
level notify( "sndNextTensionEvent" );
|
|
}
|
|
|
|
sndboardmonitor()
|
|
{
|
|
while ( 1 )
|
|
{
|
|
level waittill( "last_board_torn", barrier_origin );
|
|
players = getplayers();
|
|
_a194 = players;
|
|
_k194 = getFirstArrayKey( _a194 );
|
|
while ( isDefined( _k194 ) )
|
|
{
|
|
player = _a194[ _k194 ];
|
|
if ( distancesquared( player.origin, barrier_origin ) <= 22500 )
|
|
{
|
|
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "boards_gone" );
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
_k194 = getNextArrayKey( _a194, _k194 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
locationstingersetup()
|
|
{
|
|
level thread locationstingerwait();
|
|
}
|
|
|
|
locationstingerwait( zone_name, type )
|
|
{
|
|
array = sndlocationsarray();
|
|
sndnorepeats = 3;
|
|
numcut = 0;
|
|
level.sndlastzone = undefined;
|
|
level thread sndlocationbetweenroundswait();
|
|
for ( ;; )
|
|
{
|
|
while ( 1 )
|
|
{
|
|
level waittill( "newzoneActive", activezone );
|
|
while ( !sndlocationshouldplay( array, activezone ) )
|
|
{
|
|
continue;
|
|
}
|
|
if ( is_true( level.sndroundwait ) )
|
|
{
|
|
}
|
|
}
|
|
else while ( is_true( level.sndstinger.isplaying ) )
|
|
{
|
|
level thread sndlocationqueue( activezone );
|
|
}
|
|
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( activezone );
|
|
array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats );
|
|
level.sndlastzone = activezone;
|
|
if ( numcut >= sndnorepeats )
|
|
{
|
|
numcut = 0;
|
|
}
|
|
else
|
|
{
|
|
numcut++;
|
|
}
|
|
level waittill( "between_round_over" );
|
|
while ( is_true( level.sndroundwait ) )
|
|
{
|
|
wait 0,1;
|
|
}
|
|
}
|
|
}
|
|
|
|
sndlocationsarray()
|
|
{
|
|
array = [];
|
|
array[ 0 ] = "zone_cellblock_east";
|
|
array[ 1 ] = "cellblock_shower";
|
|
array[ 2 ] = "zone_infirmary";
|
|
array[ 3 ] = "zone_citadel_stairs";
|
|
array[ 4 ] = "zone_roof";
|
|
array[ 5 ] = "zone_dock";
|
|
array[ 6 ] = "zone_studio";
|
|
array[ 7 ] = "zone_warden_office";
|
|
return array;
|
|
}
|
|
|
|
sndlocationshouldplay( array, activezone )
|
|
{
|
|
shouldplay = 0;
|
|
_a280 = array;
|
|
_k280 = getFirstArrayKey( _a280 );
|
|
while ( isDefined( _k280 ) )
|
|
{
|
|
place = _a280[ _k280 ];
|
|
if ( place == activezone )
|
|
{
|
|
shouldplay = 1;
|
|
}
|
|
_k280 = getNextArrayKey( _a280, _k280 );
|
|
}
|
|
if ( shouldplay == 0 )
|
|
{
|
|
return shouldplay;
|
|
}
|
|
playersinlocal = 0;
|
|
players = getplayers();
|
|
_a291 = players;
|
|
_k291 = getFirstArrayKey( _a291 );
|
|
while ( isDefined( _k291 ) )
|
|
{
|
|
player = _a291[ _k291 ];
|
|
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) )
|
|
{
|
|
if ( !is_true( player.afterlife ) )
|
|
{
|
|
playersinlocal++;
|
|
}
|
|
}
|
|
_k291 = getNextArrayKey( _a291, _k291 );
|
|
}
|
|
if ( playersinlocal >= 1 )
|
|
{
|
|
shouldplay = 1;
|
|
}
|
|
else
|
|
{
|
|
shouldplay = 0;
|
|
}
|
|
return shouldplay;
|
|
}
|
|
|
|
sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed )
|
|
{
|
|
if ( numcut >= max_num_removed )
|
|
{
|
|
current_array = sndlocationsarray();
|
|
}
|
|
_a314 = current_array;
|
|
_k314 = getFirstArrayKey( _a314 );
|
|
while ( isDefined( _k314 ) )
|
|
{
|
|
place = _a314[ _k314 ];
|
|
if ( place == activezone )
|
|
{
|
|
arrayremovevalue( current_array, place );
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
_k314 = getNextArrayKey( _a314, _k314 );
|
|
}
|
|
}
|
|
return current_array;
|
|
}
|
|
|
|
sndlocationbetweenrounds()
|
|
{
|
|
level endon( "newzoneActive" );
|
|
activezones = maps/mp/zombies/_zm_zonemgr::get_active_zone_names();
|
|
_a331 = activezones;
|
|
_k331 = getFirstArrayKey( _a331 );
|
|
while ( isDefined( _k331 ) )
|
|
{
|
|
zone = _a331[ _k331 ];
|
|
if ( isDefined( level.sndlastzone ) && zone == level.sndlastzone )
|
|
{
|
|
}
|
|
else
|
|
{
|
|
players = getplayers();
|
|
_a337 = players;
|
|
_k337 = getFirstArrayKey( _a337 );
|
|
while ( isDefined( _k337 ) )
|
|
{
|
|
player = _a337[ _k337 ];
|
|
if ( is_true( player.afterlife ) )
|
|
{
|
|
}
|
|
else
|
|
{
|
|
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( zone ) )
|
|
{
|
|
wait 0,1;
|
|
level notify( "newzoneActive" );
|
|
return;
|
|
}
|
|
}
|
|
_k337 = getNextArrayKey( _a337, _k337 );
|
|
}
|
|
}
|
|
_k331 = getNextArrayKey( _a331, _k331 );
|
|
}
|
|
}
|
|
|
|
sndlocationbetweenroundswait()
|
|
{
|
|
flag_wait( "afterlife_start_over" );
|
|
while ( is_true( level.sndroundwait ) )
|
|
{
|
|
wait 0,1;
|
|
}
|
|
while ( 1 )
|
|
{
|
|
level thread sndlocationbetweenrounds();
|
|
level waittill( "between_round_over" );
|
|
while ( is_true( level.sndroundwait ) )
|
|
{
|
|
wait 0,1;
|
|
}
|
|
}
|
|
}
|
|
|
|
sndlocationqueue( zone )
|
|
{
|
|
level endon( "newzoneActive" );
|
|
while ( is_true( level.sndstinger.isplaying ) )
|
|
{
|
|
wait 0,5;
|
|
}
|
|
level notify( "newzoneActive" );
|
|
}
|
|
|
|
sndstingersetup()
|
|
{
|
|
level.sndmusicstingerevent = ::sndplaystinger;
|
|
level.sndstinger = spawnstruct();
|
|
level.sndstinger.ent = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
level.sndstinger.queue = 0;
|
|
level.sndstinger.isplaying = 0;
|
|
level.sndstinger.states = [];
|
|
level.sndroundwait = 1;
|
|
createstingerstate( "door_open", "mus_event_group_03", 2,5, "ignore" );
|
|
createstingerstate( "gondola", "mus_event_tension_strings_01", 0,1, "reject" );
|
|
createstingerstate( "boards_gone", "mus_event_group_02", 0,5, "ignore" );
|
|
createstingerstate( "trigger_stinger", "mus_event_group_02", 0,1, "ignore" );
|
|
createstingerstate( "brutus_spawn", "mus_event_brutus_spawn", 1,5, "queue" );
|
|
createstingerstate( "brutus_death", "mus_event_brutus_death", 0,1, "ignore" );
|
|
createstingerstate( "tension_low", "mus_event_tension_piano_01", 0,75, "reject" );
|
|
createstingerstate( "tension_high", "mus_event_tension_piano_02", 0,75, "reject" );
|
|
createstingerstate( "zone_cellblock_east", "mus_event_location_cellblock", 0,75, "queue" );
|
|
createstingerstate( "zone_infirmary", "mus_event_location_infirmary", 0,75, "queue" );
|
|
createstingerstate( "zone_studio", "mus_event_location_powerroom", 0,75, "queue" );
|
|
createstingerstate( "zone_roof", "mus_event_location_roof", 0,75, "queue" );
|
|
createstingerstate( "cellblock_shower", "mus_event_location_shower", 0,75, "queue" );
|
|
createstingerstate( "zone_citadel_stairs", "mus_event_location_stairwell", 0,75, "queue" );
|
|
createstingerstate( "zone_dock", "mus_event_location_dock", 0,75, "queue" );
|
|
createstingerstate( "zone_warden_office", "mus_event_location_warden", 0,75, "queue" );
|
|
createstingerstate( "piece_1", "mus_event_piece_1", 0, "queue" );
|
|
createstingerstate( "piece_2", "mus_event_piece_2", 0, "queue" );
|
|
createstingerstate( "piece_3", "mus_event_piece_3", 0, "queue" );
|
|
createstingerstate( "piece_4", "mus_event_piece_4", 0, "queue" );
|
|
createstingerstate( "piece_5", "mus_event_piece_5", 0, "queue" );
|
|
createstingerstate( "piece_mid", "mus_event_piece_mid", 0, "ignore" );
|
|
createstingerstate( "gas_1", "mus_event_piece_1", 0, "reject" );
|
|
createstingerstate( "gas_2", "mus_event_piece_2", 0, "reject" );
|
|
createstingerstate( "gas_3", "mus_event_piece_3", 0, "reject" );
|
|
createstingerstate( "gas_4", "mus_event_piece_4", 0, "reject" );
|
|
createstingerstate( "gas_5", "mus_event_piece_5", 0, "reject" );
|
|
createstingerstate( "plane_crafted_1", "mus_event_plane_1", 0, "reject" );
|
|
createstingerstate( "plane_crafted_2", "mus_event_plane_2", 0, "reject" );
|
|
createstingerstate( "plane_crafted_3", "mus_event_plane_3", 0, "reject" );
|
|
createstingerstate( "plane_crafted_4", "mus_event_plane_4", 0, "reject" );
|
|
createstingerstate( "plane_crafted_5", "mus_event_plane_5", 0, "reject" );
|
|
createstingerstate( "trap", "mus_event_trap", 0, "reject" );
|
|
createstingerstate( "tomahawk_1", "mus_event_tomahawk_2", 0,5, "ignore" );
|
|
createstingerstate( "tomahawk_2", "mus_event_tomahawk_3", 0,5, "ignore" );
|
|
createstingerstate( "tomahawk_3", "mus_event_tomahawk_4", 0,5, "ignore" );
|
|
createstingerstate( "quest_generic", "mus_event_quest_generic", 0,5, "reject" );
|
|
createstingerstate( "laundry_defend", "mus_laundry_defend", 0, "ignore" );
|
|
createstingerstate( "plane_takeoff", "mus_event_plane_takeoff", 0, "ignore" );
|
|
createstingerstate( "at_golden_gate", "mus_event_golden_gate", 0, "ignore" );
|
|
createstingerstate( "spoon", "mus_event_spoon", 0, "ignore" );
|
|
createstingerstate( "spork", "mus_event_spork", 0, "ignore" );
|
|
level thread sndstingerroundwait();
|
|
level thread sndboardmonitor();
|
|
level thread locationstingersetup();
|
|
}
|
|
|
|
createstingerstate( state, alias, prewait, interrupt )
|
|
{
|
|
s = level.sndstinger;
|
|
if ( !isDefined( s.states[ state ] ) )
|
|
{
|
|
s.states[ state ] = spawnstruct();
|
|
s.states[ state ].alias = alias;
|
|
s.states[ state ].prewait = prewait;
|
|
s.states[ state ].interrupt = interrupt;
|
|
}
|
|
}
|
|
|
|
sndplaystinger( state, player )
|
|
{
|
|
s = level.sndstinger;
|
|
if ( !isDefined( s.states[ state ] ) )
|
|
{
|
|
return;
|
|
}
|
|
interrupt = s.states[ state ].interrupt == "ignore";
|
|
if ( !is_true( s.isplaying ) || is_true( interrupt ) )
|
|
{
|
|
if ( interrupt )
|
|
{
|
|
wait s.states[ state ].prewait;
|
|
playstinger( state, player, 1 );
|
|
}
|
|
else if ( !level.sndroundwait )
|
|
{
|
|
s.isplaying = 1;
|
|
wait s.states[ state ].prewait;
|
|
playstinger( state, player, 0 );
|
|
level notify( "sndStingerDone" );
|
|
s.isplaying = 0;
|
|
}
|
|
else
|
|
{
|
|
if ( s.states[ state ].interrupt == "queue" )
|
|
{
|
|
level thread sndqueuestinger( state, player );
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if ( s.states[ state ].interrupt == "queue" )
|
|
{
|
|
level thread sndqueuestinger( state, player );
|
|
}
|
|
}
|
|
|
|
playstinger( state, player, ignore )
|
|
{
|
|
s = level.sndstinger;
|
|
if ( !isDefined( s.states[ state ] ) )
|
|
{
|
|
return;
|
|
}
|
|
if ( is_true( level.music_override ) )
|
|
{
|
|
return;
|
|
}
|
|
if ( is_true( ignore ) )
|
|
{
|
|
if ( isDefined( player ) )
|
|
{
|
|
player playsoundtoplayer( s.states[ state ].alias, player );
|
|
}
|
|
else
|
|
{
|
|
s.ent playsound( s.states[ state ].alias );
|
|
}
|
|
}
|
|
else if ( isDefined( player ) )
|
|
{
|
|
player playsoundtoplayer( s.states[ state ].alias, player );
|
|
wait 8;
|
|
}
|
|
else
|
|
{
|
|
s.ent playsoundwithnotify( s.states[ state ].alias, "sndStingerDone" );
|
|
s.ent waittill( "sndStingerDone" );
|
|
}
|
|
}
|
|
|
|
sndqueuestinger( state, player )
|
|
{
|
|
s = level.sndstinger;
|
|
if ( is_true( s.queue ) )
|
|
{
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
s.queue = 1;
|
|
while ( 1 )
|
|
{
|
|
if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) )
|
|
{
|
|
wait 0,5;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
}
|
|
}
|
|
level thread sndplaystinger( state, player );
|
|
s.queue = 0;
|
|
}
|
|
}
|
|
|
|
sndstingerroundwait()
|
|
{
|
|
flag_wait( "afterlife_start_over" );
|
|
wait 28;
|
|
level.sndroundwait = 0;
|
|
while ( 1 )
|
|
{
|
|
level waittill( "end_of_round" );
|
|
level notify( "sndStopBrutusLoop" );
|
|
level thread sndstingerroundwait_start();
|
|
}
|
|
}
|
|
|
|
sndstingerroundwait_start()
|
|
{
|
|
level.sndroundwait = 1;
|
|
wait 0,05;
|
|
level thread sndstingerroundwait_end();
|
|
}
|
|
|
|
sndstingerroundwait_end()
|
|
{
|
|
level endon( "end_of_round" );
|
|
level waittill( "between_round_over" );
|
|
wait 28;
|
|
level.sndroundwait = 0;
|
|
}
|
|
|
|
sndlastlifesetup()
|
|
{
|
|
flag_wait( "start_zombie_round_logic" );
|
|
if ( flag( "solo_game" ) )
|
|
{
|
|
level thread sndlastlife_solo();
|
|
}
|
|
else
|
|
{
|
|
level thread sndlastlife_multi();
|
|
}
|
|
}
|
|
|
|
sndlastlife_solo()
|
|
{
|
|
return;
|
|
player = getplayers()[ 0 ];
|
|
while ( 1 )
|
|
{
|
|
player waittill( "sndLifeGone" );
|
|
if ( player.lives == 0 )
|
|
{
|
|
while ( is_true( player.afterlife ) )
|
|
{
|
|
wait 0,1;
|
|
}
|
|
level notify( "sndStopBrutusLoop" );
|
|
level thread maps/mp/zombies/_zm_audio::change_zombie_music( "last_life" );
|
|
level waittill( "end_of_round" );
|
|
}
|
|
}
|
|
}
|
|
|
|
sndlastlife_multi()
|
|
{
|
|
level endon( "end_of_round" );
|
|
level thread sndlastlife_multi_reset();
|
|
sndplayersdead = 0;
|
|
while ( 1 )
|
|
{
|
|
level waittill( "bleed_out" );
|
|
sndplayersdead++;
|
|
players = getplayers();
|
|
if ( ( players.size - sndplayersdead ) <= 1 )
|
|
{
|
|
last_alive = sndlastlife_multi_getlastplayer();
|
|
while ( last_alive.lives > 0 )
|
|
{
|
|
wait 0,1;
|
|
}
|
|
while ( is_true( last_alive.afterlife ) )
|
|
{
|
|
wait 0,1;
|
|
}
|
|
level notify( "sndStopBrutusLoop" );
|
|
level thread maps/mp/zombies/_zm_audio::change_zombie_music( "last_life" );
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
sndlastlife_multi_getlastplayer()
|
|
{
|
|
level endon( "end_of_round" );
|
|
wait 0,5;
|
|
players = getplayers();
|
|
_a645 = players;
|
|
_k645 = getFirstArrayKey( _a645 );
|
|
while ( isDefined( _k645 ) )
|
|
{
|
|
dude = _a645[ _k645 ];
|
|
if ( dude.sessionstate == "spectator" )
|
|
{
|
|
}
|
|
else
|
|
{
|
|
return dude;
|
|
}
|
|
_k645 = getNextArrayKey( _a645, _k645 );
|
|
}
|
|
}
|
|
|
|
sndlastlife_multi_reset()
|
|
{
|
|
level waittill( "end_of_round" );
|
|
level thread sndlastlife_multi();
|
|
}
|
|
|
|
sndmusicegg()
|
|
{
|
|
origins = [];
|
|
origins[ 0 ] = ( 338, 10673, 1378 );
|
|
origins[ 1 ] = ( 2897, 9475, 1564 );
|
|
origins[ 2 ] = ( -1157, 5217, -72 );
|
|
level.meteor_counter = 0;
|
|
level.music_override = 0;
|
|
i = 0;
|
|
while ( i < origins.size )
|
|
{
|
|
level thread sndmusicegg_wait( origins[ i ] );
|
|
i++;
|
|
}
|
|
}
|
|
|
|
sndmusicegg_wait( bottle_origin )
|
|
{
|
|
temp_ent = spawn( "script_origin", bottle_origin );
|
|
temp_ent playloopsound( "zmb_meteor_loop" );
|
|
temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override );
|
|
temp_ent waittill( "main_music_egg_hit", player );
|
|
temp_ent stoploopsound( 1 );
|
|
player playsound( "zmb_meteor_activate" );
|
|
level.meteor_counter += 1;
|
|
if ( level.meteor_counter == 3 )
|
|
{
|
|
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 170 );
|
|
level thread easter_egg_song_vo( player );
|
|
}
|
|
else
|
|
{
|
|
wait 1,5;
|
|
temp_ent delete();
|
|
}
|
|
}
|
|
|
|
sndmusicegg_override()
|
|
{
|
|
if ( is_true( level.music_override ) )
|
|
{
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
sndmuseggplay( ent, alias, time )
|
|
{
|
|
level.music_override = 1;
|
|
wait 1;
|
|
ent playsound( alias );
|
|
level thread sndeggmusicwait( time );
|
|
level waittill_either( "end_game", "sndSongDone" );
|
|
ent stopsounds();
|
|
wait 0,05;
|
|
ent delete();
|
|
level.music_override = 0;
|
|
}
|
|
|
|
sndeggmusicwait( time )
|
|
{
|
|
level endon( "end_game" );
|
|
wait time;
|
|
level notify( "sndSongDone" );
|
|
}
|