uploading 17 zm_highrise_patch/mp scripts as a baseline

This commit is contained in:
JezuzLizard 2020-07-25 02:29:30 -07:00
parent 28b4f9edf7
commit 9763aea127
17 changed files with 8563 additions and 0 deletions

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,193 @@
#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_highrise_sidequest();
level thread achievement_mad_without_power();
level.achievement_sound_func = ::achievement_sound_func;
onplayerconnect_callback( ::onplayerconnect );
}
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_dlc1_highrise_sidequest", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_vertigoner", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_slippery_when_undead", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_facing_the_dragon", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_im_my_own_best_friend", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_mad_without_power", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_shafted", 0 );
}
onplayerconnect()
{
self thread achievement_vertigoner();
self thread achievement_slippery_when_undead();
self thread achievement_facing_the_dragon();
self thread achievement_im_my_own_best_friend();
self thread achievement_shafted();
}
achievement_highrise_sidequest()
{
level endon( "end_game" );
level waittill( "highrise_sidequest_achieved" );
/#
iprintlnbold( "ZM_DLC1_HIGHRISE_SIDEQUEST achieved for the team" );
#/
level giveachievement_wrapper( "ZM_DLC1_HIGHRISE_SIDEQUEST", 1 );
}
achievement_vertigoner()
{
level endon( "end_game" );
self endon( "disconnect" );
self.num_zombies_flung = 0;
max_zombies_flung = 10;
while ( self.num_zombies_flung < max_zombies_flung )
{
self waittill( "zombie_flung" );
wait 0,1;
}
/#
#/
self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" );
}
achievement_slippery_when_undead()
{
level endon( "end_game" );
self endon( "disconnect" );
self.num_sliquifier_kills = 0;
max_kills_with_one_shot = 5;
while ( self.num_sliquifier_kills < max_kills_with_one_shot )
{
self waittill( "sliquifier_kill" );
wait 0,01;
}
/#
#/
self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" );
}
achievement_facing_the_dragon()
{
level endon( "end_game" );
self endon( "disconnect" );
v_achievement_location = ( 2209, 693, 3200 );
v_dragon_position = ( 971, 43, 3800 );
is_touching_distance = 350;
round_number_max = 2;
while ( 1 )
{
if ( level.round_number >= round_number_max )
{
return;
}
dist = distance( self.origin, v_achievement_location );
if ( dist <= is_touching_distance )
{
v_dir = vectornormalize( v_dragon_position - self.origin );
v_forward = self getweaponforwarddir();
dp = vectordot( v_dir, v_forward );
if ( dp > 0,95 )
{
break;
}
}
else
{
wait 0,01;
}
}
/#
#/
self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" );
}
achievement_im_my_own_best_friend()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "whos_who_self_revive" );
/#
#/
self giveachievement_wrapper( "ZM_DLC1_IM_MY_OWN_BEST_FRIEND" );
}
achievement_mad_without_power()
{
level endon( "end_game" );
round_number_max = 10;
while ( level.round_number < round_number_max )
{
level waittill( "start_of_round" );
if ( flag( "power_on" ) )
{
return;
}
}
/#
#/
self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 );
}
achievement_shafted()
{
level endon( "end_game" );
self endon( "disconnect" );
level.perk_bought_func = ::player_buys_perk_machine;
max_unique_perk_machines = 6;
while ( 1 )
{
self waittill_any( "player_buys_perk", "pap_used" );
if ( isDefined( self.pap_used ) && self.pap_used == 1 )
{
if ( isDefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines )
{
break;
}
}
else
{
}
}
/#
#/
self giveachievement_wrapper( "ZM_DLC1_SHAFTED" );
}
player_buys_perk_machine( perk )
{
if ( !isDefined( self.perk_machines_bought ) )
{
self.perk_machines_bought = [];
}
found = 0;
i = 0;
while ( i < self.perk_machines_bought.size )
{
if ( perk == self.perk_machines_bought[ i ] )
{
found = 1;
break;
}
else
{
i++;
}
}
if ( !found )
{
self.perk_machines_bought[ self.perk_machines_bought.size ] = perk;
self notify( "player_buys_perk" );
}
}

View File

@ -0,0 +1,75 @@
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
#include maps/mp/_ambientpackage;
main()
{
level thread sndmusicegg();
}
sndmusicegg()
{
origins = [];
origins[ 0 ] = ( 2724, 300, 1347 );
origins[ 1 ] = ( 2639, 1831, 1359 );
origins[ 2 ] = ( 1230, 1846, 3249 );
level.meteor_counter = 0;
level.music_override = 0;
i = 0;
while ( i < origins.size )
{
level thread sndmusicegg_wait( origins[ i ] );
i++;
}
}
sndmusicegg_wait( bear_origin )
{
temp_ent = spawn( "script_origin", bear_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", 190 );
}
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" );
}

View File

