uploading 22 scripts as a baseline

This commit is contained in:
JezuzLizard 2020-05-31 17:32:48 -07:00
parent 88fd406178
commit 0bb8584842
22 changed files with 12411 additions and 0 deletions

View File

@ -0,0 +1,12 @@
#include common_scripts/utility;
#include maps/mp/_utility;
init()
{
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" );
}
watch_bolt_detonation( owner )
{
}

View File

@ -0,0 +1,761 @@
#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" );
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,169 @@
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
zombie_tracking_init()
{
level.zombie_respawned_health = [];
if ( !isDefined( level.zombie_tracking_dist ) )
{
level.zombie_tracking_dist = 1500;
}
if ( !isDefined( level.zombie_tracking_high ) )
{
level.zombie_tracking_high = 600;
}
if ( !isDefined( level.zombie_tracking_wait ) )
{
level.zombie_tracking_wait = 10;
}
for ( ;; )
{
while ( 1 )
{
zombies = get_round_enemy_array();
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
{
wait level.zombie_tracking_wait;
}
}
else i = 0;
while ( i < zombies.size )
{
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking )
{
zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
}
i++;
}
wait level.zombie_tracking_wait;
}
}
delete_zombie_noone_looking( how_close, how_high )
{
self endon( "death" );
if ( !isDefined( how_close ) )
{
how_close = 1500;
}
if ( !isDefined( how_high ) )
{
how_close = 600;
}
distance_squared_check = how_close * how_close;
too_far_dist = distance_squared_check * 3;
if ( isDefined( level.zombie_tracking_too_far_dist ) )
{
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
}
self.inview = 0;
self.player_close = 0;
players = get_players();
i = 0;
while ( i < players.size )
{
if ( players[ i ].sessionstate == "spectator" )
{
i++;
continue;
}
else if ( isDefined( level.only_track_targeted_players ) )
{
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] )
{
i++;
continue;
}
}
else
{
can_be_seen = self player_can_see_me( players[ i ] );
if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist )
{
self.inview++;
}
if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check && abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ) < how_high )
{
self.player_close++;
}
}
i++;
}
wait 0,1;
if ( self.inview == 0 && self.player_close == 0 )
{
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
{
return;
}
if ( isDefined( self.electrified ) && self.electrified == 1 )
{
return;
}
if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 )
{
return;
}
zombies = getaiarray( "axis" );
if ( isDefined( self.damagemod ) && self.damagemod == "MOD_UNKNOWN" && self.health < self.maxhealth )
{
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
{
level.zombie_total++;
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
}
}
else
{
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
{
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
{
level.zombie_total++;
if ( self.health < level.zombie_health )
{
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
}
}
}
}
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" );
self delete();
recalc_zombie_array();
}
}
player_can_see_me( player )
{
playerangles = player getplayerangles();
playerforwardvec = anglesToForward( playerangles );
playerunitforwardvec = vectornormalize( playerforwardvec );
banzaipos = self.origin;
playerpos = player getorigin();
playertobanzaivec = banzaipos - playerpos;
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
if ( forwarddotbanzai >= 1 )
{
anglefromcenter = 0;
}
else if ( forwarddotbanzai <= -1 )
{
anglefromcenter = 180;
}
else
{
anglefromcenter = acos( forwarddotbanzai );
}
playerfov = getDvarFloat( "cg_fov" );
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
if ( banzaivsplayerfovbuffer <= 0 )
{
banzaivsplayerfovbuffer = 0,2;
}
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
return playercanseeme;
}

View File

@ -0,0 +1,15 @@
#include maps/mp/zm_prison;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
init()
{
level.custom_vending_precaching = ::maps/mp/zm_prison::custom_vending_precaching;
add_map_gamemode( "zclassic", ::maps/mp/zm_prison::zclassic_preinit, undefined, undefined );
add_map_gamemode( "zgrief", ::maps/mp/zm_alcatraz_grief_cellblock::zgrief_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "prison", ::maps/mp/zm_alcatraz_classic::precache, ::maps/mp/zm_alcatraz_classic::main );
add_map_location_gamemode( "zgrief", "cellblock", ::maps/mp/zm_alcatraz_grief_cellblock::precache, ::maps/mp/zm_alcatraz_grief_cellblock::main );
}

View File

