iw6-scripts/maps/cornered_rappel.gsc
2024-02-13 13:20:49 +01:00

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();
}
}