@ -0,0 +1,353 @@
#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zm_highrise_elevators;
#include maps/mp/zombies/_zm_buildables;
#include maps/mp/zm_transit_utility;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
init_buildables()
{
level.buildable_piece_count = 13;
add_zombie_buildable( "springpad_zm", &"ZM_HIGHRISE_BUILD_SPRINGPAD", &"ZM_HIGHRISE_BUILDING_SPRINGPAD", &"ZM_HIGHRISE_BOUGHT_SPRINGPAD" );
add_zombie_buildable( "slipgun_zm", &"ZM_HIGHRISE_BUILD_SLIPGUN", &"ZM_HIGHRISE_BUILDING_SLIPGUN", &"ZM_HIGHRISE_BOUGHT_SLIPGUN" );
add_zombie_buildable( "keys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
add_zombie_buildable( "ekeys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" );
}
include_buildables()
{
springpad_door = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_door", 32, 64, 0, "zom_hud_trample_steam_screen", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_02", undefined, 1 );
springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 48, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 2 );
springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 48, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 3 );
springpad_whistle = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_flag", 48, 15, 0, "zom_hud_trample_steam_whistle", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_03", undefined, 4 );
springpad = spawnstruct();
springpad.name = "springpad_zm";
springpad add_buildable_piece( springpad_door );
springpad add_buildable_piece( springpad_flag );
springpad add_buildable_piece( springpad_motor );
springpad add_buildable_piece( springpad_whistle );
springpad.triggerthink = ::springpadbuildable;
include_buildable( springpad );
slipgun_canister = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_extinguisher", 32, 64, 0, "zom_hud_icon_buildable_slip_ext", ::onpickup_common, ::ondrop_common, undefined, "TAG_CO2", undefined, 5 );
slipgun_cooker = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_cooker", 48, 15, 0, "zom_hud_icon_buildable_slip_cooker", ::onpickup_common, ::ondrop_common, undefined, "TAG_COOKER", undefined, 6 );
slipgun_foot = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_foot", 48, 15, 0, "zom_hud_icon_buildable_slip_foot", ::onpickup_common, ::ondrop_common, undefined, "TAG_FOOT", undefined, 7 );
slipgun_throttle = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_throttle", 48, 15, 0, "zom_hud_icon_buildable_slip_handle", ::onpickup_common, ::ondrop_common, undefined, "TAG_THROTTLE", undefined, 8 );
slipgun = spawnstruct();
slipgun.name = "slipgun_zm";
slipgun add_buildable_piece( slipgun_canister );
slipgun add_buildable_piece( slipgun_cooker );
slipgun add_buildable_piece( slipgun_foot );
slipgun add_buildable_piece( slipgun_throttle );
slipgun.onbuyweapon = ::onbuyweapon_slipgun;
slipgun.triggerthink = ::slipgunbuildable;
slipgun.onuseplantobject = ::onuseplantobject_slipgun;
include_buildable( slipgun );
key_chain = generate_zombie_buildable_piece( "keys_zm", "P6_zm_hr_key", 32, 64, 2,4, "zom_hud_icon_epod_key", ::onpickup_keys, ::ondrop_keys, undefined, undefined, 0, 9 );
key_chain.onspawn = ::onspawn_keys;
key_chain manage_multiple_pieces( 4 );
key = spawnstruct();
key.name = "keys_zm";
key add_buildable_piece( key_chain );
key.triggerthink = ::keysbuildable;
key.onuseplantobject = ::onuseplantobject_escapepodkey;
key.buildablepieces[ 0 ].onspawn = ::onspawn_keys;
include_buildable( key );
ekey = spawnstruct();
ekey.name = "ekeys_zm";
ekey add_buildable_piece( key_chain );
ekey.triggerthink = ::ekeysbuildable;
ekey.onuseplantobject = ::onuseplantobject_elevatorkey;
ekey.buildablepieces[ 0 ].onspawn = ::onspawn_keys;
include_buildable( ekey );
if ( !isDefined( level.gamedifficulty ) || level.gamedifficulty != 0 )
{
sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 10 );
sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 128, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 11 );
sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 12 );
sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 13 );
sqcommon = spawnstruct();
sqcommon.name = "sq_common";
sqcommon add_buildable_piece( sq_common_electricbox );
sqcommon add_buildable_piece( sq_common_meteor );
sqcommon add_buildable_piece( sq_common_scaffolding );
sqcommon add_buildable_piece( sq_common_transceiver );
sqcommon.triggerthink = ::sqcommonbuildable;
include_buildable( sqcommon );
maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" );
}
}
springpadbuildable()
{
maps/mp/zombies/_zm_buildables::buildable_trigger_think( "springpad_zm_buildable_trigger", "springpad_zm", "equip_springpad_zm", &"ZM_HIGHRISE_GRAB_SPRINGPAD", 1, 1 );
}
slipgunbuildable()
{
level thread wait_for_slipgun();
if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment )
{
persist = 2;
}
else
{
persist = 1;
}
maps/mp/zombies/_zm_buildables::buildable_trigger_think( "slipgun_zm_buildable_trigger", "slipgun_zm", "slipgun_zm", &"ZM_HIGHRISE_GRAB_SLIPGUN", 1, persist );
}
keysbuildable()
{
pod_key = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "escape_pod_key_console_trigger", "keys_zm", "keys_zm", "", 1, 3 );
pod_key.prompt_and_visibility_func = ::escape_pod_key_prompt;
}
ekeysbuildable()
{
elevator_keys = maps/mp/zombies/_zm_buildables::buildable_trigger_think_array( "elevator_key_console_trigger", "ekeys_zm", "keys_zm", "", 1, 3 );
_a143 = elevator_keys;
_k143 = getFirstArrayKey( _a143 );
while ( isDefined( _k143 ) )
{
stub = _a143[ _k143 ];
stub.prompt_and_visibility_func = ::elevator_key_prompt;
stub.buildablezone.stat_name = "keys_zm";
_k143 = getNextArrayKey( _a143, _k143 );
}
}
ondrop_common( player )
{
/#
println( "ZM >> Common part callback onDrop()" );
#/
self droponelevator( player );
self.piece_owner = undefined;
}
onpickup_common( player )
{
/#
println( "ZM >> Common part callback onPickup()" );
#/
player playsound( "zmb_buildable_pickup" );
self pickupfromelevator();
self.piece_owner = player;
}
sqcommonbuildable()
{
level.sq_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 );
}
onbuyweapon_slipgun( player )
{
player givestartammo( self.stub.weaponname );
player switchtoweapon( self.stub.weaponname );
level notify( "slipgun_bought" );
}
wait_for_slipgun()
{
level.zombie_include_weapons[ "slipgun_zm" ] = 0;
if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment )
{
level waittill( "slipgun_bought", player );
level.zombie_include_weapons[ "slipgun_zm" ] = 1;
level.zombie_weapons[ "slipgun_zm" ].is_in_box = 1;
}
}
keyscreateglint()
{
if ( !isDefined( self.model.glint_fx ) )
{
playfxontag( level._effect[ "elevator_glint" ], self.model, "tag_origin" );
}
}
onspawn_keys()
{
self keyscreateglint();
}
ondrop_keys( player )
{
self keyscreateglint();
}
onpickup_keys( player )
{
}
escape_pod_key_prompt( player )
{
if ( !flag( "escape_pod_needs_reset" ) )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return 0;
}
return self buildabletrigger_update_prompt( player );
}
onuseplantobject_escapepodkey( player )
{
level notify( "reset_escape_pod" );
}
watch_elevator_prompt( player, trig )
{
player notify( "watch_elevator_prompt" );
player endon( "watch_elevator_prompt" );
trig endon( "kill_trigger" );
while ( 1 )
{
trig.stub.elevator waittill( "floor_changed" );
if ( isDefined( self.stub.elevator ) )
{
if ( trig.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) )
{
thread maps/mp/zombies/_zm_unitrigger::cleanup_trigger( trig, player );
return;
}
}
}
}
elevator_key_prompt( player )
{
if ( !isDefined( self.stub.elevator ) )
{
elevatorname = self.stub.script_noteworthy;
if ( isDefined( elevatorname ) && isDefined( self.stub.script_parameters ) )
{
elevator = level.elevators[ elevatorname ];
floor = int( self.stub.script_parameters );
flevel = elevator maps/mp/zm_highrise_elevators::elevator_level_for_floor( floor );
self.stub.elevator = elevator;
self.stub.floor = flevel;
}
}
/#
if ( !isDefined( self.stub.elevator ) )
{
if ( isDefined( self.stub.script_noteworthy ) )
{
error( "Cannot locate elevator " + self.stub.script_noteworthy );
}
else
{
error( "Cannot locate elevator " );
}
}
else
{
color = vectorScale( ( 0, 0, 1 ), 0,7 );
stop = self.stub.floor;
floor = self.stub.elevator.floors[ "" + stop ].script_location;
text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + "";
if ( getDvarInt( #"B67910B4" ) )
{
print3d( self.stub.origin, text, color, 1, 0,5, 300 );
#/
}
}
if ( isDefined( self.stub.elevator ) )
{
if ( self.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( self.stub.floor ) )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return 0;
}
}
if ( !flag( "power_on" ) )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return 0;
}
can_use = self buildabletrigger_update_prompt( player );
if ( can_use )
{
thread watch_elevator_prompt( player, self );
}
return can_use;
}
onuseplantobject_elevatorkey( player )
{
elevatorname = self.script_noteworthy;
if ( isDefined( elevatorname ) && isDefined( self.script_parameters ) )
{
floor = int( self.script_parameters );
elevator = level.elevators[ elevatorname ];
if ( isDefined( elevator ) )
{
elevator.body.force_starting_floor = floor;
elevator.body notify( "forcego" );
}
}
}
droponelevator( player )
{
if ( isDefined( player ) && isDefined( player maps/mp/zm_highrise_elevators::object_is_on_elevator() ) && player maps/mp/zm_highrise_elevators::object_is_on_elevator() )
{
self.model linkto( player.elevator_parent );
self.linked_to_elevator = 1;
self.unitrigger.link_parent = player.elevator_parent;
}
else
{
self.unitrigger.link_parent = undefined;
}
}
pickupfromelevator()
{
if ( isDefined( self.linked_to_elevator ) && self.linked_to_elevator )
{
if ( isDefined( self.model ) )
{
self.model unlink();
}
self.linked_to_elevator = undefined;
}
if ( isDefined( self.unitrigger ) )
{
self.unitrigger.link_parent = undefined;
}
}
onuseplantobject_slipgun( player )
{
/#
println( "ZM >> Slipgun Buildable CallBack onUsePlantObject()" );
#/
buildable = self.buildablezone;
first_part = "TAG_COOKER";
second_part = "TAG_BASE";
i = 0;
while ( i < buildable.pieces.size )
{
if ( buildable.pieces[ i ].part_name == first_part )
{
if ( isDefined( buildable.pieces[ i ].built ) || buildable.pieces[ i ].built && player.current_buildable_piece.part_name == first_part )
{
buildable.stub.model showpart( second_part );
i++;
continue;
}
else
{
buildable.stub.model hidepart( second_part );
}
}
i++;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,415 @@
#include maps/mp/zombies/_zm_ai_basic;
#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 = 1000;
}
if ( !isDefined( level.zombie_tracking_high ) )
{
level.zombie_tracking_high = 500;
}
if ( !isDefined( level.zombie_tracking_wait ) )
{
level.zombie_tracking_wait = 10;
}
building_trigs = getentarray( "zombie_fell_off", "targetname" );
if ( isDefined( building_trigs ) )
{
array_thread( building_trigs, ::zombies_off_building );
}
level.distance_tracker_aggressive_distance = 500;
level.distance_tracker_aggressive_height = 200;
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 = 1000;
}
if ( !isDefined( how_high ) )
{
how_high = 500;
}
distance_squared_check = how_close * how_close;
height_squared_check = how_high * how_high;
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;
}
zombies = getaiarray( "axis" );
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;
}
escaped_zombies_cleanup_init()
{
self endon( "death" );
self.zombie_path_bad = 0;
while ( 1 )
{
if ( !self.zombie_path_bad )
{
self waittill( "bad_path" );
}
found_player = undefined;
players = get_players();
i = 0;
while ( i < players.size )
{
if ( self maymovetopoint( players[ i ].origin, 1 ) )
{
self.favoriteenemy = players[ i ];
found_player = 1;
i++;
continue;
}
i++;
}
n_delete_distance = 800;
n_delete_height = 300;
if ( is_player_in_inverted_elevator_shaft() )
{
n_delete_distance = level.distance_tracker_aggressive_distance;
n_delete_height = level.distance_tracker_aggressive_height;
}
if ( !isDefined( found_player ) && isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area )
{
self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
self.zombie_path_bad = 1;
self escaped_zombies_cleanup();
}
wait 0,1;
}
}
is_player_in_inverted_elevator_shaft()
{
b_player_is_in_elevator_shaft = 0;
a_occupied_zones = get_occupied_zones();
i = 0;
while ( i < a_occupied_zones.size )
{
if ( issubstr( a_occupied_zones[ i ], "orange_elevator_shaft" ) )
{
b_player_is_in_elevator_shaft = 1;
}
i++;
}
return b_player_is_in_elevator_shaft;
}
get_occupied_zones()
{
a_occupied_zones = [];
i = 0;
while ( i < level.active_zone_names.size )
{
if ( level.zones[ level.active_zone_names[ i ] ].is_occupied )
{
a_occupied_zones[ a_occupied_zones.size ] = level.active_zone_names[ i ];
}
i++;
}
return a_occupied_zones;
}
get_escape_position()
{
self endon( "death" );
str_zone = get_current_zone();
if ( isDefined( str_zone ) )
{
a_zones = get_adjacencies_to_zone( str_zone );
a_dog_locations = get_dog_locations_in_zones( a_zones );
s_farthest = self get_farthest_dog_location( a_dog_locations );
}
return s_farthest;
}
get_current_zone()
{
str_zone = undefined;
a_zones = getarraykeys( level.zones );
_a310 = a_zones;
_k310 = getFirstArrayKey( _a310 );
while ( isDefined( _k310 ) )
{
zone = _a310[ _k310 ];
i = 0;
while ( i < level.zones[ zone ].volumes.size )
{
if ( self istouching( level.zones[ zone ].volumes[ i ] ) )
{
str_zone = zone;
}
i++;
}
_k310 = getNextArrayKey( _a310, _k310 );
}
return str_zone;
}
get_adjacencies_to_zone( str_zone )
{
a_adjacencies = [];
a_adjacencies[ 0 ] = str_zone;
a_adjacent_zones = getarraykeys( level.zones[ str_zone ].adjacent_zones );
i = 0;
while ( i < a_adjacent_zones.size )
{
if ( level.zones[ str_zone ].adjacent_zones[ a_adjacent_zones[ i ] ].is_connected )
{
a_adjacencies[ a_adjacencies.size ] = a_adjacent_zones[ i ];
}
i++;
}
return a_adjacencies;
}
get_dog_locations_in_zones( a_zones )
{
a_dog_locations = [];
_a345 = a_zones;
_k345 = getFirstArrayKey( _a345 );
while ( isDefined( _k345 ) )
{
zone = _a345[ _k345 ];
a_dog_locations = arraycombine( a_dog_locations, level.zones[ zone ].dog_locations, 0, 0 );
_k345 = getNextArrayKey( _a345, _k345 );
}
return a_dog_locations;
}
get_farthest_dog_location( a_dog_locations )
{
n_farthest_index = 0;
n_distance_farthest = 0;
i = 0;
while ( i < a_dog_locations.size )
{
n_distance_sq = distancesquared( self.origin, a_dog_locations[ i ].origin );
if ( n_distance_sq > n_distance_farthest )
{
n_distance_farthest = n_distance_sq;
n_farthest_index = i;
}
i++;
}
return a_dog_locations[ n_farthest_index ];
}
escaped_zombies_cleanup()
{
self endon( "death" );
s_escape = self get_escape_position();
self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" );
if ( isDefined( s_escape ) )
{
self setgoalpos( s_escape.origin );
self thread check_player_available();
self waittill_any( "goal", "reaquire_player" );
}
self.zombie_path_bad = !can_zombie_path_to_any_player();
wait 0,1;
if ( !self.zombie_path_bad )
{
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
}
}
check_player_available()
{
self notify( "_check_player_available" );
self endon( "_check_player_available" );
self endon( "death" );
self endon( "goal" );
self endon( "reaquire_player" );
while ( self.zombie_path_bad )
{
if ( self can_zombie_see_any_player() )
{
self notify( "reaquire_player" );
}
wait randomfloatrange( 0,2, 0,5 );
}
}
can_zombie_path_to_any_player()
{
a_players = get_players();
i = 0;
while ( i < a_players.size )
{
if ( findpath( self.origin, a_players[ i ].origin ) )
{
return 1;
}
i++;
}
return 0;
}
can_zombie_see_any_player()
{
a_players = get_players();
i = 0;
while ( i < a_players.size )
{
if ( self maymovetopoint( a_players[ i ].origin, 1 ) )
{
return 1;
}
i++;
}
return 0;
}
zombies_off_building()
{
while ( 1 )
{
self waittill( "trigger", who );
if ( !isplayer( who ) && isDefined( who.is_leaper ) && !who.is_leaper )
{
zombies = getaiarray( "axis" );
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && who.health >= who.maxhealth )
{
if ( isDefined( who.exclude_distance_cleanup_adding_to_total ) && !who.exclude_distance_cleanup_adding_to_total && isDefined( who.is_leaper ) && !who.is_leaper )
{
level.zombie_total++;
if ( who.health < level.zombie_health )
{
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = who.health;
}
}
}
who maps/mp/zombies/_zm_spawner::reset_attack_spot();
who notify( "zombie_delete" );
who dodamage( who.health + 666, who.origin, who );
recalc_zombie_array();
}
wait 0,1;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,195 @@
#include maps/mp/zombies/_zm_weapons;
#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();
level thread eject_player_trigger_init();
level thread change_bad_spawner();
}
main_end()
{
level thread eject_player_trigger();
}
spawned_collision_ffotd()
{
precachemodel( "collision_wall_32x32x10_standard" );
flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{
collision1 = spawn( "script_model", ( 2044, 499, 2893 ) );
collision1 setmodel( "collision_wall_32x32x10_standard" );
collision1.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision1 ghost();
collision2 = spawn( "script_model", ( 2044, 499, 2925 ) );
collision2 setmodel( "collision_wall_32x32x10_standard" );
collision2.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision2 ghost();
collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) );
collision3 setmodel( "collision_wall_256x256x10_standard" );
collision3.angles = ( 0, 0, 0 );
collision3 ghost();
collision3b = spawn( "script_model", ( 1740, 1497, 3075 ) );
collision3b setmodel( "collision_wall_256x256x10_standard" );
collision3b.angles = ( 0, 0, 0 );
collision3b ghost();
collision3 = spawn( "script_model", ( 2054, 1455, 3440 ) );
collision3 setmodel( "collision_wall_128x128x10_standard" );
collision3.angles = ( 0, 0, 0 );
collision3 ghost();
collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) );
collision4 setmodel( "collision_wall_256x256x10_standard" );
collision4.angles = vectorScale( ( 0, 0, 0 ), 270 );
collision4 ghost();
collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) );
collision5 setmodel( "collision_wall_256x256x10_standard" );
collision5.angles = vectorScale( ( 0, 0, 0 ), 347,6 );
collision5 ghost();
collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) );
collision6b setmodel( "collision_wall_256x256x10_standard" );
collision6b.angles = ( 0, 270, 12 );
collision6b ghost();
collision6c = spawn( "script_model", ( 3666, 1840, 2023 ) );
collision6c setmodel( "collision_wall_256x256x10_standard" );
collision6c.angles = ( 0, 270, 12 );
collision6c ghost();
collision7 = spawn( "script_model", ( 2157, 839, 3129 ) );
collision7 setmodel( "collision_wall_128x128x10_standard" );
collision7.angles = ( 0, 9,79996, -90 );
collision7 ghost();
collision7 = spawn( "script_model", ( 3594, 1708, 2247 ) );
collision7 setmodel( "collision_wall_128x128x10_standard" );
collision7.angles = ( 0, 270, 12 );
collision7 ghost();
}
}
eject_player_trigger_init()
{
trig1 = spawn( "trigger_box", ( 3172, 1679, 1296,09 ), 0, 64, 10, 64 );
trig1.angles = ( 0, 0, 0 );
trig1.targetname = "eject_player_pos";
trig1.point = spawn( "script_origin", ( 3266, 1703,5, 1325 ) );
trig2 = spawn( "trigger_box", ( 3225,5, 1153, 1346,48 ), 0, 64, 10, 64 );
trig2.angles = ( 0, 0, 0 );
trig2.targetname = "eject_player_pos";
trig2.point = spawn( "script_origin", ( 3074, 1137,5, 1282,26 ) );
trig3 = spawn( "trigger_radius", ( 3583, 1964, 2751,95 ), 0, 30, 64 );
trig3.angles = ( 0, 0, 0 );
trig3.targetname = "eject_player_pos";
trig3.point = spawn( "script_origin", ( 3590,2, 2068, 2720,34 ) );
}
eject_player_trigger()
{
trigs = getentarray( "eject_player_pos", "targetname" );
array_thread( trigs, ::player_eject_watcher );
}
player_eject_watcher()
{
time = 0;
while ( 1 )
{
self waittill( "trigger", who );
if ( is_player_valid( who ) )
{
while ( who istouching( self ) )
{
time++;
if ( time >= 6 )
{
if ( isDefined( self.point ) )
{
if ( !positionwouldtelefrag( self.point.origin ) )
{
who setorigin( self.point.origin );
who playlocalsound( level.zmb_laugh_alias );
who playrumbleonentity( "damage_light" );
earthquake( 0,5, 0,5, who.origin, 100 );
who thread ejected_overrun( self );
}
}
}
wait 1;
}
time = 0;
}
wait 0,1;
}
}
ejected_overrun( trig )
{
if ( !isDefined( trig.ejected ) )
{
trig.ejected = 1;
}
else
{
trig.ejected++;
if ( trig.ejected >= 3 )
{
primaries = self getweaponslistprimaries();
_a169 = primaries;
_k169 = getFirstArrayKey( _a169 );
while ( isDefined( _k169 ) )
{
weapon = _a169[ _k169 ];
self takeweapon( weapon );
_k169 = getNextArrayKey( _a169, _k169 );
}
lethal = self get_player_lethal_grenade();
if ( isDefined( lethal ) && lethal != "" )
{
self takeweapon( lethal );
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( lethal );
}
tactical = self get_player_tactical_grenade();
if ( isDefined( tactical ) && tactical != "" )
{
self takeweapon( tactical );
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( tactical );
}
mine = self get_player_placeable_mine();
if ( isDefined( mine ) )
{
self takeweapon( mine );
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( mine );
}
melee_weapon = self get_player_melee_weapon();
if ( isDefined( melee_weapon ) )
{
self takeweapon( melee_weapon );
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( melee_weapon );
}
self giveweapon( "knife_zm" );
self.current_melee_weapon = "knife_zm";
self give_start_weapon( 1 );
self.currentweapon = "m1911_zm";
}
}
}
change_bad_spawner()
{
flag_wait( "always_on" );
spawner_array = getstructarray( "zone_blue_level4a_spawners", "targetname" );
_a214 = spawner_array;
_k214 = getFirstArrayKey( _a214 );
while ( isDefined( _k214 ) )
{
struct = _a214[ _k214 ];
if ( isDefined( struct.origin ) && struct.origin == ( 2154, 748,5, 1312 ) )
{
struct.script_noteworthy = "riser_location";
return;
}
_k214 = getNextArrayKey( _a214, _k214 );
}
}