@ -0,0 +1,558 @@
#include maps/mp/gametypes_zm/zmeat;
#include maps/mp/zm_alcatraz_traps;
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/zombies/_zm_blockers;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zm_prison;
#include maps/mp/zombies/_zm_race_utility;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
#using_animtree( "fxanim_props" );
precache()
{
}
zgrief_preinit()
{
registerclientfield( "toplayer", "meat_stink", 1, 1, "int" );
level.givecustomloadout = ::maps/mp/zm_prison::givecustomloadout;
zgrief_init();
}
zgrief_init()
{
encounter_init();
flag_wait( "start_zombie_round_logic" );
if ( level.round_number < 4 && level.gamedifficulty != 0 )
{
level.zombie_move_speed = 35;
}
}
encounter_init()
{
level._game_module_player_laststand_callback = ::alcatraz_grief_laststand_weapon_save;
level.precachecustomcharacters = ::precache_team_characters;
level.givecustomcharacters = ::give_team_characters;
level.gamemode_post_spawn_logic = ::give_player_shiv;
}
alcatraz_grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration )
{
if ( self hasperk( "specialty_additionalprimaryweapon" ) )
{
primary_weapons_that_can_be_taken = [];
primaryweapons = self getweaponslistprimaries();
i = 0;
while ( i < primaryweapons.size )
{
if ( maps/mp/zombies/_zm_weapons::is_weapon_included( primaryweapons[ i ] ) || maps/mp/zombies/_zm_weapons::is_weapon_upgraded( primaryweapons[ i ] ) )
{
primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size ] = primaryweapons[ i ];
}
i++;
}
if ( primary_weapons_that_can_be_taken.size >= 3 )
{
weapon_to_take = primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size - 1 ];
self takeweapon( weapon_to_take );
self.weapon_taken_by_losing_specialty_additionalprimaryweapon = weapon_to_take;
}
}
self.grief_savedweapon_weapons = self getweaponslist();
self.grief_savedweapon_weaponsammo_stock = [];
self.grief_savedweapon_weaponsammo_clip = [];
self.grief_savedweapon_currentweapon = self getcurrentweapon();
self.grief_savedweapon_grenades = self get_player_lethal_grenade();
if ( isDefined( self.grief_savedweapon_grenades ) )
{
self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades );
}
self.grief_savedweapon_tactical = self get_player_tactical_grenade();
if ( isDefined( self.grief_savedweapon_tactical ) )
{
self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical );
}
i = 0;
while ( i < self.grief_savedweapon_weapons.size )
{
self.grief_savedweapon_weaponsammo_clip[ i ] = self getweaponammoclip( self.grief_savedweapon_weapons[ i ] );
self.grief_savedweapon_weaponsammo_stock[ i ] = self getweaponammostock( self.grief_savedweapon_weapons[ i ] );
i++;
}
if ( isDefined( self.hasriotshield ) && self.hasriotshield )
{
self.grief_hasriotshield = 1;
}
if ( self hasweapon( "claymore_zm" ) )
{
self.grief_savedweapon_claymore = 1;
self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" );
}
}
precache_team_characters()
{
precachemodel( "c_zom_player_grief_guard_fb" );
precachemodel( "c_zom_oleary_shortsleeve_viewhands" );
precachemodel( "c_zom_player_grief_inmate_fb" );
precachemodel( "c_zom_grief_guard_viewhands" );
}
give_team_characters()
{
self detachall();
self set_player_is_female( 0 );
if ( !isDefined( self.characterindex ) )
{
self.characterindex = 1;
if ( self.team == "axis" )
{
self.characterindex = 0;
}
}
switch( self.characterindex )
{
case 0:
case 2:
self setmodel( "c_zom_player_grief_inmate_fb" );
self.voice = "american";
self.skeleton = "base";
self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" );
self.characterindex = 0;
break;
case 1:
case 3:
self setmodel( "c_zom_player_grief_guard_fb" );
self.voice = "american";
self.skeleton = "base";
self setviewmodel( "c_zom_grief_guard_viewhands" );
self.characterindex = 1;
break;
}
self setmovespeedscale( 1 );
self setsprintduration( 4 );
self setsprintcooldown( 0 );
}
give_player_shiv()
{
self takeweapon( "knife_zm" );
self giveweapon( "knife_zm_alcatraz" );
}
grief_treasure_chest_init()
{
chest1 = getstruct( "start_chest", "script_noteworthy" );
chest2 = getstruct( "cafe_chest", "script_noteworthy" );
setdvar( "disableLookAtEntityLogic", 1 );
level.chests = [];
level.chests[ level.chests.size ] = chest1;
level.chests[ level.chests.size ] = chest2;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" );
}
main()
{
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "cellblock" );
grief_treasure_chest_init();
precacheshader( "zm_al_wth_zombie" );
array_thread( level.zombie_spawners, ::add_spawn_function, ::remove_zombie_hats_for_grief );
maps/mp/zombies/_zm_ai_brutus::precache();
maps/mp/zombies/_zm_ai_brutus::init();
level.enemy_location_override_func = ::enemy_location_override;
level._effect[ "butterflies" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" );
a_t_door_triggers = getentarray( "zombie_door", "targetname" );
_a207 = a_t_door_triggers;
_k207 = getFirstArrayKey( _a207 );
while ( isDefined( _k207 ) )
{
trigger = _a207[ _k207 ];
if ( isDefined( trigger.script_flag ) )
{
if ( trigger.script_flag != "activate_cellblock_citadel" && trigger.script_flag != "activate_shower_room" || trigger.script_flag == "activate_cellblock_infirmary" && trigger.script_flag == "activate_infirmary" )
{
trigger delete();
break;
}
else
{
if ( trigger.script_flag != "activate_cafeteria" && trigger.script_flag != "activate_cellblock_east" && trigger.script_flag != "activate_cellblock_west" && trigger.script_flag != "activate_cellblock_barber" && trigger.script_flag != "activate_cellblock_gondola" || trigger.script_flag == "activate_cellblock_east_west" && trigger.script_flag == "activate_warden_office" )
{
break;
}
else while ( isDefined( trigger.target ) )
{
str_target = trigger.target;
a_door_and_clip = getentarray( str_target, "targetname" );
_a229 = a_door_and_clip;
_k229 = getFirstArrayKey( _a229 );
while ( isDefined( _k229 ) )
{
ent = _a229[ _k229 ];
ent delete();
_k229 = getNextArrayKey( _a229, _k229 );
}
}
trigger delete();
}
}
_k207 = getNextArrayKey( _a207, _k207 );
}
a_t_doors = getentarray( "zombie_door", "targetname" );
_a244 = a_t_doors;
_k244 = getFirstArrayKey( _a244 );
while ( isDefined( _k244 ) )
{
t_door = _a244[ _k244 ];
if ( isDefined( t_door.script_flag ) )
{
if ( t_door.script_flag == "activate_cellblock_east_west" || t_door.script_flag == "activate_cellblock_barber" )
{
t_door maps/mp/zombies/_zm_blockers::door_opened( self.zombie_cost );
}
}
_k244 = getNextArrayKey( _a244, _k244 );
}
zbarriers = getzbarrierarray();
a_str_zones = [];
a_str_zones[ 0 ] = "zone_start";
a_str_zones[ 1 ] = "zone_library";
a_str_zones[ 2 ] = "zone_cafeteria";
a_str_zones[ 3 ] = "zone_cafeteria_end";
a_str_zones[ 4 ] = "zone_warden_office";
a_str_zones[ 5 ] = "zone_cellblock_east";
a_str_zones[ 6 ] = "zone_cellblock_west_warden";
a_str_zones[ 7 ] = "zone_cellblock_west_barber";
a_str_zones[ 8 ] = "zone_cellblock_west";
a_str_zones[ 9 ] = "zone_cellblock_west_gondola";
_a269 = zbarriers;
_k269 = getFirstArrayKey( _a269 );
while ( isDefined( _k269 ) )
{
barrier = _a269[ _k269 ];
if ( isDefined( barrier.script_noteworthy ) )
{
if ( barrier.script_noteworthy == "cafe_chest_zbarrier" || barrier.script_noteworthy == "start_chest_zbarrier" )
{
}
}
else
{
str_model = barrier.model;
b_delete_barrier = 1;
i = 0;
while ( i < a_str_zones.size )
{
if ( str_model == a_str_zones[ i ] )
{
b_delete_barrier = 0;
break;
}
else
{
i++;
}
}
if ( b_delete_barrier == 1 )
{
barrier delete();
}
}
_k269 = getNextArrayKey( _a269, _k269 );
}
t_temp = getent( "tower_trap_activate_trigger", "targetname" );
t_temp delete();
t_temp = getent( "tower_trap_range_trigger", "targetname" );
t_temp delete();
e_model = getent( "trap_control_docks", "targetname" );
e_model delete();
e_brush = getent( "tower_shockbox_door", "targetname" );
e_brush delete();
a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" );
_a312 = a_t_travel_triggers;
_k312 = getFirstArrayKey( _a312 );
while ( isDefined( _k312 ) )
{
trigger = _a312[ _k312 ];
trigger delete();
_k312 = getNextArrayKey( _a312, _k312 );
}
a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" );
_a318 = a_e_gondola_lights;
_k318 = getFirstArrayKey( _a318 );
while ( isDefined( _k318 ) )
{
light = _a318[ _k318 ];
light delete();
_k318 = getNextArrayKey( _a318, _k318 );
}
a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" );
_a324 = a_e_gondola_landing_gates;
_k324 = getFirstArrayKey( _a324 );
while ( isDefined( _k324 ) )
{
model = _a324[ _k324 ];
model delete();
_k324 = getNextArrayKey( _a324, _k324 );
}
a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" );
_a330 = a_e_gondola_landing_doors;
_k330 = getFirstArrayKey( _a330 );
while ( isDefined( _k330 ) )
{
model = _a330[ _k330 ];
model delete();
_k330 = getNextArrayKey( _a330, _k330 );
}
a_e_gondola_gates = getentarray( "gondola_gates", "targetname" );
_a336 = a_e_gondola_gates;
_k336 = getFirstArrayKey( _a336 );
while ( isDefined( _k336 ) )
{
model = _a336[ _k336 ];
model delete();
_k336 = getNextArrayKey( _a336, _k336 );
}
a_e_gondola_doors = getentarray( "gondola_doors", "targetname" );
_a342 = a_e_gondola_doors;
_k342 = getFirstArrayKey( _a342 );
while ( isDefined( _k342 ) )
{
model = _a342[ _k342 ];
model delete();
_k342 = getNextArrayKey( _a342, _k342 );
}
m_gondola = getent( "zipline_gondola", "targetname" );
m_gondola delete();
t_ride_trigger = getent( "gondola_ride_trigger", "targetname" );
t_ride_trigger delete();
a_classic_clips = getentarray( "classic_clips", "targetname" );
_a355 = a_classic_clips;
_k355 = getFirstArrayKey( _a355 );
while ( isDefined( _k355 ) )
{
clip = _a355[ _k355 ];
clip connectpaths();
clip delete();
_k355 = getNextArrayKey( _a355, _k355 );
}
a_afterlife_props = getentarray( "afterlife_show", "targetname" );
_a363 = a_afterlife_props;
_k363 = getFirstArrayKey( _a363 );
while ( isDefined( _k363 ) )
{
m_prop = _a363[ _k363 ];
m_prop delete();
_k363 = getNextArrayKey( _a363, _k363 );
}
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal delete();
a_audio = getentarray( "at_headphones", "script_noteworthy" );
_a373 = a_audio;
_k373 = getFirstArrayKey( _a373 );
while ( isDefined( _k373 ) )
{
model = _a373[ _k373 ];
model delete();
_k373 = getNextArrayKey( _a373, _k373 );
}
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup delete();
t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" );
t_sq_bg delete();
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
_a386 = t_crafting_table;
_k386 = getFirstArrayKey( _a386 );
while ( isDefined( _k386 ) )
{
trigger = _a386[ _k386 ];
trigger delete();
_k386 = getNextArrayKey( _a386, _k386 );
}
t_warden_fence = getent( "warden_fence_damage", "targetname" );
t_warden_fence delete();
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
m_plane_about_to_crash delete();
m_plane_craftable = getent( "plane_craftable", "targetname" );
m_plane_craftable delete();
i = 1;
while ( i <= 5 )
{
m_key_lock = getent( "masterkey_lock_" + i, "targetname" );
m_key_lock delete();
i++;
}
m_shower_door = getent( "shower_key_door", "targetname" );
m_shower_door delete();
m_nixie_door = getent( "nixie_door_left", "targetname" );
m_nixie_door delete();
m_nixie_door = getent( "nixie_door_right", "targetname" );
m_nixie_door delete();
m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" );
m_nixie_brush delete();
i = 1;
while ( i <= 3 )
{
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
m_nixie_tube delete();
i++;
}
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
t_elevator_door delete();
e_elevator_clip = getent( "elevator_door_playerclip", "targetname" );
e_elevator_clip delete();
e_elevator_bottom_gate = getent( "elevator_bottom_gate_l", "targetname" );
e_elevator_bottom_gate delete();
e_elevator_bottom_gate = getent( "elevator_bottom_gate_r", "targetname" );
e_elevator_bottom_gate delete();
m_docks_puzzle = getent( "cable_puzzle_gate_01", "targetname" );
m_docks_puzzle delete();
m_docks_puzzle = getent( "cable_puzzle_gate_02", "targetname" );
m_docks_puzzle delete();
m_infirmary_case = getent( "infirmary_case_door_left", "targetname" );
m_infirmary_case delete();
m_infirmary_case = getent( "infirmary_case_door_right", "targetname" );
m_infirmary_case delete();
fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" );
fake_plane_part delete();
i = 1;
while ( i <= 3 )
{
m_generator = getent( "generator_panel_" + i, "targetname" );
m_generator delete();
i++;
}
a_m_generator_core = getentarray( "generator_core", "targetname" );
_a462 = a_m_generator_core;
_k462 = getFirstArrayKey( _a462 );
while ( isDefined( _k462 ) )
{
generator = _a462[ _k462 ];
generator delete();
_k462 = getNextArrayKey( _a462, _k462 );
}
e_playerclip = getent( "electric_chair_playerclip", "targetname" );
e_playerclip delete();
i = 1;
while ( i <= 4 )
{
t_use = getent( "trigger_electric_chair_" + i, "targetname" );
t_use delete();
m_chair = getent( "electric_chair_" + i, "targetname" );
m_chair delete();
i++;
}
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
_a482 = a_afterlife_interact;
_k482 = getFirstArrayKey( _a482 );
while ( isDefined( _k482 ) )
{
model = _a482[ _k482 ];
model turn_afterlife_interact_on();
wait 0,1;
_k482 = getNextArrayKey( _a482, _k482 );
}
flag_wait( "initial_blackscreen_passed" );
maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors();
flag_wait( "start_zombie_round_logic" );
level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs();
level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs();
wait 1;
level notify( "sleight_on" );
wait_network_frame();
level notify( "doubletap_on" );
wait_network_frame();
level notify( "juggernog_on" );
wait_network_frame();
level notify( "electric_cherry_on" );
wait_network_frame();
level notify( "deadshot_on" );
wait_network_frame();
level notify( "divetonuke_on" );
wait_network_frame();
level notify( "additionalprimaryweapon_on" );
wait_network_frame();
level notify( "Pack_A_Punch_on" );
wait_network_frame();
/#
level thread maps/mp/gametypes_zm/zmeat::spawn_level_meat_manager();
#/
}
remove_zombie_hats_for_grief()
{
self detach( "c_zom_guard_hat" );
}
enemy_location_override( zombie, enemy )
{
location = enemy.origin;
if ( is_true( self.reroute ) )
{
if ( isDefined( self.reroute_origin ) )
{
location = self.reroute_origin;
}
}
return location;
}
magicbox_face_spawn()
{
self endon( "disconnect" );
if ( !is_gametype_active( "zgrief" ) )
{
return;
}
while ( 1 )
{
self waittill( "user_grabbed_weapon" );
if ( randomint( 50000 ) == 115 )
{
self playsoundtoplayer( "zmb_easteregg_face", self );
self.wth_elem = newclienthudelem( self );
self.wth_elem.horzalign = "fullscreen";
self.wth_elem.vertalign = "fullscreen";
self.wth_elem.sort = 1000;
self.wth_elem.foreground = 0;
self.wth_elem.alpha = 1;
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
self.wth_elem.hidewheninmenu = 1;
wait 0,25;
self.wth_elem destroy();
}
wait 0,05;
}
}
turn_afterlife_interact_on()
{
if ( self.script_string != "cell_1_powerup_activate" && self.script_string != "intro_powerup_activate" || self.script_string == "cell_2_powerup_activate" && self.script_string == "wires_shower_door" )
{
return;
}
if ( self.script_string != "electric_cherry_on" || self.script_string == "sleight_on" && self.script_string == "wires_admin_door" )
{
if ( !isDefined( level.shockbox_anim ) )
{
level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim;
level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim;
}
if ( issubstr( self.model, "p6_zm_al_shock_box" ) )
{
self useanimtree( -1 );
self setmodel( "p6_zm_al_shock_box_on" );
self setanim( level.shockbox_anim[ "on" ] );
}
}
else
{
self delete();
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,594 @@
#include maps/mp/zm_alcatraz_sq;
#include maps/mp/gametypes_zm/_hud;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/zm_alcatraz_utility;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_craftables;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/zombies/_zm_afterlife;
#include maps/_vehicle;
#include maps/_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
setup_nixie_tubes_puzzle()
{
level.a_nixie_tube_code = [];
level.a_nixie_tube_solution = [];
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
t_elevator_door trigger_off();
m_rigging = get_craftable_piece_model( "plane", "rigging" );
m_citadel_elevator = getent( "citadel_elevator", "targetname" );
m_rigging linkto( m_citadel_elevator );
level thread nixie_tube_notifier();
level thread nixie_tube_elevator_door();
while ( !flag( "nixie_puzzle_completed" ) )
{
generate_unrestricted_nixie_tube_solution();
n_code = nixie_tube_add_code( level.a_nixie_tube_solution[ 1 ], level.a_nixie_tube_solution[ 2 ], level.a_nixie_tube_solution[ 3 ] );
i = 1;
while ( i < 4 )
{
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
m_nixie_tube thread nixie_tube_thread( i );
m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" );
j = 0;
while ( j < 10 )
{
m_nixie_clue hidepart( "J_" + j );
j++;
}
players = getplayers();
_a76 = players;
_k76 = getFirstArrayKey( _a76 );
while ( isDefined( _k76 ) )
{
player = _a76[ _k76 ];
if ( isDefined( player ) && isDefined( player.afterlife ) && player.afterlife )
{
m_nixie_clue setvisibletoplayer( player );
}
_k76 = getNextArrayKey( _a76, _k76 );
}
m_nixie_clue showpart( "J_" + level.a_nixie_tube_solution[ i ] );
i++;
}
level waittill( "nixie_" + n_code );
flag_set( "nixie_puzzle_solved" );
nixie_tube_remove_code( n_code );
i = 1;
while ( i < 4 )
{
m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" );
m_nixie_clue setinvisibletoall();
i++;
}
nixie_tube_2 = getent( "nixie_tube_2", "targetname" );
nixie_tube_2 playsound( "zmb_quest_nixie_success" );
level thread nixie_tube_elevator_drops();
nixie_tube_win_effects_all_tubes( 0, 6, 0 );
wait 0,5;
n_countdown = 60;
level thread sndnixietubecountdown( n_countdown );
i = 1;
while ( i < 4 )
{
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
level notify( "nixie_tube_trigger_" + i );
m_nixie_tube thread nixie_tube_thread_play_countdown( i, n_countdown );
i++;
}
flag_set( "nixie_countdown_started" );
flag_wait( "nixie_countdown_expired" );
if ( !flag( "nixie_puzzle_completed" ) )
{
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
t_elevator_door trigger_off();
flag_clear( "nixie_countdown_started" );
flag_clear( "nixie_countdown_expired" );
flag_clear( "nixie_puzzle_solved" );
nixie_tube_elevator_rises();
}
}
m_nixie_tube = getent( "nixie_tube_2", "targetname" );
m_nixie_tube playsound( "zmb_quest_nixie_success" );
/#
iprintlnbold( "nixie puzzle solved!" );
#/
flag_clear( "nixie_puzzle_solved" );
array_delete( getentarray( "wires_nixie_elevator", "script_noteworthy" ) );
stop_exploder( 3400 );
stop_exploder( 3500 );
stop_exploder( 3600 );
i = 1;
while ( i < 4 )
{
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
m_nixie_tube thread afterlife_interact_object_think();
m_nixie_tube thread nixie_tube_thread( i );
i++;
}
}
generate_unrestricted_nixie_tube_solution()
{
a_restricted_solutions = [];
a_restricted_solutions[ 0 ] = 115;
a_restricted_solutions[ 1 ] = 935;
a_restricted_solutions[ 2 ] = 386;
a_restricted_solutions[ 3 ] = 481;
a_restricted_solutions[ 4 ] = 101;
a_restricted_solutions[ 5 ] = 872;
a_numbers = [];
i = 0;
while ( i < 10 )
{
a_numbers[ i ] = i;
i++;
}
i = 1;
while ( i < 4 )
{
n_index = randomint( a_numbers.size );
level.a_nixie_tube_solution[ i ] = a_numbers[ n_index ];
arrayremoveindex( a_numbers, n_index );
i++;
}
i = 0;
while ( i < a_restricted_solutions.size )
{
b_is_restricted_solution = 1;
restricted_solution = [];
j = 1;
while ( j < 4 )
{
restricted_solution[ j ] = get_split_number( j, a_restricted_solutions[ i ] );
if ( restricted_solution[ j ] != level.a_nixie_tube_solution[ j ] )
{
b_is_restricted_solution = 0;
}
j++;
}
if ( b_is_restricted_solution )
{
n_index = randomint( a_numbers.size );
level.a_nixie_tube_solution[ 3 ] = a_numbers[ n_index ];
}
i++;
}
}
nixie_tube_notifier()
{
if ( !isDefined( level.a_important_codes ) )
{
level.a_important_codes = [];
level.a_important_codes[ level.a_important_codes.size ] = 115;
level.a_important_codes[ level.a_important_codes.size ] = 935;
}
level thread nixie_115();
level thread nixie_935();
while ( !isDefined( level.a_nixie_tube_code ) || !isDefined( level.a_nixie_tube_code[ 3 ] ) )
{
wait 1;
}
while ( 1 )
{
codes_to_check = array_copy( level.a_important_codes );
non_array_value = ( level.a_nixie_tube_code[ 1 ] * 100 ) + ( level.a_nixie_tube_code[ 2 ] * 10 ) + level.a_nixie_tube_code[ 3 ];
_a240 = codes_to_check;
_k240 = getFirstArrayKey( _a240 );
while ( isDefined( _k240 ) )
{
code = _a240[ _k240 ];
if ( code == non_array_value )
{
level notify( "nixie_" + code );
}
_k240 = getNextArrayKey( _a240, _k240 );
}
wait 2;
}
}
nixie_tube_add_code( a, b, c )
{
if ( isDefined( b ) )
{
non_array_value = ( a * 100 ) + ( b * 10 ) + c;
}
else
{
non_array_value = a;
}
level.a_important_codes[ level.a_important_codes.size ] = non_array_value;
return non_array_value;
}
nixie_tube_remove_code( a, b, c )
{
if ( isDefined( b ) )
{
non_array_value = ( a * 100 ) + ( b * 10 ) + c;
}
else
{
non_array_value = a;
}
arrayremovevalue( level.a_important_codes, non_array_value );
}
sndnixietubecountdown( num )
{
level endon( "sndEndNixieCount" );
ent = getent( "nixie_tube_2", "targetname" );
i = num;
while ( i > 0 )
{
if ( i <= 10 )
{
ent playsound( "zmb_quest_nixie_count_final" );
}
else
{
ent playsound( "zmb_quest_nixie_count" );
}
wait 1;
i--;
}
ent playsound( "zmb_quest_nixie_fail" );
}
nixie_tube_thread( n_tube_index, b_force_reset )
{
if ( !isDefined( b_force_reset ) )
{
b_force_reset = 1;
}
level endon( "kill_nixie_input" );
if ( b_force_reset )
{
level.a_nixie_tube_code[ n_tube_index ] = 0;
}
self thread afterlife_interact_object_think();
i = 0;
while ( i < 10 )
{
self hidepart( "J_off" );
self hidepart( "J_" + i );
i++;
}
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
while ( !flag( "nixie_puzzle_solved" ) )
{
level waittill( "nixie_tube_trigger_" + n_tube_index );
while ( flag( "nixie_puzzle_solved" ) )
{
continue;
}
i = 0;
while ( i < 10 )
{
self hidepart( "J_" + i );
i++;
}
level.a_nixie_tube_code[ n_tube_index ]++;
self playsound( "zmb_quest_nixie_count" );
if ( level.a_nixie_tube_code[ n_tube_index ] > 9 )
{
level.a_nixie_tube_code[ n_tube_index ] = 0;
}
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
wait 0,05;
self notify( "afterlife_interact_reset" );
}
}
nixie_tube_win_effects( n_tube_index, n_blink_rate )
{
if ( !isDefined( n_blink_rate ) )
{
n_blink_rate = 0,25;
}
while ( !flag( "nixie_countdown_started" ) )
{
self hidepart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
wait n_blink_rate;
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
wait n_blink_rate;
}
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
}
nixie_tube_win_effects_all_tubes( goal_num_1, goal_num_2, goal_num_3 )
{
if ( !isDefined( goal_num_1 ) )
{
goal_num_1 = 0;
}
if ( !isDefined( goal_num_2 ) )
{
goal_num_2 = 0;
}
if ( !isDefined( goal_num_3 ) )
{
goal_num_3 = 0;
}
a_nixie_tube = [];
a_nixie_tube[ 1 ] = getent( "nixie_tube_1", "targetname" );
a_nixie_tube[ 2 ] = getent( "nixie_tube_2", "targetname" );
a_nixie_tube[ 3 ] = getent( "nixie_tube_3", "targetname" );
n_off_tube = 1;
start_time = 0;
while ( start_time < 3 )
{
i = 1;
while ( i < ( 3 + 1 ) )
{
if ( i == n_off_tube )
{
a_nixie_tube[ i ] hidepart( "J_" + level.a_nixie_tube_code[ i ] );
i++;
continue;
}
else
{
a_nixie_tube[ i ] showpart( "J_" + level.a_nixie_tube_code[ i ] );
if ( i == 1 || n_off_tube == 2 && i == 3 && n_off_tube == 1 )
{
a_nixie_tube[ i ] playsound( "zmb_quest_nixie_count" );
}
}
i++;
}
n_off_tube++;
if ( n_off_tube > 3 )
{
n_off_tube = 1;
}
wait_network_frame();
start_time += 0,15;
}
a_nixie_tube[ 1 ] showpart( "J_" + level.a_nixie_tube_code[ 1 ] );
a_nixie_tube[ 2 ] showpart( "J_" + level.a_nixie_tube_code[ 2 ] );
a_nixie_tube[ 3 ] showpart( "J_" + level.a_nixie_tube_code[ 3 ] );
while ( level.a_nixie_tube_code[ 1 ] != goal_num_1 || level.a_nixie_tube_code[ 2 ] != goal_num_2 && level.a_nixie_tube_code[ 3 ] != goal_num_3 )
{
n_current_tube = 1;
n_goal = goal_num_1;
if ( level.a_nixie_tube_code[ n_current_tube ] == goal_num_1 )
{
n_current_tube = 2;
n_goal = goal_num_2;
if ( level.a_nixie_tube_code[ n_current_tube ] == goal_num_2 )
{
n_current_tube = 3;
n_goal = goal_num_3;
}
}
j = 0;
while ( j < 10 )
{
a_nixie_tube[ n_current_tube ] hidepart( "J_" + level.a_nixie_tube_code[ n_current_tube ] );
level.a_nixie_tube_code[ n_current_tube ]--;
if ( level.a_nixie_tube_code[ n_current_tube ] == -1 )
{
level.a_nixie_tube_code[ n_current_tube ] = 9;
}
a_nixie_tube[ n_current_tube ] showpart( "J_" + level.a_nixie_tube_code[ n_current_tube ] );
if ( ( j % 3 ) == 0 )
{
a_nixie_tube[ n_current_tube ] playsound( "zmb_quest_nixie_count" );
}
wait 0,05;
j++;
}
wait_network_frame();
j = 0;
while ( level.a_nixie_tube_code[ n_current_tube ] != n_goal )
{
a_nixie_tube[ n_current_tube ] hidepart( "J_" + level.a_nixie_tube_code[ n_current_tube ] );
level.a_nixie_tube_code[ n_current_tube ]--;
if ( level.a_nixie_tube_code[ n_current_tube ] == -1 )
{
level.a_nixie_tube_code[ n_current_tube ] = 9;
}
a_nixie_tube[ n_current_tube ] showpart( "J_" + level.a_nixie_tube_code[ n_current_tube ] );
if ( ( j % 3 ) == 0 )
{
a_nixie_tube[ n_current_tube ] playsound( "zmb_quest_nixie_count" );
}
j++;
wait 0,05;
}
}
a_nixie_tube[ 2 ] playsound( "zmb_quest_nixie_count_final" );
wait_network_frame();
}
nixie_tube_thread_play_countdown( n_tube_index, n_countdown )
{
level endon( "end_nixie_countdown" );
n_tick_duration = 1;
level.a_nixie_tube_code[ n_tube_index ] = get_split_number( n_tube_index, n_countdown );
/#
iprintlnbold( "tube " + n_tube_index + " number is " + level.a_nixie_tube_code[ n_tube_index ] );
#/
i = 0;
while ( i < 10 )
{
self hidepart( "J_" + i );
i++;
}
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
while ( n_countdown )
{
n_countdown--;
self hidepart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
level.a_nixie_tube_code[ n_tube_index ] = get_split_number( n_tube_index, n_countdown );
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
wait n_tick_duration;
}
flag_set( "nixie_countdown_expired" );
wait 0,05;
flag_clear( "nixie_countdown_expired" );
}
get_split_number( n_tube_index, n_countdown )
{
if ( n_tube_index == 1 )
{
return ( n_countdown - ( n_countdown % 100 ) ) / 100;
}
if ( n_tube_index == 2 )
{
n_temp = n_countdown % 100;
n_temp -= n_countdown % 10;
n_temp /= 10;
return n_temp;
}
if ( n_tube_index == 3 )
{
return n_countdown % 10;
}
}
nixie_tube_elevator_drops()
{
n_elevator_drop_duration = 3;
maps/mp/zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 0 );
exploder( 3400 );
exploder( 3500 );
exploder( 3600 );
m_citadel_elevator = getent( "citadel_elevator", "targetname" );
a_m_script_models = [];
a_m_script_models = getentarray( "script_model", "classname" );
i = 0;
while ( i < a_m_script_models.size )
{
if ( a_m_script_models[ i ].model == "veh_t6_dlc_zombie_part_rigging" )
{
playfxontag( level._effect[ "elevator_fall" ], a_m_script_models[ i ], "tag_origin" );
}
i++;
}
m_citadel_elevator playsound( "zmb_quest_elevator_move" );
m_citadel_elevator moveto( m_citadel_elevator.origin + vectorScale( ( 0, 0, 0 ), 768 ), n_elevator_drop_duration, 1, 1 );
wait n_elevator_drop_duration;
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
t_elevator_door trigger_on();
}
nixie_tube_elevator_rises()
{
elevator_rise_duration = 3;
maps/mp/zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 1 );
stop_exploder( 3400 );
stop_exploder( 3500 );
stop_exploder( 3600 );
m_citadel_elevator = getent( "citadel_elevator", "targetname" );
m_citadel_elevator moveto( m_citadel_elevator.origin + vectorScale( ( 0, 0, 0 ), 768 ), elevator_rise_duration, 1, 1 );
m_citadel_elevator playsound( "zmb_quest_elevator_move" );
wait elevator_rise_duration;
}
nixie_tube_elevator_door()
{
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
t_elevator_door sethintstring( &"ZM_PRISON_KEY_DOOR" );
t_elevator_door waittill( "trigger", e_triggerer );
m_elevator_bottom_gate_l = getent( "elevator_bottom_gate_l", "targetname" );
m_elevator_bottom_gate_r = getent( "elevator_bottom_gate_r", "targetname" );
m_elevator_bottom_gate_l rotateyaw( -90, 0,5 );
m_elevator_bottom_gate_r rotateyaw( 90, 0,5 );
elevator_door_playerclip = getent( "elevator_door_playerclip", "targetname" );
elevator_door_playerclip delete();
flag_set( "nixie_puzzle_completed" );
level notify( "sndEndNixieCount" );
level notify( "end_nixie_countdown" );
flag_set( "nixie_countdown_expired" );
wait 0,05;
flag_clear( "nixie_countdown_expired" );
t_elevator_door delete();
}
nixie_tube_win_effects_ee( n_tube_index )
{
n_blink_rate = 0,25;
while ( !flag( "nixie_ee_flashing" ) )
{
self hidepart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
wait n_blink_rate;
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
wait n_blink_rate;
}
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
}
nixie_115()
{
level waittill( "nixie_" + 115 );
level notify( "kill_nixie_input" );
flag_set( "nixie_puzzle_solved" );
flag_clear( "nixie_ee_flashing" );
level thread nixie_115_audio();
nixie_tube_win_effects_all_tubes( 6, 6, 6 );
flag_set( "nixie_ee_flashing" );
flag_clear( "nixie_puzzle_solved" );
nixie_reset_control();
}
nixie_115_audio()
{
m_nixie_tube = getent( "nixie_tube_1", "targetname" );
n_random_line = randomint( 3 );
m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" );
m_nixie_tube waittill( "scary_voice" );
}
nixie_935()
{
level waittill( "nixie_" + 935 );
level notify( "kill_nixie_input" );
flag_set( "nixie_puzzle_solved" );
flag_clear( "nixie_ee_flashing" );
level thread nixie_935_audio();
nixie_tube_win_effects_all_tubes( 7, 7, 7 );
flag_set( "nixie_ee_flashing" );
flag_clear( "nixie_puzzle_solved" );
nixie_reset_control();
}
nixie_935_audio()
{
if ( isDefined( level.music_override ) && !level.music_override )
{
level.music_override = 1;
playsoundatposition( "mus_zmb_secret_song_2", ( 0, 0, 0 ) );
wait 140;
level.music_override = 0;
}
else
{
m_nixie_tube = getent( "nixie_tube_1", "targetname" );
n_random_line = randomint( 3 );
m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" );
m_nixie_tube waittill( "scary_voice" );
}
}
nixie_reset_control( b_reset_control )
{
i = 1;
while ( i < 4 )
{
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
m_nixie_tube thread afterlife_interact_object_think();
m_nixie_tube thread nixie_tube_thread( i, b_reset_control );
i++;
}
}

View File

