1569 lines
57 KiB
Plaintext
1569 lines
57 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
cornered_rappel_pre_load()
|
|
{
|
|
common_scripts\utility::flag_init( "c_rappel_player_on_rope" );
|
|
common_scripts\utility::flag_init( "c_rappel_jumpdown_allowed" );
|
|
common_scripts\utility::flag_init( "c_rappel_first_jump_done" );
|
|
common_scripts\utility::flag_init( "c_rappel_second_jump_starting" );
|
|
common_scripts\utility::flag_init( "c_rappel_second_jump_done" );
|
|
common_scripts\utility::flag_init( "c_rappel_final_jump_starting" );
|
|
common_scripts\utility::flag_init( "floor_clear" );
|
|
common_scripts\utility::flag_init( "force_jump" );
|
|
common_scripts\utility::flag_init( "player_jumping" );
|
|
common_scripts\utility::flag_init( "c_rappel_player_pressed_jump" );
|
|
common_scripts\utility::flag_init( "stop_manage_player_rappel_movement" );
|
|
common_scripts\utility::flag_init( "here_they_come" );
|
|
common_scripts\utility::flag_init( "all_rappel_one_enemies_in_front_dead" );
|
|
common_scripts\utility::flag_init( "all_rappel_two_enemies_in_front_dead" );
|
|
common_scripts\utility::flag_init( "start_glass_fx" );
|
|
common_scripts\utility::flag_init( "stop_watch_player_pitch" );
|
|
common_scripts\utility::flag_init( "baker_start_jump" );
|
|
common_scripts\utility::flag_init( "part_one_start" );
|
|
common_scripts\utility::flag_init( "part_one_complete" );
|
|
common_scripts\utility::flag_init( "part_two_complete" );
|
|
common_scripts\utility::flag_init( "p2_second_wave_downstairs_ready_to_spawn" );
|
|
common_scripts\utility::flag_init( "player_has_looked_up" );
|
|
common_scripts\utility::flag_init( "nag_reset" );
|
|
common_scripts\utility::flag_init( "move_into_building" );
|
|
common_scripts\utility::flag_init( "player_has_looked_up_for_count" );
|
|
common_scripts\utility::flag_init( "move_on_from_part_one" );
|
|
common_scripts\utility::flag_init( "stop_dmg_check" );
|
|
common_scripts\utility::flag_init( "copymachine_go" );
|
|
common_scripts\utility::flag_init( "copymachine_anim_done" );
|
|
common_scripts\utility::flag_init( "copymachine_ai_done" );
|
|
common_scripts\utility::flag_init( "grenade_thrown" );
|
|
common_scripts\utility::flag_init( "kill_grenade_anim" );
|
|
common_scripts\utility::flag_init( "grenade_roll_explode" );
|
|
common_scripts\utility::flag_init( "player_is_away_from_grenade" );
|
|
common_scripts\utility::flag_init( "throw_grenade" );
|
|
common_scripts\utility::flag_init( "grenade_thrower_dead" );
|
|
common_scripts\utility::flag_init( "rappel_finished" );
|
|
precachestring( &"CORNERED_RAPPEL_DOWN" );
|
|
precachemodel( "cnd_rappel_railing_obj" );
|
|
precachemodel( "projectile_m67fraggrenade" );
|
|
precachemodel( "cnd_garden_glass_entry_ally" );
|
|
precachemodel( "cnd_garden_glass_entry_baker" );
|
|
precachemodel( "cnd_garden_glass_entry_player" );
|
|
maps\_utility::add_hint_string( "rappel_down", &"CORNERED_RAPPEL_DOWN", ::player_combat_rappel_is_jumping );
|
|
level.copymachine = getent( "photocopier", "script_noteworthy" );
|
|
level.grenade_roll_grenade = getent( "grenade_roll_grenade", "targetname" );
|
|
level.grenade_roll_grenade hide();
|
|
level.cnd_rappel_railing_obj = getent( "cnd_rappel_railing_obj", "targetname" );
|
|
level.cnd_rappel_railing_obj hide();
|
|
}
|
|
|
|
setup_rappel()
|
|
{
|
|
if ( maps\cornered_code::is_e3() )
|
|
{
|
|
thread maps\cornered::e3_transition_start();
|
|
return;
|
|
}
|
|
|
|
maps\cornered_code::setup_player();
|
|
maps\cornered_code::spawn_allies();
|
|
thread maps\cornered_code::handle_intro_fx();
|
|
level.combat_rappel_startpoint = 1;
|
|
level.player switchtoweapon( "kriss+eotechsmg_sp+silencer_sp" );
|
|
thread maps\cornered_audio::aud_check( "rappel" );
|
|
maps\cornered_code::delete_building_glow();
|
|
thread maps\cornered_code::cleanup_outside_ents_on_entry();
|
|
var_0 = getent( "combat_rappel_fall_volume", "targetname" );
|
|
var_0 thread maps\cornered_code::cornered_falling_death();
|
|
thread maps\cornered_lighting::fireworks_junction_post();
|
|
level.combat_rappel_rope_coil_rorke show();
|
|
level.combat_rappel_rope_coil_player show();
|
|
level.combat_rappel_rope_coil_baker show();
|
|
}
|
|
|
|
begin_rappel()
|
|
{
|
|
if ( maps\cornered_code::is_e3() )
|
|
return;
|
|
|
|
thread handle_rappel();
|
|
thread setup_garden_entry();
|
|
common_scripts\utility::flag_wait( "rappel_finished" );
|
|
thread maps\_utility::autosave_now();
|
|
}
|
|
|
|
handle_rappel()
|
|
{
|
|
maps\_utility::set_team_bcvoice( "allies", "taskforce" );
|
|
thread maps\_utility::battlechatter_on( "allies" );
|
|
thread maps\_utility::battlechatter_on( "axis" );
|
|
thread rappel_section();
|
|
common_scripts\utility::flag_wait( "rappel_finished" );
|
|
}
|
|
|
|
rappel_section()
|
|
{
|
|
thread player_combat_rappel_begin();
|
|
level.allies[level.const_rorke] thread allies_to_rappel();
|
|
level.allies[level.const_baker] thread allies_to_rappel();
|
|
thread allies_rappel_vo();
|
|
thread combat_rappel_enemies_pt1();
|
|
}
|
|
|
|
player_combat_rappel_begin()
|
|
{
|
|
level.player endon( "death" );
|
|
level.player_start_rappel_struct = common_scripts\utility::getstruct( "player_start_rappel_struct", "targetname" );
|
|
level.player_start_rappel_struct thread maps\_anim::anim_first_frame( level.arms_and_legs, "rappel_combat_start" );
|
|
level.rappel_max_lateral_dist_right = 300;
|
|
level.rappel_max_lateral_dist_left = 300;
|
|
level.rappel_max_downward_speed = 4.0;
|
|
level.rappel_max_upward_speed = 3.0;
|
|
level.rappel_max_lateral_speed = 9.0;
|
|
level.cnd_rappel_railing_obj show();
|
|
level.cnd_rappel_railing_obj maps\_utility::glow();
|
|
level.combat_rappel_rope_coil_player maps\_utility::glow();
|
|
var_0 = getent( "player_rappel_trigger", "targetname" );
|
|
|
|
if ( level.player common_scripts\utility::is_player_gamepad_enabled() )
|
|
var_0 sethintstring( &"CORNERED_EXIT_BUILDING_CONSOLE" );
|
|
else
|
|
var_0 sethintstring( &"CORNERED_EXIT_BUILDING" );
|
|
|
|
var_1 = common_scripts\utility::getstruct( "player_start_rappel_struct", "targetname" );
|
|
maps\player_scripted_anim_util::waittill_trigger_activate_looking_at( var_0, level.player_start_rappel_struct, cos( 60 ), 0, 1 );
|
|
common_scripts\utility::flag_set( "c_rappel_player_on_rope" );
|
|
|
|
if ( isdefined( level.player.has_binoculars ) && level.player.has_binoculars == 1 )
|
|
level.player maps\cornered_binoculars::take_binoculars();
|
|
|
|
level.combat_rappel_rope_coil_player maps\_utility::stopglow();
|
|
level.cnd_rappel_railing_obj maps\_utility::stopglow();
|
|
level.cnd_rappel_railing_obj delete();
|
|
level.player freezecontrols( 1 );
|
|
level.player allowcrouch( 0 );
|
|
level.player allowprone( 0 );
|
|
level.player disableweapons();
|
|
maps\cornered_code::take_away_offhands();
|
|
|
|
if ( level.player getstance() != "stand" )
|
|
{
|
|
level.player setstance( "stand" );
|
|
wait 0.8;
|
|
}
|
|
|
|
level.player switchtoweapon( "kriss+eotechsmg_sp+silencer_sp" );
|
|
level.player_exit_to_combat_rappel_rope = maps\_utility::spawn_anim_model( "cnd_rappel_tele_rope" );
|
|
level.player_exit_to_combat_rappel_rope hide();
|
|
level.player_start_rappel_struct thread maps\_anim::anim_first_frame_solo( level.player_exit_to_combat_rappel_rope, "rappel_combat_start" );
|
|
var_2 = maps\_utility::spawn_anim_model( "combat_exit_rope" );
|
|
level.cnd_rappel_player_rope = maps\_utility::spawn_anim_model( "cnd_rappel_player_rope" );
|
|
level.cnd_rappel_player_rope hide();
|
|
level.cnd_rappel_player_rope linkto( var_2, "j_prop_1", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
maps\cornered_code_rappel::cnd_plyr_rope_set_idle();
|
|
level.player playerlinktoblend( level.cornered_player_arms, "tag_player", 0.6 );
|
|
thread maps\cornered_audio::aud_rappel_combat( "event" );
|
|
thread maps\cornered_audio::aud_junction( "hookup" );
|
|
level.player_start_rappel_struct thread maps\_anim::anim_single( level.arms_and_legs, "rappel_combat_start" );
|
|
level.player_start_rappel_struct thread maps\_anim::anim_single_solo( level.player_exit_to_combat_rappel_rope, "rappel_combat_start" );
|
|
level.player_start_rappel_struct thread maps\_anim::anim_first_frame_solo( var_2, "rappel_combat_start" );
|
|
var_3 = getent( "combat_rappel_fall_volume", "targetname" );
|
|
var_3 delete();
|
|
wait 0.6;
|
|
level.cornered_player_arms show();
|
|
maps\cornered_code::hide_player_arms_sleeve_flaps();
|
|
level.cornered_player_legs show();
|
|
level.player freezecontrols( 0 );
|
|
level.player enableinvulnerability();
|
|
wait 0.2;
|
|
level.player_exit_to_combat_rappel_rope show();
|
|
level.cornered_player_arms thread player_exit_to_combat_rappel_notetrack_handler( var_2 );
|
|
wait 1.5;
|
|
maps\cornered_lighting::do_specular_sun_lerp( 1 );
|
|
common_scripts\utility::flag_set( "here_they_come" );
|
|
level.combat_rappel_rope_coil_rorke delete();
|
|
level.combat_rappel_rope_coil_player delete();
|
|
level.combat_rappel_rope_coil_baker delete();
|
|
level.cornered_player_arms waittillmatch( "single anim", "end" );
|
|
var_2 delete();
|
|
maps\_utility::music_play( "mus_cornered_combat_rappel" );
|
|
common_scripts\utility::flag_set( "c_rappel_first_jump_done" );
|
|
}
|
|
|
|
player_exit_to_combat_rappel_notetrack_handler( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "single anim", var_2 );
|
|
|
|
switch ( var_2 )
|
|
{
|
|
case "start_prop_rope":
|
|
if ( !var_1 )
|
|
{
|
|
level.cnd_rappel_player_rope show();
|
|
level.player_start_rappel_struct thread maps\_anim::anim_single_solo( var_0, "rappel_combat_start" );
|
|
var_1 = 1;
|
|
}
|
|
|
|
break;
|
|
case "delete_player_rope":
|
|
level.player_exit_to_combat_rappel_rope delete();
|
|
break;
|
|
case "camera_look":
|
|
break;
|
|
case "glass_hit_1":
|
|
level.player playrumbleonentity( "light_1s" );
|
|
break;
|
|
case "baker_start":
|
|
common_scripts\utility::flag_set( "baker_start_jump" );
|
|
break;
|
|
case "glass_hit_2":
|
|
level.player playrumbleonentity( "light_1s" );
|
|
break;
|
|
case "gun_up":
|
|
level.player enableweapons();
|
|
level.player thread maps\cornered_code::player_flap_sleeves();
|
|
break;
|
|
case "camera_free":
|
|
thread player_combat_rappel();
|
|
level.player disableinvulnerability();
|
|
maps\cornered_code::hide_player_arms();
|
|
level.cornered_player_legs hide();
|
|
common_scripts\utility::flag_set( "part_one_start" );
|
|
break;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
lerp_player_view_jump( var_0 )
|
|
{
|
|
level.player lerpviewangleclamp( 1.0, 0, 0, 0, 0, 0, var_0.bottom_arc );
|
|
wait 2;
|
|
level.player lerpviewangleclamp( 1.0, 0, 0, var_0.right_arc, var_0.left_arc, var_0.top_arc, var_0.bottom_arc );
|
|
}
|
|
|
|
player_combat_rappel()
|
|
{
|
|
if ( common_scripts\utility::flag( "c_rappel_player_pressed_jump" ) )
|
|
common_scripts\utility::flag_clear( "c_rappel_player_pressed_jump" );
|
|
|
|
if ( common_scripts\utility::flag( "c_rappel_jumpdown_allowed" ) )
|
|
common_scripts\utility::flag_clear( "c_rappel_jumpdown_allowed" );
|
|
|
|
common_scripts\utility::flag_clear( "player_allow_rappel_down" );
|
|
level.player thread maps\cornered_code::unlimited_ammo();
|
|
var_0 = spawnstruct();
|
|
var_0.right_arc = 120;
|
|
var_0.left_arc = 120;
|
|
var_0.top_arc = 60;
|
|
var_0.bottom_arc = 50;
|
|
var_0.allow_walk_up = 1;
|
|
var_0.allow_glass_break_slide = 1;
|
|
var_0.allow_sprint = 1;
|
|
var_0.jump_type = "jump_normal";
|
|
var_0.show_legs = 1;
|
|
var_0.lateral_plane = 2;
|
|
var_0.rappel_type = "combat";
|
|
level.rappel_params = var_0;
|
|
maps\cornered_code_rappel::cornered_start_rappel( "rope_ref_combat", "player_rappel_ground_ref_combat", var_0 );
|
|
thread handle_rope_hitting_enemies();
|
|
common_scripts\utility::flag_set( "player_allow_rappel_down" );
|
|
maps\cornered_code_rappel::rappel_limit_vertical_move( 0, 100 );
|
|
common_scripts\utility::flag_wait( "c_rappel_jumpdown_allowed" );
|
|
common_scripts\utility::flag_set( "disable_rappel_jump" );
|
|
level.player thread maps\_utility::display_hint( "rappel_down" );
|
|
level thread player_wait_for_jump_button();
|
|
common_scripts\utility::flag_wait( "c_rappel_player_pressed_jump" );
|
|
thread lerp_player_view_jump( var_0 );
|
|
wait 1;
|
|
player_combat_rappel_second_jump( var_0 );
|
|
common_scripts\utility::flag_clear( "c_rappel_jumpdown_allowed" );
|
|
common_scripts\utility::flag_clear( "disable_rappel_jump" );
|
|
maps\cornered_code_rappel::rappel_limit_vertical_move( 0, 100 );
|
|
level.rappel_max_lateral_dist_right = 500;
|
|
level.rappel_max_lateral_dist_left = 500;
|
|
common_scripts\utility::flag_wait( "c_rappel_jumpdown_allowed" );
|
|
common_scripts\utility::flag_set( "disable_rappel_jump" );
|
|
common_scripts\utility::flag_clear( "c_rappel_player_pressed_jump" );
|
|
level.player thread maps\_utility::display_hint( "rappel_down" );
|
|
level thread player_wait_for_jump_button();
|
|
thread combat_rappel_spawn_garden_entry_enemies();
|
|
common_scripts\utility::flag_wait( "c_rappel_player_pressed_jump" );
|
|
common_scripts\utility::flag_set( "c_rappel_final_jump_starting" );
|
|
maps\_utility::delaythread( 0.7, maps\cornered_audio::aud_start_garden_events );
|
|
common_scripts\utility::exploder( 1200 );
|
|
combat_rappel_garden_entry();
|
|
common_scripts\utility::flag_clear( "disable_rappel_jump" );
|
|
}
|
|
|
|
handle_rope_hitting_enemies()
|
|
{
|
|
level endon( "c_rappel_final_jump_starting" );
|
|
|
|
while ( !isdefined( level.cnd_rappel_player_rope ) )
|
|
common_scripts\utility::waitframe();
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = level.cnd_rappel_player_rope gettagorigin( "joint9" );
|
|
var_1 = level.cnd_rappel_player_rope gettagorigin( "joint1" );
|
|
var_2 = vectornormalize( var_1 - var_0 );
|
|
var_3 = var_0 + var_2 * 400;
|
|
var_4 = bullettrace( var_0, var_3, 1, level.player, 0, 1 );
|
|
var_5 = var_4["entity"];
|
|
var_6 = isdefined( var_5 ) && isdefined( var_5.animname ) && ( var_5.animname == "rorke" || var_5.animname == "baker" );
|
|
|
|
if ( isdefined( var_5 ) && isai( var_5 ) && isalive( var_5 ) && !var_6 && !isdefined( var_5.balcony_death ) )
|
|
var_5 kill();
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
need_to_hold()
|
|
{
|
|
if ( level.console || level.player common_scripts\utility::is_player_gamepad_enabled() )
|
|
return 1;
|
|
|
|
var_0 = getkeybinding( "+gostand" );
|
|
|
|
if ( var_0["key1"] == &"KEY_MWHEELUP" || var_0["key2"] == &"KEY_MWHEELUP" || var_0["key1"] == &"KEY_MWHEELDOWN" || var_0["key2"] == &"KEY_MWHEELDOWN" )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
player_wait_for_jump_button()
|
|
{
|
|
for (;;)
|
|
{
|
|
wait 0.05;
|
|
|
|
if ( level.player jumpbuttonpressed() )
|
|
{
|
|
var_0 = 0;
|
|
var_1 = need_to_hold();
|
|
|
|
while ( level.player jumpbuttonpressed() && var_1 )
|
|
{
|
|
if ( var_0 >= 0.25 )
|
|
break;
|
|
|
|
var_0 = var_0 + 0.05;
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( var_1 && var_0 < 0.25 )
|
|
continue;
|
|
|
|
if ( !common_scripts\utility::flag( "player_jumping" ) )
|
|
common_scripts\utility::flag_set( "c_rappel_player_pressed_jump" );
|
|
}
|
|
}
|
|
}
|
|
|
|
player_combat_rappel_is_jumping()
|
|
{
|
|
return common_scripts\utility::flag( "c_rappel_player_pressed_jump" );
|
|
}
|
|
|
|
player_combat_rappel_second_jump( var_0 )
|
|
{
|
|
common_scripts\utility::flag_set( "c_rappel_second_jump_starting" );
|
|
var_1 = spawnstruct();
|
|
var_1.angles = ( 0, -35, 0 );
|
|
var_1.origin = ( -24953, 6284, 21677 );
|
|
common_scripts\utility::flag_clear( "disable_rappel_jump" );
|
|
level.rappel_lower_limit = undefined;
|
|
maps\cornered_code_rappel::player_rappel_force_jump_away( var_1 );
|
|
common_scripts\utility::waitframe();
|
|
common_scripts\utility::flag_set( "disable_rappel_jump" );
|
|
level waittill( "player_force_jump_landed" );
|
|
common_scripts\utility::flag_set( "c_rappel_second_jump_done" );
|
|
}
|
|
|
|
combat_rappel_garden_entry_should_shift_allies( var_0 )
|
|
{
|
|
return var_0.anim_ref != "C" && var_0.anim_ref != "L1" && var_0.anim_ref != "R1";
|
|
}
|
|
|
|
combat_rappel_garden_entry_allies( var_0 )
|
|
{
|
|
var_1 = "rappel_combat_end";
|
|
|
|
if ( combat_rappel_garden_entry_should_shift_allies( var_0 ) )
|
|
var_1 = "rappel_combat_end_shift";
|
|
|
|
foreach ( var_3 in level.allies )
|
|
{
|
|
var_3 maps\cornered_code_rappel_allies::ally_rappel_stop_aiming();
|
|
var_3 unlink();
|
|
var_3 notify( "stop_loop" );
|
|
level.player_start_rappel_struct thread maps\_anim::anim_single_solo( var_3, var_1 );
|
|
var_3 maps\cornered_code_rappel_allies::ally_rappel_rope_cleanup();
|
|
}
|
|
}
|
|
|
|
combat_rappel_garden_entry_ropes( var_0 )
|
|
{
|
|
var_1 = "cornered_combat_rappel_garden_entry_rope_";
|
|
|
|
if ( combat_rappel_garden_entry_should_shift_allies( var_0 ) )
|
|
var_1 = "cornered_combat_rappel_garden_entry_shift_rope_";
|
|
|
|
foreach ( var_3 in level.allies )
|
|
{
|
|
if ( !isdefined( var_3.cnd_rappel_tele_rope ) )
|
|
var_3.cnd_rappel_tele_rope = maps\_utility::spawn_anim_model( "rope" );
|
|
|
|
var_4 = var_1 + var_3.animname;
|
|
var_3.cnd_rappel_tele_rope.animname = "rope";
|
|
level.player_start_rappel_struct thread maps\_anim::anim_single_solo( var_3.cnd_rappel_tele_rope, var_4 );
|
|
}
|
|
}
|
|
|
|
get_tree()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "garden_baker", "targetname" );
|
|
var_1 = getentarray( "garden_entry_tree", "targetname" );
|
|
|
|
if ( var_1.size == 1 )
|
|
return var_1[0];
|
|
|
|
var_2 = undefined;
|
|
var_3 = -1;
|
|
|
|
foreach ( var_5 in var_1 )
|
|
{
|
|
var_6 = distancesquared( var_5.origin, var_0.origin );
|
|
|
|
if ( var_3 == -1 || var_6 < var_3 )
|
|
{
|
|
var_3 = var_6;
|
|
var_2 = var_5;
|
|
}
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
get_bush()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "garden_baker", "targetname" );
|
|
var_1 = getentarray( "garden_entry_bush", "targetname" );
|
|
|
|
if ( var_1.size == 1 )
|
|
return var_1[0];
|
|
|
|
var_2 = undefined;
|
|
var_3 = -1;
|
|
|
|
foreach ( var_5 in var_1 )
|
|
{
|
|
var_6 = distancesquared( var_5.origin, var_0.origin );
|
|
|
|
if ( var_3 == -1 || var_6 < var_3 )
|
|
{
|
|
var_3 = var_6;
|
|
var_2 = var_5;
|
|
}
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
#using_animtree("animated_props");
|
|
|
|
combat_rappel_garden_entry_tree()
|
|
{
|
|
var_0 = get_tree();
|
|
var_1 = get_bush();
|
|
var_2 = spawn( "script_model", var_0.origin );
|
|
var_2 setmodel( "generic_prop_raven" );
|
|
var_2 useanimtree( #animtree );
|
|
var_2.animname = "tree";
|
|
var_1.origin = var_0.origin;
|
|
var_0 linkto( var_2, "j_prop_1" );
|
|
var_1 linkto( var_2, "j_prop_2" );
|
|
level.player_start_rappel_struct thread maps\_anim::anim_single_solo( var_2, "cornered_combat_rappel_garden_entry_tree_shake" );
|
|
}
|
|
|
|
combat_rappel_garden_entry_grenades()
|
|
{
|
|
var_0 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_0 setmodel( "generic_prop_raven" );
|
|
var_0 useanimtree( #animtree );
|
|
var_0.animname = "grenades";
|
|
var_1 = level.allies[0] magicgrenade( ( 0, 0, 0 ), ( 0, 0, 0 ), 100, 0 );
|
|
var_1 linkto( var_0, "J_prop_1" );
|
|
var_2 = level.allies[0] magicgrenade( ( 0, 0, 0 ), ( 0, 0, 0 ), 100, 0 );
|
|
var_2 linkto( var_0, "J_prop_2" );
|
|
level.player_start_rappel_struct thread maps\_anim::anim_single_solo( var_0, "cornered_combat_rappel_garden_entry_grenades" );
|
|
var_3 = level.allies[level.const_baker];
|
|
var_4 = 0;
|
|
|
|
while ( var_4 < 2 )
|
|
{
|
|
var_3 waittill( "single anim", var_5 );
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
continue;
|
|
|
|
var_6 = undefined;
|
|
|
|
if ( var_5 == "grenade_explode1" )
|
|
var_6 = var_1;
|
|
else if ( var_5 == "grenade_explode2" )
|
|
var_6 = var_2;
|
|
|
|
if ( !isdefined( var_6 ) )
|
|
continue;
|
|
|
|
var_4++;
|
|
var_6 detonate();
|
|
}
|
|
}
|
|
|
|
combat_rappel_spawn_garden_entry_enemies()
|
|
{
|
|
var_0 = 4;
|
|
level.garden_entry_enemies = [];
|
|
|
|
for ( var_1 = 0; var_1 < var_0; var_1++ )
|
|
{
|
|
if ( var_1 + 1 == 2 )
|
|
continue;
|
|
|
|
var_2 = getent( "garden_entry_enemies", "targetname" );
|
|
var_2.count = 1;
|
|
var_3 = maps\_utility::spawn_targetname( "garden_entry_enemies", 1 );
|
|
var_3.animname = "generic";
|
|
var_3.ignoreme = 1;
|
|
var_3.ignoreall = 1;
|
|
var_3.a.nodeath = 1;
|
|
var_3.anim_ref = "cornered_combat_rappel_garden_entry_redshirt" + ( var_1 + 1 );
|
|
level.player_start_rappel_struct thread maps\_anim::anim_generic_first_frame( var_3, var_3.anim_ref );
|
|
level.garden_entry_enemies[level.garden_entry_enemies.size] = var_3;
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
combat_rappel_garden_entry_enemies()
|
|
{
|
|
for ( var_0 = 0; var_0 < level.garden_entry_enemies.size; var_0++ )
|
|
{
|
|
var_1 = level.garden_entry_enemies[var_0];
|
|
var_1.animname = "generic";
|
|
var_1.entry = 1;
|
|
level.player_start_rappel_struct thread maps\_anim::anim_generic( var_1, var_1.anim_ref );
|
|
var_1 thread combat_rappel_garden_entry_enemy_death();
|
|
}
|
|
|
|
maps\_utility::waittill_dead( level.garden_entry_enemies );
|
|
level.garden_entry_enemies = undefined;
|
|
}
|
|
|
|
combat_rappel_garden_entry_enemy_death()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "single anim", var_0 );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
continue;
|
|
|
|
if ( var_0 != "start_ragdoll" && var_0 != "end" )
|
|
continue;
|
|
|
|
self.a.nodeath = 1;
|
|
|
|
if ( var_0 == "end" )
|
|
{
|
|
self.a.nodeath = 0;
|
|
self.ragdoll_immediate = 1;
|
|
}
|
|
|
|
self kill();
|
|
return;
|
|
}
|
|
}
|
|
|
|
combat_rappel_garden_entry_setup_jumpoints()
|
|
{
|
|
if ( !isdefined( level.player_start_rappel_struct ) )
|
|
level.player_start_rappel_struct = common_scripts\utility::getstruct( "player_start_rappel_struct", "targetname" );
|
|
|
|
var_0 = level.player_start_rappel_struct;
|
|
level.jump_anims = [];
|
|
level.jump_anims[0] = create_jump_point( var_0, "C" );
|
|
level.jump_anims[1] = create_jump_point( var_0, "R1" );
|
|
level.jump_anims[2] = create_jump_point( var_0, "R2" );
|
|
level.jump_anims[3] = create_jump_point( var_0, "R3" );
|
|
level.jump_anims[4] = create_jump_point( var_0, "R4" );
|
|
level.jump_anims[5] = create_jump_point( var_0, "L1" );
|
|
level.jump_anims[6] = create_jump_point( var_0, "L2" );
|
|
level.jump_anims[7] = create_jump_point( var_0, "L3" );
|
|
}
|
|
|
|
create_jump_point( var_0, var_1 )
|
|
{
|
|
var_2 = spawnstruct();
|
|
var_2.anim_ref = var_1;
|
|
var_3 = level.scr_anim["jump_info"][var_1];
|
|
var_2.start_origin = getstartorigin( var_0.origin, var_0.angles, var_3 );
|
|
var_2.start_angles = getstartangles( var_0.origin, var_0.angles, var_3 );
|
|
var_2.anim_length = getanimlength( var_3 );
|
|
var_4 = common_scripts\utility::spawn_tag_origin();
|
|
var_4.origin = var_2.start_origin;
|
|
var_4.angles = var_2.start_angles;
|
|
var_4 setmodel( "generic_prop_raven" );
|
|
var_4 useanimtree( #animtree );
|
|
var_4.animname = "jump_info";
|
|
var_4 setanim( var_3, 1.0, 0, 0 );
|
|
common_scripts\utility::waitframe();
|
|
var_2.start_origin = var_4 gettagorigin( "J_prop_1" );
|
|
var_2.start_angles = var_4 gettagangles( "J_prop_1" );
|
|
var_2.rope_origin = var_4 gettagorigin( "J_prop_2" );
|
|
var_2.rope_angles = var_4 gettagangles( "J_prop_2" );
|
|
var_4 delete();
|
|
return var_2;
|
|
}
|
|
|
|
get_jump_info()
|
|
{
|
|
var_0 = -1;
|
|
var_1 = undefined;
|
|
|
|
foreach ( var_3 in level.jump_anims )
|
|
{
|
|
var_4 = distancesquared( level.player.origin, var_3.start_origin );
|
|
|
|
if ( var_4 < var_0 || var_0 == -1 )
|
|
{
|
|
var_0 = var_4;
|
|
var_1 = var_3;
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
spawn_jump_point( var_0 )
|
|
{
|
|
var_1 = common_scripts\utility::spawn_tag_origin();
|
|
var_1.origin = var_0.start_origin;
|
|
var_1.angles = var_0.start_angles;
|
|
var_1 setmodel( "generic_prop_raven" );
|
|
var_1 useanimtree( #animtree );
|
|
var_1.animname = "jump_info";
|
|
return var_1;
|
|
}
|
|
|
|
combat_rappel_garden_entry_setup_glass()
|
|
{
|
|
var_0 = getent( "garden_entry_glass_player_still", "targetname" );
|
|
var_1 = getent( "garden_entry_glass_ally_still", "targetname" );
|
|
var_2 = getent( "garden_entry_glass_player_still2", "targetname" );
|
|
var_0 hide();
|
|
var_1 hide();
|
|
var_2 hide();
|
|
}
|
|
|
|
combat_rappel_garden_entry_glass()
|
|
{
|
|
var_0 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_0 setmodel( "cnd_garden_glass_entry_ally" );
|
|
var_0 useanimtree( #animtree );
|
|
var_0.animname = "glass";
|
|
var_0 hide();
|
|
var_1 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_1 setmodel( "cnd_garden_glass_entry_baker" );
|
|
var_1 useanimtree( #animtree );
|
|
var_1.animname = "glass";
|
|
var_1 hide();
|
|
var_2 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_2 setmodel( "cnd_garden_glass_entry_player" );
|
|
var_2 useanimtree( #animtree );
|
|
var_2.animname = "glass";
|
|
var_2 hide();
|
|
level.player_start_rappel_struct thread maps\_anim::anim_single_solo( var_0, "cornered_combat_rappel_garden_entry_ally_glass" );
|
|
level.player_start_rappel_struct thread maps\_anim::anim_single_solo( var_1, "cornered_combat_rappel_garden_entry_baker_glass" );
|
|
level.player_start_rappel_struct thread maps\_anim::anim_single_solo( var_2, "cornered_combat_rappel_garden_entry_player_glass" );
|
|
var_3 = getent( "garden_entry_glass_player_clean", "targetname" );
|
|
var_4 = getent( "garden_entry_glass_ally_clean", "targetname" );
|
|
var_5 = getent( "garden_entry_glass_player_still", "targetname" );
|
|
var_6 = getent( "garden_entry_glass_player_still2", "targetname" );
|
|
var_7 = getent( "garden_entry_glass_ally_still", "targetname" );
|
|
var_8 = level.allies[level.const_rorke];
|
|
var_9 = 0;
|
|
|
|
while ( var_9 < 3 )
|
|
{
|
|
var_8 waittill( "single anim", var_10 );
|
|
|
|
if ( !isdefined( var_10 ) )
|
|
continue;
|
|
|
|
if ( var_10 == "show_glass_right" )
|
|
{
|
|
var_4 delete();
|
|
var_7 show();
|
|
var_0 show();
|
|
var_9++;
|
|
thread maps\cornered_audio::aud_rappel_combat( "window1" );
|
|
continue;
|
|
}
|
|
|
|
if ( var_10 == "show_glass_left" )
|
|
{
|
|
var_3 delete();
|
|
var_5 show();
|
|
var_1 show();
|
|
var_9++;
|
|
thread maps\cornered_audio::aud_rappel_combat( "window2" );
|
|
continue;
|
|
}
|
|
|
|
if ( var_10 == "show_glass_plyr" )
|
|
{
|
|
var_5 delete();
|
|
var_6 show();
|
|
var_2 show();
|
|
var_9++;
|
|
thread maps\cornered_audio::aud_rappel_combat( "window3" );
|
|
level.player playrumbleonentity( "light_1s" );
|
|
}
|
|
}
|
|
}
|
|
|
|
combat_rappel_garden_entry_slowmo()
|
|
{
|
|
wait 1.4;
|
|
var_0 = maps\_utility::get_living_ai_array( "garden_entry_fodder", "script_noteworthy" );
|
|
var_1 = maps\_utility::get_living_ai_array( "garden_entry_temp_fodder", "script_noteworthy" );
|
|
|
|
foreach ( var_3 in var_0 )
|
|
var_3.health = 1;
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3.health = 1;
|
|
|
|
wait 2.0;
|
|
level.player lerpviewangleclamp( 0.2, 0, 0, 0, 0, 0, 0 );
|
|
level.player disableweapons();
|
|
wait 0.5;
|
|
level.player enableweapons();
|
|
maps\cornered_code::give_back_offhands();
|
|
level.player lerpviewangleclamp( 0, 0, 0, 55, 55, 55, 10 );
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( isalive( var_3 ) )
|
|
var_3 kill();
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "garden_player_in_garden" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( isalive( var_3 ) )
|
|
var_3.health = 150;
|
|
}
|
|
}
|
|
|
|
combat_rappel_garden_entry_first_frame( var_0, var_1 )
|
|
{
|
|
level.player_start_rappel_struct maps\_anim::anim_first_frame_solo( var_0, var_1.anim_ref );
|
|
var_2 = ( 0, 325, 0 );
|
|
var_3 = var_0 gettagorigin( "J_prop_1" );
|
|
level.rappel_player_arms = maps\_utility::spawn_anim_model( "player_rappel_arms" );
|
|
level.rappel_player_arms.origin = var_3;
|
|
level.rappel_player_arms.angles = var_2;
|
|
level.rappel_player_arms dontcastshadows();
|
|
level.rappel_player_arms hide();
|
|
level.rappel_player_arms linkto( var_0, "J_prop_1", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_4 = maps\cornered_code_rappel::rpl_get_garden_entry_arms_static_anim();
|
|
level.rappel_player_arms setanimknob( var_4, 1.0, 0, 0 );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
combat_rappel_garden_entry_set_small_rotate_jump()
|
|
{
|
|
level.rappel_rotate_jump_anim = %rappel_movement_player_small_jump_rotate;
|
|
}
|
|
|
|
combat_rappel_garden_entry()
|
|
{
|
|
if ( !isdefined( level.player_start_rappel_struct ) )
|
|
level.player_start_rappel_struct = common_scripts\utility::getstruct( "player_start_rappel_struct", "targetname" );
|
|
|
|
thread combat_rappel_garden_entry_setup_weapon();
|
|
level.player enableinvulnerability();
|
|
var_0 = get_jump_info();
|
|
var_1 = spawn_jump_point( var_0 );
|
|
combat_rappel_garden_entry_first_frame( var_1, var_0 );
|
|
combat_rappel_garden_entry_player( var_1, var_0 );
|
|
maps\_utility::delaythread( 1.0, common_scripts\utility::flag_set, "garden_spawn_first_enemies" );
|
|
maps\_utility::delaythread( 1.0, common_scripts\utility::flag_set, "rappel_finished" );
|
|
thread maps\cornered_audio::aud_rappel_combat( "swing" );
|
|
var_2 = getdvar( "cg_hudGrenadeIconOffset" );
|
|
setsaveddvar( "cg_hudGrenadeIconOffset", "512" );
|
|
thread combat_rappel_garden_entry_enemies();
|
|
thread combat_rappel_garden_entry_allies( var_0 );
|
|
thread combat_rappel_garden_entry_ropes( var_0 );
|
|
thread combat_rappel_garden_entry_tree();
|
|
thread combat_rappel_garden_entry_grenades();
|
|
thread combat_rappel_garden_entry_glass();
|
|
thread combat_rappel_garden_entry_slowmo();
|
|
level.player_start_rappel_struct maps\_anim::anim_single_solo( var_1, var_0.anim_ref );
|
|
thread maps\_utility::autosave_now();
|
|
level.jump_anims = undefined;
|
|
level.player unlink();
|
|
level.rappel_player_legs delete();
|
|
level.rappel_player_arms delete();
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 delete();
|
|
|
|
setsaveddvar( "cg_hudGrenadeIconOffset", var_2 );
|
|
level.player enableweapons();
|
|
level.player allowcrouch( 1 );
|
|
level.player allowprone( 1 );
|
|
level.player allowmelee( 1 );
|
|
level.player allowsprint( 1 );
|
|
common_scripts\utility::flag_set( "garden_player_in_garden" );
|
|
var_3 = 3.0;
|
|
wait( var_3 );
|
|
level.player disableinvulnerability();
|
|
}
|
|
|
|
combat_rappel_garden_entry_setup_weapon()
|
|
{
|
|
level.player allowmelee( 0 );
|
|
}
|
|
|
|
combat_rappel_garden_entry_player( var_0, var_1 )
|
|
{
|
|
var_2 = var_0 gettagorigin( "J_prop_1" );
|
|
var_3 = var_0 gettagangles( "J_prop_1" );
|
|
var_4 = var_0 gettagorigin( "J_prop_2" );
|
|
var_5 = var_0 gettagangles( "J_prop_2" );
|
|
|
|
if ( !isdefined( level.rappel_player_legs ) )
|
|
{
|
|
level.rappel_player_legs = maps\_utility::spawn_anim_model( "player_rappel_legs", var_2 );
|
|
level.rappel_player_legs.angles = var_3;
|
|
level.rappel_player_legs dontcastshadows();
|
|
var_6 = maps\cornered_code_rappel::rpl_get_legs_idle_anim();
|
|
level.rappel_player_legs setanim( var_6, 1.0, 0, 1.0 );
|
|
level.player playerlinkto( level.rappel_player_legs, "tag_origin", 0, 120, 120, 60, 50, 0 );
|
|
wait 2;
|
|
}
|
|
|
|
if ( !isdefined( level.cnd_rappel_player_rope ) )
|
|
{
|
|
level.cnd_rappel_player_rope = maps\_utility::spawn_anim_model( "cnd_rappel_player_rope", var_4 );
|
|
level.cnd_rappel_player_rope.angles = var_5;
|
|
maps\cornered_code_rappel::cnd_plyr_rope_set_idle();
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
if ( !isdefined( level.start_point ) || level.start_point != "garden" )
|
|
combat_rappel_garden_entry_double_jump( var_0 );
|
|
|
|
var_7 = 0.2;
|
|
combat_rappel_garden_entry_blend_to_position( var_7, var_0 );
|
|
var_6 = maps\cornered_code_rappel::rpl_get_garden_entry_legs_static_anim();
|
|
var_8 = maps\cornered_code_rappel::rpl_get_garden_entry_arms_static_anim();
|
|
level.rappel_player_arms setanimknob( var_8, 1.0, 0.2, 1.0 );
|
|
level.rappel_player_legs setanimknob( var_6, 1.0, 0.2, 1.0 );
|
|
thread combat_rappel_garden_entry_finish_player_rope( var_1 );
|
|
}
|
|
|
|
combat_rappel_garden_entry_double_jump( var_0 )
|
|
{
|
|
var_1 = spawnstruct();
|
|
var_1.origin = var_0 gettagorigin( "j_prop_1" );
|
|
var_1.angles = var_0 gettagangles( "j_prop_1" );
|
|
common_scripts\utility::flag_clear( "disable_rappel_jump" );
|
|
var_2 = var_0 gettagorigin( "J_prop_2" );
|
|
var_3 = var_0 gettagangles( "J_prop_2" );
|
|
combat_rappel_garden_entry_set_small_rotate_jump();
|
|
combat_rappel_garden_entry_set_small_legs_jump();
|
|
var_4 = 0.7;
|
|
var_5 = getanimlength( level.rappel_legs_jump_anim );
|
|
var_6 = var_5 * var_4;
|
|
var_7 = var_5 * 0.8;
|
|
level.player_torso_offset_origin linkto( level.rappel_player_legs, "tag_origin" );
|
|
level.rpl_physical_rope_origin delete();
|
|
maps\cornered_code_rappel::player_rappel_force_jump_away( var_1 );
|
|
thread combat_rappel_garden_entry_rotate_legs( var_6 );
|
|
thread maps\cornered_code::lerp_entity_to_position_accurate( level.cnd_rappel_player_rope, var_2, var_3, var_6 );
|
|
common_scripts\utility::waitframe();
|
|
common_scripts\utility::flag_set( "disable_rappel_jump" );
|
|
level waittill( "player_force_jump_landed" );
|
|
maps\cornered_code_rappel::cornered_stop_rappel();
|
|
level.player maps\cornered_code::player_stop_flap_sleeves();
|
|
level.rappel_legs_jump_anim = undefined;
|
|
level.rappel_rotate_jump_anim = undefined;
|
|
}
|
|
|
|
combat_rappel_garden_entry_rotate_legs( var_0 )
|
|
{
|
|
var_1 = var_0 / 0.05;
|
|
var_2 = level.rappel_player_legs.angles[2];
|
|
var_3 = -1 * var_2 / var_1;
|
|
common_scripts\utility::waitframe();
|
|
|
|
for ( var_4 = 0; var_4 < var_1; var_4++ )
|
|
{
|
|
level.rappel_player_legs unlink();
|
|
var_5 = level.rappel_player_legs.angles[2] + var_3;
|
|
var_6 = ( level.rappel_player_legs.angles[0], level.rappel_player_legs.angles[1], var_5 );
|
|
level.rappel_player_legs.angles = var_6;
|
|
level.rappel_player_legs linkto( level.rpl_plyr_legs_link_ent );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
#using_animtree("player");
|
|
|
|
combat_rappel_garden_entry_set_small_legs_jump()
|
|
{
|
|
level.rappel_legs_jump_anim = %cnd_rappel_small_jump_playerlegs;
|
|
}
|
|
|
|
combat_rappel_garden_entry_blend_to_position( var_0, var_1 )
|
|
{
|
|
var_2 = var_1 gettagorigin( "J_prop_1" );
|
|
var_3 = var_1 gettagangles( "J_prop_1" );
|
|
var_4 = var_1 gettagorigin( "J_prop_2" );
|
|
var_5 = var_1 gettagangles( "J_prop_2" );
|
|
maps\_utility::delaythread( var_0, ::player_clear_groundref );
|
|
thread maps\cornered_code::lerp_entity_to_position_accurate( level.rappel_player_legs, var_2, var_3, var_0 );
|
|
level.player playerlinktoblend( level.rappel_player_arms, "tag_player", var_0 );
|
|
|
|
foreach ( var_7 in level.allies )
|
|
var_7 maps\cornered_code_rappel_allies::ally_rappel_stop_rope();
|
|
|
|
wait( var_0 );
|
|
level.rappel_player_legs linkto( var_1, "J_prop_1", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
level.cnd_rappel_player_rope linkto( var_1, "J_prop_2", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
}
|
|
|
|
combat_rappel_garden_entry_finish_player_rope( var_0 )
|
|
{
|
|
var_1 = var_0.anim_length;
|
|
var_2 = 3.8;
|
|
var_3 = var_1 - var_2;
|
|
wait( var_2 );
|
|
level.cnd_rappel_player_rope unlink();
|
|
wait( var_3 );
|
|
level.cnd_rappel_player_rope delete();
|
|
}
|
|
|
|
setup_garden_entry()
|
|
{
|
|
combat_rappel_garden_entry_setup_jumpoints();
|
|
combat_rappel_garden_entry_setup_glass();
|
|
}
|
|
|
|
player_clear_groundref()
|
|
{
|
|
level.player playersetgroundreferenceent( undefined );
|
|
common_scripts\utility::waitframe();
|
|
level.player playerlinktodelta( level.rappel_player_arms, "tag_player", 1, 55, 55, 55, 10, 0 );
|
|
}
|
|
|
|
allies_to_rappel()
|
|
{
|
|
if ( !isdefined( self.magic_bullet_shield ) )
|
|
maps\_utility::magic_bullet_shield();
|
|
|
|
if ( isdefined( level.combat_rappel_startpoint ) )
|
|
level.player_start_rappel_struct thread maps\_anim::anim_loop_solo( self, "cornered_junction_c4_idle_" + self.animname, "stop_loop_" + self.animname );
|
|
|
|
common_scripts\utility::flag_wait( "c_rappel_player_on_rope" );
|
|
thread allies_rappel_anims();
|
|
}
|
|
|
|
allies_rappel_anims()
|
|
{
|
|
if ( self.animname == "rorke" )
|
|
{
|
|
if ( !isdefined( level.rorke_and_combat_rappel_rope ) )
|
|
{
|
|
level.combat_rappel_rope_rorke = maps\_utility::spawn_anim_model( "cnd_rappel_tele_rope" );
|
|
level.combat_rappel_rope_rorke.animname = "combat_rappel_exit_rope_rorke";
|
|
level.rorke_and_combat_rappel_rope = [];
|
|
level.rorke_and_combat_rappel_rope[0] = self;
|
|
level.rorke_and_combat_rappel_rope[1] = level.combat_rappel_rope_rorke;
|
|
level.player_start_rappel_struct maps\_anim::anim_first_frame_solo( level.combat_rappel_rope_rorke, "combat_rappel_building_exit_rorke" );
|
|
}
|
|
|
|
level.player_start_rappel_struct notify( "stop_loop_rorke" );
|
|
level.player_start_rappel_struct maps\_anim::anim_single( level.rorke_and_combat_rappel_rope, "combat_rappel_building_exit_rorke" );
|
|
level.combat_rappel_rope_rorke delete();
|
|
maps\cornered_code_rappel_allies::ally_rappel_start_rope( "combat" );
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_wait( "baker_start_jump" );
|
|
level.player_start_rappel_struct notify( "stop_loop_baker" );
|
|
self.move_type = "animating";
|
|
thread die_hard_explosion_fx();
|
|
thread maps\cornered_audio::aud_rappel_combat( "explode" );
|
|
var_0 = maps\_utility::spawn_anim_model( "cnd_rappel_tele_rope" );
|
|
var_0.animname = "rope";
|
|
var_1 = [];
|
|
var_1[0] = self;
|
|
var_1[1] = var_0;
|
|
level.player_start_rappel_struct maps\_anim::anim_first_frame( var_1, "combat_rappel_building_exit_baker" );
|
|
level.player_start_rappel_struct maps\_anim::anim_single( var_1, "combat_rappel_building_exit_baker" );
|
|
var_0 delete();
|
|
maps\cornered_code_rappel_allies::ally_rappel_start_rope( "combat" );
|
|
}
|
|
|
|
level.flag_to_check = "all_rappel_one_enemies_in_front_dead";
|
|
thread maps\cornered_code_rappel_allies::ally_rappel_start_movement_horizontal( "combat", "one", "c_rappel_second_jump_starting" );
|
|
common_scripts\utility::flag_wait( "c_rappel_second_jump_starting" );
|
|
level.flag_to_check = "all_rappel_two_enemies_in_front_dead";
|
|
self notify( "stop_loop" );
|
|
waittillframeend;
|
|
maps\cornered_code_rappel_allies::ally_rappel_stop_aiming();
|
|
maps\cornered_code_rappel_allies::ally_rappel_stop_shooting();
|
|
level.player_start_rappel_struct maps\_anim::anim_single_solo( self, "cornered_combat_rappel_jump_down_" + self.animname );
|
|
maps\cornered_code_rappel_allies::ally_rappel_start_aiming( "combat" );
|
|
maps\cornered_code_rappel_allies::ally_rappel_start_shooting();
|
|
thread maps\cornered_code_rappel_allies::ally_rappel_start_movement_horizontal( "combat", "two", "c_rappel_final_jump_starting" );
|
|
}
|
|
|
|
die_hard_explosion_fx()
|
|
{
|
|
wait 0.95;
|
|
common_scripts\utility::exploder( "diehard_explosion" );
|
|
level.player playrumbleonentity( "heavy_2s" );
|
|
earthquake( 0.25, 1, level.player.origin, 800 );
|
|
}
|
|
|
|
allies_rappel_vo()
|
|
{
|
|
common_scripts\utility::flag_wait( "here_they_come" );
|
|
level.allies[level.const_rorke] maps\_utility::smart_dialogue( "cornered_mrk_heretheycome" );
|
|
wait 1;
|
|
level.allies[level.const_rorke] maps\_utility::smart_dialogue( "cornered_kgn_makeitquickhesh" );
|
|
common_scripts\utility::flag_wait( "c_rappel_first_jump_done" );
|
|
wait 1.25;
|
|
thread maps\_utility::smart_radio_dialogue_interrupt( "cornered_hsh_aboveus" );
|
|
thread copymachine_falling_vo();
|
|
common_scripts\utility::flag_wait( "floor_clear" );
|
|
wait 1.0;
|
|
common_scripts\utility::flag_clear( "floor_clear" );
|
|
thread maps\_utility::smart_radio_dialogue_interrupt( "cornered_mrk_enemiesonthefloor" );
|
|
common_scripts\utility::flag_set( "c_rappel_jumpdown_allowed" );
|
|
common_scripts\utility::flag_wait( "c_rappel_second_jump_done" );
|
|
wait 2.0;
|
|
common_scripts\utility::flag_wait( "move_into_building" );
|
|
maps\_utility::smart_radio_dialogue_interrupt( "cornered_hsh_weneedtoget" );
|
|
common_scripts\utility::flag_set( "c_rappel_jumpdown_allowed" );
|
|
}
|
|
|
|
copymachine_falling_vo()
|
|
{
|
|
common_scripts\utility::flag_wait( "copymachine_go" );
|
|
wait 2;
|
|
}
|
|
|
|
combat_rappel_enemies_pt1()
|
|
{
|
|
level.balcony_fall_deaths = 0;
|
|
level.total_balcony_deaths = 0;
|
|
level.last_balcony_death = 0;
|
|
level.last_balcony_death_idx = 1;
|
|
level.enemies_above = [];
|
|
common_scripts\utility::flag_wait( "c_rappel_player_on_rope" );
|
|
thread break_enemy_windows();
|
|
thread enemy_drones_junction_hallway();
|
|
thread enemy_drones_pt1_upper();
|
|
thread enemy_drones_pt1_lower();
|
|
level.cr_rorke_volume = getent( "cr_rorke_side", "targetname" );
|
|
level.cr_baker_volume = getent( "cr_baker_side", "targetname" );
|
|
wait 5.0;
|
|
thread enemy_drones_pt1_lower_runners();
|
|
common_scripts\utility::flag_wait( "part_one_start" );
|
|
wait 1;
|
|
level.enemies_above_killed = 0;
|
|
maps\_utility::array_spawn_function_targetname( "enemies_above_lower_floor", maps\cornered_code::death_func );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_above_lower_floor", ::enemies_pt1_lower_behavior );
|
|
thread randomly_spawn_above_enemies_targetname( "enemies_above_lower_floor" );
|
|
common_scripts\utility::waitframe();
|
|
maps\_utility::array_spawn_function_targetname( "enemies_above_upper_floor", maps\cornered_code::death_func );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_above_upper_floor", ::enemies_pt1_upper_behavior );
|
|
thread randomly_spawn_above_enemies_targetname( "enemies_above_upper_floor" );
|
|
maps\cornered_code::waittill_enemies_above_killed( 3, 15 );
|
|
thread copymachine_window_event();
|
|
maps\_utility::stop_exploder( 12 );
|
|
maps\_utility::stop_exploder( 13 );
|
|
maps\_utility::stop_exploder( 14 );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_above_junction_floor", maps\cornered_code::death_func );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_above_junction_floor", ::enemies_pt1_junction_behavior );
|
|
randomly_spawn_above_enemies_targetname( "enemies_above_junction_floor" );
|
|
level.enemies_above = maps\_utility::array_removedead( level.enemies_above );
|
|
|
|
while ( level.enemies_above.size >= 2 )
|
|
{
|
|
level.enemies_above = maps\_utility::array_removedead( level.enemies_above );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "move_on_from_part_one" );
|
|
common_scripts\utility::flag_set( "part_one_complete" );
|
|
common_scripts\utility::flag_set( "floor_clear" );
|
|
thread maps\_utility::autosave_now();
|
|
common_scripts\utility::flag_wait( "c_rappel_player_pressed_jump" );
|
|
thread combat_rappel_enemies_pt2();
|
|
}
|
|
|
|
randomly_spawn_above_enemies_targetname( var_0 )
|
|
{
|
|
var_1 = getentarray( var_0, "targetname" );
|
|
var_1 = common_scripts\utility::array_randomize( var_1 );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( level.enemies_above.size > 0 )
|
|
{
|
|
var_4 = randomfloatrange( 0.4, 1 );
|
|
wait( var_4 );
|
|
}
|
|
|
|
var_3.count = 1;
|
|
var_5 = var_3 maps\_utility::spawn_ai( 1 );
|
|
level.enemies_above[level.enemies_above.size] = var_5;
|
|
}
|
|
}
|
|
|
|
enemy_drones_junction_hallway()
|
|
{
|
|
var_0 = getentarray( "junction_runner_drones", "targetname" );
|
|
wait 1.5;
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::spawn_ai, 1 );
|
|
}
|
|
|
|
enemy_drones_pt1_upper()
|
|
{
|
|
var_0 = getentarray( "hallway_talker_drone", "targetname" );
|
|
maps\_utility::array_spawn_function_targetname( "hallway_talker_drone", ::enemy_drone_anim, undefined, 12.0, 1 );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::spawn_ai, 1 );
|
|
wait 2.0;
|
|
var_1 = getentarray( "hallway_runner_drone", "targetname" );
|
|
common_scripts\utility::array_thread( var_1, maps\_utility::spawn_ai, 1 );
|
|
}
|
|
|
|
enemy_drones_pt1_lower()
|
|
{
|
|
var_0 = getentarray( "lower_drone", "targetname" );
|
|
maps\_utility::array_spawn_function_targetname( "lower_drone", ::enemy_drone_anim, 0, 11.5 );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::spawn_ai, 1 );
|
|
}
|
|
|
|
enemy_drones_pt1_lower_runners()
|
|
{
|
|
var_0 = getentarray( "lower_drone_runners", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::spawn_ai, 1 );
|
|
}
|
|
|
|
enemy_drone_anim( var_0, var_1, var_2 )
|
|
{
|
|
if ( isdefined( var_0 ) && var_0 != 0 )
|
|
wait( var_0 );
|
|
|
|
if ( isdefined( var_2 ) && var_2 == 1 )
|
|
thread maps\_anim::anim_generic_loop( self, self.script_animation );
|
|
else
|
|
thread maps\_anim::anim_generic( self, self.script_animation );
|
|
|
|
if ( isdefined( var_1 ) && var_1 != 0 )
|
|
wait( var_1 );
|
|
|
|
self delete();
|
|
}
|
|
|
|
enemies_pt1_lower_behavior()
|
|
{
|
|
thread enemy_pt1_setup( "p1_lower_floor_node" );
|
|
}
|
|
|
|
enemies_pt1_upper_behavior()
|
|
{
|
|
thread enemy_pt1_setup( "p1_upper_floor_node" );
|
|
}
|
|
|
|
enemies_pt1_junction_behavior()
|
|
{
|
|
thread enemy_pt1_setup( "p1_junction_floor_node" );
|
|
}
|
|
|
|
enemy_pt1_setup( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "enemy_above_shot" );
|
|
self.baseaccuracy = 1;
|
|
maps\_utility::disable_long_death();
|
|
self.animname = "generic";
|
|
self.allowdeath = 1;
|
|
var_1 = getnodearray( var_0, "targetname" );
|
|
var_2 = eliminate_used_nodes( var_1 );
|
|
var_3 = sortbydistance( var_2, self.origin );
|
|
var_4 = randomint( 2 );
|
|
|
|
if ( var_4 == 1 )
|
|
var_5 = var_3[1];
|
|
else
|
|
var_5 = var_3[0];
|
|
|
|
if ( self.script_noteworthy == "p1_lower" )
|
|
{
|
|
foreach ( var_7 in var_2 )
|
|
{
|
|
if ( isdefined( var_7.script_noteworthy ) && var_7.script_noteworthy == "p1_lower_center_node" )
|
|
var_5 = var_7;
|
|
}
|
|
}
|
|
|
|
var_5.chosen = 1;
|
|
self forceteleport( var_5.origin, var_5.angles );
|
|
|
|
while ( !common_scripts\utility::flag( "move_on_from_part_one" ) )
|
|
{
|
|
self.isanimating = 1;
|
|
play_random_window_lean_anim( var_5 );
|
|
self.isanimating = 0;
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
send_to_death_volume();
|
|
}
|
|
|
|
play_random_window_lean_anim( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "enemy_above_shot" );
|
|
var_1 = randomintrange( 1, 8 );
|
|
|
|
if ( distance( self.origin, level.player.origin ) <= 256 )
|
|
var_1 = 2;
|
|
|
|
if ( self istouching( level.cr_rorke_volume ) && var_1 == 3 )
|
|
var_1 = 4;
|
|
|
|
if ( self istouching( level.cr_baker_volume ) && var_1 == 4 )
|
|
var_1 = 3;
|
|
|
|
var_0 maps\_anim::anim_single_solo( self, "enemy_above_" + var_1 + "_start" );
|
|
thread maps\_anim::anim_loop_solo( self, "enemy_above_" + var_1 + "_loop", "stop_loop" );
|
|
|
|
if ( var_1 == 5 || var_1 == 6 || var_1 == 7 )
|
|
var_2 = randomfloatrange( 1.0, 2.25 );
|
|
else
|
|
var_2 = randomintrange( 5, 10 );
|
|
|
|
wait( var_2 );
|
|
self notify( "stop_loop" );
|
|
maps\_anim::anim_single_solo( self, "enemy_above_" + var_1 + "_end" );
|
|
}
|
|
|
|
eliminate_used_nodes( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( !isdefined( var_3.chosen ) || !var_3.chosen )
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
copymachine_window_event()
|
|
{
|
|
var_0 = getnodearray( "p1_junction_floor_node", "targetname" );
|
|
var_1 = common_scripts\utility::getclosest( level.player.origin, var_0 );
|
|
level.closest_start_struct = common_scripts\utility::getstruct( var_1.target, "targetname" );
|
|
common_scripts\utility::waitframe();
|
|
maps\_utility::array_spawn_function_targetname( "copier_dude", maps\cornered_code::death_func );
|
|
maps\_utility::array_spawn_function_targetname( "copier_dude", ::copymachine_ai );
|
|
common_scripts\utility::waitframe();
|
|
var_2 = maps\_utility::array_spawn_targetname( "copier_dude", 1 );
|
|
level.enemies_above = common_scripts\utility::array_combine( var_2, level.enemies_above );
|
|
level.player childthread maps\cornered_code::watch_player_pitch_in_volume( "copymachine_window_event_volume", "copymachine", "stop_watch_player_pitch" );
|
|
common_scripts\utility::flag_wait( "stop_watch_player_pitch" );
|
|
common_scripts\utility::flag_set( "player_has_looked_up" );
|
|
level.copymachine_rig = maps\_utility::spawn_anim_model( "copymachine_rig", level.closest_start_struct.origin );
|
|
level.copymachine_rig.angles = level.closest_start_struct.angles;
|
|
waittillframeend;
|
|
level.copymachine linkto( level.copymachine_rig, "J_prop_1", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
level.copymachine_rig maps\_anim::anim_first_frame_solo( level.copymachine_rig, "copymachine_fall" );
|
|
level.copymachine show();
|
|
level.copymachine_rig thread maps\_anim::anim_single_solo( level.copymachine_rig, "copymachine_fall" );
|
|
thread maps\cornered_audio::aud_rappel_combat( "copy", level.copymachine_rig );
|
|
common_scripts\utility::flag_set( "copymachine_go" );
|
|
var_3 = getent( "copymachine_clip", "targetname" );
|
|
var_3 linkto( level.copymachine_rig, "J_prop_1", ( 0, -8, 20 ), ( 0, 0, 0 ) );
|
|
var_3 thread copymachine_hit_detect( "copymachine_anim_done" );
|
|
level.copymachine_rig waittillmatch( "single anim", "end" );
|
|
level.copymachine unlink();
|
|
level.copymachine physicslaunchclient( level.copymachine.origin + ( 0, 0, 4 ), ( 0, 0, -600 ) );
|
|
level.copymachine_rig delete();
|
|
common_scripts\utility::flag_set( "copymachine_anim_done" );
|
|
thread copymachine_cleanup();
|
|
}
|
|
|
|
copymachine_hit_detect( var_0 )
|
|
{
|
|
level endon( var_0 );
|
|
common_scripts\utility::flag_clear( "stop_dmg_check" );
|
|
var_1 = level.player.maxhealth * 0.7;
|
|
|
|
while ( !common_scripts\utility::flag( "stop_dmg_check" ) )
|
|
{
|
|
var_2 = self istouching( level.player );
|
|
|
|
if ( var_2 )
|
|
{
|
|
level.player dodamage( var_1, self.origin, self );
|
|
thread maps\cornered_audio::aud_rappel_combat( "hit" );
|
|
common_scripts\utility::flag_set( "stop_dmg_check" );
|
|
level.player maps\_utility::player_giveachievement_wrapper( "LEVEL_7B" );
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
copymachine_ai()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "enemy_above_shot" );
|
|
var_0 = getnode( level.closest_start_struct.script_noteworthy + "_node_1", "script_noteworthy" );
|
|
self setgoalnode( var_0 );
|
|
maps\_utility::set_goal_radius( 8 );
|
|
wait 0.1;
|
|
var_1 = getnode( var_0.script_linkto, "script_linkname" );
|
|
self setgoalnode( var_1 );
|
|
wait 0.75;
|
|
self forceteleport( self.origin, var_1.angles );
|
|
self.animname = "generic";
|
|
self.allowdeath = 1;
|
|
self.ignoreall = 0;
|
|
common_scripts\utility::flag_set( "copymachine_ai_done" );
|
|
|
|
while ( !common_scripts\utility::flag( "move_on_from_part_one" ) )
|
|
{
|
|
self.isanimating = 1;
|
|
play_random_window_lean_anim( var_1 );
|
|
self.isanimating = 0;
|
|
}
|
|
}
|
|
|
|
copymachine_break_glass( var_0 )
|
|
{
|
|
var_1 = common_scripts\utility::getstructarray( "p1_upper_glass_damage_struct", "targetname" );
|
|
var_2 = common_scripts\utility::getclosest( level.closest_start_struct.origin, var_1 );
|
|
glassradiusdamage( var_2.origin, 96, 50, 50 );
|
|
var_3 = common_scripts\utility::spawn_tag_origin();
|
|
var_3.origin = var_2.origin;
|
|
playfxontag( common_scripts\utility::getfx( "copier_papers_falling" ), var_3, "tag_origin" );
|
|
wait 5;
|
|
var_3 delete();
|
|
}
|
|
|
|
copymachine_cleanup()
|
|
{
|
|
common_scripts\utility::flag_wait( "rappel_finished" );
|
|
|
|
if ( isdefined( level.copymachine ) )
|
|
level.copymachine delete();
|
|
}
|
|
|
|
combat_rappel_enemies_pt2()
|
|
{
|
|
level endon( "rappel_finished" );
|
|
maps\_utility::array_spawn_function_targetname( "p2_first_wave_downstairs", ::enemy_spawner_setup );
|
|
maps\_utility::array_spawn_function_targetname( "p2_first_wave_downstairs", ::enemy_lower_level );
|
|
maps\_utility::array_spawn_function_targetname( "p2_first_wave_upstairs", ::enemy_spawner_setup );
|
|
maps\_utility::array_spawn_function_targetname( "p2_first_wave_upstairs", ::pt2_upper_enemy_anim );
|
|
maps\_utility::array_spawn_function_targetname( "p2_second_wave_downstairs", ::enemy_spawner_setup );
|
|
maps\_utility::array_spawn_function_targetname( "p2_second_wave_upstairs", ::enemy_spawner_setup );
|
|
level.rappel_combat_two_volume_upstairs = getent( "rappel_combat_two_volume_upstairs", "targetname" );
|
|
level.rappel_combat_two_volume_downstairs = getent( "rappel_combat_two_volume_downstairs", "targetname" );
|
|
level.all_rappel_pt3_enemies = [];
|
|
level.all_rappel_pt3_downstairs_enemies = [];
|
|
var_0 = maps\_utility::array_spawn_targetname( "p2_first_wave_downstairs", 1 );
|
|
level.all_rappel_pt3_downstairs_enemies = var_0;
|
|
var_1 = maps\_utility::array_spawn_targetname( "p2_first_wave_upstairs", 1 );
|
|
level.all_rappel_pt3_enemies = common_scripts\utility::array_combine( var_1, var_0 );
|
|
thread monitor_deaths_on_dynamic_array( level.all_rappel_pt3_enemies, "move_into_building", 6, 20 );
|
|
maps\_utility::waittill_dead_or_dying( level.all_rappel_pt3_enemies, 3 );
|
|
var_2 = maps\_utility::array_spawn_targetname( "p2_second_wave_downstairs", 1 );
|
|
level.all_rappel_pt3_enemies = common_scripts\utility::array_combine( level.all_rappel_pt3_enemies, var_2 );
|
|
level.all_rappel_pt3_downstairs_enemies = common_scripts\utility::array_combine( level.all_rappel_pt3_downstairs_enemies, var_2 );
|
|
var_3 = maps\_utility::array_spawn_targetname( "p2_second_wave_upstairs", 1 );
|
|
level.all_rappel_pt3_enemies = common_scripts\utility::array_combine( level.all_rappel_pt3_enemies, var_3 );
|
|
common_scripts\utility::flag_wait( "move_into_building" );
|
|
wait 1.0;
|
|
thread player_kills_all_pt3_enemies();
|
|
thread kill_pt3_enemies_on_player_jump();
|
|
common_scripts\utility::flag_set( "floor_clear" );
|
|
}
|
|
|
|
enemy_spawner_setup()
|
|
{
|
|
self endon( "death" );
|
|
self.baseaccuracy = 0.2;
|
|
maps\_utility::disable_long_death();
|
|
}
|
|
|
|
pt2_upper_enemy_anim()
|
|
{
|
|
if ( isdefined( self.script_animation ) )
|
|
{
|
|
self.allowdeath = 1;
|
|
var_0 = getent( "rappel_combat_two_volume_upstairs", "targetname" );
|
|
maps\_anim::anim_generic( self, self.script_animation );
|
|
self setgoalvolumeauto( var_0 );
|
|
}
|
|
}
|
|
|
|
enemy_lower_level()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "c_rappel_final_jump_starting" );
|
|
self.ignoreall = 1;
|
|
self waittill( "goal" );
|
|
self.ignoreall = 0;
|
|
self setgoalvolumeauto( level.rappel_combat_two_volume_downstairs );
|
|
self waittill( "goal" );
|
|
}
|
|
|
|
kill_pt3_enemies_on_player_jump()
|
|
{
|
|
common_scripts\utility::flag_wait( "rappel_finished" );
|
|
wait 4.0;
|
|
level.all_rappel_pt3_enemies = maps\_utility::array_removedead( level.all_rappel_pt3_enemies );
|
|
|
|
if ( level.all_rappel_pt3_enemies.size > 0 )
|
|
{
|
|
foreach ( var_1 in level.all_rappel_pt3_enemies )
|
|
{
|
|
if ( isalive( var_1 ) )
|
|
{
|
|
if ( isdefined( var_1.magic_bullet_shield ) && var_1.magic_bullet_shield )
|
|
var_1 maps\_utility::stop_magic_bullet_shield();
|
|
|
|
var_1 kill();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
player_kills_all_pt3_enemies()
|
|
{
|
|
level endon( "c_rappel_final_jump_starting" );
|
|
level.all_rappel_pt3_enemies = maps\_utility::array_removedead( level.all_rappel_pt3_enemies );
|
|
maps\_utility::waittill_dead_or_dying( level.all_rappel_pt3_enemies );
|
|
common_scripts\utility::flag_set( "all_rappel_two_enemies_in_front_dead" );
|
|
level.flag_to_check = undefined;
|
|
}
|
|
|
|
monitor_deaths_on_dynamic_array( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "timeout" );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 10;
|
|
|
|
var_4 = 0;
|
|
thread monitor_timeout( var_3, var_1 );
|
|
|
|
for (;;)
|
|
{
|
|
maps\_utility::waittill_dead_or_dying( var_0, 1 );
|
|
var_4++;
|
|
var_0 = maps\_utility::array_removedead( var_0 );
|
|
|
|
if ( var_4 >= var_2 )
|
|
break;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( var_1 );
|
|
}
|
|
|
|
monitor_timeout( var_0, var_1 )
|
|
{
|
|
wait( var_0 );
|
|
self notify( "timeout" );
|
|
|
|
if ( !common_scripts\utility::flag( var_1 ) )
|
|
common_scripts\utility::flag_set( var_1 );
|
|
}
|
|
|
|
break_enemy_windows()
|
|
{
|
|
wait 10.5;
|
|
thread break_window( "p1_upper" );
|
|
wait 0.5;
|
|
thread break_window( "p1_lower" );
|
|
}
|
|
|
|
break_window( var_0 )
|
|
{
|
|
for ( var_1 = 1; var_1 <= 8; var_1++ )
|
|
{
|
|
var_2 = common_scripts\utility::getstruct( var_0 + "_glass_damage_struct_" + var_1, "script_noteworthy" );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
glassradiusdamage( var_2.origin, 96, 50, 50 );
|
|
}
|
|
}
|
|
|
|
send_to_death_volume()
|
|
{
|
|
self endon( "death" );
|
|
var_0 = undefined;
|
|
|
|
if ( isalive( self ) && self.script_noteworthy == "p1_upper" )
|
|
var_0 = getent( "p1_upper_volume", "targetname" );
|
|
else if ( isalive( self ) && self.script_noteworthy == "copymachine_ai" || isalive( self ) && self.script_noteworthy == "p1_junction" )
|
|
var_0 = getent( "p1_junction_volume", "targetname" );
|
|
else if ( isalive( self ) && self.script_noteworthy == "p1_lower" )
|
|
var_0 = getent( "p1_lower_volume", "targetname" );
|
|
else if ( isalive( self ) && self.script_noteworthy == "p1_ahead" )
|
|
{
|
|
var_1 = getentarray( "p1_ahead_volume", "targetname" );
|
|
var_1 = sortbydistance( var_1, self.origin );
|
|
var_0 = var_1[0];
|
|
}
|
|
|
|
if ( isalive( self ) )
|
|
{
|
|
self setgoalvolumeauto( var_0 );
|
|
common_scripts\utility::waittill_notify_or_timeout( "goal", 5 );
|
|
self notify( "stop_death_func" );
|
|
}
|
|
|
|
if ( isalive( self ) )
|
|
{
|
|
if ( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield )
|
|
maps\_utility::stop_magic_bullet_shield();
|
|
|
|
self kill();
|
|
}
|
|
}
|