mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
uploading 22 scripts as a baseline
This commit is contained in:
parent
88fd406178
commit
0bb8584842
12
zm_prison_patch/maps/mp/_sticky_grenade.gsc
Normal file
12
zm_prison_patch/maps/mp/_sticky_grenade.gsc
Normal 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 )
|
||||
{
|
||||
}
|
761
zm_prison_patch/maps/mp/zm_alcatraz_amb.gsc
Normal file
761
zm_prison_patch/maps/mp/zm_alcatraz_amb.gsc
Normal 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" );
|
||||
}
|
1006
zm_prison_patch/maps/mp/zm_alcatraz_craftables.gsc
Normal file
1006
zm_prison_patch/maps/mp/zm_alcatraz_craftables.gsc
Normal file
File diff suppressed because it is too large
Load Diff
169
zm_prison_patch/maps/mp/zm_alcatraz_distance_tracking.gsc
Normal file
169
zm_prison_patch/maps/mp/zm_alcatraz_distance_tracking.gsc
Normal 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;
|
||||
}
|
15
zm_prison_patch/maps/mp/zm_alcatraz_gamemodes.gsc
Normal file
15
zm_prison_patch/maps/mp/zm_alcatraz_gamemodes.gsc
Normal 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 );
|
||||
}
|
558
zm_prison_patch/maps/mp/zm_alcatraz_grief_cellblock.gsc
Normal file
558
zm_prison_patch/maps/mp/zm_alcatraz_grief_cellblock.gsc
Normal 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();
|
||||
}
|
||||
}
|
2286
zm_prison_patch/maps/mp/zm_alcatraz_sq.gsc
Normal file
2286
zm_prison_patch/maps/mp/zm_alcatraz_sq.gsc
Normal file
File diff suppressed because it is too large
Load Diff
594
zm_prison_patch/maps/mp/zm_alcatraz_sq_nixie.gsc
Normal file
594
zm_prison_patch/maps/mp/zm_alcatraz_sq_nixie.gsc
Normal 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++;
|
||||
}
|
||||
}
|
733
zm_prison_patch/maps/mp/zm_alcatraz_sq_vo.gsc
Normal file
733
zm_prison_patch/maps/mp/zm_alcatraz_sq_vo.gsc
Normal 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;
|
||||
}
|
27
zm_prison_patch/maps/mp/zm_alcatraz_standard.gsc
Normal file
27
zm_prison_patch/maps/mp/zm_alcatraz_standard.gsc
Normal 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" );
|
||||
}
|
800
zm_prison_patch/maps/mp/zm_alcatraz_traps.gsc
Normal file
800
zm_prison_patch/maps/mp/zm_alcatraz_traps.gsc
Normal 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;
|
||||
}
|
1001
zm_prison_patch/maps/mp/zm_alcatraz_travel.gsc
Normal file
1001
zm_prison_patch/maps/mp/zm_alcatraz_travel.gsc
Normal file
File diff suppressed because it is too large
Load Diff
1346
zm_prison_patch/maps/mp/zm_alcatraz_utility.gsc
Normal file
1346
zm_prison_patch/maps/mp/zm_alcatraz_utility.gsc
Normal file
File diff suppressed because it is too large
Load Diff
687
zm_prison_patch/maps/mp/zm_alcatraz_weap_quest.gsc
Normal file
687
zm_prison_patch/maps/mp/zm_alcatraz_weap_quest.gsc
Normal 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 );
|
||||
}
|
||||
}
|
209
zm_prison_patch/maps/mp/zm_prison_achievement.gsc
Normal file
209
zm_prison_patch/maps/mp/zm_prison_achievement.gsc
Normal 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" );
|
||||
}
|
148
zm_prison_patch/maps/mp/zm_prison_ffotd.gsc
Normal file
148
zm_prison_patch/maps/mp/zm_prison_ffotd.gsc
Normal 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 );
|
||||
}
|
||||
}
|
144
zm_prison_patch/maps/mp/zm_prison_fx.gsc
Normal file
144
zm_prison_patch/maps/mp/zm_prison_fx.gsc
Normal 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;
|
||||
}
|
301
zm_prison_patch/maps/mp/zm_prison_spoon.gsc
Normal file
301
zm_prison_patch/maps/mp/zm_prison_spoon.gsc
Normal 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;
|
||||
#/
|
||||
}
|
||||
}
|
287
zm_prison_patch/maps/mp/zm_prison_sq_bg.gsc
Normal file
287
zm_prison_patch/maps/mp/zm_prison_sq_bg.gsc
Normal 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;
|
||||
#/
|
||||
}
|
||||
}
|
162
zm_prison_patch/maps/mp/zm_prison_sq_fc.gsc
Normal file
162
zm_prison_patch/maps/mp/zm_prison_sq_fc.gsc
Normal 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++;
|
||||
}
|
||||
}
|
||||
}
|
1057
zm_prison_patch/maps/mp/zm_prison_sq_final.gsc
Normal file
1057
zm_prison_patch/maps/mp/zm_prison_sq_final.gsc
Normal file
File diff suppressed because it is too large
Load Diff
108
zm_prison_patch/maps/mp/zm_prison_sq_wth.gsc
Normal file
108
zm_prison_patch/maps/mp/zm_prison_sq_wth.gsc
Normal 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;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user