@ -0,0 +1,733 @@
#include maps/mp/gametypes_zm/_hud;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/zm_alcatraz_utility;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_craftables;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/zombies/_zm_afterlife;
#include maps/_vehicle;
#include maps/_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
vo_see_map_trigger()
{
level endon( "someone_completed_quest_cycle" );
e_triggerer = undefined;
t_map_vo_trigger = getent( "map_vo_trigger", "targetname" );
b_has_line_played = 0;
while ( !b_has_line_played )
{
t_map_vo_trigger waittill( "trigger", e_triggerer );
players = getplayers();
if ( !e_triggerer.dontspeak && !flag( "story_vo_playing" ) )
{
flag_set( "story_vo_playing" );
e_triggerer do_player_general_vox( "quest", "find_map", undefined, 100 );
wait 5;
arrayremovevalue( players, e_triggerer );
closest_other_player = getclosest( e_triggerer.origin, players );
if ( isDefined( closest_other_player ) )
{
closest_other_player do_player_general_vox( "quest", "response_map", undefined, 100 );
}
b_has_line_played = 1;
wait 5;
flag_clear( "story_vo_playing" );
}
}
}
opening_vo()
{
load_vo_alias_arrays();
flag_wait( "afterlife_start_over" );
wait 1;
players = getplayers();
vo_play_four_part_conversation( level.four_part_convos[ "start_1_oh_shit_" + randomintrange( 1, 3 ) ] );
wait 1;
if ( players.size == 1 )
{
players[ 0 ] vo_play_soliloquy( level.soliloquy_convos[ "solo_intro_" + players[ 0 ].character_name ] );
}
else
{
if ( is_player_character_present( "Arlington" ) )
{
vo_play_four_part_conversation( level.four_part_convos[ "intro_plr_3" ] );
}
}
level thread vo_see_map_trigger();
wait 10;
vo_play_four_part_conversation( level.four_part_convos[ "during_1_oh_shit" ] );
level waittill( "end_of_round" );
wait 5;
vo_play_four_part_conversation( level.four_part_convos[ "start_2_oh_shit_" + randomintrange( 1, 3 ) ] );
wait 4;
vo_play_four_part_conversation( level.four_part_convos[ "start_3_oh_shit" ] );
level waittill( "end_of_round" );
wait 3;
if ( ( get_players_touching( "zone_library" ) + get_players_touching( "zone_start" ) ) == 4 )
{
vo_play_four_part_conversation( level.four_part_convos[ "start_2_oh_shit" ] );
}
wait 1;
}
load_vo_alias_arrays()
{
level.four_part_convos = [];
level.four_part_convos[ "intro_plr_1" ] = [];
level.four_part_convos[ "intro_plr_1" ][ 0 ] = "vox_plr_1_start_1_oh_shit1_0";
level.four_part_convos[ "intro_plr_3" ] = [];
level.four_part_convos[ "intro_plr_3" ][ 0 ] = "vox_plr_3_chair2_var6_0";
level.four_part_convos[ "intro_plr_3" ][ 1 ] = "vox_plr_3_chair2_var7_0";
level.four_part_convos[ "intro_plr_3" ][ 2 ] = "vox_plr_3_chair2_var8_0";
level.four_part_convos[ "start_1_oh_shit_1" ] = [];
level.four_part_convos[ "start_1_oh_shit_1" ][ 0 ] = "vox_plr_1_start_1_oh_shit4_0";
level.four_part_convos[ "start_1_oh_shit_1" ][ 1 ] = "vox_plr_2_start_1_oh_shit5_0";
level.four_part_convos[ "start_1_oh_shit_1" ][ 2 ] = "vox_plr_0_start_1_oh_shit6_0";
level.four_part_convos[ "start_1_oh_shit_1" ][ 3 ] = "vox_plr_3_start_1_oh_shit7_0";
level.four_part_convos[ "start_1_oh_shit_2" ] = [];
level.four_part_convos[ "start_1_oh_shit_2" ][ 0 ] = "vox_plr_3_start_1_oh_shit8_0";
level.four_part_convos[ "start_1_oh_shit_2" ][ 1 ] = "vox_plr_2_start_1_oh_shit9_0";
level.four_part_convos[ "start_1_oh_shit_2" ][ 2 ] = "vox_plr_1_start_1_oh_shit10_0";
level.four_part_convos[ "start_1_oh_shit_2" ][ 3 ] = "vox_plr_0_start_1_oh_shit11_0";
level.four_part_convos[ "during_1_oh_shit" ] = [];
level.four_part_convos[ "during_1_oh_shit" ][ 0 ] = "vox_plr_0_during_1_oh_shit5_0";
level.four_part_convos[ "during_1_oh_shit" ][ 1 ] = "vox_plr_3_during_1_oh_shit6_0";
level.four_part_convos[ "during_1_oh_shit" ][ 2 ] = "vox_plr_1_during_1_oh_shit7_0";
level.four_part_convos[ "during_1_oh_shit" ][ 3 ] = "vox_plr_2_during_1_oh_shit8_0";
level.four_part_convos[ "start_2_oh_shit_1" ] = [];
level.four_part_convos[ "start_2_oh_shit_1" ][ 0 ] = "vox_plr_3_start_2_oh_shit12_0";
level.four_part_convos[ "start_2_oh_shit_1" ][ 1 ] = "vox_plr_0_start_2_oh_shit13_0";
level.four_part_convos[ "start_2_oh_shit_1" ][ 2 ] = "vox_plr_2_start_2_oh_shit14_0";
level.four_part_convos[ "start_2_oh_shit_1" ][ 3 ] = "vox_plr_1_start_2_oh_shit15_0";
level.four_part_convos[ "start_2_oh_shit_2" ] = [];
level.four_part_convos[ "start_2_oh_shit_2" ][ 0 ] = "vox_plr_0_start_2_oh_shit16_0";
level.four_part_convos[ "start_2_oh_shit_2" ][ 1 ] = "vox_plr_2_start_2_oh_shit17_0";
level.four_part_convos[ "start_2_oh_shit_2" ][ 2 ] = "vox_plr_3_start_2_oh_shit18_0";
level.four_part_convos[ "start_2_oh_shit_2" ][ 3 ] = "vox_plr_1_start_2_oh_shit19_0";
level.four_part_convos[ "start_3_oh_shit" ] = [];
level.four_part_convos[ "start_3_oh_shit" ][ 0 ] = "vox_plr_3_start_3_oh_shit13_0";
level.four_part_convos[ "start_3_oh_shit" ][ 1 ] = "vox_plr_2_start_3_oh_shit14_0";
level.four_part_convos[ "start_3_oh_shit" ][ 2 ] = "vox_plr_1_start_3_oh_shit15_0";
level.four_part_convos[ "start_3_oh_shit" ][ 3 ] = "vox_plr_0_start_3_oh_shit16_0";
level.four_part_convos[ "start_2_oh_shit" ] = [];
level.four_part_convos[ "start_2_oh_shit" ][ 0 ] = "vox_plr_1_start_2_oh_shit9_0";
level.four_part_convos[ "start_2_oh_shit" ][ 1 ] = "vox_plr_0_start_2_oh_shit10_0";
level.four_part_convos[ "start_2_oh_shit" ][ 2 ] = "vox_plr_1_start_2_oh_shit11_0";
level.four_part_convos[ "start_2_oh_shit" ][ 3 ] = "vox_plr_2_start_2_oh_shit12_0";
level.four_part_convos[ "chair1" ] = [];
level.four_part_convos[ "chair1" ][ 0 ] = "vox_plr_1_chair1_var1_0";
level.four_part_convos[ "chair1" ][ 1 ] = "vox_plr_2_chair1_var2_0";
level.four_part_convos[ "chair1" ][ 2 ] = "vox_plr_3_chair1_var3_0";
level.four_part_convos[ "chair1" ][ 3 ] = "vox_plr_1_chair1_var4_0";
level.four_part_convos[ "chair1" ][ 4 ] = "vox_plr_3_chair1_var5_0";
level.four_part_convos[ "chair2" ] = [];
level.four_part_convos[ "chair2" ][ 0 ] = "vox_plr_2_chair2_var1_0";
level.four_part_convos[ "chair2" ][ 1 ] = "vox_plr_3_chair2_var2_0";
level.four_part_convos[ "chair2" ][ 1 ] = "vox_plr_0_chair2_var3_0";
level.four_part_convos[ "chair2" ][ 2 ] = "vox_plr_3_chair2_var5_0";
level.four_part_convos[ "chair2" ][ 3 ] = "vox_plr_1_chair2_var4_0";
level.four_part_convos[ "chair_combat_1" ] = [];
level.four_part_convos[ "chair_combat_1" ][ 0 ] = "vox_plr_3_chair3_var_3_0";
level.four_part_convos[ "chair_combat_1" ][ 1 ] = "vox_plr_1_chair3_var_3_0";
level.four_part_convos[ "chair_combat_1" ][ 2 ] = "vox_plr_2_chair3_var_3_0";
level.four_part_convos[ "chair_combat_1" ][ 3 ] = "vox_plr_0_chair3_var_3_0";
level.four_part_convos[ "chair_combat_2" ] = [];
level.four_part_convos[ "chair_combat_2" ][ 0 ] = "vox_plr_0_chair4_var_4_0";
level.four_part_convos[ "chair_combat_2" ][ 1 ] = "vox_plr_3_chair4_var_4_0";
level.four_part_convos[ "chair_combat_2" ][ 2 ] = "vox_plr_2_chair4_var_4_0";
level.four_part_convos[ "chair_combat_2" ][ 3 ] = "vox_plr_1_chair4_var_4_0";
level.four_part_convos[ "chair_combat_2" ][ 4 ] = "vox_plr_3_chair4_var_4_1";
level.four_part_convos[ "bridge_visit1_alt1" ] = [];
level.four_part_convos[ "bridge_visit1_alt1" ][ 0 ] = "vox_plr_3_bridge_var1_1_0";
level.four_part_convos[ "bridge_visit1_alt1" ][ 1 ] = "vox_plr_2_bridge_var1_2_0";
level.four_part_convos[ "bridge_visit1_alt1" ][ 2 ] = "vox_plr_0_bridge_var1_3_0";
level.four_part_convos[ "bridge_visit1_alt1" ][ 3 ] = "vox_plr_1_bridge_var1_4_0";
level.four_part_convos[ "bridge_visit1_alt2" ] = [];
level.four_part_convos[ "bridge_visit1_alt2" ][ 0 ] = "vox_plr_1_bridge_var2_1_0";
level.four_part_convos[ "bridge_visit1_alt2" ][ 1 ] = "vox_plr_0_bridge_var2_2_0";
level.four_part_convos[ "bridge_visit1_alt2" ][ 2 ] = "vox_plr_1_bridge_var2_3_0";
level.four_part_convos[ "bridge_visit1_alt2" ][ 3 ] = "vox_plr_2_bridge_var2_4_0";
level.four_part_convos[ "bridge_visit1_alt2" ][ 4 ] = "vox_plr_3_bridge_var2_5_0";
level.four_part_convos[ "bridge_visit1_alt3" ] = [];
level.four_part_convos[ "bridge_visit1_alt3" ][ 0 ] = "vox_plr_0_bridge_var2_6_0";
level.four_part_convos[ "bridge_visit1_alt3" ][ 1 ] = "vox_plr_2_bridge_var2_7_0";
level.four_part_convos[ "bridge_visit1_alt3" ][ 2 ] = "vox_plr_3_bridge_var2_8_0";
level.four_part_convos[ "bridge_visit1_alt3" ][ 3 ] = "vox_plr_1_bridge_var2_9_0";
level.four_part_convos[ "bridge_visit1_alt4" ] = [];
level.four_part_convos[ "bridge_visit1_alt4" ][ 0 ] = "vox_plr_1_bridge_var2_10_0";
level.four_part_convos[ "bridge_visit1_alt4" ][ 1 ] = "vox_plr_2_bridge_var2_11_0";
level.four_part_convos[ "bridge_visit1_alt4" ][ 2 ] = "vox_plr_0_bridge_var2_12_0";
level.four_part_convos[ "bridge_visit1_alt4" ][ 3 ] = "vox_plr_3_bridge_var2_13_0";
level.four_part_convos[ "bridge_visit2_alt1" ] = [];
level.four_part_convos[ "bridge_visit2_alt1" ][ 0 ] = "vox_plr_0_bridge_var5_1_0";
level.four_part_convos[ "bridge_visit2_alt1" ][ 1 ] = "vox_plr_3_bridge_var5_2_0";
level.four_part_convos[ "bridge_visit2_alt1" ][ 2 ] = "vox_plr_0_bridge_var5_3_0";
level.four_part_convos[ "bridge_visit2_alt1" ][ 3 ] = "vox_plr_3_bridge_var6_1_0";
level.four_part_convos[ "bridge_visit2_alt1" ][ 4 ] = "vox_plr_2_bridge_var5_5_0";
level.four_part_convos[ "bridge_visit2_alt1" ][ 5 ] = "vox_plr_3_bridge_var5_4_0";
level.four_part_convos[ "bridge_visit2_alt2" ] = [];
level.four_part_convos[ "bridge_visit2_alt2" ][ 0 ] = "vox_plr_3_bridge_var6_3_0";
level.four_part_convos[ "bridge_visit2_alt2" ][ 1 ] = "vox_plr_1_bridge_var6_4_0";
level.four_part_convos[ "bridge_visit2_alt2" ][ 2 ] = "vox_plr_3_bridge_var6_5_0";
level.four_part_convos[ "bridge_visit2_alt2" ][ 3 ] = "vox_plr_2_bridge_var6_2_0";
level.four_part_convos[ "bridge_visit2_alt2" ][ 4 ] = "vox_plr_3_bridge_var6_6_0";
level.four_part_convos[ "bridge_visit2_alt2" ][ 5 ] = "vox_plr_0_bridge_var6_7_0";
level.four_part_convos[ "bridge_visit2_alt3" ] = [];
level.four_part_convos[ "bridge_visit2_alt3" ][ 0 ] = "vox_plr_3_bridge_var6_8_0";
level.four_part_convos[ "bridge_visit2_alt3" ][ 1 ] = "vox_plr_2_bridge_var6_9_0";
level.four_part_convos[ "bridge_visit2_alt3" ][ 2 ] = "vox_plr_3_bridge_var6_10_0";
level.four_part_convos[ "bridge_visit2_alt3" ][ 3 ] = "vox_plr_2_bridge_var6_11_0";
level.four_part_convos[ "bridge_visit2_alt3" ][ 3 ] = "vox_plr_3_bridge_var6_12_0";
level.four_part_convos[ "bridge_visit2_alt4" ] = [];
level.four_part_convos[ "bridge_visit2_alt4" ][ 0 ] = "vox_plr_0_bridge_var6_13_0";
level.four_part_convos[ "bridge_visit2_alt4" ][ 1 ] = "vox_plr_2_bridge_var6_14_0";
level.four_part_convos[ "bridge_visit2_alt4" ][ 2 ] = "vox_plr_1_bridge_var6_15_0";
level.four_part_convos[ "bridge_visit2_alt4" ][ 3 ] = "vox_plr_3_bridge_var6_16_0";
level.four_part_convos[ "alcatraz_return_alt1" ] = [];
level.four_part_convos[ "alcatraz_return_alt1" ][ 0 ] = "vox_plr_0_start_2_4_player_0";
level.four_part_convos[ "alcatraz_return_alt1" ][ 1 ] = "vox_plr_3_start_2_4_player_0";
level.four_part_convos[ "alcatraz_return_alt1" ][ 2 ] = "vox_plr_2_start_2_4_player_0";
level.four_part_convos[ "alcatraz_return_alt1" ][ 3 ] = "vox_plr_1_start_2_4_player_0";
level.four_part_convos[ "alcatraz_return_alt2" ] = [];
level.four_part_convos[ "alcatraz_return_alt2" ][ 0 ] = "vox_plr_2_start_2_4_player_1";
level.four_part_convos[ "alcatraz_return_alt2" ][ 1 ] = "vox_plr_3_start_2_4_player_1";
level.four_part_convos[ "alcatraz_return_alt2" ][ 2 ] = "vox_plr_0_start_2_4_player_1";
level.four_part_convos[ "alcatraz_return_alt2" ][ 3 ] = "vox_plr_1_start_2_4_player_1";
level.four_part_convos[ "alcatraz_return_quest_reset" ] = [];
level.four_part_convos[ "alcatraz_return_quest_reset" ][ 0 ] = "vox_plr_3_start_2_2_3_players_0";
level.four_part_convos[ "alcatraz_return_quest_reset" ][ 1 ] = "vox_plr_1_start_2_2_3_players_0";
level.four_part_convos[ "alcatraz_return_quest_reset" ][ 2 ] = "vox_plr_2_start_2_2_3_players_0";
level.four_part_convos[ "alcatraz_return_quest_reset" ][ 3 ] = "vox_plr_0_start_2_2_3_players_0";
level.soliloquy_convos[ "solo_intro_Billy" ] = [];
level.soliloquy_convos[ "solo_intro_Billy" ][ 0 ] = "vox_plr_2_start_1_billy_0";
level.soliloquy_convos[ "solo_intro_Billy" ][ 1 ] = "vox_plr_2_start_1_billy_1";
level.soliloquy_convos[ "solo_intro_Billy" ][ 2 ] = "vox_plr_2_start_1_billy_2";
level.soliloquy_convos[ "solo_intro_Sal" ] = [];
level.soliloquy_convos[ "solo_intro_Sal" ][ 0 ] = "vox_plr_1_start_1_sal_0";
level.soliloquy_convos[ "solo_intro_Sal" ][ 1 ] = "vox_plr_1_start_1_sal_1";
level.soliloquy_convos[ "solo_intro_Sal" ][ 2 ] = "vox_plr_1_start_1_sal_2";
level.soliloquy_convos[ "solo_intro_Finn" ] = [];
level.soliloquy_convos[ "solo_intro_Finn" ][ 0 ] = "vox_plr_0_start_1_finn_0";
level.soliloquy_convos[ "solo_intro_Finn" ][ 1 ] = "vox_plr_0_start_1_finn_1";
level.soliloquy_convos[ "solo_intro_Finn" ][ 2 ] = "vox_plr_0_start_1_finn_2";
level.soliloquy_convos[ "solo_intro_Arlington" ] = [];
level.soliloquy_convos[ "solo_intro_Arlington" ][ 0 ] = "vox_plr_3_start_1_arlington_0";
level.soliloquy_convos[ "solo_intro_Arlington" ][ 1 ] = "vox_plr_3_start_1_arlington_1";
level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ] = [];
level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ][ 0 ] = "vox_plr_1_purgatory_sal_var1_0";
level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ][ 1 ] = "vox_plr_1_purgatory_sal_var1_1";
level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ][ 2 ] = "vox_plr_1_purgatory_sal_var1_2";
level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ][ 3 ] = "vox_plr_1_purgatory_sal_var1_3";
level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ][ 4 ] = "vox_plr_1_purgatory_sal_var1_4";
level.soliloquy_convos[ "purgatory_Sal_visit1_alt2" ] = [];
level.soliloquy_convos[ "purgatory_Sal_visit1_alt2" ][ 0 ] = "vox_plr_1_purgatory_sal_var2_0";
level.soliloquy_convos[ "purgatory_Sal_visit1_alt2" ][ 1 ] = "vox_plr_1_purgatory_sal_var2_1";
level.soliloquy_convos[ "purgatory_Sal_visit1_alt2" ][ 2 ] = "vox_plr_1_purgatory_sal_var2_2";
level.soliloquy_convos[ "purgatory_Sal_visit1_alt2" ][ 3 ] = "vox_plr_1_purgatory_sal_var2_3";
level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ] = [];
level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ][ 0 ] = "vox_plr_1_purgatory_sal_var3_0";
level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ][ 1 ] = "vox_plr_1_purgatory_sal_var3_1";
level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ][ 2 ] = "vox_plr_1_purgatory_sal_var3_2";
level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ][ 3 ] = "vox_plr_1_purgatory_sal_var3_3";
level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ][ 4 ] = "vox_plr_1_purgatory_sal_var3_4";
level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ] = [];
level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ][ 0 ] = "vox_plr_1_purgatory_sal_var4_0";
level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ][ 1 ] = "vox_plr_1_purgatory_sal_var4_1";
level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ][ 2 ] = "vox_plr_1_purgatory_sal_var4_3";
level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ][ 3 ] = "vox_plr_1_purgatory_sal_var4_4";
level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ][ 4 ] = "vox_plr_1_purgatory_sal_var4_5";
level.soliloquy_convos[ "purgatory_Billy_visit1_alt1" ] = [];
level.soliloquy_convos[ "purgatory_Billy_visit1_alt1" ][ 0 ] = "vox_plr_2_purgatory_billy_var1_0";
level.soliloquy_convos[ "purgatory_Billy_visit1_alt1" ][ 1 ] = "vox_plr_2_purgatory_billy_var1_1";
level.soliloquy_convos[ "purgatory_Billy_visit1_alt1" ][ 2 ] = "vox_plr_2_purgatory_billy_var1_2";
level.soliloquy_convos[ "purgatory_Billy_visit1_alt2" ] = [];
level.soliloquy_convos[ "purgatory_Billy_visit1_alt2" ][ 0 ] = "vox_plr_2_purgatory_billy_var2_0";
level.soliloquy_convos[ "purgatory_Billy_visit1_alt2" ][ 1 ] = "vox_plr_2_purgatory_billy_var2_1";
level.soliloquy_convos[ "purgatory_Billy_visit1_alt2" ][ 2 ] = "vox_plr_2_purgatory_billy_var2_2";
level.soliloquy_convos[ "purgatory_Billy_visit2_alt1" ] = [];
level.soliloquy_convos[ "purgatory_Billy_visit2_alt1" ][ 0 ] = "vox_plr_2_purgatory_billy_var3_0";
level.soliloquy_convos[ "purgatory_Billy_visit2_alt1" ][ 1 ] = "vox_plr_2_purgatory_billy_var3_1";
level.soliloquy_convos[ "purgatory_Billy_visit2_alt1" ][ 2 ] = "vox_plr_2_purgatory_billy_var3_2";
level.soliloquy_convos[ "purgatory_Billy_visit2_alt1" ][ 3 ] = "vox_plr_2_purgatory_billy_var3_3";
level.soliloquy_convos[ "purgatory_Billy_visit2_alt2" ] = [];
level.soliloquy_convos[ "purgatory_Billy_visit2_alt2" ][ 0 ] = "vox_plr_2_purgatory_billy_var4_0";
level.soliloquy_convos[ "purgatory_Billy_visit2_alt2" ][ 1 ] = "vox_plr_2_purgatory_billy_var4_1";
level.soliloquy_convos[ "purgatory_Billy_visit2_alt2" ][ 2 ] = "vox_plr_2_purgatory_billy_var4_2";
level.soliloquy_convos[ "purgatory_Finn_visit1_alt1" ] = [];
level.soliloquy_convos[ "purgatory_Finn_visit1_alt1" ][ 0 ] = "vox_plr_0_purgatory_finn_var1_0";
level.soliloquy_convos[ "purgatory_Finn_visit1_alt1" ][ 1 ] = "vox_plr_0_purgatory_finn_var1_1";
level.soliloquy_convos[ "purgatory_Finn_visit1_alt1" ][ 2 ] = "vox_plr_0_purgatory_finn_var1_2";
level.soliloquy_convos[ "purgatory_Finn_visit1_alt1" ][ 3 ] = "vox_plr_0_purgatory_finn_var1_3";
level.soliloquy_convos[ "purgatory_Finn_visit1_alt2" ] = [];
level.soliloquy_convos[ "purgatory_Finn_visit1_alt2" ][ 0 ] = "vox_plr_0_purgatory_finn_var2_0";
level.soliloquy_convos[ "purgatory_Finn_visit1_alt2" ][ 1 ] = "vox_plr_0_purgatory_finn_var2_1";
level.soliloquy_convos[ "purgatory_Finn_visit1_alt2" ][ 2 ] = "vox_plr_0_purgatory_finn_var2_2";
level.soliloquy_convos[ "purgatory_Finn_visit2_alt1" ] = [];
level.soliloquy_convos[ "purgatory_Finn_visit2_alt1" ][ 0 ] = "vox_plr_0_purgatory_finn_var3_0";
level.soliloquy_convos[ "purgatory_Finn_visit2_alt1" ][ 1 ] = "vox_plr_0_purgatory_finn_var3_1";
level.soliloquy_convos[ "purgatory_Finn_visit2_alt1" ][ 2 ] = "vox_plr_0_purgatory_finn_var3_2";
level.soliloquy_convos[ "purgatory_Finn_visit2_alt2" ] = [];
level.soliloquy_convos[ "purgatory_Finn_visit2_alt2" ][ 0 ] = "vox_plr_0_purgatory_finn_var4_0";
level.soliloquy_convos[ "purgatory_Finn_visit2_alt2" ][ 1 ] = "vox_plr_0_purgatory_finn_var4_1";
level.soliloquy_convos[ "purgatory_Finn_visit2_alt2" ][ 2 ] = "vox_plr_0_purgatory_finn_var4_2";
level.soliloquy_convos[ "purgatory_Arlington_visit1_alt1" ] = [];
level.soliloquy_convos[ "purgatory_Arlington_visit1_alt1" ][ 0 ] = "vox_plr_3_purgatory_arlington_var1_0";
level.soliloquy_convos[ "purgatory_Arlington_visit1_alt1" ][ 1 ] = "vox_plr_3_purgatory_arlington_var1_1";
level.soliloquy_convos[ "purgatory_Arlington_visit1_alt1" ][ 2 ] = "vox_plr_3_purgatory_arlington_var1_2";
level.soliloquy_convos[ "purgatory_Arlington_visit1_alt2" ] = [];
level.soliloquy_convos[ "purgatory_Arlington_visit1_alt2" ][ 0 ] = "vox_plr_3_purgatory_arlington_var2_0";
level.soliloquy_convos[ "purgatory_Arlington_visit1_alt2" ][ 1 ] = "vox_plr_3_purgatory_arlington_var2_1";
level.soliloquy_convos[ "purgatory_Arlington_visit1_alt2" ][ 2 ] = "vox_plr_3_purgatory_arlington_var2_2";
level.soliloquy_convos[ "purgatory_Arlington_visit2_alt1" ] = [];
level.soliloquy_convos[ "purgatory_Arlington_visit2_alt1" ][ 0 ] = "vox_plr_3_purgatory_arlington_var3_0";
level.soliloquy_convos[ "purgatory_Arlington_visit2_alt1" ][ 1 ] = "vox_plr_3_purgatory_arlington_var3_1";
level.soliloquy_convos[ "purgatory_Arlington_visit2_alt1" ][ 2 ] = "vox_plr_3_purgatory_arlington_var3_2";
level.soliloquy_convos[ "purgatory_Arlington_visit2_alt2" ] = [];
level.soliloquy_convos[ "purgatory_Arlington_visit2_alt2" ][ 0 ] = "vox_plr_3_purgatory_arlington_var4_0";
level.soliloquy_convos[ "purgatory_Arlington_visit2_alt2" ][ 1 ] = "vox_plr_3_purgatory_arlington_var4_1";
level.soliloquy_convos[ "purgatory_Arlington_visit2_alt2" ][ 2 ] = "vox_plr_3_purgatory_arlington_var4_2";
level.soliloquy_convos[ "electric_chair_Finn" ] = [];
level.soliloquy_convos[ "electric_chair_Finn" ][ 0 ] = "vox_plr_0_chair4_var_4_0";
level.soliloquy_convos[ "electric_chair_Sal" ] = [];
level.soliloquy_convos[ "electric_chair_Sal" ][ 0 ] = "vox_plr_1_chair1_var1_0";
level.soliloquy_convos[ "electric_chair_Billy" ] = [];
level.soliloquy_convos[ "electric_chair_Billy" ][ 0 ] = "vox_plr_2_chair1_var2_0";
level.soliloquy_convos[ "electric_chair_Arlington" ] = [];
level.soliloquy_convos[ "electric_chair_Arlington" ][ 0 ] = "vox_plr_3_chair3_var_3_0";
}
vo_bridge_soliloquy()
{
if ( level.n_quest_iteration_count < 3 )
{
convo = level.soliloquy_convos[ "purgatory_" + self.character_name + "_visit" + level.n_quest_iteration_count + "_alt" + randomintrange( 1, 3 ) ];
if ( isDefined( convo ) )
{
self vo_play_soliloquy( convo );
}
}
}
vo_bridge_four_part_convo()
{
if ( level.n_quest_iteration_count < 3 )
{
convo = level.four_part_convos[ "bridge_visit" + level.n_quest_iteration_count + "_alt" + randomintrange( 1, 5 ) ];
if ( isDefined( convo ) )
{
vo_play_four_part_conversation( convo );
}
}
}
vo_play_soliloquy( convo )
{
self endon( "disconnect" );
if ( !isDefined( convo ) )
{
return;
}
if ( !flag( "story_vo_playing" ) )
{
flag_set( "story_vo_playing" );
self thread vo_play_soliloquy_disconnect_listener();
self.dontspeak = 1;
self setclientfieldtoplayer( "isspeaking", 1 );
i = 0;
while ( i < convo.size )
{
if ( isDefined( self.afterlife ) && self.afterlife )
{
self.dontspeak = 0;
self setclientfieldtoplayer( "isspeaking", 0 );
flag_clear( "story_vo_playing" );
self notify( "soliloquy_vo_done" );
return;
}
else
{
self playsoundwithnotify( convo[ i ], "sound_done" + convo[ i ] );
self waittill( "sound_done" + convo[ i ] );
}
wait 1;
i++;
}
self.dontspeak = 0;
self setclientfieldtoplayer( "isspeaking", 0 );
flag_clear( "story_vo_playing" );
self notify( "soliloquy_vo_done" );
}
}
vo_play_soliloquy_disconnect_listener()
{
self endon( "soliloquy_vo_done" );
self waittill( "disconnect" );
flag_clear( "story_vo_playing" );
}
vo_play_four_part_conversation( convo )
{
if ( !isDefined( convo ) )
{
return;
}
players = getplayers();
if ( players.size == 4 && !flag( "story_vo_playing" ) )
{
flag_set( "story_vo_playing" );
old_speaking_player = undefined;
speaking_player = undefined;
n_dist = 0;
n_max_reply_dist = 1500;
e_arlington = undefined;
e_sal = undefined;
e_billy = undefined;
e_finn = undefined;
_a513 = players;
_k513 = getFirstArrayKey( _a513 );
while ( isDefined( _k513 ) )
{
player = _a513[ _k513 ];
if ( isDefined( player ) )
{
switch( player.character_name )
{
case "Arlington":
e_arlington = player;
break;
break;
case "Sal":
e_sal = player;
break;
break;
case "Billy":
e_billy = player;
break;
break;
case "Finn":
e_finn = player;
break;
break;
}
}
_k513 = getNextArrayKey( _a513, _k513 );
}
if ( isDefined( e_arlington ) && isDefined( e_sal ) || !isDefined( e_billy ) && !isDefined( e_finn ) )
{
return;
}
else _a542 = players;
_k542 = getFirstArrayKey( _a542 );
while ( isDefined( _k542 ) )
{
player = _a542[ _k542 ];
if ( isDefined( player ) )
{
player.dontspeak = 1;
player setclientfieldtoplayer( "isspeaking", 1 );
}
_k542 = getNextArrayKey( _a542, _k542 );
}
i = 0;
while ( i < convo.size )
{
players = getplayers();
if ( players.size != 4 )
{
_a557 = players;
_k557 = getFirstArrayKey( _a557 );
while ( isDefined( _k557 ) )
{
player = _a557[ _k557 ];
if ( isDefined( player ) )
{
player.dontspeak = 0;
player setclientfieldtoplayer( "isspeaking", 0 );
}
_k557 = getNextArrayKey( _a557, _k557 );
}
flag_clear( "story_vo_playing" );
return;
}
if ( issubstr( convo[ i ], "plr_0" ) )
{
speaking_player = e_finn;
}
else if ( issubstr( convo[ i ], "plr_1" ) )
{
speaking_player = e_sal;
}
else if ( issubstr( convo[ i ], "plr_2" ) )
{
speaking_player = e_billy;
}
else
{
if ( issubstr( convo[ i ], "plr_3" ) )
{
speaking_player = e_arlington;
}
}
if ( isDefined( old_speaking_player ) )
{
n_dist = distance( old_speaking_player.origin, speaking_player.origin );
}
if ( speaking_player.afterlife || n_dist > n_max_reply_dist )
{
_a593 = players;
_k593 = getFirstArrayKey( _a593 );
while ( isDefined( _k593 ) )
{
player = _a593[ _k593 ];
if ( isDefined( player ) )
{
player.dontspeak = 0;
player setclientfieldtoplayer( "isspeaking", 0 );
}
_k593 = getNextArrayKey( _a593, _k593 );
}
flag_clear( "story_vo_playing" );
return;
}
else
{
speaking_player playsoundwithnotify( convo[ i ], "sound_done" + convo[ i ] );
speaking_player waittill( "sound_done" + convo[ i ] );
old_speaking_player = speaking_player;
}
wait 1;
i++;
}
_a613 = players;
_k613 = getFirstArrayKey( _a613 );
while ( isDefined( _k613 ) )
{
player = _a613[ _k613 ];
if ( isDefined( player ) )
{
player.dontspeak = 0;
player setclientfieldtoplayer( "isspeaking", 0 );
}
_k613 = getNextArrayKey( _a613, _k613 );
}
flag_clear( "story_vo_playing" );
}
}
electric_chair_vo()
{
if ( level.n_quest_iteration_count == 1 )
{
e_nml_zone = getent( "zone_golden_gate_bridge", "targetname" );
n_players_on_bridge_count = get_players_touching( "zone_golden_gate_bridge" );
players = getplayers();
if ( players.size == 4 && n_players_on_bridge_count == 4 )
{
if ( count_zombies_in_zone( "zone_golden_gate_bridge" ) > 0 )
{
vo_play_four_part_conversation( level.four_part_convos[ "chair_combat_" + randomintrange( 1, 3 ) ] );
}
else
{
vo_play_four_part_conversation( level.four_part_convos[ "chair" + randomintrange( 1, 3 ) ] );
}
return;
}
else
{
if ( isDefined( players[ 0 ] ) && players[ 0 ] istouching( e_nml_zone ) )
{
character_name = players[ 0 ].character_name;
players[ 0 ] vo_play_soliloquy( level.soliloquy_convos[ "electric_chair_" + character_name ] );
}
}
}
}
escape_flight_vo()
{
e_roof_zone = getent( "zone_roof", "targetname" );
players = getplayers();
player = players[ randomintrange( 0, players.size ) ];
if ( isDefined( player ) && player istouching( e_roof_zone ) )
{
player thread do_player_general_vox( "quest", "build_plane", undefined, 100 );
}
flag_wait( "plane_boarded" );
if ( level.final_flight_activated )
{
return;
}
while ( level.characters_in_nml.size == 0 )
{
wait 0,1;
}
wait 1;
while ( level.characters_in_nml.size > 0 )
{
character_name = level.characters_in_nml[ randomintrange( 0, level.characters_in_nml.size ) ];
players = getplayers();
_a687 = players;
_k687 = getFirstArrayKey( _a687 );
while ( isDefined( _k687 ) )
{
player = _a687[ _k687 ];
if ( isDefined( player ) && player.character_name == character_name )
{
player thread do_player_general_vox( "quest", "plane_takeoff" );
}
_k687 = getNextArrayKey( _a687, _k687 );
}
}
flag_wait( "plane_departed" );
wait 2;
while ( level.characters_in_nml.size > 0 )
{
character_name = level.characters_in_nml[ randomintrange( 0, level.characters_in_nml.size ) ];
players = getplayers();
_a703 = players;
_k703 = getFirstArrayKey( _a703 );
while ( isDefined( _k703 ) )
{
player = _a703[ _k703 ];
if ( isDefined( player ) && player.character_name == character_name )
{
player playsound( "vox_plr_" + player.characterindex + "_plane_flight_0" );
}
_k703 = getNextArrayKey( _a703, _k703 );
}
}
flag_wait( "plane_approach_bridge" );
wait 3,5;
while ( level.characters_in_nml.size > 0 )
{
character_name = level.characters_in_nml[ randomintrange( 0, level.characters_in_nml.size ) ];
players = getplayers();
_a719 = players;
_k719 = getFirstArrayKey( _a719 );
while ( isDefined( _k719 ) )
{
player = _a719[ _k719 ];
if ( isDefined( player ) && player.character_name == character_name )
{
player playsound( "vox_plr_" + player.characterindex + "_plane_crash_0" );
}
_k719 = getNextArrayKey( _a719, _k719 );
}
}
flag_wait( "plane_zapped" );
players = getplayers();
_a732 = players;
_k732 = getFirstArrayKey( _a732 );
while ( isDefined( _k732 ) )
{
player = _a732[ _k732 ];
if ( isDefined( player ) && isinarray( level.characters_in_nml, player.character_name ) )
{
player thread player_scream_thread();
}
_k732 = getNextArrayKey( _a732, _k732 );
}
}
player_scream_thread()
{
self endon( "death" );
self endon( "disconnect" );
players = getplayers();
_a749 = players;
_k749 = getFirstArrayKey( _a749 );
while ( isDefined( _k749 ) )
{
player = _a749[ _k749 ];
if ( isDefined( player ) && isinarray( level.characters_in_nml, player.character_name ) )
{
player playsoundtoplayer( "vox_plr_" + player.characterindex + "_free_fall_0", self );
}
_k749 = getNextArrayKey( _a749, _k749 );
}
level flag_wait( "plane_crashed" );
self stopsounds();
self.dontspeak = 0;
player setclientfieldtoplayer( "isspeaking", 0 );
}
sndhitelectrifiedpulley( str_master_key_location )
{
self endon( "master_key_pulley_" + str_master_key_location );
while ( 1 )
{
self waittill( "trigger", e_triggerer );
self playsound( "fly_elec_sparks_key" );
wait 1;
}
}
is_player_character_present( character_name )
{
if ( !isDefined( character_name ) )
{
return 0;
}
players = getplayers();
_a785 = players;
_k785 = getFirstArrayKey( _a785 );
while ( isDefined( _k785 ) )
{
player = _a785[ _k785 ];
if ( isDefined( player.character_name ) && player.character_name == character_name )
{
return 1;
}
_k785 = getNextArrayKey( _a785, _k785 );
}
return 0;
}
get_players_touching( scr_touched_name )
{
n_touching_count = 0;
e_touched = getent( scr_touched_name, "targetname" );
/#
assert( isDefined( e_touched ) );
#/
a_players = getplayers();
_a803 = a_players;
_k803 = getFirstArrayKey( _a803 );
while ( isDefined( _k803 ) )
{
player = _a803[ _k803 ];
if ( isDefined( player ) && player istouching( e_touched ) )
{
n_touching_count++;
}
_k803 = getNextArrayKey( _a803, _k803 );
}
return n_touching_count;
}
count_zombies_in_zone( volume )
{
e_zone = getent( volume, "targetname" );
if ( !isDefined( e_zone ) )
{
return;
}
n_zombie_count = 0;
zombies = getaispeciesarray( "axis", "all" );
i = 0;
while ( i < zombies.size )
{
if ( zombies[ i ] istouching( e_zone ) )
{
n_zombie_count++;
}
i++;
}
return n_zombie_count;
}