View File

@ -0,0 +1,114 @@
#include maps/mp/_utility;
#using_animtree( "fxanim_props" );
main()
{
precache_createfx_fx();
precache_scripted_fx();
precache_fxanim_props();
maps/mp/createfx/zm_highrise_fx::main();
}
precache_scripted_fx()
{
level._effect[ "switch_sparks" ] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" );
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[ "lght_marker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" );
level._effect[ "pandora_box_inverted" ] = loadfx( "maps/zombie/fx_zmb_highrise_marker" );
level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" );
level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" );
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[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" );
level._effect[ "elevator_tell" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_tell" );
level._effect[ "elevator_sparks" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_sparks" );
level._effect[ "elevator_impact" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_impact" );
level._effect[ "elevator_glint" ] = loadfx( "maps/zombie_highrise/fx_highrise_key_glint" );
level._effect[ "elevator_light" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_light" );
level._effect[ "perk_elevator_idle" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_slow" );
level._effect[ "perk_elevator_departing" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_fast" );
level._effect[ "perk_elevator_indicator_up" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_up" );
level._effect[ "perk_elevator_indicator_down" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_down" );
level._effect[ "sidequest_dragon_spark_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_max" );
level._effect[ "sidequest_dragon_fireball_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_max" );
level._effect[ "sidequest_dragon_spark_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_ric" );
level._effect[ "sidequest_dragon_fireball_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_ric" );
level._effect[ "sidequest_flash" ] = loadfx( "maps/zombie_highrise/fx_highrise_sq_flash" );
level._effect[ "sidequest_tower_bolts" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_tower_bolts" );
}
precache_createfx_fx()
{
level._effect[ "fx_highrise_cloud_lg_single" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_single" );
level._effect[ "fx_highrise_cloud_lg_flat" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_flat" );
level._effect[ "fx_highrise_cloud_lg_left" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_left" );
level._effect[ "fx_highrise_cloud_lg_right" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_right" );
level._effect[ "fx_highrise_cloud_sm_bottom" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_bottom" );
level._effect[ "fx_highrise_cloud_sm_right" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_right" );
level._effect[ "fx_highrise_cloud_bend_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_sm" );
level._effect[ "fx_highrise_cloud_bend_01" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_01" );
level._effect[ "fx_highrise_meteor_lg_bottom" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_bottom" );
level._effect[ "fx_highrise_meteor_lg_top" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top" );
level._effect[ "fx_highrise_meteor_lg_top2" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top2" );
level._effect[ "fx_highrise_meteor_sm_top" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_top" );
level._effect[ "fx_highrise_meteor_sm_horizon" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_horizon" );
level._effect[ "fx_lf_zmb_highrise_sun" ] = loadfx( "lens_flares/fx_lf_zmb_highrise_sun" );
level._effect[ "fx_zmb_flies" ] = loadfx( "maps/zombie/fx_zmb_flies" );
level._effect[ "fx_zmb_tranzit_fire_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" );
level._effect[ "fx_highrise_ash_rising_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_ash_rising_md" );
level._effect[ "fx_highrise_bld_crumble_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_bld_crumble_runner" );
level._effect[ "fx_highrise_ceiling_dust_md_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_md_runner" );
level._effect[ "fx_highrise_ceiling_dust_sm_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_sm_runner" );
level._effect[ "fx_highrise_ceiling_dust_edge_100" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_edge_100" );
level._effect[ "fx_highrise_edge_crumble_ext" ] = loadfx( "maps/zombie_highrise/fx_highrise_edge_crumble_ext" );
level._effect[ "fx_highrise_point_crumble_ext" ] = loadfx( "maps/zombie_highrise/fx_highrise_point_crumble_ext" );
level._effect[ "fx_highrise_wire_spark" ] = loadfx( "maps/zombie_highrise/fx_highrise_wire_spark" );
level._effect[ "fx_highrise_water_drip_fast" ] = loadfx( "maps/zombie_highrise/fx_highrise_water_drip_fast" );
level._effect[ "fx_highrise_haze_int_med" ] = loadfx( "maps/zombie_highrise/fx_highrise_haze_int_med" );
level._effect[ "fx_highrise_fire_distant" ] = loadfx( "maps/zombie_highrise/fx_highrise_fire_distant" );
level._effect[ "fx_highrise_smk_plume_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_sm" );
level._effect[ "fx_highrise_smk_plume_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_md" );
level._effect[ "fx_highrise_smk_plume_xlg" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_xlg" );
level._effect[ "fx_highrise_moon" ] = loadfx( "maps/zombie_highrise/fx_highrise_moon" );
level._effect[ "fx_highrise_god_ray_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_sm" );
level._effect[ "fx_highrise_god_ray_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_md" );
level._effect[ "fx_highrise_god_ray_cool_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_sm" );
level._effect[ "fx_highrise_god_ray_cool_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_md" );
level._effect[ "fx_highrise_light_bulb" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_bulb" );
level._effect[ "fx_highrise_light_build_lamp" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_build_lamp" );
level._effect[ "fx_highrise_light_fluorescent" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent" );
level._effect[ "fx_highrise_light_fluorescent_wall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wall" );
level._effect[ "fx_highrise_light_fluorescent_wal2" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wal2" );
level._effect[ "fx_highrise_light_recessed" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed" );
level._effect[ "fx_highrise_light_recessed_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_md" );
level._effect[ "fx_highrise_light_recessed_tall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tall" );
level._effect[ "fx_highrise_light_recessed_tiny" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tiny" );
level._effect[ "fx_highrise_light_mall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_mall" );
level._effect[ "fx_highrise_light_lantern_red" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_red" );
level._effect[ "fx_highrise_light_lantern_yel" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_yel" );
level._effect[ "fx_highrise_light_sconce_glow" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_glow" );
level._effect[ "fx_highrise_light_sconce_beam" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_beam" );
level._effect[ "fx_highrise_dragon_breath_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_max" );
level._effect[ "fx_highrise_dragon_tower_absorb_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_max" );
level._effect[ "fx_highrise_dragon_tower_glow_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_max" );
level._effect[ "fx_highrise_sidequest_complete" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete" );
level._effect[ "fx_highrise_dragon_breath_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_ric" );
level._effect[ "fx_highrise_dragon_tower_absorb_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_ric" );
level._effect[ "fx_highrise_dragon_tower_glow_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_ric" );
level._effect[ "fx_highrise_sidequest_complete_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete_ric" );
}
precache_fxanim_props()
{
level.scr_anim[ "fxanim_props" ][ "wirespark_med_lrg" ] = %fxanim_gp_wirespark_med_lrg_anim;
level.scr_anim[ "fxanim_props" ][ "wirespark_long_lrg" ] = %fxanim_gp_wirespark_long_lrg_anim;
level.scr_anim[ "fxanim_props" ][ "roaches" ] = %fxanim_gp_roaches_anim;
level.scr_anim[ "fxanim_props" ][ "dragon_a" ] = %fxanim_zom_highrise_dragon_a_anim;
level.scr_anim[ "fxanim_props" ][ "dragon_b" ] = %fxanim_zom_highrise_dragon_b_anim;
level.scr_anim[ "fxanim_props" ][ "dragon" ] = %fxanim_zom_highrise_dragon_idle_anim;
level.scr_anim[ "fxanim_props" ][ "rock_slide" ] = %fxanim_zom_highrise_rock_slide_anim;
}

View File

@ -0,0 +1,13 @@
#include maps/mp/zm_highrise_classic;
#include maps/mp/zm_highrise;
#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()
{
add_map_gamemode( "zclassic", ::maps/mp/zm_highrise::zclassic_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "rooftop", ::maps/mp/zm_highrise_classic::precache, ::maps/mp/zm_highrise_classic::main );
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,247 @@
#include maps/mp/zm_highrise_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
init()
{
flag_init( "sq_atd_elevator0" );
flag_init( "sq_atd_elevator1" );
flag_init( "sq_atd_elevator2" );
flag_init( "sq_atd_elevator3" );
flag_init( "sq_atd_elevator_activated" );
flag_init( "sq_atd_drg_puzzle_1st_error" );
flag_init( "sq_atd_drg_puzzle_complete" );
declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 );
sq_atd_dragon_icon_setup();
}
init_stage()
{
level._cur_stage_name = "atd";
clientnotify( "atd" );
}
stage_logic()
{
/#
iprintlnbold( "ATD Started" );
#/
sq_atd_elevators();
sq_atd_drg_puzzle();
stage_completed( "sq", level._cur_stage_name );
}
exit_stage_1( success )
{
}
sq_atd_dragon_icon_setup()
{
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
_a51 = a_dragon_icons;
_k51 = getFirstArrayKey( _a51 );
while ( isDefined( _k51 ) )
{
m_icon = _a51[ _k51 ];
m_icon notsolid();
m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" );
m_icon.origin = m_icon.m_elevator.origin + vectorScale( ( 0, 0, 1 ), 134 );
m_icon.angles = m_icon.m_elevator.angles;
m_icon linkto( m_icon.m_elevator );
m_icon.m_lit_icon = getent( m_icon.script_noteworthy + "_elevator_lit", "script_noteworthy" );
if ( isDefined( m_icon.m_lit_icon ) )
{
m_icon.m_lit_icon notsolid();
m_icon.m_lit_icon.origin = m_icon.origin - vectorScale( ( 0, 0, 1 ), 2 );
m_icon.m_lit_icon.angles = m_icon.angles;
m_icon.m_lit_icon linkto( m_icon.m_elevator );
}
_k51 = getNextArrayKey( _a51, _k51 );
}
a_atd2_icons = getentarray( "atd2_marker_unlit", "script_noteworthy" );
a_atd2_lit_icons = getentarray( "atd2_marker_lit", "targetname" );
i = 0;
while ( i < a_atd2_icons.size )
{
a_atd2_lit_icons[ i ].origin = a_atd2_icons[ i ].origin - vectorScale( ( 0, 0, 1 ), 5 );
a_atd2_lit_icons[ i ].angles = a_atd2_icons[ i ].angles;
a_atd2_icons[ i ].lit_icon = a_atd2_lit_icons[ i ];
i++;
}
}
sq_atd_elevators()
{
a_elevators = array( "elevator_bldg1b_trigger", "elevator_bldg1d_trigger", "elevator_bldg3b_trigger", "elevator_bldg3c_trigger" );
a_elevator_flags = array( "sq_atd_elevator0", "sq_atd_elevator1", "sq_atd_elevator2", "sq_atd_elevator3" );
i = 0;
while ( i < a_elevators.size )
{
trig_elevator = getent( a_elevators[ i ], "targetname" );
trig_elevator thread sq_atd_watch_elevator( a_elevator_flags[ i ] );
i++;
}
while ( flag( "sq_atd_elevator0" ) && flag( "sq_atd_elevator1" ) || !flag( "sq_atd_elevator2" ) && !flag( "sq_atd_elevator3" ) )
{
flag_wait_any_array( a_elevator_flags );
wait 0,5;
}
/#
iprintlnbold( "Standing on Elevators Complete" );
#/
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
_a105 = a_dragon_icons;
_k105 = getFirstArrayKey( _a105 );
while ( isDefined( _k105 ) )
{
m_icon = _a105[ _k105 ];
v_off_pos = m_icon.m_lit_icon.origin;
m_icon.m_lit_icon unlink();
m_icon unlink();
m_icon.m_lit_icon.origin = m_icon.origin;
m_icon.origin = v_off_pos;
m_icon.m_lit_icon linkto( m_icon.m_elevator );
m_icon linkto( m_icon.m_elevator );
m_icon playsound( "zmb_sq_symbol_light" );
_k105 = getNextArrayKey( _a105, _k105 );
}
flag_set( "sq_atd_elevator_activated" );
vo_richtofen_atd_elevators();
level thread vo_maxis_atd_elevators();
}
sq_atd_watch_elevator( str_flag )
{
level endon( "sq_atd_elevator_activated" );
while ( 1 )
{
self waittill( "trigger", e_who );
while ( !isplayer( e_who ) )
{
wait 0,05;
}
flag_set( str_flag );
while ( isalive( e_who ) && e_who istouching( self ) )
{
wait 0,05;
}
flag_clear( str_flag );
}
}
sq_atd_drg_puzzle()
{
level.sq_atd_cur_drg = 0;
a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" );
a_puzzle_trigs = array_randomize( a_puzzle_trigs );
i = 0;
while ( i < a_puzzle_trigs.size )
{
a_puzzle_trigs[ i ] thread drg_puzzle_trig_think( i );
i++;
}
while ( level.sq_atd_cur_drg < 4 )
{
wait 1;
}
flag_set( "sq_atd_drg_puzzle_complete" );
level thread vo_maxis_atd_order_complete();
/#
iprintlnbold( "Dragon Puzzle COMPLETE" );
#/
}
drg_puzzle_trig_think( n_order_id )
{
self.drg_active = 0;
m_unlit = getent( self.target, "targetname" );
m_lit = m_unlit.lit_icon;
v_top = m_unlit.origin;
v_hidden = m_lit.origin;
while ( !flag( "sq_atd_drg_puzzle_complete" ) )
{
while ( self.drg_active )
{
level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" );
while ( flag( "sq_atd_drg_puzzle_complete" ) )
{
continue;
}
}
self waittill( "trigger", e_who );
if ( level.sq_atd_cur_drg == n_order_id )
{
m_lit.origin = v_top;
m_unlit.origin = v_hidden;
m_lit playsound( "zmb_sq_symbol_light" );
self.drg_active = 1;
level thread vo_richtofen_atd_order( level.sq_atd_cur_drg );
level.sq_atd_cur_drg++;
/#
iprintlnbold( "Dragon " + n_order_id + " Correct" );
#/
self thread drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden );
}
else
{
if ( !flag( "sq_atd_drg_puzzle_1st_error" ) )
{
level thread vo_maxis_atd_order_error();
}
level.sq_atd_cur_drg = 0;
level notify( "drg_puzzle_reset" );
/#
iprintlnbold( "INCORRECT DRAGON" );
#/
wait 0,5;
}
while ( e_who istouching( self ) )
{
wait 0,5;
}
}
}
drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden )
{
level endon( "sq_atd_drg_puzzle_complete" );
level waittill( "drg_puzzle_reset" );
m_unlit.origin = v_top;
m_lit.origin = v_hidden;
m_unlit playsound( "zmb_sq_symbol_fade" );
self.drg_active = 0;
}
vo_richtofen_atd_elevators()
{
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_activ_dragons_0" );
}
vo_maxis_atd_elevators()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_activ_dragons_0" );
}
vo_richtofen_atd_order( n_which )
{
str_vox = "vox_zmba_sidequest_sec_symbols_" + n_which;
maps/mp/zm_highrise_sq::richtofensay( str_vox );
}
vo_richtofen_atd_order_error()
{
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_5" );
}
vo_maxis_atd_order_error()
{
flag_set( "sq_atd_drg_puzzle_1st_error" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_0" );
}
vo_maxis_atd_order_complete()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_1" );
}

View File

@ -0,0 +1,570 @@
#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zm_highrise_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
#using_animtree( "fxanim_props" );
init_1()
{
flag_init( "pts_1_springpads_placed" );
declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
}
init_2()
{
flag_init( "pts_2_springpads_placed" );
flag_init( "pts_2_generator_1_started" );
flag_init( "pts_2_generator_2_started" );
declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
}
init_stage_1()
{
clientnotify( "pts_1" );
level.n_launched_zombies = 0;
wait 15;
level thread richtofen_pts_instructions();
level thread richtofen_pts_placed();
}
init_stage_2()
{
clientnotify( "pts_2" );
level.sq_ball_putdown_trigs = [];
level thread maxis_pts_instructions();
level thread maxis_pts_placed();
}
stage_logic_1()
{
/#
iprintlnbold( "PTS1 Started" );
#/
watch_player_springpads( 0 );
wait_for_all_springpads_placed( "pts_ghoul", "pts_1_springpads_placed" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 1 );
wait_for_zombies_launched();
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
stage_completed( "sq_1", "pts_1" );
}
wait_for_zombies_launched()
{
level thread richtofen_zombies_launched();
t_tower = getent( "pts_tower_trig", "targetname" );
s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" );
while ( level.n_launched_zombies < 16 )
{
wait 0,5;
}
}
watch_zombie_flings()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "equip_springpad_zm_taken" );
self endon( "equip_springpad_zm_pickup" );
while ( level.n_launched_zombies < 16 )
{
self waittill( "fling" );
level.n_launched_zombies++;
if ( level.n_launched_zombies != 1 || level.n_launched_zombies == 5 && level.n_launched_zombies == 10 )
{
level notify( "pts1_say_next_line" );
}
wait 0,1;
}
}
stage_logic_2()
{
/#
iprintlnbold( "PTS2 Started" );
#/
watch_player_springpads( 1 );
level thread wait_for_balls_launched();
flag_wait( "pts_2_generator_1_started" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
flag_wait( "pts_2_generator_2_started" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
level thread maxis_balls_placed();
stage_completed( "sq_2", "pts_2" );
}
wait_for_balls_launched()
{
level.current_generator = 1;
a_lion_spots = getstructarray( "pts_lion", "targetname" );
_a138 = a_lion_spots;
_k138 = getFirstArrayKey( _a138 );
while ( isDefined( _k138 ) )
{
s_lion_spot = _a138[ _k138 ];
s_lion_spot.a_place_ball_trigs = [];
s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" );
_k138 = getNextArrayKey( _a138, _k138 );
}
a_players = getplayers();
_a145 = a_players;
_k145 = getFirstArrayKey( _a145 );
while ( isDefined( _k145 ) )
{
player = _a145[ _k145 ];
player.a_place_ball_trigs = [];
if ( isDefined( player.zm_sq_has_ball ) )
{
player thread player_has_ball();
}
_k145 = getNextArrayKey( _a145, _k145 );
}
while ( 1 )
{
level waittill( "zm_ball_picked_up", player );
player thread player_has_ball();
}
}
player_has_ball()
{
self thread player_set_down_ball_watcher();
}
player_set_down_ball_watcher()
{
self waittill_either( "zm_sq_ball_putdown", "zm_sq_ball_used" );
pts_putdown_trigs_remove_for_player( self );
}
sq_pts_create_use_trigger( v_origin, radius, height, str_hint_string )
{
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
t_pickup setcursorhint( "HINT_NOICON" );
t_pickup sethintstring( str_hint_string );
t_pickup.targetname = "ball_place_trig";
t_pickup triggerignoreteam();
t_pickup usetriggerrequirelookat();
return t_pickup;
}
place_ball_think( t_place_ball, s_lion_spot )
{
t_place_ball endon( "delete" );
t_place_ball waittill( "trigger" );
pts_putdown_trigs_remove_for_spot( s_lion_spot );
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
self.zm_sq_has_ball = undefined;
s_lion_spot.which_ball = self.which_ball;
self notify( "zm_sq_ball_used" );
s_lion_spot.zm_pts_animating = 1;
s_lion_spot.springpad_buddy.zm_pts_animating = 1;
flag_set( "pts_2_generator_" + level.current_generator + "_started" );
s_lion_spot.which_generator = level.current_generator;
level.current_generator++;
/#
iprintlnbold( "Ball Animating" );
#/
s_lion_spot.springpad thread pts_springpad_fling( s_lion_spot.script_noteworthy, s_lion_spot.springpad_buddy.springpad );
self.t_putdown_ball delete();
}
delete_all_springpads()
{
}
exit_stage_1( success )
{
}
exit_stage_2( success )
{
}
watch_player_springpads( is_generator )
{
level thread springpad_count_watcher( is_generator );
a_players = get_players();
_a240 = a_players;
_k240 = getFirstArrayKey( _a240 );
while ( isDefined( _k240 ) )
{
player = _a240[ _k240 ];
player thread pts_watch_springpad_use( is_generator );
_k240 = getNextArrayKey( _a240, _k240 );
}
}
pts_watch_springpad_use( is_generator )
{
self endon( "death" );
self endon( "disconnect" );
while ( !flag( "sq_branch_complete" ) )
{
self waittill( "equipment_placed", weapon, weapname );
if ( weapname == level.springpad_name )
{
self is_springpad_in_place( weapon, is_generator );
}
}
}
springpad_count_watcher( is_generator )
{
level endon( "sq_pts_springad_count4" );
str_which_spots = "pts_ghoul";
if ( is_generator )
{
str_which_spots = "pts_lion";
}
a_spots = getstructarray( str_which_spots, "targetname" );
while ( 1 )
{
level waittill( "sq_pts_springpad_in_place" );
n_count = 0;
_a279 = a_spots;
_k279 = getFirstArrayKey( _a279 );
while ( isDefined( _k279 ) )
{
s_spot = _a279[ _k279 ];
if ( isDefined( s_spot.springpad ) )
{
n_count++;
}
_k279 = getNextArrayKey( _a279, _k279 );
}
level notify( "sq_pts_springad_count" + n_count );
}
}
is_springpad_in_place( m_springpad, is_generator )
{
a_lion_spots = getstructarray( "pts_lion", "targetname" );
a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" );
a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 );
_a298 = a_spots;
_k298 = getFirstArrayKey( _a298 );
while ( isDefined( _k298 ) )
{
s_spot = _a298[ _k298 ];
n_dist = distance2dsquared( m_springpad.origin, s_spot.origin );
if ( n_dist < 1024 )
{
v_spot_forward = vectornormalize( anglesToForward( s_spot.angles ) );
v_pad_forward = vectornormalize( anglesToForward( m_springpad.angles ) );
n_dot = vectordot( v_spot_forward, v_pad_forward );
/#
iprintlnbold( "Trample Steam OFF: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
#/
if ( n_dot > 0,98 )
{
/#
iprintlnbold( "Trample Steam IN PLACE: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
#/
level notify( "sq_pts_springpad_in_place" );
s_spot.springpad = m_springpad;
self thread pts_springpad_removed_watcher( m_springpad, s_spot );
if ( is_generator )
{
wait 0,1;
level thread pts_should_springpad_create_trigs( s_spot );
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
}
else
{
m_springpad.fling_scaler = 2;
m_springpad thread watch_zombie_flings();
}
if ( isDefined( s_spot.script_float ) )
{
s_target = getstruct( "sq_zombie_launch_target", "targetname" );
v_override_dir = vectornormalize( s_target.origin - m_springpad.origin );
v_override_dir = vectorScale( v_override_dir, 1024 );
m_springpad.direction_vec_override = v_override_dir;
m_springpad.fling_scaler = s_spot.script_float;
}
return;
}
}
else
{
_k298 = getNextArrayKey( _a298, _k298 );
}
}
}
pts_springpad_fling( str_spot_name, m_buddy_springpad )
{
str_anim1 = undefined;
n_anim_length1 = undefined;
str_anim2 = undefined;
n_anim_length2 = undefined;
switch( str_spot_name )
{
case "lion_pair_1":
str_anim1 = "dc";
str_anim2 = "cd";
break;
case "lion_pair_2":
str_anim1 = "ab";
str_anim2 = "ba";
break;
case "lion_pair_3":
str_anim1 = "cd";
str_anim2 = "dc";
break;
case "lion_pair_4":
str_anim1 = "ba";
str_anim2 = "ab";
break;
}
m_anim = spawn( "script_model", ( 2090, 675, 3542 ) );
m_anim.angles = ( 0, 0, 0 );
m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" );
m_anim useanimtree( -1 );
m_anim.targetname = "trample_gen_" + str_spot_name;
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 );
}
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 )
{
m_anim endon( "delete" );
self endon( "delete" );
m_buddy_springpad endon( "delete" );
n_anim_length1 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] );
n_anim_length2 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] );
while ( isDefined( m_anim ) )
{
self notify( "fling" );
if ( isDefined( m_anim ) )
{
m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] );
}
wait n_anim_length1;
m_buddy_springpad notify( "fling" );
if ( isDefined( m_anim ) )
{
m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] );
}
wait n_anim_length2;
}
}
pts_springpad_removed_watcher( m_springpad, s_spot )
{
self pts_springpad_waittill_removed( m_springpad );
s_spot.springpad = undefined;
}
pts_springpad_waittill_removed( m_springpad )
{
m_springpad endon( "delete" );
m_springpad endon( "death" );
self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
}
wait_for_all_springpads_placed( str_type, str_flag )
{
a_spots = getstructarray( str_type, "targetname" );
while ( !flag( str_flag ) )
{
is_clear = 0;
_a442 = a_spots;
_k442 = getFirstArrayKey( _a442 );
while ( isDefined( _k442 ) )
{
s_spot = _a442[ _k442 ];
if ( !isDefined( s_spot.springpad ) )
{
is_clear = 1;
}
_k442 = getNextArrayKey( _a442, _k442 );
}
if ( !is_clear )
{
flag_set( str_flag );
}
wait 1;
}
}
pts_should_player_create_trigs( player )
{
a_lion_spots = getstructarray( "pts_lion", "targetname" );
_a467 = a_lion_spots;
_k467 = getFirstArrayKey( _a467 );
while ( isDefined( _k467 ) )
{
s_lion_spot = _a467[ _k467 ];
if ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) )
{
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
}
_k467 = getNextArrayKey( _a467, _k467 );
}
}
pts_should_springpad_create_trigs( s_lion_spot )
{
while ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) )
{
a_players = getplayers();
_a481 = a_players;
_k481 = getFirstArrayKey( _a481 );
while ( isDefined( _k481 ) )
{
player = _a481[ _k481 ];
if ( isDefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball )
{
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
pts_putdown_trigs_create_for_spot( s_lion_spot.springpad_buddy, player );
}
_k481 = getNextArrayKey( _a481, _k481 );
}
}
}
pts_putdown_trigs_create_for_spot( s_lion_spot, player )
{
if ( isDefined( s_lion_spot.which_ball ) || isDefined( s_lion_spot.springpad_buddy ) && isDefined( s_lion_spot.springpad_buddy.which_ball ) )
{
return;
}
t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
player clientclaimtrigger( t_place_ball );
t_place_ball.owner = player;
player thread place_ball_think( t_place_ball, s_lion_spot );
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
{
s_lion_spot.pts_putdown_trigs = [];
}
s_lion_spot.pts_putdown_trigs[ player.characterindex ] = t_place_ball;
level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot );
}
pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot )
{
player pts_springpad_waittill_removed( s_lion_spot.springpad );
pts_putdown_trigs_remove_for_spot( s_lion_spot );
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
level thread pts_reset_ball( s_lion_spot );
}
pts_reset_ball( s_lion_spot )
{
if ( isDefined( s_lion_spot.which_ball ) )
{
s_lion_spot.sq_pickup_reset = 1;
s_lion_spot.which_ball notify( "sq_pickup_reset" );
m_ball_anim = getent( "trample_gen_" + s_lion_spot.script_noteworthy, "targetname" );
playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
flag_clear( "pts_2_generator_" + s_lion_spot.which_generator + "_started" );
level.current_generator--;
s_lion_spot.which_ball = undefined;
m_ball_anim delete();
}
else
{
if ( isDefined( s_lion_spot.springpad_buddy.which_ball ) )
{
s_lion_spot.springpad_buddy.sq_pickup_reset = 1;
s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" );
m_ball_anim = getent( "trample_gen_" + s_lion_spot.springpad_buddy.script_noteworthy, "targetname" );
playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" );
level.current_generator--;
s_lion_spot.springpad_buddy.which_ball = undefined;
m_ball_anim delete();
}
}
}
pts_putdown_trigs_remove_for_player( player )
{
a_lion_spots = getstructarray( "pts_lion", "targetname" );
_a554 = a_lion_spots;
_k554 = getFirstArrayKey( _a554 );
while ( isDefined( _k554 ) )
{
s_lion_spot = _a554[ _k554 ];
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
{
}
else if ( isDefined( s_lion_spot.pts_putdown_trigs[ player.characterindex ] ) )
{
s_lion_spot.pts_putdown_trigs[ player.characterindex ] delete();
arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 );
}
_k554 = getNextArrayKey( _a554, _k554 );
}
}
pts_putdown_trigs_remove_for_spot( s_lion_spot )
{
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
{
return;
}
_a575 = s_lion_spot.pts_putdown_trigs;
_k575 = getFirstArrayKey( _a575 );
while ( isDefined( _k575 ) )
{
t_putdown = _a575[ _k575 ];
t_putdown delete();
_k575 = getNextArrayKey( _a575, _k575 );
}
s_lion_spot.pts_putdown_trigs = [];
}
richtofen_pts_instructions()
{
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_0" );
}
richtofen_pts_placed()
{
level waittill( "sq_pts_springad_count1" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_1" );
level waittill( "sq_pts_springad_count2" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" );
level waittill( "sq_pts_springad_count3" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_3" );
level waittill( "sq_pts_springad_count4" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_4" );
}
richtofen_zombies_launched()
{
level waittill( "pts1_say_next_line" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" );
wait 1;
level waittill( "pts1_say_next_line" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_1" );
wait 1;
level waittill( "pts1_say_next_line" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_2" );
}
maxis_pts_instructions()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_0" );
}
maxis_pts_placed()
{
level waittill( "sq_pts_springad_count1" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_1" );
level waittill( "sq_pts_springad_count2" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" );
level waittill( "sq_pts_springad_count4" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_3" );
}
maxis_balls_placed()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_4" );
}

View File

@ -0,0 +1,199 @@
#include maps/mp/zm_highrise_sq_pts;
#include maps/mp/zm_highrise_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
init()
{
flag_init( "sq_slb_first_ball_sniped" );
flag_init( "sq_slb_richtofen_spoke" );
declare_sidequest_stage( "sq", "slb", ::init_stage, ::stage_logic, ::exit_stage_1 );
}
init_stage()
{
level._cur_stage_name = "slb";
clientnotify( "slb" );
level thread vo_maxis_slb_hint();
}
stage_logic()
{
/#
iprintlnbold( "SLB Started" );
#/
snipe_balls_wait();
stage_completed( "sq", level._cur_stage_name );
}
exit_stage_1( success )
{
}
snipe_balls_wait()
{
a_balls = getentarray( "sq_dragon_lion_ball", "targetname" );
array_thread( a_balls, ::snipe_balls_watch_ball );
is_complete = 0;
while ( !is_complete )
{
level waittill( "zm_ball_shot" );
wait 1;
is_complete = 1;
_a50 = a_balls;
_k50 = getFirstArrayKey( _a50 );
while ( isDefined( _k50 ) )
{
m_ball = _a50[ _k50 ];
if ( isDefined( m_ball ) )
{
is_complete = 0;
}
_k50 = getNextArrayKey( _a50, _k50 );
}
}
/#
iprintlnbold( "All Balls Shot" );
#/
}
snipe_balls_watch_ball()
{
self endon( "delete" );
a_snipers = array( "dsr50_zm", "dsr50_upgraded_zm+vzoom", "barretm82_zm", "barretm82_upgraded_zm+vzoom", "svu_zm", "svu_upgraded_zm+vzoom" );
self setcandamage( 1 );
while ( 1 )
{
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
if ( maps/mp/zm_highrise_sq::sq_is_weapon_sniper( weaponname ) )
{
level notify( "zm_ball_shot" );
playsoundatposition( "zmb_sq_ball_ding", self.origin );
playfx( level._effect[ "sidequest_flash" ], self.origin );
str_noteworthy = self.script_noteworthy;
self delete();
wait 0,5;
clientnotify( str_noteworthy );
m_ball = getent( "sq_sliquify_r", "script_noteworthy" );
if ( str_noteworthy == "m_drg_tail" )
{
m_ball = getent( "sq_sliquify_m", "script_noteworthy" );
}
playfx( level._effect[ "sidequest_flash" ], m_ball.origin );
m_ball show();
m_ball thread lion_ball_enable_pickup();
if ( !flag( "sq_slb_first_ball_sniped" ) )
{
flag_set( "sq_slb_first_ball_sniped" );
level thread vo_atd_ball1_sniped();
break;
}
else
{
level thread vo_maxis_atd_ball2_sniped();
}
}
}
}
lion_ball_enable_pickup()
{
self endon( "sq_sliquified" );
while ( 1 )
{
self.can_pickup = 1;
self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" );
while ( self.can_pickup )
{
self.t_pickup waittill( "trigger", player );
if ( !isDefined( player.zm_sq_has_ball ) )
{
player.zm_sq_has_ball = 1;
player.which_ball = self;
self.can_pickup = 0;
self.player = player;
flag_set( "sq_ball_picked_up" );
level thread maps/mp/zm_highrise_sq_pts::pts_should_player_create_trigs( player );
level notify( "zm_ball_picked_up" );
}
}
self.t_pickup delete();
self hide();
self setcandamage( 0 );
wait 1;
self.t_putdown = sq_slb_create_use_trigger( self.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
self.player clientclaimtrigger( self.t_putdown );
self.player.t_putdown_ball = self.t_putdown;
self ball_pickup_waittill_change();
play_spark = 0;
if ( !isDefined( self.t_putdown ) )
{
self waittill( "sq_pickup_reset" );
play_spark = 1;
}
else
{
self.t_putdown delete();
}
self.player notify( "zm_sq_ball_putdown" );
if ( play_spark )
{
self.sq_pickup_reset = undefined;
playfx( level._effect[ "sidequest_flash" ], self.origin );
}
self show();
self setcandamage( 1 );
self.player.zm_sq_has_ball = undefined;
self.player = undefined;
wait 1;
}
}
ball_pickup_waittill_change()
{
self endon( "sq_pickup_reset" );
self.t_putdown waittill_any_return( "trigger", "delete", "reset" );
}
sq_slb_create_use_trigger( v_origin, radius, height, str_hint_string )
{
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
t_pickup setcursorhint( "HINT_NOICON" );
t_pickup sethintstring( str_hint_string );
t_pickup.targetname = "ball_pickup_trig";
t_pickup triggerignoreteam();
t_pickup usetriggerrequirelookat();
return t_pickup;
}
vo_richtofen_atd_ball_sniped()
{
if ( !flag( "sq_slb_richtofen_spoke" ) )
{
flag_set( "sq_slb_richtofen_spoke" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_4" );
}
}
vo_maxis_slb_hint()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_0" );
}
vo_maxis_atd_ball1_sniped()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_1" );
}
vo_maxis_atd_ball2_sniped()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_2" );
}
vo_atd_ball1_sniped()
{
vo_richtofen_atd_ball_sniped();
level thread vo_maxis_atd_ball1_sniped();
}

View File

@ -0,0 +1,328 @@
#include maps/mp/zm_highrise_sq;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
init_1()
{
flag_init( "ssp1_ball0_complete" );
flag_init( "ssp1_ball1_complete" );
flag_init( "ssp1_complete" );
declare_sidequest_stage( "sq_1", "ssp_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
}
init_2()
{
flag_init( "ssp2_maxis_keep_going_said" );
flag_init( "ssp2_maxis_reincarnate_said" );
flag_init( "ssp2_corpses_in_place" );
flag_init( "ssp2_resurrection_done" );
flag_init( "ssp2_statue_complete" );
maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::ssp_2_zombie_death_check );
declare_sidequest_stage( "sq_2", "ssp_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
}
init_stage_1()
{
clientnotify( "ssp_1" );
level thread vo_richtofen_instructions();
}
init_stage_2()
{
clientnotify( "ssp_2" );
level thread vo_maxis_start_ssp();
}
stage_logic_1()
{
/#
iprintlnbold( "SSP1 Started" );
#/
ssp1_sliquify_balls();
stage_completed( "sq_1", "ssp_1" );
}
ssp1_sliquify_balls()
{
a_balls = getentarray( "sq_sliquify_ball", "targetname" );
level thread vo_sliquify_fail_watch();
level thread ssp1_advance_dragon();
level thread vo_richtofen_sliquify_confirm();
level thread vo_maxis_sliquify_fail();
i = 0;
while ( i < a_balls.size )
{
a_balls[ i ] thread ssp1_watch_ball( "ssp1_ball" + i + "_complete" );
i++;
}
while ( !flag( "ssp1_ball0_complete" ) || !flag( "ssp1_ball1_complete" ) )
{
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
wait 0,5;
}
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
}
ssp1_watch_ball( str_complete_flag )
{
self watch_model_sliquification( 20, str_complete_flag );
self thread ssp1_rotate_ball();
self playloopsound( "zmb_sq_ball_rotate_loop", 0,25 );
}
ssp1_rotate_ball()
{
while ( isDefined( self ) )
{
self rotateyaw( 360, 1 );
wait 0,9;
}
}
ssp1_advance_dragon()
{
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
}
stage_logic_2()
{
/#
iprintlnbold( "SSP2 Started" );
#/
level thread ssp2_advance_dragon();
corpse_room_watcher();
stage_completed( "sq_2", "ssp_2" );
}
corpse_room_watcher()
{
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
n_count = 0;
while ( !flag( "ssp2_resurrection_done" ) )
{
level waittill( "ssp2_corpse_made", is_in_room );
if ( is_in_room )
{
n_count++;
}
else
{
n_count = 0;
}
if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) )
{
flag_set( "ssp2_maxis_keep_going_said" );
level thread maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" );
continue;
}
else
{
if ( n_count >= 15 )
{
/#
iprintlnbold( "Corpse Count Reached" );
#/
level thread vo_maxis_ssp_reincarnate();
flag_set( "ssp2_corpses_in_place" );
corpse_room_revive_watcher();
level notify( "end_revive_watcher" );
}
}
}
}
ssp_2_zombie_death_check()
{
self waittill( "death" );
if ( !isDefined( self ) )
{
return;
}
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
if ( self istouching( t_corpse_room ) )
{
level notify( "ssp2_corpse_made" );
}
else
{
level notify( "ssp2_corpse_made" );
}
}
corpse_room_cleanup_watcher()
{
level endon( "ssp2_resurrection_done" );
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
while ( 1 )
{
wait 1;
a_corpses = getcorpsearray();
if ( a_corpses.size < 15 )
{
level thread vo_maxis_ssp_fail();
level notify( "end_revive_watcher" );
return;
}
n_count = 0;
_a206 = a_corpses;
_k206 = getFirstArrayKey( _a206 );
while ( isDefined( _k206 ) )
{
m_corpse = _a206[ _k206 ];
if ( m_corpse istouching( t_corpse_room ) )
{
n_count++;
}
_k206 = getNextArrayKey( _a206, _k206 );
}
if ( n_count < 15 )
{
level thread vo_maxis_ssp_fail();
level notify( "end_revive_watcher" );
return;
}
}
}
corpse_room_revive_watcher()
{
level endon( "end_revive_watcher" );
weaponname = "none";
str_type = "none";
t_corpse_room_dmg = getent( "corpse_room_trigger", "targetname" );
while ( weaponname != "knife_ballistic_upgraded_zm" || str_type != "MOD_IMPACT" )
{
t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type );
if ( isplayer( inflictor ) )
{
weaponname = inflictor.currentweapon;
str_type = type;
}
}
/#
iprintlnbold( "Revive Complete" );
#/
vo_maxis_ssp_complete();
flag_set( "ssp2_resurrection_done" );
}
ssp2_advance_dragon()
{
flag_wait( "ssp2_corpses_in_place" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 1 );
flag_wait( "ssp2_resurrection_done" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
}
exit_stage_1( success )
{
flag_set( "ssp1_complete" );
}
exit_stage_2( success )
{
}
watch_model_sliquification( n_end_limit, str_complete_flag )
{
n_count = 0;
self setcandamage( 1 );
while ( !flag( str_complete_flag ) )
{
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) )
{
n_count++;
if ( n_count >= n_end_limit )
{
/#
iprintlnbold( "MODEL COMPLETE: " + str_complete_flag );
#/
self notify( "sq_sliquified" );
if ( isDefined( self.t_pickup ) )
{
self.t_pickup delete();
}
flag_set( str_complete_flag );
break;
}
else if ( n_count == 1 )
{
level notify( "ssp1_ball_first_sliquified" );
break;
}
else
{
if ( n_count == 10 )
{
level notify( "ssp1_ball_sliquified_2" );
}
}
}
}
}
vo_richtofen_instructions()
{
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_0" );
wait 10;
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_1" );
}
vo_sliquify_fail_watch()
{
flag_wait( "sq_ball_picked_up" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" );
}
vo_richtofen_sliquify_confirm()
{
level waittill( "ssp1_ball_first_sliquified" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_2" );
level waittill( "ssp1_ball_sliquified_2" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" );
flag_wait( "ssp1_complete" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_4" );
wait 10;
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_5" );
}
vo_maxis_sliquify_fail()
{
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_fail_3" );
}
vo_maxis_start_ssp()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_3" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_4" );
}
vo_maxis_ssp_reincarnate()
{
if ( !flag( "ssp2_maxis_reincarnate_said" ) )
{
flag_set( "ssp2_maxis_reincarnate_said" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_1" );
}
else
{
flag_clear( "ssp2_maxis_reincarnate_said" );
}
}
vo_maxis_ssp_fail()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_5" );
}
vo_maxis_ssp_complete()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_3" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_6" );
}

View File

@ -0,0 +1,280 @@
#include maps/mp/zombies/_zm_ffotd;
#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_fix();
level thread kill_trigger_spawn();
}
main_end()
{
connect_zones_for_ffotd( "zone_orange_level3a", "zone_orange_level3b", 0 );
connect_zones_for_ffotd( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_top", 1 );
level thread pathfinding_override_fix();
}
spawned_collision_fix()
{
precachemodel( "collision_geo_512x512x512_standard" );
precachemodel( "collision_geo_32x32x128_standard" );
precachemodel( "collision_geo_64x64x256_standard" );
precachemodel( "collision_wall_128x128x10_standard" );
precachemodel( "collision_wall_256x256x10_standard" );
flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{
collision1 = spawn( "script_model", ( 2992, 536, 497 ) );
collision1 setmodel( "collision_geo_512x512x512_standard" );
collision1.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision1 ghost();
collision2 = spawn( "script_model", ( 2824, 632, 497 ) );
collision2 setmodel( "collision_geo_512x512x512_standard" );
collision2.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision2 ghost();
collision3 = spawn( "script_model", ( 2992, 536, -15 ) );
collision3 setmodel( "collision_geo_512x512x512_standard" );
collision3.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision3 ghost();
collision4 = spawn( "script_model", ( 2824, 632, -15 ) );
collision4 setmodel( "collision_geo_512x512x512_standard" );
collision4.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision4 ghost();
collision5 = spawn( "script_model", ( 2992, 536, -527 ) );
collision5 setmodel( "collision_geo_512x512x512_standard" );
collision5.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision5 ghost();
collision6 = spawn( "script_model", ( 2824, 632, -527 ) );
collision6 setmodel( "collision_geo_512x512x512_standard" );
collision6.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision6 ghost();
collision7 = spawn( "script_model", ( 2992, 536, -1039 ) );
collision7 setmodel( "collision_geo_512x512x512_standard" );
collision7.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision7 ghost();
collision8 = spawn( "script_model", ( 2824, 632, -1039 ) );
collision8 setmodel( "collision_geo_512x512x512_standard" );
collision8.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision8 ghost();
collision9 = spawn( "script_model", ( 2992, 536, -1551 ) );
collision9 setmodel( "collision_geo_512x512x512_standard" );
collision9.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision9 ghost();
collision10 = spawn( "script_model", ( 2824, 632, -1551 ) );
collision10 setmodel( "collision_geo_512x512x512_standard" );
collision10.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision10 ghost();
collision11 = spawn( "script_model", ( 2992, 536, -2063 ) );
collision11 setmodel( "collision_geo_512x512x512_standard" );
collision11.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision11 ghost();
collision12 = spawn( "script_model", ( 2824, 632, -2063 ) );
collision12 setmodel( "collision_geo_512x512x512_standard" );
collision12.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision12 ghost();
collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) );
collisione1 setmodel( "collision_wall_256x256x10_standard" );
collisione1.angles = ( 0, 0, 0 );
collisione1 ghost();
collisione2 = spawn( "script_model", ( 1649, 2164, 2587 ) );
collisione2 setmodel( "collision_wall_256x256x10_standard" );
collisione2.angles = ( 0, 0, 0 );
collisione2 ghost();
collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) );
collisione3 setmodel( "collision_wall_256x256x10_standard" );
collisione3.angles = vectorScale( ( 0, 0, 0 ), 270 );
collisione3 ghost();
collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) );
collisione4 setmodel( "collision_wall_256x256x10_standard" );
collisione4.angles = vectorScale( ( 0, 0, 0 ), 270 );
collisione4 ghost();
collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) );
collisione5 setmodel( "collision_wall_256x256x10_standard" );
collisione5.angles = vectorScale( ( 0, 0, 0 ), 270 );
collisione5 ghost();
collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) );
collisione6 setmodel( "collision_wall_256x256x10_standard" );
collisione6.angles = vectorScale( ( 0, 0, 0 ), 270 );
collisione6 ghost();
collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) );
collision13 setmodel( "collision_wall_128x128x10_standard" );
collision13.angles = vectorScale( ( 0, 0, 0 ), 270 );
collision13 ghost();
collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) );
collision14 setmodel( "collision_geo_512x512x512_standard" );
collision14.angles = vectorScale( ( 0, 0, 0 ), 6,20013 );
collision14 ghost();
collision15 = spawn( "script_model", ( 2518, 597, 3191 ) );
collision15 setmodel( "collision_wall_128x128x10_standard" );
collision15.angles = ( 0, 240,4, -3,00014 );
collision15 ghost();
collision16 = spawn( "script_model", ( 2613, -721, 1184 ) );
collision16 setmodel( "collision_wall_128x128x10_standard" );
collision16.angles = ( 0, 60, -2,60003 );
collision16 ghost();
collision17 = spawn( "script_model", ( 2721, -533, 1184 ) );
collision17 setmodel( "collision_wall_128x128x10_standard" );
collision17.angles = ( 0, 60, -2,60003 );
collision17 ghost();
collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) );
collision18 setmodel( "collision_geo_64x64x256_standard" );
collision18.angles = vectorScale( ( 0, 0, 0 ), 350 );
collision18 ghost();
collision19 = spawn( "script_model", ( 1631, -235, 2943 ) );
collision19 setmodel( "collision_geo_32x32x128_standard" );
collision19.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision19 ghost();
collision20 = spawn( "script_model", ( 2232, -579, 1354 ) );
collision20 setmodel( "collision_wall_128x128x10_standard" );
collision20.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision20 ghost();
collision21 = spawn( "script_model", ( 2349, 805, 1346 ) );
collision21 setmodel( "collision_geo_32x32x128_standard" );
collision21.angles = vectorScale( ( 0, 0, 0 ), 8,6 );
collision21 ghost();
collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) );
collision22 setmodel( "collision_geo_32x32x128_standard" );
collision22.angles = vectorScale( ( 0, 0, 0 ), 3,2 );
collision22 ghost();
collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) );
collision23 setmodel( "collision_geo_32x32x128_standard" );
collision23.angles = ( 0, 0, 0 );
collision23 ghost();
collision24 = spawn( "script_model", ( 2222, 1488, 3312 ) );
collision24 setmodel( "collision_geo_32x32x128_standard" );
collision24.angles = ( 0, 0, 0 );
collision24 ghost();
}
}
connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way )
{
if ( !isDefined( one_way ) )
{
one_way = 0;
}
zone_init( zone_name_a );
zone_init( zone_name_b );
enable_zone( zone_name_a );
enable_zone( zone_name_b );
if ( !isDefined( level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] ) )
{
level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] = spawnstruct();
}
level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ].is_connected = 1;
if ( !one_way )
{
if ( !isDefined( level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] ) )
{
level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] = spawnstruct();
}
level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ].is_connected = 1;
}
}
kill_trigger_spawn()
{
trig = spawn( "trigger_box", ( 3328, 160, 1480 ), 0, 96, 200, 128 );
trig.angles = vectorScale( ( 0, 0, 0 ), 150 );
trig.targetname = "instant_death";
trig2 = spawn( "trigger_box", ( 2512, 1824, 1488 ), 0, 140, 140, 128 );
trig2.angles = ( 0, 0, 0 );
trig2.targetname = "instant_death";
}
pathfinding_override_fix()
{
zombie_trigger_origin = ( 2303, 746, 1296 );
zombie_trigger_radius = 30;
zombie_trigger_height = 128;
player_trigger_origin = ( 2357, 778, 1304 );
player_trigger_radius = 40;
zombie_goto_point = ( 2361, 738, 1304 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3767, 1867, 2790 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3684, 1772, 2758 );
player_trigger_radius = 70;
zombie_goto_point = ( 3659, 1872, 2790 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3245, 1251, 1347,79 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3246, 1126, 1347,79 );
player_trigger_radius = 64;
zombie_goto_point = ( 3031, 1234, 1278,12 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3246, 1113, 1347,79 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3245, 1230, 1347,79 );
player_trigger_radius = 44;
zombie_goto_point = ( 3023, 1154, 1278,12 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3389, 1182, 1364,79 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3246, 1126, 1347,79 );
player_trigger_radius = 64;
zombie_goto_point = ( 3381, 1093, 1364,79 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3148, 1712, 1299,07 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3149, 1604, 1302,2 );
player_trigger_radius = 44;
zombie_goto_point = ( 3259, 1644, 1321,5 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3149, 1584, 1302,2 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3148, 1692, 1299,07 );
player_trigger_radius = 44;
zombie_goto_point = ( 3291, 1684, 1321,5 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3818, 1860, 2789,23 );
zombie_trigger_radius = 100;
zombie_trigger_height = 128;
player_trigger_origin = ( 3601, 1961, 2744,95 );
player_trigger_radius = 50;
zombie_goto_point = ( 3626, 1918, 2750,26 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
all_nodes = getallnodes();
_a331 = all_nodes;
_k331 = getFirstArrayKey( _a331 );
while ( isDefined( _k331 ) )
{
node = _a331[ _k331 ];
if ( node.origin[ 0 ] == 3598,2 )
{
deletepathnode( node );
return;
}
else
{
_k331 = getNextArrayKey( _a331, _k331 );
}
}
}
highrise_link_nodes( a, b )
{
if ( nodesarelinked( a, b ) )
{
return;
}
link_nodes( a, b );
}
highrise_unlink_nodes( a, b )
{
if ( !nodesarelinked( a, b ) )
{
return;
}
unlink_nodes( a, b );
}