View File

@ -0,0 +1,27 @@
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
precache()
{
}
main()
{
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "working" );
maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index );
flag_wait( "initial_blackscreen_passed" );
flag_set( "power_on" );
zm_treasure_chest_init();
}
zm_treasure_chest_init()
{
chest1 = getstruct( "start_chest", "script_noteworthy" );
level.chests = [];
level.chests[ level.chests.size ] = chest1;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" );
}

View File

@ -0,0 +1,800 @@
#include maps/mp/zombies/_zm_ai_brutus;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/zombies/_zm_audio;
#include maps/mp/animscripts/zm_death;
#include maps/mp/zombies/_zm_laststand;
#include maps/mp/zombies/_zm_score;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
#using_animtree( "fxanim_props" );
init_fan_trap_trigs()
{
trap_trigs = getentarray( "fan_trap_use_trigger", "targetname" );
array_thread( trap_trigs, ::fan_trap_think );
init_fan_fxanim( "wardens_office" );
}
init_fan_trap_animtree()
{
scriptmodelsuseanimtree( -1 );
}
init_fan_fxanim( str_loc )
{
e_fan = getent( "fxanim_fan_" + str_loc, "targetname" );
level.fan_trap_fxanims = [];
level.fan_trap_fxanims[ "fan_trap_start" ] = %fxanim_zom_al_trap_fan_start_anim;
level.fan_trap_fxanims[ "fan_trap_idle" ] = %fxanim_zom_al_trap_fan_idle_anim;
level.fan_trap_fxanims[ "fan_trap_end" ] = %fxanim_zom_al_trap_fan_end_anim;
}
fan_trap_think()
{
triggers = getentarray( self.targetname, "targetname" );
self.cost = 1000;
self.in_use = 0;
self.is_available = 1;
self.has_been_used = 0;
self.zombie_dmg_trig = getent( self.target, "targetname" );
self.zombie_dmg_trig.script_string = self.script_string;
self.zombie_dmg_trig.in_use = 0;
self.rumble_trig = getent( "fan_trap_rumble", "targetname" );
light_name = self get_trap_light_name();
zapper_light_red( light_name );
self sethintstring( &"ZM_PRISON_FAN_TRAP_UNAVAILABLE" );
flag_wait( "activate_warden_office" );
zapper_light_green( light_name );
self hint_string( &"ZM_PRISON_FAN_TRAP", self.cost );
while ( 1 )
{
self waittill( "trigger", who );
while ( who in_revive_trigger() )
{
continue;
}
while ( !isDefined( self.is_available ) )
{
continue;
}
if ( is_player_valid( who ) )
{
if ( who.score >= self.cost )
{
if ( !self.zombie_dmg_trig.in_use )
{
if ( !self.has_been_used )
{
self.has_been_used = 1;
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trap" );
who do_player_general_vox( "general", "discover_trap" );
}
else
{
who do_player_general_vox( "general", "start_trap" );
}
self.zombie_dmg_trig.in_use = 1;
self.zombie_dmg_trig.active = 1;
self playsound( "zmb_trap_activate" );
self thread fan_trap_move_switch( self );
self waittill( "switch_activated" );
who minus_to_player_score( self.cost );
level.trapped_track[ "fan" ] = 1;
level notify( "trap_activated" );
who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_fan_trap_used", 0 );
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" );
self.zombie_dmg_trig setvisibletoall();
self thread activate_fan_trap();
self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string );
clientnotify( self.script_string + "off" );
self.zombie_dmg_trig notify( "fan_trap_finished" );
self.zombie_dmg_trig.active = 0;
self.zombie_dmg_trig setinvisibletoall();
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" );
wait 25;
self playsound( "zmb_trap_available" );
self notify( "available" );
self.zombie_dmg_trig.in_use = 0;
array_thread( triggers, ::hint_string, &"ZM_PRISON_FAN_TRAP", self.cost );
}
}
}
}
}
activate_fan_trap()
{
self.zombie_dmg_trig thread fan_trap_damage( self );
e_fan = getent( "fxanim_fan_" + self.script_string, "targetname" );
e_fan useanimtree( -1 );
e_fan playsound( "zmb_trap_fan_start" );
e_fan playloopsound( "zmb_trap_fan_loop", 2 );
n_start_time = getanimlength( level.fan_trap_fxanims[ "fan_trap_start" ] );
n_idle_time = getanimlength( level.fan_trap_fxanims[ "fan_trap_idle" ] );
n_end_time = getanimlength( level.fan_trap_fxanims[ "fan_trap_end" ] );
e_fan setanim( level.fan_trap_fxanims[ "fan_trap_start" ], 1, 0,1, 1 );
wait n_start_time;
e_fan setanim( level.fan_trap_fxanims[ "fan_trap_idle" ], 1, 0,1, 1 );
self thread fan_trap_timeout();
self thread fan_trap_rumble_think();
self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string );
e_fan setanim( level.fan_trap_fxanims[ "fan_trap_end" ], 1, 0,1, 1 );
a_players = getplayers();
_a177 = a_players;
_k177 = getFirstArrayKey( _a177 );
while ( isDefined( _k177 ) )
{
player = _a177[ _k177 ];
if ( is_true( player.fan_trap_rumble ) )
{
player setclientfieldtoplayer( "rumble_fan_trap", 0 );
player.fan_trap_rumble = 0;
}
_k177 = getNextArrayKey( _a177, _k177 );
}
e_fan stoploopsound( 0,75 );
e_fan playsound( "zmb_trap_fan_end" );
wait n_end_time;
}
fan_trap_timeout()
{
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
n_duration = 0;
while ( n_duration < 25 )
{
wait 0,05;
n_duration += 0,05;
}
self.zombie_dmg_trig notify( "trap_finished_" + self.script_string );
}
fan_trap_rumble_think()
{
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
while ( 1 )
{
self.rumble_trig waittill( "trigger", ent );
if ( isplayer( ent ) )
{
if ( !is_true( ent.fan_trap_rumble ) )
{
self thread fan_trap_rumble( ent );
}
}
}
}
fan_trap_rumble( player )
{
player endon( "death" );
player endon( "disconnect" );
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
while ( 1 )
{
if ( player istouching( self.rumble_trig ) )
{
player setclientfieldtoplayer( "rumble_fan_trap", 1 );
player.fan_trap_rumble = 1;
wait 0,25;
continue;
}
else
{
player setclientfieldtoplayer( "rumble_fan_trap", 0 );
player.fan_trap_rumble = 0;
return;
}
}
}
fan_trap_damage( parent )
{
if ( isDefined( level.custom_fan_trap_damage_func ) )
{
self thread [[ level.custom_fan_trap_damage_func ]]( parent );
return;
}
self endon( "fan_trap_finished" );
while ( 1 )
{
self waittill( "trigger", ent );
if ( isplayer( ent ) )
{
ent thread player_fan_trap_damage();
continue;
}
else
{
if ( is_true( ent.is_brutus ) )
{
ent maps/mp/zombies/_zm_ai_brutus::trap_damage_callback( self );
return;
}
if ( !isDefined( ent.marked_for_death ) )
{
ent.marked_for_death = 1;
ent thread zombie_fan_trap_death();
}
}
}
}
fan_trap_move_switch( parent )
{
light_name = "";
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
light_name = parent get_trap_light_name();
zapper_light_red( light_name );
tswitch rotatepitch( -180, 0,5 );
tswitch playsound( "amb_sparks_l_b" );
tswitch waittill( "rotatedone" );
self notify( "switch_activated" );
self waittill( "available" );
tswitch rotatepitch( 180, 0,5 );
zapper_light_green( light_name );
}
player_fan_trap_damage()
{
self endon( "death" );
self endon( "disconnect" );
if ( !self hasperk( "specialty_armorvest" ) || ( self.health - 100 ) < 1 )
{
radiusdamage( self.origin, 10, self.health + 100, self.health + 100 );
}
else
{
self dodamage( 50, self.origin );
}
}
zombie_fan_trap_death()
{
self endon( "death" );
if ( !isDefined( self.is_brutus ) )
{
self.a.gib_ref = random( array( "guts", "right_arm", "left_arm", "head" ) );
self thread maps/mp/animscripts/zm_death::do_gib();
}
self setclientfield( "fan_trap_blood_fx", 1 );
self thread stop_fan_trap_blood_fx();
self dodamage( self.health + 1000, self.origin );
}
stop_fan_trap_blood_fx()
{
wait 2;
self setclientfield( "fan_trap_blood_fx", 0 );
}
init_acid_trap_trigs()
{
trap_trigs = getentarray( "acid_trap_trigger", "targetname" );
array_thread( trap_trigs, ::acid_trap_think );
level thread acid_trap_host_migration_listener();
}
acid_trap_think()
{
triggers = getentarray( self.targetname, "targetname" );
self.is_available = 1;
self.has_been_used = 0;
self.cost = 1000;
self.in_use = 0;
self.zombie_dmg_trig = getent( self.target, "targetname" );
self.zombie_dmg_trig.in_use = 0;
light_name = self get_trap_light_name();
zapper_light_red( light_name );
self sethintstring( &"ZM_PRISON_ACID_TRAP_UNAVAILABLE" );
flag_wait_any( "activate_cafeteria", "activate_infirmary" );
zapper_light_green( light_name );
self hint_string( &"ZM_PRISON_ACID_TRAP", self.cost );
while ( 1 )
{
self waittill( "trigger", who );
while ( who in_revive_trigger() )
{
continue;
}
while ( !isDefined( self.is_available ) )
{
continue;
}
if ( is_player_valid( who ) )
{
if ( who.score >= self.cost )
{
if ( !self.zombie_dmg_trig.in_use )
{
if ( !self.has_been_used )
{
self.has_been_used = 1;
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trap" );
who do_player_general_vox( "general", "discover_trap" );
}
else
{
who do_player_general_vox( "general", "start_trap" );
}
self.zombie_dmg_trig.in_use = 1;
self.zombie_dmg_trig.active = 1;
self playsound( "zmb_trap_activate" );
self thread acid_trap_move_switch( self );
self waittill( "switch_activated" );
who minus_to_player_score( self.cost );
level.trapped_track[ "acid" ] = 1;
level notify( "trap_activated" );
who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_acid_trap_used", 0 );
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" );
self thread activate_acid_trap();
self.zombie_dmg_trig waittill( "acid_trap_fx_done" );
clientnotify( self.script_string + "off" );
if ( isDefined( self.fx_org ) )
{
self.fx_org delete();
}
if ( isDefined( self.zapper_fx_org ) )
{
self.zapper_fx_org delete();
}
if ( isDefined( self.zapper_fx_switch_org ) )
{
self.zapper_fx_switch_org delete();
}
self.zombie_dmg_trig notify( "acid_trap_finished" );
self.zombie_dmg_trig.active = 0;
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" );
wait 25;
self playsound( "zmb_trap_available" );
self notify( "available" );
self.zombie_dmg_trig.in_use = 0;
array_thread( triggers, ::hint_string, &"ZM_PRISON_ACID_TRAP", self.cost );
}
}
}
}
}
acid_trap_move_switch( parent )
{
light_name = "";
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
light_name = parent get_trap_light_name();
zapper_light_red( light_name );
tswitch rotatepitch( -180, 0,5 );
tswitch playsound( "amb_sparks_l_b" );
tswitch waittill( "rotatedone" );
self notify( "switch_activated" );
self waittill( "available" );
tswitch rotatepitch( 180, 0,5 );
zapper_light_green( light_name );
}
activate_acid_trap()
{
clientnotify( self.target );
fire_points = getstructarray( self.target, "targetname" );
i = 0;
while ( i < fire_points.size )
{
wait_network_frame();
fire_points[ i ] thread acid_trap_fx( self );
i++;
}
self.zombie_dmg_trig thread acid_trap_damage();
}
acid_trap_damage()
{
if ( isDefined( level.custom_acid_trap_damage_func ) )
{
self thread [[ level.custom_acid_trap_damage_func ]]();
return;
}
self endon( "acid_trap_finished" );
while ( 1 )
{
self waittill( "trigger", ent );
if ( isplayer( ent ) )
{
ent thread player_acid_damage( self );
continue;
}
else
{
if ( is_true( ent.is_brutus ) )
{
ent maps/mp/zombies/_zm_ai_brutus::trap_damage_callback( self );
return;
}
if ( !isDefined( ent.marked_for_death ) )
{
ent.marked_for_death = 1;
ent thread zombie_acid_damage();
}
}
}
}
zombie_acid_damage()
{
self endon( "death" );
self setclientfield( "acid_trap_death_fx", 1 );
wait randomfloatrange( 0,25, 2 );
if ( !isDefined( self.is_brutus ) )
{
self.a.gib_ref = random( array( "right_arm", "left_arm", "head", "right_leg", "left_leg", "no_legs" ) );
self thread maps/mp/animscripts/zm_death::do_gib();
}
self dodamage( self.health + 1000, self.origin );
}
stop_acid_death_fx()
{
wait 3;
self setclientfield( "acid_trap_death_fx", 0 );
}
player_acid_damage( t_damage )
{
self endon( "death" );
self endon( "disconnect" );
t_damage endon( "acid_trap_finished" );
while ( !isDefined( self.is_in_acid ) && !self player_is_in_laststand() )
{
self.is_in_acid = 1;
self thread player_acid_damage_cooldown();
while ( self istouching( t_damage ) && !self player_is_in_laststand() && !self.afterlife )
{
self dodamage( self.maxhealth / 2, self.origin );
wait 1;
}
}
}
player_acid_damage_cooldown()
{
self endon( "disconnect" );
wait 1;
if ( isDefined( self ) )
{
self.is_in_acid = undefined;
}
}
acid_trap_fx( notify_ent )
{
wait 25;
notify_ent.zombie_dmg_trig notify( "acid_trap_fx_done" );
}
acid_trap_host_migration_listener()
{
level endon( "end_game" );
level notify( "acid_trap_hostmigration" );
level endon( "acid_trap_hostmigration" );
while ( 1 )
{
level waittill( "host_migration_end" );
trap_trigs = getentarray( "acid_trap_trigger", "targetname" );
_a623 = trap_trigs;
_k623 = getFirstArrayKey( _a623 );
while ( isDefined( _k623 ) )
{
trigger = _a623[ _k623 ];
if ( isDefined( trigger.zombie_dmg_trig ) && isDefined( trigger.zombie_dmg_trig.active ) )
{
if ( trigger.zombie_dmg_trig.active == 1 )
{
clientnotify( trigger.target );
break;
}
}
else
{
_k623 = getNextArrayKey( _a623, _k623 );
}
}
}
}
init_tower_trap_trigs()
{
trap_trigs = getentarray( "tower_trap_activate_trigger", "targetname" );
_a644 = trap_trigs;
_k644 = getFirstArrayKey( _a644 );
while ( isDefined( _k644 ) )
{
trigger = _a644[ _k644 ];
trigger thread tower_trap_trigger_think();
_k644 = getNextArrayKey( _a644, _k644 );
}
}
tower_trap_trigger_think()
{
self.range_trigger = getent( self.target, "targetname" );
self.upgrade_trigger = getent( self.script_string, "script_noteworthy" );
self.cost = 1000;
light_name = self get_trap_light_name();
zapper_light_green( light_name );
self.is_available = 1;
self.in_use = 0;
self.has_been_used = 0;
self.sndtowerent = spawn( "script_origin", ( -21, 5584, 356 ) );
while ( 1 )
{
self hint_string( &"ZM_PRISON_TOWER_TRAP", self.cost );
self waittill( "trigger", who );
while ( who in_revive_trigger() )
{
continue;
}
while ( !isDefined( self.is_available ) )
{
continue;
}
if ( is_player_valid( who ) )
{
if ( who.score >= self.cost )
{
if ( !self.in_use )
{
if ( !self.has_been_used )
{
self.has_been_used = 1;
who do_player_general_vox( "general", "discover_trap" );
}
else
{
who do_player_general_vox( "general", "start_trap" );
}
self.in_use = 1;
self.active = 1;
play_sound_at_pos( "purchase", who.origin );
self thread tower_trap_move_switch( self );
self playsound( "zmb_trap_activate" );
self waittill( "switch_activated" );
who minus_to_player_score( self.cost );
level.trapped_track[ "tower" ] = 1;
level notify( "trap_activated" );
who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_sniper_tower_used", 0 );
self hint_string( &"ZOMBIE_TRAP_ACTIVE" );
self.sndtowerent playsound( "zmb_trap_tower_start" );
self.sndtowerent playloopsound( "zmb_trap_tower_loop", 1 );
self thread activate_tower_trap();
self thread tower_trap_timer();
self thread tower_upgrade_trigger_think();
level thread open_tower_trap_upgrade_panel();
level thread tower_trap_upgrade_panel_closes_early();
self waittill( "tower_trap_off" );
self.sndtowerent stoploopsound( 1 );
self.sndtowerent playsound( "zmb_trap_tower_end" );
self.upgrade_trigger notify( "afterlife_interact_reset" );
self.active = 0;
self sethintstring( &"ZOMBIE_TRAP_COOLDOWN" );
zapper_light_red( light_name );
wait 25;
self playsound( "zmb_trap_available" );
self notify( "available" );
self.in_use = 0;
self.upgrade_trigger notify( "available" );
self.upgrade_trigger.in_use = 0;
}
}
}
}
}
tower_upgrade_trigger_think()
{
self endon( "tower_trap_off" );
self.upgrade_trigger.cost = 1000;
self.upgrade_trigger.in_use = 0;
self.upgrade_trigger.is_available = 1;
while ( 1 )
{
level waittill( self.upgrade_trigger.script_string );
level.trapped_track[ "tower_upgrade" ] = 1;
level notify( "tower_trap_upgraded" );
level notify( "close_tower_trap_upgrade_panel" );
self upgrade_tower_trap_weapon();
self notify( "tower_trap_reset_timer" );
self thread tower_trap_timer();
self waittill( "tower_trap_off" );
wait 25;
}
}
open_tower_trap_upgrade_panel()
{
e_door = getent( "tower_shockbox_door", "targetname" );
e_door moveto( e_door.origin + vectorScale( ( 0, 1, 0 ), 40 ), 1 );
level waittill( "close_tower_trap_upgrade_panel" );
e_door moveto( e_door.origin + vectorScale( ( 0, 1, 0 ), 40 ), 1 );
}
tower_trap_upgrade_panel_closes_early()
{
level endon( "tower_trap_upgraded" );
n_waittime = 24;
wait n_waittime;
level notify( "close_tower_trap_upgrade_panel" );
}
tower_trap_move_switch( parent )
{
light_name = "";
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
light_name = parent get_trap_light_name();
zapper_light_red( light_name );
tswitch rotatepitch( -180, 0,5 );
tswitch playsound( "amb_sparks_l_b" );
tswitch waittill( "rotatedone" );
self notify( "switch_activated" );
self waittill( "available" );
tswitch rotatepitch( 180, 0,5 );
if ( isDefined( parent.script_noteworthy ) )
{
zapper_light_green( light_name );
}
}
activate_tower_trap()
{
self endon( "tower_trap_off" );
self.weapon_name = "tower_trap_zm";
self.tag_to_target = "J_Head";
self.trap_reload_time = 0,75;
for ( ;; )
{
while ( 1 )
{
zombies = getaiarray( level.zombie_team );
zombies_sorted = [];
_a850 = zombies;
_k850 = getFirstArrayKey( _a850 );
while ( isDefined( _k850 ) )
{
zombie = _a850[ _k850 ];
if ( zombie istouching( self.range_trigger ) )
{
zombies_sorted[ zombies_sorted.size ] = zombie;
}
_k850 = getNextArrayKey( _a850, _k850 );
}
if ( zombies_sorted.size <= 0 )
{
wait_network_frame();
}
}
else wait_network_frame();
self tower_trap_fires( zombies_sorted );
}
}
upgrade_tower_trap_weapon()
{
self.weapon_name = "tower_trap_upgraded_zm";
self.tag_to_target = "J_SpineLower";
self.trap_reload_time = 1,5;
}
tower_trap_timer()
{
self endon( "tower_trap_reset_timer" );
/#
self thread debug_tower_trap_timer();
#/
wait 25;
self notify( "tower_trap_off" );
}
debug_tower_trap_timer()
{
self endon( "tower_trap_reset_timer" );
i = 1;
while ( i <= 25 )
{
/#
iprintln( "Tower Trap Timer = " + i );
#/
wait 1;
i++;
}
}
tower_trap_fires( a_zombies )
{
if ( isDefined( level.custom_tower_trap_fires_func ) )
{
self thread [[ level.custom_tower_trap_fires_func ]]( a_zombies );
return;
}
self endon( "tower_trap_off" );
e_org = getstruct( self.range_trigger.target, "targetname" );
n_index = randomintrange( 0, a_zombies.size );
while ( isalive( a_zombies[ n_index ] ) )
{
e_target = a_zombies[ n_index ];
v_zombietarget = e_target gettagorigin( self.tag_to_target );
if ( sighttracepassed( e_org.origin, v_zombietarget, 1, undefined ) )
{
magicbullet( self.weapon_name, e_org.origin, v_zombietarget );
wait self.trap_reload_time;
continue;
}
else
{
arrayremovevalue( a_zombies, e_target, 0 );
wait_network_frame();
if ( a_zombies.size <= 0 )
{
return;
}
else
{
n_index = randomintrange( 0, a_zombies.size );
}
}
}
}
hint_string( string, cost )
{
if ( isDefined( cost ) )
{
self sethintstring( string, cost );
}
else
{
self sethintstring( string );
}
self setcursorhint( "HINT_NOICON" );
}
zapper_light_red( lightname )
{
zapper_lights = getentarray( lightname, "targetname" );
i = 0;
while ( i < zapper_lights.size )
{
zapper_lights[ i ] setmodel( "p6_zm_al_wall_trap_control_red" );
i++;
}
}
zapper_light_green( lightname )
{
zapper_lights = getentarray( lightname, "targetname" );
i = 0;
while ( i < zapper_lights.size )
{
zapper_lights[ i ] setmodel( "p6_zm_al_wall_trap_control" );
i++;
}
}
get_trap_light_name()
{
tswitch = getent( "trap_handle_" + self.script_linkto, "targetname" );
switch( tswitch.script_linkname )
{
case "1":
case "2":
light_name = "trap_control_wardens_office";
break;
case "3":
case "4":
case "5":
light_name = "trap_control_cafeteria";
break;
case "99":
light_name = "trap_control_docks";
break;
}
return light_name;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,687 @@
#include maps/mp/zombies/_zm_powerups;
#include maps/mp/zombies/_zm_score;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_audio;
#include maps/mp/animscripts/shared;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
#using_animtree( "fxanim_props" );
init()
{
flag_init( "soul_catchers_charged" );
level.soul_catchers = [];
level.soul_catchers_vol = [];
level.no_gib_in_wolf_area = ::check_for_zombie_in_wolf_area;
level.soul_catcher_clip[ "rune_2" ] = getent( "wolf_clip_docks", "targetname" );
level.soul_catcher_clip[ "rune_3" ] = getent( "wolf_clip_infirmary", "targetname" );
_a24 = level.soul_catcher_clip;
_k24 = getFirstArrayKey( _a24 );
while ( isDefined( _k24 ) )
{
e_clip = _a24[ _k24 ];
e_clip setinvisibletoall();
_k24 = getNextArrayKey( _a24, _k24 );
}
level thread create_anim_references_on_server();
registerclientfield( "actor", "make_client_clone", 9000, 4, "int" );
onplayerconnect_callback( ::toggle_redeemer_trigger );
onplayerconnect_callback( ::hellhole_projectile_watch );
onplayerconnect_callback( ::hellhole_tomahawk_watch );
level.a_wolf_structs = getstructarray( "wolf_position", "targetname" );
i = 0;
while ( i < level.a_wolf_structs.size )
{
registerclientfield( "world", level.a_wolf_structs[ i ].script_parameters, 9000, 3, "int" );
level.soul_catchers[ i ] = level.a_wolf_structs[ i ];
level.soul_catchers_vol[ i ] = getent( level.a_wolf_structs[ i ].target, "targetname" );
i++;
}
i = 0;
while ( i < level.soul_catchers.size )
{
level.soul_catchers[ i ].souls_received = 0;
level.soul_catchers[ i ].is_eating = 0;
level.soul_catchers[ i ] thread soul_catcher_check();
if ( is_classic() )
{
level.soul_catchers[ i ] thread soul_catcher_state_manager();
}
else
{
level.soul_catchers[ i ] thread grief_soul_catcher_state_manager();
}
level.soul_catchers[ i ] thread wolf_head_removal( "tomahawk_door_sign_" + ( i + 1 ) );
level.soul_catchers_vol[ i ] = getent( level.soul_catchers[ i ].target, "targetname" );
i++;
}
level.soul_catchers_charged = 0;
level thread soul_catchers_charged();
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spawn_func );
}
create_anim_references_on_server()
{
root = %root;
wolfhead_intro_anim = %o_zombie_dreamcatcher_intro;
wolfhead_outtro_anim = %o_zombie_dreamcatcher_outtro;
woflhead_idle_anims = [];
wolfhead_idle_anim[ 0 ] = %o_zombie_dreamcatcher_idle;
wolfhead_idle_anim[ 1 ] = %o_zombie_dreamcatcher_idle_twitch_scan;
wolfhead_idle_anim[ 2 ] = %o_zombie_dreamcatcher_idle_twitch_shake;
wolfhead_idle_anim[ 3 ] = %o_zombie_dreamcatcher_idle_twitch_yawn;
wolfhead_body_death = %ai_zombie_dreamcatch_impact;
wolfhead_body_float = %ai_zombie_dreamcatch_rise;
wolfhead_body_shrink = %ai_zombie_dreamcatch_shrink_a;
wolfhead_pre_eat_anims = [];
wolfhead_pre_eat_anims[ "right" ] = %o_zombie_dreamcatcher_wallconsume_pre_eat_r;
wolfhead_pre_eat_anims[ "left" ] = %o_zombie_dreamcatcher_wallconsume_pre_eat_l;
wolfhead_pre_eat_anims[ "front" ] = %o_zombie_dreamcatcher_wallconsume_pre_eat_f;
wolfhead_eat_anims[ "right" ] = %o_zombie_dreamcatcher_wallconsume_align_r;
wolfhead_eat_anims[ "left" ] = %o_zombie_dreamcatcher_wallconsume_align_l;
wolfhead_eat_anims[ "front" ] = %o_zombie_dreamcatcher_wallconsume_align_f;
wolfhead_body_anims[ "right" ] = %ai_zombie_dreamcatcher_wallconsume_align_r;
wolfhead_body_anims[ "left" ] = %ai_zombie_dreamcatcher_wallconsume_align_l;
wolfhead_body_anims[ "front" ] = %ai_zombie_dreamcatcher_wallconsume_align_f;
}
soul_catcher_state_manager()
{
wait 1;
if ( self.script_noteworthy == "rune_3" )
{
trigger = getent( "wolf_hurt_trigger", "targetname" );
trigger hide();
}
else
{
if ( self.script_noteworthy == "rune_2" )
{
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
trigger hide();
}
}
level setclientfield( self.script_parameters, 0 );
self waittill( "first_zombie_killed_in_zone" );
if ( self.script_noteworthy == "rune_3" )
{
trigger = getent( "wolf_hurt_trigger", "targetname" );
trigger show();
}
else
{
if ( self.script_noteworthy == "rune_2" )
{
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
trigger show();
}
}
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
{
level.soul_catcher_clip[ self.script_noteworthy ] setvisibletoall();
}
level setclientfield( self.script_parameters, 1 );
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
wait anim_length;
while ( !self.is_charged )
{
level setclientfield( self.script_parameters, 2 );
self waittill_either( "fully_charged", "finished_eating" );
}
level setclientfield( self.script_parameters, 6 );
anim_length = getanimlength( %o_zombie_dreamcatcher_outtro );
wait anim_length;
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
{
level.soul_catcher_clip[ self.script_noteworthy ] delete();
}
if ( self.script_noteworthy == "rune_3" )
{
trigger = getent( "wolf_hurt_trigger", "targetname" );
trigger delete();
}
else
{
if ( self.script_noteworthy == "rune_2" )
{
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
trigger delete();
}
}
level setclientfield( self.script_parameters, 7 );
}
grief_soul_catcher_state_manager()
{
wait 1;
while ( 1 )
{
level setclientfield( self.script_parameters, 0 );
self waittill( "first_zombie_killed_in_zone" );
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
{
level.soul_catcher_clip[ self.script_noteworthy ] setvisibletoall();
}
level setclientfield( self.script_parameters, 1 );
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
wait anim_length;
while ( !self.is_charged )
{
level setclientfield( self.script_parameters, 2 );
self waittill_either( "fully_charged", "finished_eating" );
}
level setclientfield( self.script_parameters, 6 );
anim_length = getanimlength( %o_zombie_dreamcatcher_outtro );
wait anim_length;
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
{
level.soul_catcher_clip[ self.script_noteworthy ] delete();
}
self.souls_received = 0;
level thread wolf_spit_out_powerup();
wait 20;
self thread soul_catcher_check();
}
}
wolf_spit_out_powerup()
{
if ( isDefined( level.enable_magic ) && !level.enable_magic )
{
return;
}
power_origin_struct = getstruct( "wolf_puke_powerup_origin", "targetname" );
if ( randomint( 100 ) < 20 )
{
i = 0;
while ( i < level.zombie_powerup_array.size )
{
if ( level.zombie_powerup_array[ i ] == "meat_stink" )
{
level.zombie_powerup_index = i;
found = 1;
break;
}
else
{
i++;
}
}
}
else while ( 1 )
{
level.zombie_powerup_index = randomint( level.zombie_powerup_array.size );
while ( level.zombie_powerup_array[ level.zombie_powerup_index ] == "nuke" )
{
wait 0,05;
}
}
spawn_infinite_powerup_drop( power_origin_struct.origin, level.zombie_powerup_array[ level.zombie_powerup_index ] );
power_ups = get_array_of_closest( power_origin_struct.origin, level.active_powerups, undefined, undefined, 100 );
if ( isDefined( power_ups[ 0 ] ) )
{
power_ups[ 0 ] movez( 120, 4 );
}
}
zombie_spawn_func()
{
self.actor_killed_override = ::zombie_killed_override;
}
zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime )
{
if ( !is_true( self.has_legs ) )
{
return;
}
while ( isplayer( attacker ) )
{
i = 0;
while ( i < level.soul_catchers.size )
{
if ( self istouching( level.soul_catchers_vol[ i ] ) )
{
if ( !level.soul_catchers[ i ].is_charged )
{
self.deathfunction = ::zombie_soul_catcher_death;
self.my_soul_catcher = level.soul_catchers[ i ];
}
}
i++;
}
}
}
check_for_zombie_in_wolf_area()
{
i = 0;
while ( i < level.soul_catchers.size )
{
if ( self istouching( level.soul_catchers_vol[ i ] ) )
{
if ( !level.soul_catchers[ i ].is_charged && !level.soul_catchers[ i ].is_eating )
{
return 1;
}
}
i++;
}
return 0;
}
zombie_soul_catcher_death()
{
self thread maps/mp/zombies/_zm_spawner::zombie_death_animscript();
if ( isDefined( self._race_team ) )
{
team = self._race_team;
}
level maps/mp/zombies/_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team );
if ( self.my_soul_catcher.is_eating )
{
return 0;
}
if ( self.my_soul_catcher.souls_received >= 6 )
{
return 0;
}
self.my_soul_catcher.is_eating = 1;
if ( self.my_soul_catcher.souls_received == 0 )
{
self.my_soul_catcher notify( "first_zombie_killed_in_zone" );
self thread notify_wolf_intro_anim_complete();
}
client_notify_value = self get_correct_model_array();
self setclientfield( "make_client_clone", client_notify_value );
self setanimstatefromasd( "zm_portal_death" );
self maps/mp/animscripts/shared::donotetracks( "portal_death" );
if ( self.my_soul_catcher.souls_received == 0 )
{
self waittill( "wolf_intro_anim_complete" );
}
n_eating_anim = self which_eating_anim();
self ghost();
level setclientfield( self.my_soul_catcher.script_parameters, n_eating_anim );
if ( n_eating_anim == 3 )
{
total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_f );
}
else if ( n_eating_anim == 4 )
{
total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_r );
}
else
{
total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_l );
}
wait ( total_wait_time - 0,5 );
self.my_soul_catcher.souls_received++;
wait 0,5;
self.my_soul_catcher notify( "finished_eating" );
self.my_soul_catcher.is_eating = 0;
self delete();
return 1;
}
get_correct_model_array()
{
mod = 0;
if ( self.model == "c_zom_guard_body" && isDefined( self.hatmodel ) && self.hatmodel == "c_zom_guard_hat" )
{
mod = 4;
}
if ( self.headmodel == "c_zom_zombie_barbwire_head" )
{
return 1 + mod;
}
if ( self.headmodel == "c_zom_zombie_hellcatraz_head" )
{
return 2 + mod;
}
if ( self.headmodel == "c_zom_zombie_mask_head" )
{
return 3 + mod;
}
if ( self.headmodel == "c_zom_zombie_slackjaw_head" )
{
return 4 + mod;
}
return 5;
}
notify_wolf_intro_anim_complete()
{
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
wait anim_length;
self notify( "wolf_intro_anim_complete" );
}
which_eating_anim()
{
soul_catcher = self.my_soul_catcher;
forward_dot = vectordot( anglesToForward( soul_catcher.angles ), vectornormalize( self.origin - soul_catcher.origin ) );
if ( forward_dot > 0,85 )
{
return 3;
}
else
{
right_dot = vectordot( anglesToRight( soul_catcher.angles ), self.origin - soul_catcher.origin );
if ( right_dot > 0 )
{
return 4;
}
else
{
return 5;
}
}
}
soul_catcher_check()
{
self.is_charged = 0;
while ( 1 )
{
if ( self.souls_received >= 6 )
{
level.soul_catchers_charged++;
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "tomahawk_" + level.soul_catchers_charged );
self.is_charged = 1;
self notify( "fully_charged" );
break;
}
else
{
wait 0,05;
}
}
if ( level.soul_catchers_charged == 1 )
{
self thread first_wolf_complete_vo();
}
else
{
if ( level.soul_catchers_charged >= level.soul_catchers.size )
{
self thread final_wolf_complete_vo();
}
}
}
wolf_head_removal( wolf_head_model_string )
{
wolf_head_model = getent( wolf_head_model_string, "targetname" );
wolf_head_model setmodel( "p6_zm_al_dream_catcher_off" );
self waittill( "fully_charged" );
wolf_head_model setmodel( "p6_zm_al_dream_catcher" );
}
soul_catchers_charged()
{
while ( 1 )
{
if ( level.soul_catchers_charged >= level.soul_catchers.size )
{
flag_set( "soul_catchers_charged" );
level notify( "soul_catchers_charged" );
return;
}
else
{
wait 1;
}
}
}
first_wolf_encounter_vo()
{
if ( !is_classic() )
{
return;
}
wait 2;
a_players = getplayers();
a_closest = get_array_of_closest( self.origin, a_players );
i = 0;
while ( i < a_closest.size )
{
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
{
a_closest[ i ] thread do_player_general_vox( "general", "wolf_encounter" );
level.wolf_encounter_vo_played = 1;
return;
}
else
{
i++;
}
}
}
first_wolf_complete_vo()
{
if ( !is_classic() )
{
return;
}
wait 3,5;
a_players = getplayers();
a_closest = get_array_of_closest( self.origin, a_players );
i = 0;
while ( i < a_closest.size )
{
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
{
a_closest[ i ] thread do_player_general_vox( "general", "wolf_complete" );
return;
}
else
{
i++;
}
}
}
final_wolf_complete_vo()
{
if ( !is_classic() )
{
return;
}
wait 3,5;
a_players = getplayers();
a_closest = get_array_of_closest( self.origin, a_players );
i = 0;
while ( i < a_closest.size )
{
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
{
a_closest[ i ] thread do_player_general_vox( "general", "wolf_final" );
return;
}
else
{
i++;
}
}
}
tomahawk_upgrade_quest()
{
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
{
return;
}
self endon( "disconnect" );
self.tomahawk_upgrade_kills = 0;
while ( self.tomahawk_upgrade_kills < 15 )
{
self waittill( "got_a_tomahawk_kill" );
self.tomahawk_upgrade_kills++;
}
wait 1;
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) );
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
e_org waittill( "easteregg_scream_complete" );
e_org delete();
while ( level.round_number < 10 )
{
wait 0,5;
}
self ent_flag_init( "gg_round_done" );
while ( !self ent_flag( "gg_round_done" ) )
{
level waittill( "between_round_over" );
self.killed_with_only_tomahawk = 1;
self.killed_something_thq = 0;
while ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
{
continue;
}
level waittill( "end_of_round" );
if ( !self.killed_with_only_tomahawk || !self.killed_something_thq )
{
continue;
}
while ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
{
continue;
}
self ent_flag_set( "gg_round_done" );
}
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) );
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
e_org waittill( "easteregg_scream_complete" );
e_org delete();
self notify( "hellhole_time" );
self waittill( "tomahawk_in_hellhole" );
if ( isDefined( self.retriever_trigger ) )
{
self.retriever_trigger setinvisibletoplayer( self );
}
else
{
trigger = getent( "retriever_pickup_trigger", "script_noteworthy" );
self.retriever_trigger = trigger;
self.retriever_trigger setinvisibletoplayer( self );
}
self takeweapon( "bouncing_tomahawk_zm" );
self set_player_tactical_grenade( "none" );
self notify( "tomahawk_upgraded_swap" );
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) );
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
e_org waittill( "easteregg_scream_complete" );
e_org delete();
level waittill( "end_of_round" );
tomahawk_pick = getent( "spinning_tomahawk_pickup", "targetname" );
tomahawk_pick setclientfield( "play_tomahawk_fx", 2 );
self.current_tomahawk_weapon = "upgraded_tomahawk_zm";
}
toggle_redeemer_trigger()
{
self endon( "disconnect" );
flag_wait( "tomahawk_pickup_complete" );
upgraded_tomahawk_trigger = getent( "redeemer_pickup_trigger", "script_noteworthy" );
upgraded_tomahawk_trigger setinvisibletoplayer( self );
tomahawk_model = getent( "spinning_tomahawk_pickup", "targetname" );
while ( 1 )
{
if ( isDefined( self.current_tomahawk_weapon ) && self.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
{
break;
}
else wait 1;
}
while ( 1 )
{
if ( isDefined( self.afterlife ) && self.afterlife )
{
upgraded_tomahawk_trigger setvisibletoplayer( self );
tomahawk_model setvisibletoplayer( self );
}
else
{
upgraded_tomahawk_trigger setinvisibletoplayer( self );
tomahawk_model setinvisibletoplayer( self );
}
wait 1;
}
}
hellhole_projectile_watch()
{
self endon( "disconnect" );
while ( 1 )
{
self waittill( "grenade_fire", grenade, weapname );
if ( weapname == "frag_grenade_zm" )
{
self thread hellhole_grenades( grenade );
}
}
}
hellhole_tomahawk_watch()
{
self endon( "disconnect" );
self waittill( "hellhole_time" );
while ( 1 )
{
self waittill( "grenade_fire", grenade, weapname );
if ( weapname == "bouncing_tomahawk_zm" )
{
self thread hellhole_tomahawk( grenade );
}
}
}
hellhole_grenades( grenade )
{
grenade endon( "death" );
trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" );
while ( !grenade istouching( trig_hellhole ) )
{
wait 0,05;
}
self maps/mp/zombies/_zm_score::add_to_player_score( 20 );
playfx( level._effect[ "tomahawk_hellhole" ], grenade.origin );
playsoundatposition( "wpn_grenade_poof", grenade.origin );
grenade delete();
}
hellhole_tomahawk( grenade )
{
grenade endon( "death" );
trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" );
while ( !grenade istouching( trig_hellhole ) )
{
wait 0,05;
}
self notify( "tomahawk_in_hellhole" );
grenade notify( "in_hellhole" );
playfx( level._effect[ "tomahawk_hellhole" ], grenade.origin );
playsoundatposition( "wpn_grenade_poof", grenade.origin );
grenade delete();
}
spawn_infinite_powerup_drop( v_origin, str_type )
{
if ( isDefined( str_type ) )
{
intro_powerup = maps/mp/zombies/_zm_powerups::specific_powerup_drop( str_type, v_origin );
}
else
{
intro_powerup = maps/mp/zombies/_zm_powerups::powerup_drop( v_origin );
}
}

View File

@ -0,0 +1,209 @@
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
init()
{
level thread achievement_full_lockdown();
level thread achievement_pop_goes_the_weasel();
level thread achievement_trapped_in_time();
onplayerconnect_callback( ::onplayerconnect );
level.achievement_sound_func = ::achievement_sound_func;
}
onplayerconnect()
{
self thread achievement_no_one_escapes_alive();
self thread achievement_feed_the_beast();
self thread achievement_making_the_rounds();
self thread achievement_acid_drip();
self thread achievement_a_burst_of_flavor();
self thread achievement_paranormal_progress();
self thread achievement_gg_bridge();
}
achievement_sound_func( achievement_name_lower )
{
self thread do_player_general_vox( "general", "achievement" );
}
init_player_achievement_stats()
{
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_prison_sidequest", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_feed_the_beast", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_making_the_rounds", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_acid_drip", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_full_lockdown", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_a_burst_of_flavor", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_paranormal_progress", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_gg_bridge", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_trapped_in_time", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_pop_goes_the_weasel", 0 );
}
achievement_full_lockdown()
{
level endon( "end_game" );
level.lockdown_track[ "magic_box" ] = 0;
level.lockdown_track[ "speedcola_perk" ] = 0;
level.lockdown_track[ "electric_cherry_perk" ] = 0;
level.lockdown_track[ "jugg_perk" ] = 0;
level.lockdown_track[ "deadshot_perk" ] = 0;
level.lockdown_track[ "tap_perk" ] = 0;
level.lockdown_track[ "plane_ramp" ] = 0;
level.lockdown_track[ "craft_shield" ] = 0;
level.lockdown_track[ "craft_kit" ] = 0;
b_unlock = 0;
while ( b_unlock == 0 )
{
level waittill( "brutus_locked_object" );
b_unlock = 1;
_a92 = level.lockdown_track;
_k92 = getFirstArrayKey( _a92 );
while ( isDefined( _k92 ) )
{
b_check = _a92[ _k92 ];
if ( b_check == 0 )
{
b_unlock = 0;
break;
}
else
{
_k92 = getNextArrayKey( _a92, _k92 );
}
}
}
level giveachievement_wrapper( "ZM_DLC2_FULL_LOCKDOWN", 1 );
}
achievement_trapped_in_time()
{
level endon( "end_game" );
level.trapped_track[ "acid" ] = 0;
level.trapped_track[ "fan" ] = 0;
level.trapped_track[ "tower" ] = 0;
level.trapped_track[ "tower_upgrade" ] = 0;
b_unlock = 0;
while ( b_unlock == 0 )
{
level waittill_either( "trap_activated", "tower_trap_upgraded" );
if ( level.round_number >= 10 )
{
return;
}
b_unlock = 1;
_a131 = level.trapped_track;
_k131 = getFirstArrayKey( _a131 );
while ( isDefined( _k131 ) )
{
b_check = _a131[ _k131 ];
if ( b_check == 0 )
{
b_unlock = 0;
break;
}
else
{
_k131 = getNextArrayKey( _a131, _k131 );
}
}
}
level giveachievement_wrapper( "ZM_DLC2_TRAPPED_IN_TIME", 1 );
}
achievement_pop_goes_the_weasel()
{
level endon( "end_game" );
level waittill( "pop_goes_the_weasel_achieved" );
level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 );
}
achievement_no_one_escapes_alive()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_at_bridge" );
self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" );
}
achievement_feed_the_beast()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_obtained_tomahawk" );
self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" );
}
achievement_making_the_rounds()
{
level endon( "end_game" );
self endon( "disconnect" );
n_completed_trips = 0;
while ( n_completed_trips < 3 )
{
self waittill( "player_completed_cycle" );
n_completed_trips++;
}
self giveachievement_wrapper( "ZM_DLC2_MAKING_THE_ROUNDS" );
}
achievement_acid_drip()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_obtained_acidgat" );
self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" );
}
achievement_a_burst_of_flavor()
{
level endon( "end_game" );
self endon( "disconnect" );
while ( 1 )
{
self waittill( "electric_cherry_start" );
self.cherry_kills = 0;
self waittill( "electric_cherry_end" );
if ( self.cherry_kills >= 10 )
{
break;
}
else
{
}
}
self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" );
}
achievement_paranormal_progress()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_opened_afterlife_door" );
self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" );
}
achievement_gg_bridge()
{
level endon( "end_game" );
self endon( "disconnect" );
while ( 1 )
{
level waittill( "end_of_round" );
if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && level.round_number >= 15 )
{
level waittill( "end_of_round" );
if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
{
break;
}
}
else
{
}
}
self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" );
}

View File

@ -0,0 +1,148 @@
#include maps/mp/zombies/_zm_afterlife;
#include maps/mp/zm_prison;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
main_start()
{
level thread spawned_collision_ffotd();
t_killbrush_1 = spawn( "trigger_box", ( 142, 9292, 1504 ), 0, 700, 160, 128 );
t_killbrush_1.script_noteworthy = "kill_brush";
t_killbrush_2 = spawn( "trigger_box", ( 1822, 9316, 1358 ), 0, 120, 100, 30 );
t_killbrush_2.script_noteworthy = "kill_brush";
t_killbrush_3 = spawn( "trigger_box", ( -42, 9348, 1392 ), 0, 200, 100, 128 );
t_killbrush_3.script_noteworthy = "kill_brush";
}
main_end()
{
level.equipment_dead_zone_pos = [];
level.equipment_dead_zone_rad2 = [];
level.equipment_dead_zone_pos[ 0 ] = ( 408, 10016, 1128 );
level.equipment_dead_zone_rad2[ 0 ] = 65536;
level.equipment_dead_zone_pos[ 1 ] = ( -280, 7872, 176 );
level.equipment_dead_zone_rad2[ 1 ] = 10000;
level.equipment_dead_zone_pos[ 2 ] = ( -104, 8056, 280 );
level.equipment_dead_zone_rad2[ 2 ] = 10000;
level.equipment_dead_zone_pos[ 3 ] = ( -86, 7712, 114 );
level.equipment_dead_zone_rad2[ 3 ] = 10000;
level.equipment_dead_zone_pos[ 4 ] = ( 447, 5963, 264 );
level.equipment_dead_zone_rad2[ 4 ] = 10000;
level.equipment_dead_zone_pos[ 5 ] = ( 231, 5913, 200 );
level.equipment_dead_zone_rad2[ 5 ] = 10000;
level.equipment_dead_zone_pos[ 6 ] = ( 15, 5877, 136 );
level.equipment_dead_zone_rad2[ 6 ] = 10000;
level.equipment_dead_zone_pos[ 7 ] = ( -335, 5795, 14 );
level.equipment_dead_zone_rad2[ 7 ] = 22500;
level.equipment_dead_zone_pos[ 8 ] = ( -621, 5737, -48 );
level.equipment_dead_zone_rad2[ 8 ] = 10000;
level.equipment_dead_zone_pos[ 9 ] = ( 402, 7058, 147 );
level.equipment_dead_zone_rad2[ 9 ] = 10000;
level.equipment_dead_zone_pos[ 10 ] = ( 2151, 10180, 1204 );
level.equipment_dead_zone_rad2[ 10 ] = 625;
level.equipment_dead_zone_pos[ 11 ] = ( 2144, 9486, 1364 );
level.equipment_dead_zone_rad2[ 11 ] = 2500;
level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd;
waittillframeend;
level.afterlife_give_loadout = ::afterlife_give_loadout_override;
}
equipment_safe_to_drop_ffotd( weapon )
{
i = 0;
while ( i < level.equipment_dead_zone_pos.size )
{
if ( distancesquared( level.equipment_dead_zone_pos[ i ], weapon.origin ) < level.equipment_dead_zone_rad2[ i ] )
{
return 0;
}
i++;
}
return self maps/mp/zm_prison::equipment_safe_to_drop( weapon );
}
spawned_collision_ffotd()
{
precachemodel( "collision_ai_64x64x10" );
precachemodel( "collision_wall_256x256x10_standard" );
precachemodel( "collision_wall_128x128x10_standard" );
precachemodel( "collision_wall_512x512x10_standard" );
precachemodel( "collision_geo_256x256x256_standard" );
precachemodel( "collision_geo_64x64x256_standard" );
precachemodel( "collision_geo_128x128x128_standard" );
flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{
collision1 = spawn( "script_model", ( 1999, 9643, 1472 ) );
collision1 setmodel( "collision_ai_64x64x10" );
collision1.angles = ( 0, 270, -90 );
collision1 ghost();
collision2 = spawn( "script_model", ( -437, 6260, 121 ) );
collision2 setmodel( "collision_wall_256x256x10_standard" );
collision2.angles = vectorScale( ( 0, 0, 0 ), 11,8 );
collision2 ghost();
collision3 = spawn( "script_model", ( 1887,98, 9323, 1489,14 ) );
collision3 setmodel( "collision_wall_128x128x10_standard" );
collision3.angles = ( 0, 270, 38,6 );
collision3 ghost();
collision4 = spawn( "script_model", ( -261, 8512,02, 1153,14 ) );
collision4 setmodel( "collision_geo_256x256x256_standard" );
collision4.angles = vectorScale( ( 0, 0, 0 ), 180 );
collision4 ghost();
collision5a = spawn( "script_model", ( 792, 8302, 1620 ) );
collision5a setmodel( "collision_geo_64x64x256_standard" );
collision5a.angles = ( 0, 0, 0 );
collision5a ghost();
collision5b = spawn( "script_model", ( 1010, 8302, 1620 ) );
collision5b setmodel( "collision_geo_64x64x256_standard" );
collision5b.angles = ( 0, 0, 0 );
collision5b ghost();
collision6 = spawn( "script_model", ( 554, 8026, 698 ) );
collision6 setmodel( "collision_wall_128x128x10_standard" );
collision6.angles = vectorScale( ( 0, 0, 0 ), 22,2 );
collision6 ghost();
collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) );
collision7 setmodel( "collision_geo_64x64x256_standard" );
collision7.angles = ( 0, 0, 0 );
collision7 ghost();
collision8 = spawn( "script_model", ( 258, 9706, 1152 ) );
collision8 setmodel( "collision_geo_64x64x256_standard" );
collision8.angles = ( 0, 0, 0 );
collision8 ghost();
collision9 = spawn( "script_model", ( 596, 8944, 1160 ) );
collision9 setmodel( "collision_ai_64x64x10" );
collision9.angles = ( 270, 180, -180 );
collision9 ghost();
collision10 = spawn( "script_model", ( -756,5, 5730, -113,75 ) );
collision10 setmodel( "collision_geo_128x128x128_standard" );
collision10.angles = ( 354,9, 11, 0 );
collision10 ghost();
collision11 = spawn( "script_model", ( -4, 8314, 808 ) );
collision11 setmodel( "collision_wall_128x128x10_standard" );
collision11.angles = vectorScale( ( 0, 0, 0 ), 292 );
collision11 ghost();
collision12 = spawn( "script_model", ( 1416, 10708, 1440 ) );
collision12 setmodel( "collision_wall_512x512x10_standard" );
collision12.angles = ( 0, 0, 0 );
collision12 ghost();
}
}
afterlife_give_loadout_override()
{
self thread afterlife_leave_freeze();
self maps/mp/zombies/_zm_afterlife::afterlife_give_loadout();
}
afterlife_leave_freeze()
{
self endon( "disconnect" );
self freezecontrols( 1 );
wait 0,5;
if ( !is_true( self.hostmigrationcontrolsfrozen ) )
{
self freezecontrols( 0 );
}
}

View File

@ -0,0 +1,144 @@
#include maps/mp/_utility;
#using_animtree( "fxanim_props" );
main()
{
precache_createfx_fx();
precache_scripted_fx();
precache_fxanim_props();
maps/mp/createfx/zm_prison_fx::main();
}
precache_scripted_fx()
{
level._effect[ "elevator_fall" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_fall" );
level._effect[ "key_glint" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_key_glint" );
level._effect[ "quest_item_glow" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_quest_item_glow" );
level._effect[ "eye_glow" ] = loadfx( "maps/zombie_alcatraz/fx_zombie_eye_single_red" );
level._effect[ "fx_alcatraz_unlock_door" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_unlock_door" );
level._effect[ "fx_alcatraz_elec_chair" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
level._effect[ "fx_alcatraz_lightning_finale" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_finale" );
level._effect[ "fx_alcatraz_panel_on_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on_2" );
level._effect[ "fx_alcatraz_panel_off_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_off_2" );
level._effect[ "fx_alcatraz_lightning_wire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_wire" );
level._effect[ "fx_alcatraz_afterlife_zmb_tport" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" );
level._effect[ "fx_alcatraz_panel_ol" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_ol" );
level._effect[ "fx_alcatraz_plane_apear" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_apear" );
level._effect[ "switch_sparks" ] = loadfx( "env/electrical/fx_elec_wire_spark_burst" );
level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" );
level._effect[ "fx_alcatraz_plane_trail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail" );
level._effect[ "fx_alcatraz_plane_trail_fast" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail_fast" );
level._effect[ "fx_alcatraz_flight_lightning" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_lightning" );
level._effect[ "fx_alcatraz_plane_fire_trail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_fire_trail" );
level._effect[ "alcatraz_dryer_light_green" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_green" );
level._effect[ "alcatraz_dryer_light_red" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_red" );
level._effect[ "alcatraz_dryer_light_yellow" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_yellow" );
level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" );
level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" );
level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" );
level._effect[ "acid_spray" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_spray" );
level._effect[ "acid_death" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_death" );
level._effect[ "box_activated" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_box_charge" );
level._effect[ "fan_blood" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fan_blood" );
level._effect[ "light_gondola" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_gondola" );
level._effect[ "lightning_flash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_lg" );
level._effect[ "tomahawk_trail" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail" );
level._effect[ "tomahawk_trail_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_ug" );
level._effect[ "tomahawk_impact" ] = loadfx( "weapon/tomahawk/fx_tomahawk_impact" );
level._effect[ "tomahawk_impact_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_impact_ug" );
level._effect[ "tomahawk_charge_up" ] = loadfx( "weapon/tomahawk/fx_tomahawk_charge" );
level._effect[ "tomahawk_charge_up_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_charge_ug" );
level._effect[ "tomahawk_pickup" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup" );
level._effect[ "tomahawk_pickup_upgrade" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup_ug" );
level._effect[ "tomahawk_charged_trail" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_charged" );
level._effect[ "tomahawk_fire_dot" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_zmb_fire_torso" );
level._effect[ "soul_charge_start" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_start" );
level._effect[ "soul_charge" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge" );
level._effect[ "soul_charge_impact" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact" );
level._effect[ "soul_charged" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charged" );
level._effect[ "hell_portal" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell" );
level._effect[ "hell_portal_close" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell_close" );
level._effect[ "tomahawk_hellhole" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brutus_footstomp" );
level._effect[ "wolf_bite_blood" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact_sm" );
level._effect[ "uzi_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_uzi" );
level._effect[ "thompson_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_thompson" );
level._effect[ "fx_alcatraz_lighthouse" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_house" );
level._effect[ "ee_skull_shot" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec_2" );
}
precache_createfx_fx()
{
level._effect[ "fx_alcatraz_storm_start" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_storm_start" );
level._effect[ "fx_alcatraz_vista_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_vista_fog" );
level._effect[ "fx_alcatraz_docks_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_docks_fog" );
level._effect[ "fx_alcatraz_fog_closet" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fog_closet" );
level._effect[ "fx_alcatraz_fire_works" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_works" );
level._effect[ "fx_alcatraz_tunnel_dust_fall" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_dust_fall" );
level._effect[ "fx_alcatraz_tunnel_ash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_ash" );
level._effect[ "fx_alcatraz_steam_pipe_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe_2" );
level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
level._effect[ "fx_alcatraz_shower_steam" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" );
level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
level._effect[ "fx_alcatraz_panel_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on" );
level._effect[ "fx_alcatraz_door_blocker" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_door_blocker" );
level._effect[ "fx_alcatraz_dryer_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_on" );
level._effect[ "fx_alcatraz_elec_fence" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_fence" );
level._effect[ "fx_alcatraz_generator_smk" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_smk" );
level._effect[ "fx_alcatraz_generator_sparks" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_sparks" );
level._effect[ "fx_alcatraz_generator_exp" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_exp" );
level._effect[ "fx_alcatraz_elevator_spark" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_spark" );
level._effect[ "fx_alcatraz_elec_key" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_key" );
level._effect[ "fx_alcatraz_sparks_ceiling" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_ceiling" );
level._effect[ "fx_alcatraz_sparks_panel" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_panel" );
level._effect[ "fx_alcatraz_fire_sm" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_sm" );
level._effect[ "fx_alcatraz_fire_xsm" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_xsm" );
level._effect[ "fx_alcatraz_embers_flat" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_flat" );
level._effect[ "fx_alcatraz_falling_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_falling_fire" );
level._effect[ "fx_alcatraz_steam_3floor" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_3floor" );
level._effect[ "fx_alcatraz_elec_box_amb" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_box_amb" );
level._effect[ "fx_alcatraz_blood_drip" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_blood_drip" );
level._effect[ "fx_alcatraz_godray_grill" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill" );
level._effect[ "fx_alcatraz_godray_grill_lg" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill_lg" );
level._effect[ "fx_alcatraz_godray_skinny" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_skinny" );
level._effect[ "fx_alcatraz_ground_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ground_fog" );
level._effect[ "fx_alcatraz_flies" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flies" );
level._effect[ "fx_alcatraz_candle_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_candle_fire" );
level._effect[ "fx_alcatraz_portal_amb" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_amb" );
level._effect[ "fx_alcatraz_fire_md" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_md" );
level._effect[ "fx_alcatraz_smk_linger" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_smk_linger" );
level._effect[ "fx_alcatraz_embers_indoor" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_indoor" );
level._effect[ "fx_alcatraz_papers" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_papers" );
level._effect[ "fx_alcatraz_ceiling_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ceiling_fire" );
level._effect[ "fx_alcatraz_steam_ash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_ash" );
level._effect[ "fx_alcatraz_godray_jail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_jail" );
level._effect[ "fx_alcatraz_water_drip" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_water_drip" );
level._effect[ "fx_alcatraz_shower_steam" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" );
level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
level._effect[ "fx_alcatraz_light_tinhat" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat" );
level._effect[ "fx_alcatraz_light_round_oo" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_round_oo" );
level._effect[ "fx_alcatraz_light_tinhat_oo" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat_oo" );
level._effect[ "fx_alcatraz_flight_clouds" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_clouds" );
level._effect[ "fx_alcatraz_lightning_bridge" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_bridge" );
level._effect[ "fx_alcatraz_elec_chair" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
}
precache_fxanim_props()
{
level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim;
level.scr_anim[ "fxanim_props" ][ "dryer_start" ] = %fxanim_zom_al_industrial_dryer_start_anim;
level.scr_anim[ "fxanim_props" ][ "dryer_idle" ] = %fxanim_zom_al_industrial_dryer_idle_anim;
level.scr_anim[ "fxanim_props" ][ "dryer_end" ] = %fxanim_zom_al_industrial_dryer_end_anim;
level.scr_anim[ "fxanim_props" ][ "dryer_hide" ] = %fxanim_zom_al_industrial_dryer_hide_anim;
level.scr_anim[ "fxanim_props" ][ "pulley_down" ] = %fxanim_zom_al_key_pulley_down_anim;
level.scr_anim[ "fxanim_props" ][ "pulley_up" ] = %fxanim_zom_al_key_pulley_up_anim;
level.scr_anim[ "fxanim_props" ][ "crane_palette" ] = %fxanim_zom_al_crane_palette_anim;
level.scr_anim[ "fxanim_props" ][ "chain_hook_rotate" ] = %fxanim_zom_al_chain_short_hook_rotate_anim;
level.scr_anim[ "fxanim_props" ][ "bodybag_rotate" ] = %fxanim_zom_al_bodybag_rotate_anim;
level.scr_anim[ "fxanim_props" ][ "chain_hook_swing" ] = %fxanim_zom_al_chain_short_hook_swing_anim;
level.scr_anim[ "fxanim_props" ][ "bodybag_swing" ] = %fxanim_zom_al_bodybag_swing_anim;
level.scr_anim[ "fxanim_props" ][ "chain_hook_crane" ] = %fxanim_zom_al_chain_short_hook_crane_anim;
level.scr_anim[ "fxanim_props" ][ "bodybag_crane" ] = %fxanim_zom_al_bodybag_crane_anim;
}

View File

@ -0,0 +1,301 @@
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/zombies/_zm_weap_tomahawk;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
#using_animtree( "fxanim_props" );
init()
{
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
{
spoon_easy_cleanup();
return;
}
precachemodel( "t6_wpn_zmb_spoon_world" );
precachemodel( "c_zom_inmate_g_rarmspawn" );
level thread wait_for_initial_conditions();
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spoon_func );
level thread bucket_init();
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal setinvisibletoall();
level.b_spoon_in_tub = 0;
level.n_spoon_kill_count = 0;
flag_init( "spoon_obtained" );
flag_init( "charged_spoon" );
/#
level thread debug_prison_spoon_quest();
#/
}
spoon_easy_cleanup()
{
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal delete();
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup delete();
m_spoon = getent( "zap_spoon", "targetname" );
m_spoon delete();
}
extra_death_func_to_check_for_splat_death()
{
self thread maps/mp/zombies/_zm_spawner::zombie_death_animscript();
if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" )
{
if ( self.damageweapon == "blundersplat_explosive_dart_zm" )
{
if ( isplayer( self.attacker ) )
{
self notify( "killed_by_a_blundersplat" );
}
}
else
{
if ( self.damageweapon == "bouncing_tomahawk_zm" )
{
if ( isplayer( self.attacker ) )
{
self.attacker notify( "got_a_tomahawk_kill" );
}
}
}
}
if ( isDefined( self.attacker.killed_with_only_tomahawk ) )
{
if ( self.damageweapon != "bouncing_tomahawk_zm" && self.damageweapon != "none" )
{
self.attacker.killed_with_only_tomahawk = 0;
}
}
if ( isDefined( self.attacker.killed_something_thq ) )
{
self.attacker.killed_something_thq = 1;
}
return 0;
}
zombie_spoon_func()
{
self.deathfunction = ::extra_death_func_to_check_for_splat_death;
self waittill( "killed_by_a_blundersplat", player );
if ( flag( "charged_spoon" ) || !level.b_spoon_in_tub )
{
return;
}
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "cellblock_shower" ) )
{
level.n_spoon_kill_count++;
}
else
{
return;
}
if ( level.n_spoon_kill_count >= 50 )
{
/#
iprintlnbold( "Spoon Charged" );
#/
flag_set( "charged_spoon" );
}
}
wait_for_initial_conditions()
{
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup ghost();
m_spoon_pickup ghostindemo();
while ( !isDefined( level.characters_in_nml ) || level.characters_in_nml.size == 0 )
{
wait 1;
}
flag_wait( "soul_catchers_charged" );
m_poster = getent( "poster", "targetname" );
m_poster.health = 5000;
m_poster setcandamage( 1 );
b_poster_knocked_down = 0;
while ( !b_poster_knocked_down )
{
m_poster waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
if ( weaponname != "frag_grenade_zm" || weaponname == "bouncing_tomahawk_zm" && weaponname == "upgraded_tomahawk_zm" )
{
b_poster_knocked_down = 1;
playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin );
m_poster delete();
if ( isDefined( attacker ) && isplayer( attacker ) )
{
attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 );
}
wait 1;
attacker thread do_player_general_vox( "quest", "pick_up_easter_egg" );
}
}
spork_door = getent( "spork_door", "targetname" );
spork_door.targetname = "afterlife_door";
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal.targetname = "afterlife_show";
m_spoon = getent( "zap_spoon", "targetname" );
m_spoon ghostindemo();
m_spoon.health = 50000;
m_spoon setcandamage( 1 );
b_spoon_shocked = 0;
while ( !b_spoon_shocked )
{
m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
m_spoon.health += damage;
if ( weaponname == "lightning_hands_zm" )
{
b_spoon_shocked = 1;
m_spoon delete();
attacker playsound( "zmb_easteregg_laugh" );
}
}
m_spoon_pickup show();
m_spoon_pickup.health = 10000;
m_spoon_pickup setcandamage( 1 );
level.a_tomahawk_pickup_funcs[ level.a_tomahawk_pickup_funcs.size ] = ::tomahawk_the_spoon;
}
tomahawk_the_spoon( grenade, n_grenade_charge_power )
{
if ( self hasweapon( "spoon_zm_alcatraz" ) || self hasweapon( "spork_zm_alcatraz" ) )
{
return 0;
}
m_spoon = getent( "pickup_spoon", "targetname" );
if ( distancesquared( m_spoon.origin, grenade.origin ) < 40000 )
{
m_tomahawk = maps/mp/zombies/_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
m_player_spoon = spawn( "script_model", grenade.origin );
m_player_spoon setmodel( "t6_wpn_zmb_spoon_world" );
m_player_spoon linkto( m_tomahawk );
self maps/mp/zombies/_zm_stats::increment_client_stat( "prison_ee_spoon_acquired", 0 );
self thread maps/mp/zombies/_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
self thread give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon );
self thread dip_the_spoon();
flag_set( "spoon_obtained" );
self playsoundtoplayer( "vox_brutus_easter_egg_101_0", self );
return 1;
}
return 0;
}
give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon )
{
while ( isDefined( m_tomahawk ) )
{
wait 0,05;
}
m_player_spoon delete();
while ( !self hasweapon( "spoon_zm_alcatraz" ) && !self hasweapon( "spork_zm_alcatraz" ) && isDefined( self.spoon_in_tub ) && !self.spoon_in_tub )
{
self giveweapon( "spoon_zm_alcatraz" );
self set_player_melee_weapon( "spoon_zm_alcatraz" );
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "spoon", self );
weapons = self getweaponslist();
i = 0;
while ( i < weapons.size )
{
if ( issubstr( weapons[ i ], "knife" ) )
{
self takeweapon( weapons[ i ] );
}
i++;
}
}
weapons = self getweaponslist();
wait 1;
self thread do_player_general_vox( "quest", "pick_up_easter_egg" );
}
bucket_init()
{
s_bathtub = getstruct( "tub_trigger_struct", "targetname" );
level.t_bathtub = spawn( "trigger_radius_use", s_bathtub.origin, 0, 40, 150 );
level.t_bathtub usetriggerrequirelookat();
level.t_bathtub triggerignoreteam();
level.t_bathtub sethintstring( "" );
level.t_bathtub setcursorhint( "HINT_NOICON" );
}
wait_for_bucket_activated( player )
{
if ( isDefined( player ) )
{
while ( 1 )
{
level.t_bathtub waittill( "trigger", who );
if ( who == player )
{
return;
}
}
}
else level.t_bathtub waittill( "trigger", who );
}
dip_the_spoon()
{
self endon( "disconnect" );
wait_for_bucket_activated( self );
self takeweapon( "spoon_zm_alcatraz" );
self giveweapon( "knife_zm_alcatraz" );
self set_player_melee_weapon( "knife_zm_alcatraz" );
self.spoon_in_tub = 1;
self setclientfieldtoplayer( "spoon_visual_state", 1 );
wait 5;
level.b_spoon_in_tub = 1;
flag_wait( "charged_spoon" );
wait 1;
level.t_bathtub playsound( "zmb_easteregg_laugh" );
self thread thrust_the_spork();
}
thrust_the_spork()
{
self endon( "disconnect" );
wait_for_bucket_activated( self );
self setclientfieldtoplayer( "spoon_visual_state", 2 );
wait 5;
wait_for_bucket_activated( self );
self takeweapon( "knife_zm_alcatraz" );
self giveweapon( "spork_zm_alcatraz" );
self set_player_melee_weapon( "spork_zm_alcatraz" );
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "spork", self );
self.spoon_in_tub = undefined;
self setclientfieldtoplayer( "spoon_visual_state", 3 );
wait 1;
self thread do_player_general_vox( "quest", "pick_up_easter_egg" );
}
debug_prison_spoon_quest()
{
/#
while ( 1 )
{
a_players = getplayers();
_a377 = a_players;
_k377 = getFirstArrayKey( _a377 );
while ( isDefined( _k377 ) )
{
player = _a377[ _k377 ];
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
{
flag_set( "soul_catchers_charged" );
break;
}
else
{
_k377 = getNextArrayKey( _a377, _k377 );
}
}
wait 1;
#/
}
}

View File

@ -0,0 +1,287 @@
#include maps/mp/zombies/_zm_weap_tomahawk;
#include maps/mp/zombies/_zm_afterlife;
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
init()
{
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
{
sq_bg_easy_cleanup();
return;
}
precachemodel( "p6_zm_al_skull_afterlife" );
flag_init( "warden_blundergat_obtained" );
level thread wait_for_initial_conditions();
}
sq_bg_easy_cleanup()
{
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
t_reward_pickup delete();
}
wait_for_initial_conditions()
{
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
t_reward_pickup sethintstring( "" );
t_reward_pickup setcursorhint( "HINT_NOICON" );
/#
level thread debug_sq_bg_quest_starter();
#/
level waittill( "bouncing_tomahawk_zm_aquired" );
level.sq_bg_macguffins = [];
a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" );
_a46 = a_s_mcguffin;
_k46 = getFirstArrayKey( _a46 );
while ( isDefined( _k46 ) )
{
struct = _a46[ _k46 ];
m_temp = spawn( "script_model", struct.origin, 0 );
m_temp.targetname = "sq_bg_macguffin";
m_temp setmodel( struct.model );
m_temp.angles = struct.angles;
m_temp ghost();
m_temp ghostindemo();
level.sq_bg_macguffins[ level.sq_bg_macguffins.size ] = m_temp;
wait_network_frame();
_k46 = getNextArrayKey( _a46, _k46 );
}
array_thread( level.sq_bg_macguffins, ::sq_bg_macguffin_think );
level.a_tomahawk_pickup_funcs[ level.a_tomahawk_pickup_funcs.size ] = ::tomahawk_the_macguffin;
level thread check_sq_bg_progress();
level waittill( "all_macguffins_acquired" );
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
t_reward_pickup thread give_sq_bg_reward();
}
sq_bg_macguffin_think()
{
self endon( "sq_bg_macguffin_received_by_player" );
self thread maps/mp/zombies/_zm_afterlife::enable_afterlife_prop();
self.health = 10000;
self setcandamage( 1 );
self setforcenocull();
while ( 1 )
{
self waittill( "damage", amount, attacker );
if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" )
{
playfx( level._effect[ "ee_skull_shot" ], self.origin );
self playsound( "zmb_powerpanel_activate" );
self thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop();
self thread wait_and_hide_sq_bg_macguffin();
}
}
}
wait_and_hide_sq_bg_macguffin()
{
self notify( "restart_show_timer" );
self endon( "restart_show_timer" );
self endon( "caught_by_tomahawk" );
wait 1,6;
self thread maps/mp/zombies/_zm_afterlife::enable_afterlife_prop();
}
tomahawk_the_macguffin( grenade, n_grenade_charge_power )
{
if ( !isDefined( level.sq_bg_macguffins ) || level.sq_bg_macguffins.size <= 0 )
{
return 0;
}
_a119 = level.sq_bg_macguffins;
_k119 = getFirstArrayKey( _a119 );
while ( isDefined( _k119 ) )
{
macguffin = _a119[ _k119 ];
if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 )
{
m_tomahawk = maps/mp/zombies/_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
macguffin notify( "caught_by_tomahawk" );
macguffin.origin = grenade.origin;
macguffin linkto( m_tomahawk );
macguffin thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop();
self thread maps/mp/zombies/_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
self thread give_player_macguffin_upon_receipt( m_tomahawk, macguffin );
return 1;
}
_k119 = getNextArrayKey( _a119, _k119 );
}
return 0;
}
give_player_macguffin_upon_receipt( m_tomahawk, m_macguffin )
{
self endon( "disconnect" );
while ( isDefined( m_tomahawk ) )
{
wait 0,05;
}
m_macguffin notify( "sq_bg_macguffin_received_by_player" );
arrayremovevalue( level.sq_bg_macguffins, m_macguffin );
m_macguffin delete();
play_sound_at_pos( "purchase", self.origin );
level notify( "sq_bg_macguffin_collected" );
}
check_sq_bg_progress()
{
n_macguffins_total = level.sq_bg_macguffins.size;
n_macguffins_collected = 0;
while ( 1 )
{
level waittill( "sq_bg_macguffin_collected", player );
n_macguffins_collected++;
if ( n_macguffins_collected >= n_macguffins_total )
{
level notify( "all_macguffins_acquired" );
break;
}
else play_sq_bg_collected_vo( player );
}
wait 1;
player playsound( "zmb_easteregg_laugh" );
}
play_sq_bg_collected_vo( player )
{
player endon( "disconnect" );
wait 1;
player thread do_player_general_vox( "quest", "pick_up_easter_egg" );
}
give_sq_bg_reward()
{
s_reward_origin = getstruct( "sq_bg_reward", "targetname" );
t_near = spawn( "trigger_radius", s_reward_origin.origin, 0, 196, 64 );
while ( 1 )
{
t_near waittill( "trigger", ent );
if ( isplayer( ent ) )
{
t_near thread sq_bg_spawn_rumble();
break;
}
else
{
wait 0,1;
}
}
a_players = getplayers();
if ( a_players.size == 1 )
{
if ( a_players[ 0 ] hasweapon( "blundergat_zm" ) )
{
str_reward_weapon = "blundersplat_zm";
str_loc = &"ZM_PRISON_SQ_BS";
}
else
{
str_reward_weapon = "blundergat_zm";
str_loc = &"ZM_PRISON_SQ_BG";
}
}
else
{
str_reward_weapon = "blundergat_zm";
str_loc = &"ZM_PRISON_SQ_BG";
}
m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles );
m_reward_model moveto( m_reward_model.origin + vectorScale( ( 0, 0, 1 ), 14 ), 5 );
level setclientfield( "sq_bg_reward_portal", 1 );
self sethintstring( str_loc );
for ( ;; )
{
while ( 1 )
{
self waittill( "trigger", player );
current_weapon = player getcurrentweapon();
if ( is_player_valid( player ) && player.is_drinking > 0 && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && current_weapon != "none" && !player hacker_active() )
{
if ( player hasweapon( str_reward_weapon ) )
{
/#
iprintln( "Player has" + str_reward_weapon + " , so don't give him another one" );
#/
}
}
else self delete();
level setclientfield( "sq_bg_reward_portal", 0 );
wait_network_frame();
m_reward_model delete();
player take_old_weapon_and_give_reward( current_weapon, str_reward_weapon );
}
}
t_near delete();
}
sq_bg_spawn_rumble()
{
a_players = getplayers();
_a285 = a_players;
_k285 = getFirstArrayKey( _a285 );
while ( isDefined( _k285 ) )
{
player = _a285[ _k285 ];
if ( player istouching( self ) )
{
player setclientfieldtoplayer( "rumble_sq_bg", 1 );
}
_k285 = getNextArrayKey( _a285, _k285 );
}
}
take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_override )
{
if ( !isDefined( weapon_limit_override ) )
{
weapon_limit_override = 0;
}
if ( weapon_limit_override == 1 )
{
self takeweapon( current_weapon );
}
else
{
primaries = self getweaponslistprimaries();
if ( isDefined( primaries ) && primaries.size >= 2 )
{
self takeweapon( current_weapon );
}
}
self giveweapon( reward_weapon );
self switchtoweapon( reward_weapon );
flag_set( "warden_blundergat_obtained" );
self playsoundtoplayer( "vox_brutus_easter_egg_872_0", self );
}
debug_sq_bg_quest_starter()
{
/#
while ( 1 )
{
a_players = getplayers();
_a327 = a_players;
_k327 = getFirstArrayKey( _a327 );
while ( isDefined( _k327 ) )
{
player = _a327[ _k327 ];
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
{
level notify( "bouncing_tomahawk_zm_aquired" );
break;
}
else
{
_k327 = getNextArrayKey( _a327, _k327 );
}
}
wait 1;
#/
}
}

View File

@ -0,0 +1,162 @@
#include maps/mp/zombies/_zm;
#include maps/mp/_visionset_mgr;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
onplayerconnect_sq_fc()
{
if ( !isDefined( level.sq_fc_still_valid ) )
{
level.sq_fc_still_valid = 1;
}
if ( flag( "afterlife_start_over" ) || !level.sq_fc_still_valid )
{
return;
}
self thread watch_for_touching_controls();
}
watch_for_touching_controls()
{
self endon( "out_of_mana" );
self endon( "disconnect" );
self waittill( "al_all_setup" );
wait 1;
v_original_origin = ( self.origin[ 0 ], self.origin[ 1 ], 0 );
v_original_angles = self.angles;
v_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 );
v_original_forward_vec = vectornormalize( v_forward_point - self.origin );
while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid )
{
v_new_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 );
v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin );
move_length = length( ( self.origin[ 0 ], self.origin[ 1 ], 0 ) - v_original_origin );
if ( !self actionslotonebuttonpressed() && !self actionslottwobuttonpressed() && !self actionslotthreebuttonpressed() && !self actionslotfourbuttonpressed() && !self adsbuttonpressed() && !self attackbuttonpressed() && !self fragbuttonpressed() && !self inventorybuttonpressed() && !self jumpbuttonpressed() && !self meleebuttonpressed() && !self secondaryoffhandbuttonpressed() && !self sprintbuttonpressed() && !self stancebuttonpressed() && !self throwbuttonpressed() && !self usebuttonpressed() && !self changeseatbuttonpressed() || move_length > 2 && vectordot( v_original_forward_vec, v_new_forward_vec ) < 0,99 )
{
level.sq_fc_still_valid = 0;
}
wait 0,05;
}
level notify( "someone_touched_controls" );
}
watch_for_trigger_condition()
{
level waittill( "pre_end_game" );
if ( !level.sq_fc_still_valid )
{
return;
}
level.sndgameovermusicoverride = "game_over_nomove";
level.custom_intermission = ::player_intermission_prison;
players = getplayers();
_a94 = players;
_k94 = getFirstArrayKey( _a94 );
while ( isDefined( _k94 ) )
{
player = _a94[ _k94 ];
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player );
_k94 = getNextArrayKey( _a94, _k94 );
}
}
player_intermission_prison()
{
self closemenu();
self closeingamemenu();
level endon( "stop_intermission" );
self endon( "disconnect" );
self endon( "death" );
self notify( "_zombie_game_over" );
self.score = self.score_total;
self.sessionstate = "intermission";
self.spectatorclient = -1;
self.killcamentity = -1;
self.archivetime = 0;
self.psoffsettime = 0;
self.friendlydamage = undefined;
points = getstructarray( "dblock_cam", "targetname" );
if ( !isDefined( points ) || points.size == 0 )
{
points = getentarray( "info_intermission", "classname" );
if ( points.size < 1 )
{
/#
println( "NO info_intermission POINTS IN MAP" );
#/
return;
}
}
self.game_over_bg = newclienthudelem( self );
self.game_over_bg.horzalign = "fullscreen";
self.game_over_bg.vertalign = "fullscreen";
self.game_over_bg setshader( "black", 640, 480 );
self.game_over_bg.alpha = 1;
visionsetnaked( "cheat_bw", 0,05 );
org = undefined;
while ( 1 )
{
points = array_randomize( points );
i = 0;
while ( i < points.size )
{
point = points[ i ];
if ( !isDefined( org ) )
{
self spawn( point.origin, point.angles );
}
if ( isDefined( points[ i ].target ) )
{
if ( !isDefined( org ) )
{
org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 60 ) );
org setmodel( "tag_origin" );
}
org.origin = points[ i ].origin;
org.angles = points[ i ].angles;
j = 0;
while ( j < get_players().size )
{
player = get_players()[ j ];
player camerasetposition( org );
player camerasetlookat();
player cameraactivate( 1 );
j++;
}
speed = 20;
if ( isDefined( points[ i ].speed ) )
{
speed = points[ i ].speed;
}
target_point = getstruct( points[ i ].target, "targetname" );
dist = distance( points[ i ].origin, target_point.origin );
time = dist / speed;
q_time = time * 0,25;
if ( q_time > 1 )
{
q_time = 1;
}
self.game_over_bg fadeovertime( q_time );
self.game_over_bg.alpha = 0;
org moveto( target_point.origin, time, q_time, q_time );
org rotateto( target_point.angles, time, q_time, q_time );
wait ( time - q_time );
self.game_over_bg fadeovertime( q_time );
self.game_over_bg.alpha = 1;
wait q_time;
i++;
continue;
}
else
{
self.game_over_bg fadeovertime( 1 );
self.game_over_bg.alpha = 0;
wait 5;
self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 );
}
i++;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,108 @@
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
onplayerconnect_sq_wth()
{
if ( !isDefined( level.wth_lookat_point ) )
{
level.wth_lookat_point = getstruct( "struct_gg_look", "targetname" );
}
self thread track_player_eyes();
self thread play_scary_lightning();
}
track_player_eyes()
{
self endon( "disconnect" );
b_saw_the_wth = 0;
while ( !b_saw_the_wth )
{
n_time = 0;
while ( self adsbuttonpressed() && n_time < 25 )
{
n_time++;
wait 0,05;
}
if ( n_time >= 25 && self adsbuttonpressed() && self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_roof" ) && sq_is_weapon_sniper( self getcurrentweapon() ) && is_player_looking_at( level.wth_lookat_point.origin, 0,9, 0, undefined ) )
{
self do_player_general_vox( "general", "scare_react", undefined, 100 );
self playsoundtoplayer( "zmb_easteregg_face", self );
self.wth_elem = newclienthudelem( self );
self.wth_elem.horzalign = "fullscreen";
self.wth_elem.vertalign = "fullscreen";
self.wth_elem.sort = 1000;
self.wth_elem.foreground = 0;
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
self.wth_elem.hidewheninmenu = 1;
j_time = 0;
while ( self adsbuttonpressed() && j_time < 5 )
{
j_time++;
wait 0,05;
}
self.wth_elem destroy();
b_saw_the_wth = 1;
}
wait 0,05;
}
}
sq_is_weapon_sniper( str_weapon )
{
a_snipers = array( "dsr50", "barretm82" );
_a77 = a_snipers;
_k77 = getFirstArrayKey( _a77 );
while ( isDefined( _k77 ) )
{
str_sniper = _a77[ _k77 ];
if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) )
{
return 1;
}
_k77 = getNextArrayKey( _a77, _k77 );
}
return 0;
}
play_scary_lightning()
{
self endon( "disconnect" );
while ( 1 )
{
while ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && isDefined( self.b_lightning ) || !self.b_lightning && flag( "plane_zapped" ) )
{
wait 0,25;
}
if ( randomint( 100000 ) == 1337 )
{
self.scary_lighting = 1;
level setclientfield( "scripted_lightning_flash", 1 );
wait_network_frame();
self.sl_elem = newclienthudelem( self );
self.sl_elem.horzalign = "fullscreen";
self.sl_elem.vertalign = "fullscreen";
self.sl_elem.sort = 1000;
self.sl_elem.foreground = 0;
self.sl_elem.alpha = 0,6;
self.sl_elem setshader( "zm_al_wth_zombie", 640, 480 );
self.sl_elem.hidewheninmenu = 1;
self.sl_elem.alpha = 0;
self.sl_elem fadeovertime( 0,1 );
wait_network_frame();
self.sl_elem.alpha = 0,6;
self.sl_elem fadeovertime( 0,1 );
wait_network_frame();
self.sl_elem.alpha = 0;
self.sl_elem fadeovertime( 0,1 );
wait_network_frame();
self.sl_elem destroy();
self.scary_lightning = 0;
wait 10;
level setclientfield( "scripted_lightning_flash", 0 );
}
wait 1;
}
}