1445 lines
52 KiB
Plaintext
1445 lines
52 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
enemyhq_basement_pre_load()
|
|
{
|
|
common_scripts\utility::flag_init( "basement_combat_done" );
|
|
common_scripts\utility::flag_init( "gas_guys_dead" );
|
|
common_scripts\utility::flag_init( "cage_guys2" );
|
|
common_scripts\utility::flag_init( "flee_guys_dead" );
|
|
common_scripts\utility::flag_init( "ready_to_throw" );
|
|
common_scripts\utility::flag_init( "clubhouse_done" );
|
|
common_scripts\utility::flag_init( "hvt_done" );
|
|
common_scripts\utility::flag_init( "pick_up_bishop" );
|
|
common_scripts\utility::flag_init( "slowmo_over" );
|
|
common_scripts\utility::flag_init( "start_gas_scene" );
|
|
common_scripts\utility::flag_init( "cage_runners" );
|
|
common_scripts\utility::flag_init( "dog_scratching" );
|
|
common_scripts\utility::flag_init( "basement_guys_dead" );
|
|
common_scripts\utility::flag_init( "enter_cage_vo" );
|
|
common_scripts\utility::flag_init( "cage_firing" );
|
|
common_scripts\utility::flag_init( "cage_firing1" );
|
|
common_scripts\utility::flag_init( "cage_firing2" );
|
|
common_scripts\utility::flag_init( "tossed_gas" );
|
|
common_scripts\utility::flag_init( "gassed_out" );
|
|
common_scripts\utility::flag_init( "bishop_keegan_interact" );
|
|
common_scripts\utility::flag_init( "breach_setup1_ready" );
|
|
common_scripts\utility::flag_init( "start_the_dog" );
|
|
common_scripts\utility::flag_init( "go_under_debris" );
|
|
common_scripts\utility::flag_init( "pre_breach_hall" );
|
|
common_scripts\utility::flag_init( "drop_flare" );
|
|
common_scripts\utility::flag_init( "pickup_flare" );
|
|
common_scripts\utility::flag_init( "start_hesh_rescue" );
|
|
common_scripts\utility::flag_init( "start_merrick_rescue" );
|
|
common_scripts\utility::flag_init( "dog_leave_rescue" );
|
|
common_scripts\utility::flag_init( "to_trophy_room" );
|
|
common_scripts\utility::flag_init( "enemies_surprised" );
|
|
common_scripts\utility::flag_init( "media_room_clear" );
|
|
common_scripts\utility::flag_init( "keegan_at_gas_door" );
|
|
common_scripts\utility::flag_init( "keegan_breach" );
|
|
common_scripts\utility::flag_init( "start_hvt_rescue" );
|
|
common_scripts\utility::flag_init( "allies_in_position" );
|
|
common_scripts\utility::flag_init( "teargas_hot" );
|
|
common_scripts\utility::flag_init( "basement_teargas_done" );
|
|
}
|
|
|
|
escape_objective()
|
|
{
|
|
var_0 = maps\_utility::obj( "escapeobj" );
|
|
objective_add( var_0, "current", &"ENEMY_HQ_ESCAPE_FROM_THE_ENEMY" );
|
|
common_scripts\utility::flag_wait( "obj_escape_complete" );
|
|
maps\_utility::objective_complete( var_0 );
|
|
}
|
|
|
|
setup_combat()
|
|
{
|
|
level.start_point = "basement_combat";
|
|
maps\enemyhq::setup_common();
|
|
thread maps\enemyhq_audio::aud_check( "combat" );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "basement_ally_combat1" );
|
|
give_player_teargas();
|
|
common_scripts\utility::array_thread( level.allies, maps\enemyhq_code::stream_waterfx, "breach_activate", "step_walk_water" );
|
|
level.player thread maps\enemyhq_code::gasmask_hud_on();
|
|
level.player notify( "dog_guard_me" );
|
|
}
|
|
|
|
begin_combat()
|
|
{
|
|
var_0 = getent( "clubhouse_breach_light", "targetname" );
|
|
var_0 setlightintensity( 0 );
|
|
maps\_utility::disable_trigger_with_targetname( "breach_trigger" );
|
|
var_1 = getent( "clubhouse_doorhandle2_obj", "targetname" );
|
|
var_2 = getent( "clubhouse_doorhandle3_obj", "targetname" );
|
|
var_1 hide();
|
|
var_2 hide();
|
|
var_3 = getent( "clubhouse_door1a_handle", "targetname" );
|
|
var_4 = getent( "clubhouse_door1a", "targetname" );
|
|
var_3 linkto( var_4 );
|
|
var_3 = getent( "clubhouse_door1_handle", "targetname" );
|
|
var_4 = getent( "clubhouse_door1", "targetname" );
|
|
var_3 linkto( var_4 );
|
|
thread basement_ally_movement();
|
|
thread basement_combat_handlers();
|
|
thread combat_vo();
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
maps\_utility::battlechatter_on( "axis" );
|
|
wait 1;
|
|
maps\_utility::autosave_by_name( "basement_combat" );
|
|
thread media_guys();
|
|
thread new_glowstick_scene();
|
|
thread handle_pickup_flare();
|
|
common_scripts\utility::flag_wait( "enter_media_room" );
|
|
level.dog maps\enemyhq_code::set_dog_scripted_mode( level.player );
|
|
common_scripts\utility::flag_wait( "basement_combat_done" );
|
|
}
|
|
|
|
combat_vo()
|
|
{
|
|
level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_quickbeforetheymove" );
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
common_scripts\utility::flag_wait( "basement_final_stand" );
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
level.dog waittill( "start_sniffing" );
|
|
level.dog playsound( "anml_dog_bark" );
|
|
wait 1;
|
|
level.allies[2] thread maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_hsh_rileyspickedupthe" );
|
|
thread maps\enemyhq_audio::aud_flare_grab();
|
|
level.dog waittill( "stop_sniffing" );
|
|
wait 2.5;
|
|
level.dog playsound( "anml_dog_bark" );
|
|
wait 1;
|
|
level.dog playsound( "anml_dog_bark" );
|
|
wait 1;
|
|
thread dog_scratch_scene();
|
|
level.allies[2] thread maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_hsh_mustbeclosenow" );
|
|
common_scripts\utility::flag_wait( "dog_scratching" );
|
|
level.allies[1] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_kgn_thismustbewhere" );
|
|
common_scripts\utility::flag_set( "breach_setup1_ready" );
|
|
level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_keeganadamseeif" );
|
|
level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_wellwaitherefor" );
|
|
wait 2;
|
|
level.allies[1] thread maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_kgn_youandmelogan" );
|
|
}
|
|
|
|
basement_combat_handlers()
|
|
{
|
|
common_scripts\utility::flag_wait( "basement_guys1" );
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
level.dog playsound( "anml_dog_bark" );
|
|
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "basement_guys1" );
|
|
thread maps\enemyhq_code::set_flag_on_killcount( var_0, var_0.size - 1, "basement_guys2" );
|
|
thread handle_basement_guys2();
|
|
thread handle_basement_guys3b();
|
|
thread handle_basement_guys3c();
|
|
common_scripts\utility::flag_wait( "basement_guys3" );
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "basement_guys3" );
|
|
var_1 = getaiarray( "axis" );
|
|
thread maps\enemyhq_code::set_flag_on_killcount( var_1, var_1.size - 3, "basement_final_stand" );
|
|
common_scripts\utility::flag_wait( "basement_final_stand" );
|
|
var_0 = getaiarray( "axis" );
|
|
|
|
foreach ( var_3 in var_0 )
|
|
var_3.script_forcecolor = "r";
|
|
|
|
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "basement_guys4" );
|
|
var_1 = getaiarray( "axis" );
|
|
thread maps\enemyhq_code::set_flag_on_killcount( var_1, var_1.size, "basement_guys_dead" );
|
|
common_scripts\utility::flag_wait( "basement_guys_dead" );
|
|
}
|
|
|
|
handle_basement_guys2()
|
|
{
|
|
common_scripts\utility::flag_wait( "basement_guys2" );
|
|
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "basement_guys2" );
|
|
var_1 = getaiarray( "axis" );
|
|
thread maps\enemyhq_code::set_flag_on_killcount( var_1, var_1.size - 3, "basement_guys3" );
|
|
}
|
|
|
|
handle_basement_guys3b()
|
|
{
|
|
common_scripts\utility::flag_wait( "basement_guys3b" );
|
|
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "basement_guys3b" );
|
|
}
|
|
|
|
handle_basement_guys3c()
|
|
{
|
|
common_scripts\utility::flag_wait( "basement_guys3c" );
|
|
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "basement_guys3c" );
|
|
}
|
|
|
|
basement_ally_movement()
|
|
{
|
|
common_scripts\utility::flag_wait( "basement_guys2" );
|
|
wait 1.5;
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "basement_allies2" );
|
|
common_scripts\utility::flag_wait( "basement_final_stand" );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "basement_allies4" );
|
|
common_scripts\utility::flag_wait( "basement_guys_dead" );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "basement_allies5" );
|
|
}
|
|
|
|
setup_teargas()
|
|
{
|
|
level.start_point = "basement_teargas";
|
|
maps\enemyhq::setup_common();
|
|
thread maps\enemyhq_audio::aud_check( "teargas" );
|
|
level.dog maps\enemyhq_code::lock_player_control();
|
|
level.dog maps\enemyhq_code::set_dog_scripted_mode( level.player );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "basement_allies3" );
|
|
}
|
|
|
|
begin_teargas()
|
|
{
|
|
thread maps\_utility::battlechatter_off( "allies" );
|
|
thread maps\_utility::battlechatter_off( "axis" );
|
|
common_scripts\utility::array_thread( level.allies, maps\enemyhq_code::stream_waterfx, "breach_activate", "step_walk_water" );
|
|
var_0 = getaiarray( "axis" );
|
|
common_scripts\utility::array_thread( var_0, maps\enemyhq_code::delete_ai );
|
|
common_scripts\utility::flag_wait( "basement_vision" );
|
|
level notify( "stop_leave_fails" );
|
|
level.player allowprone( 0 );
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::enable_cqbwalk );
|
|
thread teargas_patrol();
|
|
thread handle_gas();
|
|
thread keegan_throw_gas();
|
|
thread teargas_vo();
|
|
thread gas_flee_guys();
|
|
thread teargas_handle_ps4_ssao();
|
|
wait 0.2;
|
|
maps\_utility::autosave_by_name( "teargas" );
|
|
common_scripts\utility::flag_wait( "start_gas_scene_allies" );
|
|
common_scripts\utility::flag_wait_or_timeout( "start_gas_scene", 5 );
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
level.dog playsound( "anml_dog_growl" );
|
|
common_scripts\utility::flag_set( "start_gas_scene" );
|
|
common_scripts\utility::flag_wait( "gassed_out" );
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
common_scripts\utility::flag_wait( "basement_teargas_done" );
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
}
|
|
|
|
teargas_handle_ps4_ssao()
|
|
{
|
|
if ( !level.ps4 )
|
|
return;
|
|
|
|
common_scripts\utility::flag_wait( "gassed_out" );
|
|
wait 5;
|
|
maps\_art::disable_ssao_over_time( 2 );
|
|
level common_scripts\utility::waittill_notify_or_timeout( "basement_guys1", 20 );
|
|
maps\_art::enable_ssao_over_time( 4 );
|
|
}
|
|
|
|
teargas_patrol()
|
|
{
|
|
common_scripts\utility::flag_wait( "start_gas_scene_allies" );
|
|
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "cage_runners", 1 );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2.disablearrivals = 1;
|
|
var_2.disableexits = 1;
|
|
var_2.animname = "generic";
|
|
var_2 maps\_utility::set_run_anim( common_scripts\utility::random( [ "active_patrolwalk_gundown", "patrol_bored_patrolwalk" ] ), 1 );
|
|
var_2.moveplaybackrate = randomfloatrange( 0.85, 1.0 );
|
|
var_2 thread shoot_patrol_kick_off_gas();
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "tossed_gas" );
|
|
var_0 = maps\_utility::array_removedead_or_dying( var_0 );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 setgoalpos( var_2.origin );
|
|
|
|
wait 1;
|
|
var_0 = maps\_utility::array_removedead_or_dying( var_0 );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2.ignoreme = 0;
|
|
var_2.ignoreall = 0;
|
|
}
|
|
}
|
|
|
|
shoot_patrol_kick_off_gas()
|
|
{
|
|
level endon( "tossed_gas" );
|
|
self addaieventlistener( "grenade danger" );
|
|
self addaieventlistener( "projectile_impact" );
|
|
self addaieventlistener( "silenced_shot" );
|
|
self addaieventlistener( "bulletwhizby" );
|
|
self addaieventlistener( "gunshot" );
|
|
self addaieventlistener( "gunshot_teammate" );
|
|
self addaieventlistener( "explode" );
|
|
common_scripts\utility::waittill_any( "ai_event", "death_by_player", "damage_by_player" );
|
|
maps\_utility::battlechatter_on( "axis" );
|
|
maps\_utility::clear_run_anim();
|
|
self.disablearrivals = 0;
|
|
self.disableexits = 0;
|
|
self.ignoreall = 0;
|
|
self setgoalpos( self.origin );
|
|
self getenemyinfo( level.player );
|
|
common_scripts\utility::flag_set( "teargas_hot" );
|
|
common_scripts\utility::flag_set( "ready_to_throw" );
|
|
}
|
|
|
|
stop_externalfx()
|
|
{
|
|
maps\_utility::stop_exploder( 8 );
|
|
maps\_utility::stop_exploder( 89 );
|
|
maps\_utility::stop_exploder( 9090 );
|
|
maps\_utility::stop_exploder( 9080 );
|
|
maps\_utility::stop_exploder( 666 );
|
|
maps\_utility::stop_exploder( 1111 );
|
|
}
|
|
|
|
wait_for_player_gas()
|
|
{
|
|
var_0 = getent( "batting_cage_volume", "script_noteworthy" );
|
|
level.player waittill( "teargas_thrown" );
|
|
common_scripts\utility::flag_set( "tossed_gas" );
|
|
var_0 waittill( "teargas_exploded" );
|
|
common_scripts\utility::flag_set( "gassed_out" );
|
|
}
|
|
|
|
handle_gas()
|
|
{
|
|
thread wait_for_player_gas();
|
|
var_0 = getent( "batting_cage_volume", "script_noteworthy" );
|
|
common_scripts\utility::flag_wait( "gassed_out" );
|
|
wait 2;
|
|
wait 1;
|
|
common_scripts\utility::exploder( 999 );
|
|
var_1 = getent( "maintenance_door1", "targetname" );
|
|
var_1 rotateyaw( -90, 1.0, 0.1, 0.75 );
|
|
var_1 connectpaths();
|
|
stop_externalfx();
|
|
common_scripts\utility::exploder( 308 );
|
|
common_scripts\utility::exploder( 301 );
|
|
var_2 = getentarray( "cage_guys", "targetname" );
|
|
common_scripts\utility::array_thread( var_2, ::spawn_animate_and_get_shot, 200, 1, 1, 1 );
|
|
wait 0.5;
|
|
thread cage_guys2();
|
|
common_scripts\utility::flag_wait_or_timeout( "cage_guys2a", 2 );
|
|
var_2 = getentarray( "cage_guys2a", "targetname" );
|
|
var_3 = [];
|
|
|
|
foreach ( var_5 in var_2 )
|
|
var_3[var_3.size] = var_5 spawn_animate_and_get_shot( 100, 1, 1 );
|
|
|
|
wait 1;
|
|
common_scripts\utility::flag_set( "cage_guys2" );
|
|
common_scripts\utility::flag_set( "enter_cage_vo" );
|
|
wait 0.1;
|
|
var_3 = getaiarray( "axis" );
|
|
thread maps\enemyhq_code::set_flag_on_killcount( var_3, var_3.size - 2, "gas_flee_guys" );
|
|
thread maps\enemyhq_code::set_flag_on_killcount( var_3, var_3.size, "gas_guys_dead" );
|
|
level.dog maps\enemyhq_code::unlock_player_control();
|
|
var_1 = getent( "maintenance_roll_door1", "targetname" );
|
|
var_7 = getent( "teargas_door_clip", "targetname" );
|
|
var_8 = getent( "teargas_door_clip_ai", "targetname" );
|
|
var_9 = common_scripts\utility::getstruct( "battingcage_gas", "targetname" );
|
|
var_10 = maps\_utility::spawn_anim_model( "teargas_door_prop" );
|
|
var_9 thread maps\_anim::anim_first_frame_solo( var_10, "teargas_dooropen" );
|
|
wait 0.05;
|
|
var_1 linkto( var_10, "J_prop_2" );
|
|
level.allies[1].animname = "generic";
|
|
var_1 notsolid();
|
|
var_7 linkto( var_1 );
|
|
var_9 thread maps\_anim::anim_single( [ level.allies[1], var_10 ], "teargas_dooropen" );
|
|
var_10 waittillmatch( "single anim", "end" );
|
|
var_1 unlink();
|
|
var_1 solid();
|
|
var_10 delete();
|
|
var_8 notsolid();
|
|
var_8 connectpaths();
|
|
var_1 connectpaths();
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
level.player allowprone( 1 );
|
|
wait 4.25;
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::disable_cqbwalk );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "battingcage1" );
|
|
level.allies[0] maps\_utility::enable_ai_color();
|
|
wait 1;
|
|
wait 2;
|
|
var_3 = getaiarray( "axis" );
|
|
var_3 = maps\_utility::array_removedead_or_dying( var_3 );
|
|
common_scripts\utility::array_thread( var_3, maps\_utility::set_ignoreme, 0 );
|
|
}
|
|
|
|
keegan_throw_gas()
|
|
{
|
|
var_0 = getnode( "battingcage_gas_node", "targetname" );
|
|
level.allies[1].oldgoalradius = level.allies[1].goalradius;
|
|
level.allies[1] maps\_utility::set_goalradius( 20 );
|
|
level.allies[1] setgoalnode( var_0 );
|
|
level.allies[1] waittill( "goal" );
|
|
level.allies[1] maps\_utility::set_goalradius( level.allies[1].oldgoalradius );
|
|
common_scripts\utility::flag_set( "keegan_at_gas_door" );
|
|
common_scripts\utility::flag_wait_any( "tossed_gas", "ready_to_throw" );
|
|
var_1 = maps\_utility::spawn_anim_model( "clubhouse_grenade" );
|
|
var_2 = maps\_utility::spawn_anim_model( "teargas_grenade_prop" );
|
|
var_1 linkto( var_2, "J_prop_1" );
|
|
var_3 = common_scripts\utility::getstruct( "battingcage_gas", "targetname" );
|
|
level.allies[1].animname = "generic";
|
|
var_3 thread maps\_anim::anim_single( [ level.allies[1], var_2 ], "teargas_initiate" );
|
|
thread breach_grenade_smoke( var_1, 1.6 );
|
|
wait 3.6;
|
|
var_3 = common_scripts\utility::getstruct( "cage_door_gas_targ", "targetname" );
|
|
var_4 = var_3.origin;
|
|
var_3 = common_scripts\utility::getstruct( "cage_door_gas_org", "targetname" );
|
|
var_5 = var_3.origin;
|
|
var_6 = magicgrenade( "teargas_grenade", var_5, var_4, 1.5, 1 );
|
|
var_6 thread maps\_teargas::track_teargas();
|
|
wait 1.5;
|
|
common_scripts\utility::flag_set( "gassed_out" );
|
|
wait 3;
|
|
var_1 delete();
|
|
var_2 delete();
|
|
}
|
|
|
|
gas_flee_guys()
|
|
{
|
|
common_scripts\utility::flag_wait( "gas_flee_guys" );
|
|
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "gas_flee_guys" );
|
|
thread maps\enemyhq_code::set_flag_on_killcount( var_0, var_0.size, "flee_guys_dead" );
|
|
wait 0.5;
|
|
level.dog thread maps\enemyhq_code::dog_attack_targets_by_priority( var_0, "basement_combat_done" );
|
|
common_scripts\utility::flag_set( "basement_teargas_done" );
|
|
wait 1;
|
|
var_0 = maps\_utility::array_removedead_or_dying( var_0 );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::set_ignoreall, 0 );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::set_ignoreme, 0 );
|
|
common_scripts\utility::flag_wait( "flee_guys_dead" );
|
|
level.player notify( "dog_guard_me" );
|
|
}
|
|
|
|
battingcage_door_peek()
|
|
{
|
|
var_0 = getent( "basement_door1", "targetname" );
|
|
var_0 rotateyaw( 20, 2.5, 0.1, 0.75 );
|
|
}
|
|
|
|
merrick_shoots_first_guy( var_0 )
|
|
{
|
|
wait 1.5;
|
|
var_0.ignoreme = 0;
|
|
level.allies[1].ignoreall = 0;
|
|
level.allies[1] getenemyinfo( var_0 );
|
|
}
|
|
|
|
cage_guys2()
|
|
{
|
|
common_scripts\utility::flag_wait( "cage_guys2" );
|
|
var_0 = getentarray( "cage_guys2", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::spawn_animate_and_get_shot, 256, 1, 1 );
|
|
}
|
|
|
|
cage_guys3()
|
|
{
|
|
common_scripts\utility::flag_wait( "cage_guys3" );
|
|
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "cage_guys3" );
|
|
wait 1;
|
|
var_1 = common_scripts\utility::getstruct( "battingcage_gas_origin", "targetname" );
|
|
var_2 = var_1.origin;
|
|
var_1 = common_scripts\utility::getstruct( "battingcage_gas_target", "targetname" );
|
|
var_3 = var_1.origin;
|
|
var_4 = magicgrenade( "teargas_grenade", var_2, var_3, 0.5, 1 );
|
|
var_4 thread maps\_teargas::track_teargas();
|
|
}
|
|
|
|
monitor_teargas_lookat( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_2 = 0;
|
|
var_3 = var_0 * var_0;
|
|
var_4 = distance2dsquared( level.player.origin, self.origin );
|
|
|
|
while ( isdefined( self ) && isalive( self ) && !var_2 )
|
|
{
|
|
if ( var_4 < var_3 && maps\enemyhq_code::raven_player_can_see_ai( self ) )
|
|
{
|
|
var_2 = 1;
|
|
continue;
|
|
}
|
|
|
|
wait 0.1;
|
|
var_4 = distance2dsquared( level.player.origin, self.origin );
|
|
}
|
|
|
|
wait( var_1 );
|
|
self.ignoreme = 0;
|
|
wait 1;
|
|
kill_me_now();
|
|
}
|
|
|
|
cage_fake_firing( var_0 )
|
|
{
|
|
var_1 = getent( "battingcage_shoot_from", "targetname" );
|
|
var_2 = getent( "battingcage_shoot_at", "targetname" );
|
|
|
|
while ( !common_scripts\utility::flag( var_0 ) )
|
|
{
|
|
var_3 = randomintrange( 30, 120 );
|
|
|
|
for ( var_4 = 1; var_4 < var_3; var_4++ )
|
|
{
|
|
var_5 = random_offset( var_1.origin, 16 );
|
|
var_6 = random_offset( var_2.origin, 64 );
|
|
magicbullet( "m27", var_5, var_6 );
|
|
wait 0.1;
|
|
|
|
if ( common_scripts\utility::flag( var_0 ) )
|
|
var_4 = var_3;
|
|
}
|
|
|
|
wait( randomfloatrange( 0.5, 1.25 ) );
|
|
}
|
|
}
|
|
|
|
random_offset( var_0, var_1 )
|
|
{
|
|
var_2 = ( var_0[0] + randomfloatrange( -1 * var_1, var_1 ), var_0[1] + randomfloatrange( -1 * var_1, var_1 ), var_0[2] + randomfloatrange( -1 * var_1, var_1 ) );
|
|
return var_2;
|
|
}
|
|
|
|
give_player_teargas()
|
|
{
|
|
level.player.gasmask_on = 1;
|
|
|
|
foreach ( var_1 in level.allies )
|
|
var_1.gasmask_on = 1;
|
|
|
|
level.player takeweapon( "flash_grenade" );
|
|
level.player setoffhandprimaryclass( "smoke" );
|
|
level.player giveweapon( "teargas_grenade" );
|
|
level.player givemaxammo( "teargas_grenade" );
|
|
}
|
|
|
|
teargas_hot_vo()
|
|
{
|
|
common_scripts\utility::flag_wait_any( "teargas_hot", "gassed_out" );
|
|
|
|
if ( !common_scripts\utility::flag( "gassed_out" ) )
|
|
{
|
|
maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_adamgasem" );
|
|
wait 0.5;
|
|
var_0 = getent( "enemy_yell_loc", "targetname" );
|
|
var_0 playsound( "enemyhq_pmc3_weareunderattack" );
|
|
}
|
|
}
|
|
|
|
teargas_vo()
|
|
{
|
|
level.player endon( "death" );
|
|
thread teargas_hot_vo();
|
|
common_scripts\utility::flag_wait( "start_gas_scene" );
|
|
common_scripts\utility::flag_wait_any( "keegan_at_gas_door", "teargas_hot" );
|
|
|
|
if ( !common_scripts\utility::flag( "teargas_hot" ) )
|
|
level.allies[1] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_kgn_enemypatrolsprobablya" );
|
|
|
|
if ( !common_scripts\utility::flag( "teargas_hot" ) )
|
|
level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_wedonthavetime" );
|
|
|
|
if ( !common_scripts\utility::flag( "teargas_hot" ) )
|
|
maps\_utility::delaythread( 7, common_scripts\utility::flag_set, "ready_to_throw" );
|
|
|
|
maps\enemyhq_code::gas_mask_on_player_anim();
|
|
give_player_teargas();
|
|
|
|
if ( !common_scripts\utility::flag( "teargas_hot" ) )
|
|
thread maps\enemyhq_code::nag_player_until_flag( level.allies[0], "gassed_out", "enemyhq_mrk_throwgasunderthe", "enemyhq_mrk_throwsomegasin" );
|
|
|
|
thread teargas_hint();
|
|
common_scripts\utility::flag_wait( "enter_cage_vo" );
|
|
level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_move" );
|
|
}
|
|
|
|
dog_scratch_scene()
|
|
{
|
|
common_scripts\utility::flag_wait( "breach_setup1" );
|
|
level.dog maps\_utility::disable_ai_color();
|
|
level.dog maps\enemyhq_code::lock_player_control();
|
|
level.dog maps\enemyhq_code::set_dog_scripted_mode( level.player );
|
|
wait 0.05;
|
|
var_0 = common_scripts\utility::getstruct( "dog_at_door", "targetname" );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "clubhouse1" );
|
|
level.dog maps\_utility::delaythread( 0.5, maps\_utility::set_goalradius, 30 );
|
|
var_0 maps\_anim::anim_reach_solo( level.dog, "found_door" );
|
|
common_scripts\utility::flag_set( "dog_scratching" );
|
|
level.dog playsound( "anml_dog_whine" );
|
|
thread maps\enemyhq_audio::aud_dog_scratch();
|
|
var_0 maps\_anim::anim_single_solo( level.dog, "found_door" );
|
|
level.dog maps\_utility_dogs::enable_dog_sniff();
|
|
level.dog maps\_utility::enable_ai_color();
|
|
}
|
|
|
|
teargas_hint_wait()
|
|
{
|
|
if ( common_scripts\utility::flag( "tossed_gas" ) || common_scripts\utility::flag( "gassed_out" ) )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
teargas_hint()
|
|
{
|
|
wait 2;
|
|
|
|
if ( !common_scripts\utility::flag( "tossed_gas" ) )
|
|
thread maps\_utility::display_hint( "tear_hint" );
|
|
}
|
|
|
|
spawn_animate_and_get_shot( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = self.animation;
|
|
var_5 = -1;
|
|
|
|
if ( isdefined( self.script_parameters ) )
|
|
var_5 = float( self.script_parameters );
|
|
|
|
var_6 = undefined;
|
|
|
|
if ( isdefined( self.target ) )
|
|
var_6 = common_scripts\utility::getstruct( self.target, "targetname" );
|
|
|
|
var_7 = maps\_utility::spawn_ai();
|
|
|
|
if ( isdefined( var_7 ) )
|
|
{
|
|
level.teargas_scripted_guys[level.teargas_scripted_guys.size] = var_7;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_7.gasmask_on = var_3;
|
|
|
|
var_7.allowdeath = 1;
|
|
|
|
if ( var_2 == 1 )
|
|
var_7 maps\_utility::gun_remove();
|
|
|
|
var_7 thread animate_and_get_shot( var_0, var_1, var_5, var_4, var_6 );
|
|
}
|
|
|
|
return var_7;
|
|
}
|
|
|
|
animate_and_get_shot( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = self;
|
|
var_5 thread monitor_teargas_lookat( var_0, var_1 );
|
|
var_5 endon( "death" );
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = self;
|
|
|
|
if ( var_2 > 0 )
|
|
{
|
|
var_4 thread maps\_anim::anim_generic( var_5, var_3 );
|
|
wait( var_2 - 1 );
|
|
}
|
|
else
|
|
var_4 maps\_anim::anim_generic( var_5, var_3 );
|
|
|
|
var_5.ignoreme = 0;
|
|
wait 1;
|
|
var_5 kill_me_now();
|
|
}
|
|
|
|
kill_me_now()
|
|
{
|
|
maps\_utility::die();
|
|
}
|
|
|
|
media_guys()
|
|
{
|
|
common_scripts\utility::flag_wait( "media_guys" );
|
|
thread cqb_time();
|
|
maps\_utility::autosave_by_name( "media_guys" );
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::enable_cqbwalk );
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::disable_surprise );
|
|
}
|
|
|
|
cqb_time()
|
|
{
|
|
var_0 = getent( "start_cqb", "targetname" );
|
|
|
|
while ( !common_scripts\utility::flag( "breach_setup1_ready" ) )
|
|
{
|
|
var_0 waittill( "trigger", var_1 );
|
|
|
|
if ( var_1 != level.dog )
|
|
var_1 maps\_utility::cqb_walk( "on" );
|
|
}
|
|
}
|
|
|
|
dog_ambush()
|
|
{
|
|
common_scripts\utility::flag_wait( "dog_ambush" );
|
|
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "dog_ambush" );
|
|
}
|
|
|
|
glowstick_scene()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "light_glowstick", "targetname" );
|
|
common_scripts\utility::flag_wait( "breach_setup1_ready" );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "ch_door_positions1" );
|
|
var_1 = maps\_utility::spawn_anim_model( "glowstick_prop", var_0.origin );
|
|
var_2 = maps\_utility::spawn_anim_model( "glowstick", var_0.origin );
|
|
var_2 linkto( var_1, "J_prop_1" );
|
|
var_3 = level.allies[1];
|
|
var_3.animname = "keegan";
|
|
var_4 = maps\_utility::make_array( var_3, var_1 );
|
|
var_0 maps\_anim::anim_reach_solo( var_3, "light_glowstick" );
|
|
var_0 thread maps\_anim::anim_single( var_4, "light_glowstick" );
|
|
var_5 = level.scr_anim["keegan"]["light_glowstick"];
|
|
|
|
while ( var_3 getanimtime( var_5 ) < 0.16 )
|
|
wait 0.05;
|
|
|
|
var_3 maps\_utility::anim_stopanimscripted();
|
|
var_1 maps\_utility::anim_stopanimscripted();
|
|
var_1 unlink();
|
|
var_1 linkto( var_3, "TAG_STOWED_BACK", ( 12, 0, 0 ), ( 0, 90, 0 ) );
|
|
var_3 maps\_utility::enable_ai_color();
|
|
common_scripts\utility::flag_set( "basement_combat_done" );
|
|
}
|
|
|
|
handle_glowstick( var_0 )
|
|
{
|
|
var_1 = maps\_utility::spawn_anim_model( "glowstick", ( 0, 0, 0 ) );
|
|
wait 3;
|
|
var_1 linkto( var_0, "tag_inhand", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
playfxontag( level._effect["glowstick"], var_0, "tag_inhand" );
|
|
common_scripts\utility::flag_wait( "drop_flare" );
|
|
var_1 unlink();
|
|
stopfxontag( level._effect["glowstick"], var_0, "tag_inhand" );
|
|
playfx( level._effect["glowstick"], var_1.origin );
|
|
}
|
|
|
|
handle_pickup_flare()
|
|
{
|
|
level.rubble_flare = getent( "keegan_flare", "targetname" );
|
|
playfxontag( level._effect["vfx_handflare_ehq_lit"], level.rubble_flare, "tag_fire_fx" );
|
|
common_scripts\utility::flag_wait( "pickup_flare" );
|
|
level.rubble_flare linkto( level.allies[1], "tag_inhand", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
common_scripts\utility::flag_wait( "drop_flare" );
|
|
level.rubble_flare unlink();
|
|
}
|
|
|
|
handle_flare_slow()
|
|
{
|
|
level endon( "death" );
|
|
|
|
while ( !common_scripts\utility::flag( "breach_activate" ) )
|
|
{
|
|
common_scripts\utility::flag_wait( "flare_slow" );
|
|
level.player maps\_utility::player_speed_percent( 50, 1 );
|
|
level.player allowsprint( 0 );
|
|
wait 1;
|
|
common_scripts\utility::flag_waitopen( "flare_slow" );
|
|
level.player maps\_utility::player_speed_percent( 100, 1 );
|
|
level.player allowsprint( 1 );
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
turn_off_player_clip( var_0 )
|
|
{
|
|
var_1 = getent( "flare_blocker", "targetname" );
|
|
wait( 2.88 / var_0 );
|
|
var_1 notsolid();
|
|
}
|
|
|
|
new_glowstick_scene()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "club_traverse", "targetname" );
|
|
thread handle_flare_slow();
|
|
common_scripts\utility::flag_wait( "breach_setup1_ready" );
|
|
thread maps\enemyhq_audio::aud_music( "lookfordoor" );
|
|
maps\_utility::battlechatter_off( "axis" );
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
var_1 = maps\_utility::spawn_targetname( "flare_kill_guy", 1 );
|
|
var_1.animname = "generic";
|
|
var_1.gasmask_on = 1;
|
|
var_1 maps\_utility::magic_bullet_shield();
|
|
var_0 maps\_anim::anim_first_frame_solo( var_1, "flare_kill" );
|
|
level.flare_knife = spawn( "script_model", ( 0, 0, 0 ) );
|
|
level.flare_knife setmodel( "weapon_knife_iw6" );
|
|
level.flare_knife hide();
|
|
level.flare_gun = spawn( "script_model", ( 0, 0, 0 ) );
|
|
level.flare_gun setmodel( "weapon_mp443" );
|
|
level.flare_gun hide();
|
|
var_2 = level.allies[1];
|
|
var_2.animname = "keegan";
|
|
var_3 = getnode( "keegan_start_look", "targetname" );
|
|
var_2 setgoalnode( var_3 );
|
|
var_2 waittill( "goal" );
|
|
wait 1.5;
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "ch_door_positions1" );
|
|
maps\_utility::delaythread( 2.43, common_scripts\utility::flag_set, "pickup_flare" );
|
|
level.allies[1] notify( "start_flare" );
|
|
var_2.animname = "keegan";
|
|
var_0 thread maps\_anim::anim_single_solo( var_2, "ct_start" );
|
|
var_2 waittillmatch( "single anim", "end" );
|
|
|
|
if ( !common_scripts\utility::flag( "go_under_debris" ) && !common_scripts\utility::flag( "looking_at_debris" ) && !common_scripts\utility::flag( "pre_breach_hall" ) )
|
|
{
|
|
var_2.animname = "keegan";
|
|
var_0 thread maps\_anim::anim_single_solo( var_2, "ct_enter_loop1" );
|
|
var_2 waittillmatch( "single anim", "end" );
|
|
|
|
if ( !common_scripts\utility::flag( "go_under_debris" ) && !common_scripts\utility::flag( "looking_at_debris" ) && !common_scripts\utility::flag( "pre_breach_hall" ) )
|
|
{
|
|
var_2.animname = "keegan";
|
|
var_0 thread maps\_anim::anim_loop_solo( var_2, "ct_loop1", "stop_waiting" );
|
|
common_scripts\utility::flag_wait_any( "go_under_debris", "pre_breach_hall", "looking_at_debris" );
|
|
var_0 notify( "stop_waiting" );
|
|
}
|
|
|
|
var_2.animname = "keegan";
|
|
var_0 thread maps\_anim::anim_single_solo( var_2, "ct_exit_loop1" );
|
|
var_2 waittillmatch( "single anim", "end" );
|
|
}
|
|
else
|
|
{
|
|
var_2.animname = "keegan";
|
|
var_0 maps\_anim::anim_single_solo( var_2, "ct_nowait1" );
|
|
var_2 waittillmatch( "single anim", "end" );
|
|
}
|
|
|
|
thread turn_off_player_clip( 1.2 );
|
|
var_2.animname = "keegan";
|
|
var_0 thread maps\_anim::anim_single_solo( var_2, "ct_walk1" );
|
|
var_2 waittillmatch( "single anim", "end" );
|
|
|
|
if ( !common_scripts\utility::flag( "start_flare_kill" ) )
|
|
{
|
|
if ( !common_scripts\utility::flag( "start_flare_kill" ) )
|
|
{
|
|
var_2.animname = "keegan";
|
|
var_0 thread maps\_anim::anim_loop_solo( var_2, "flare_kill_loop", "stop_waiting" );
|
|
common_scripts\utility::flag_wait( "start_flare_kill" );
|
|
var_0 notify( "stop_waiting" );
|
|
}
|
|
}
|
|
|
|
var_4 = [ var_2, var_1 ];
|
|
level.flare_guys = var_4;
|
|
thread maps\enemyhq_audio::aud_flare_kill();
|
|
var_2.animname = "keegan";
|
|
var_0 thread maps\_anim::anim_single( var_4, "flare_kill" );
|
|
wait 0.05;
|
|
maps\_anim::anim_set_rate( var_4, "flare_kill", 1.3 );
|
|
level waittill( "blend_out" );
|
|
|
|
if ( !common_scripts\utility::flag( "pre_breach_hall" ) )
|
|
var_2 waittillmatch( "single anim", "end" );
|
|
|
|
if ( !common_scripts\utility::flag( "pre_breach_hall" ) )
|
|
{
|
|
if ( !common_scripts\utility::flag( "pre_breach_hall" ) )
|
|
{
|
|
var_2.animname = "keegan";
|
|
var_0 thread maps\_anim::anim_loop_solo( var_2, "ct_loop2", "stop_waiting" );
|
|
common_scripts\utility::flag_wait( "pre_breach_hall" );
|
|
var_0 notify( "stop_waiting" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
level.allies[1] notify( "steath_kill_done" );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "clubhouse_allies0" );
|
|
var_2.animname = "keegan";
|
|
var_0 thread maps\_anim::anim_single_solo( var_2, "ct_walk2" );
|
|
wait 0.05;
|
|
maps\_anim::anim_set_rate_single( var_2, "ct_walk2", 1.3 );
|
|
var_2 waittillmatch( "single anim", "end" );
|
|
var_2 maps\_utility::enable_ai_color();
|
|
thread keegan_breach_anim();
|
|
common_scripts\utility::flag_set( "basement_combat_done" );
|
|
maps\_utility::battlechatter_off( "axis" );
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
}
|
|
|
|
setup_clubhouse()
|
|
{
|
|
level.start_point = "clubhouse_breach";
|
|
maps\enemyhq::setup_common();
|
|
thread maps\enemyhq_audio::aud_check( "clubhouse" );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "clubhouse_allies0" );
|
|
level.player thread maps\enemyhq_code::gasmask_hud_on();
|
|
thread keegan_breach_anim();
|
|
}
|
|
|
|
begin_clubhouse()
|
|
{
|
|
maps\_utility::disable_trigger_with_targetname( "breach_trigger" );
|
|
var_0 = getent( "clubhouse_doorhandle2_obj", "targetname" );
|
|
var_1 = getent( "clubhouse_doorhandle3_obj", "targetname" );
|
|
var_0 hide();
|
|
var_1 hide();
|
|
common_scripts\utility::flag_wait( "clubhouse_ready" );
|
|
thread maps\enemyhq_audio::aud_enemy_muffled_vo( "enemies_surprised", "enemy_vo_struct", "clubhouse_ready" );
|
|
maps\_utility::delaythread( 1, maps\_utility::autosave_by_name, "clubhouse" );
|
|
spawn_bishop( 1 );
|
|
thread ch_vo();
|
|
common_scripts\utility::flag_wait( "clubhouse_done" );
|
|
}
|
|
|
|
spawn_bishop( var_0 )
|
|
{
|
|
var_1 = getent( "bishop", "targetname" );
|
|
var_2 = var_1 maps\_utility::spawn_ai( 1 );
|
|
var_2 maps\_utility::gun_remove();
|
|
var_2 maps\_utility::magic_bullet_shield();
|
|
var_2.allowdeath = 0;
|
|
var_2 maps\_utility::disable_pain();
|
|
var_2.animname = "bishop";
|
|
level.bishop = var_2;
|
|
var_3 = common_scripts\utility::getstruct( "hvt_find_struct", "targetname" );
|
|
|
|
if ( var_0 )
|
|
{
|
|
var_3 = common_scripts\utility::getstruct( "hvt_find_struct", "targetname" );
|
|
var_3 thread maps\_anim::anim_first_frame_solo( level.bishop, "find_bishop" );
|
|
}
|
|
|
|
level.flashlight_prop = maps\_utility::spawn_anim_model( "bishop_flashlight_prop", var_3.origin );
|
|
level.ajax_flare = maps\_utility::spawn_anim_model( "ajax_flare", var_3.origin );
|
|
level.ajax_flare linkto( level.flashlight_prop, "J_prop_2", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
level.ajax_flare hide();
|
|
level.flashlight = maps\_utility::spawn_anim_model( "flashlight" );
|
|
level.flashlight linkto( level.flashlight_prop, "J_prop_1", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
level.flashlight hide();
|
|
level.stool_prop = maps\_utility::spawn_anim_model( "bishop_chair_prop", var_3.origin );
|
|
var_3 maps\_anim::anim_first_frame_solo( level.stool_prop, "find_bishop" );
|
|
var_4 = getent( "bishop_chair_clip", "targetname" );
|
|
var_5 = getent( "bishop_chair", "targetname" );
|
|
level.bishop_stool = var_5;
|
|
var_4 linkto( var_5 );
|
|
var_5 linkto( level.stool_prop, "J_prop_1", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_4 = getent( "ajax_chair2_clip", "targetname" );
|
|
var_5 = getent( "ajax_chair2", "targetname" );
|
|
level.bishop_chair = var_5;
|
|
var_4 linkto( var_5 );
|
|
var_5 linkto( level.stool_prop, "J_prop_2", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
level.bishop_mask = maps\_utility::spawn_anim_model( "bishop_mask", var_3.origin );
|
|
var_3 maps\_anim::anim_first_frame_solo( level.bishop_mask, "find_bishop" );
|
|
}
|
|
|
|
get_base_weapon_name( var_0 )
|
|
{
|
|
var_1 = "";
|
|
var_2 = 0;
|
|
|
|
for ( var_3 = getsubstr( var_0, var_2, var_2 + 1 ); var_3 != "" && var_3 != "+"; var_3 = getsubstr( var_0, var_2, var_2 + 1 ) )
|
|
{
|
|
var_1 = var_1 + var_3;
|
|
var_2++;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
clubhouse_breach()
|
|
{
|
|
level.allies[1] maps\_utility::disable_surprise();
|
|
var_0 = getent( "clubhouse_door2", "targetname" );
|
|
var_1 = getent( "clubhouse_door3", "targetname" );
|
|
var_2 = getent( "clubhouse_doorhandle2", "targetname" );
|
|
var_3 = getent( "clubhouse_doorhandle3", "targetname" );
|
|
var_2 linkto( var_0 );
|
|
var_3 linkto( var_1 );
|
|
var_4 = getent( "clubhouse_doorhandle2_obj", "targetname" );
|
|
var_5 = getent( "clubhouse_doorhandle3_obj", "targetname" );
|
|
var_4 show();
|
|
var_5 show();
|
|
var_2 hide();
|
|
var_3 hide();
|
|
common_scripts\utility::flag_wait( "breach_activate" );
|
|
|
|
while ( level.player isthrowinggrenade() )
|
|
wait 0.1;
|
|
|
|
level.player takeweapon( "teargas_grenade" );
|
|
var_2 show();
|
|
var_3 show();
|
|
var_4 hide();
|
|
var_5 hide();
|
|
thread maps\enemyhq_audio::aud_breach();
|
|
maps\_utility::disable_trigger_with_targetname( "breach_trigger" );
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
level.dog maps\_utility_dogs::disable_dog_sneak();
|
|
var_6 = level.player getcurrentweapon();
|
|
|
|
if ( var_6 != "none" )
|
|
level.player setweaponammoclip( var_6, weaponclipsize( var_6 ) );
|
|
|
|
maps\enemyhq_code::setupplayerforanimations();
|
|
level.dog maps\enemyhq_code::lock_player_control();
|
|
thread kick_breach_anim( "breach_struct_player" );
|
|
thread pre_breach_guys();
|
|
thread ally_breach_gas();
|
|
wait 9;
|
|
maps\enemyhq_code::setupplayerforgameplay();
|
|
thread keegan_breach_enemies();
|
|
var_7 = getentarray( "CH_guys", "targetname" );
|
|
common_scripts\utility::array_thread( var_7, ::spawn_animate_and_get_shot, 256, 5, 0 );
|
|
var_7 = getentarray( "CH_guys_no_gun", "targetname" );
|
|
common_scripts\utility::array_thread( var_7, ::spawn_animate_and_get_shot, 256, 5, 1 );
|
|
thread clubhouse_clear();
|
|
common_scripts\utility::exploder( 450 );
|
|
wait 0.5;
|
|
thread handle_breach_body_count();
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "breach_colors" );
|
|
setslowmotion( 1.0, 0.3, 0.2 );
|
|
level.player maps\_utility::player_speed_percent( 50, 1 );
|
|
thread breach_end_early();
|
|
thread far_allies_breach();
|
|
level common_scripts\utility::waittill_notify_or_timeout( "abort_slowmo", 4 );
|
|
setslowmotion( 0.3, 1.0, 1.0 );
|
|
level notify( "finished_slowmo" );
|
|
wait 1;
|
|
common_scripts\utility::flag_set( "slowmo_over" );
|
|
level.player maps\_utility::player_speed_percent( 100, 2 );
|
|
level.fake_teargas_coughing = 0;
|
|
}
|
|
|
|
handle_breach_body_count()
|
|
{
|
|
var_0 = getaiarray( "axis" );
|
|
maps\_utility::waittill_dead_or_dying( var_0, var_0.size );
|
|
level notify( "abort_slowmo" );
|
|
}
|
|
|
|
breach_end_early()
|
|
{
|
|
level endon( "breach_done" );
|
|
level.player notifyonplayercommand( "melee_button_pressed", "+melee" );
|
|
level.player common_scripts\utility::waittill_any( "weapon_switch_started", "melee_button_pressed", "reload_start" );
|
|
level notify( "abort_slowmo" );
|
|
}
|
|
|
|
ally_breach_gas()
|
|
{
|
|
wait 2.0;
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::set_ignoreall, 1 );
|
|
var_0 = getent( "clubhouse_door1", "targetname" );
|
|
var_0 rotateyaw( 20, 0.5, 0.1, 0.1 );
|
|
wait 0.5;
|
|
var_1 = common_scripts\utility::getstruct( "clubhouse_ally_gas_targ", "targetname" );
|
|
var_2 = var_1.origin;
|
|
var_1 = common_scripts\utility::getstruct( "clubhouse_ally_gas_start", "targetname" );
|
|
var_3 = var_1.origin;
|
|
var_4 = magicgrenade( "teargas_grenade", var_3, var_2, 1.5, 1 );
|
|
wait 1.5;
|
|
var_0 rotateyaw( -20, 0.25, 0.1, 0.1 );
|
|
wait 0.25;
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::set_ignoreall, 0 );
|
|
}
|
|
|
|
pre_breach_guys()
|
|
{
|
|
var_0 = 1.8;
|
|
var_1 = 4.0;
|
|
wait( var_0 );
|
|
var_2 = getentarray( "CH_pre_breach_guys", "targetname" );
|
|
common_scripts\utility::array_thread( var_2, ::spawn_animate_and_get_shot, 1, 15, 1 );
|
|
wait( var_1 - var_0 );
|
|
common_scripts\utility::flag_set( "enemies_surprised" );
|
|
var_3 = getaiarray( "axis" );
|
|
stop_externalfx();
|
|
maps\_utility::stop_exploder( 308 );
|
|
maps\_utility::stop_exploder( 890 );
|
|
common_scripts\utility::exploder( 306 );
|
|
common_scripts\utility::exploder( 307 );
|
|
|
|
foreach ( var_5 in var_3 )
|
|
var_5 delete();
|
|
|
|
wait 0.2;
|
|
}
|
|
|
|
far_allies_breach()
|
|
{
|
|
thread ch_dog_breach();
|
|
var_0 = getent( "clubhouse_door1", "targetname" );
|
|
var_0 rotateyaw( 92, 0.2, 0.1, 0.1 );
|
|
var_0 connectpaths();
|
|
var_1 = getent( "clubhouse_door1a", "targetname" );
|
|
var_1 rotateyaw( -95, 0.2, 0.1, 0.1 );
|
|
var_1 connectpaths();
|
|
var_2 = common_scripts\utility::getstruct( "breach_struct", "targetname" );
|
|
level.allies[0].animname = "ally1";
|
|
level.allies[2].animname = "ally3";
|
|
var_2 thread maps\_anim::anim_single( [ level.allies[0], level.allies[2] ], "ch_breach" );
|
|
wait 0.1;
|
|
common_scripts\utility::flag_set( "start_the_dog" );
|
|
}
|
|
|
|
clubhouse_clear()
|
|
{
|
|
wait 0.1;
|
|
maps\_utility::waittill_aigroupcleared( "ch_guys" );
|
|
common_scripts\utility::flag_wait( "slowmo_over" );
|
|
wait 2;
|
|
level.allies[2] maps\_utility::delaythread( 2, maps\enemyhq_code::char_dialog_add_and_go, "enemyhq_hsh_onrileyhesfound_2" );
|
|
thread maps\enemyhq_audio::aud_music( "foundajax" );
|
|
common_scripts\utility::flag_set( "clubhouse_done" );
|
|
thread maps\enemyhq_code::handle_leave_team_fail( "leaving_clubhouse", "left_clubhouse" );
|
|
wait 4;
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "post_breach_colors" );
|
|
wait 5;
|
|
|
|
if ( !common_scripts\utility::flag( "start_hvt_fight" ) )
|
|
level.allies[0] thread maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_hsh_overhere" );
|
|
}
|
|
|
|
ch_vo()
|
|
{
|
|
common_scripts\utility::flag_wait( "clubhouse_ready" );
|
|
level.allies[1] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_kgn_wefoundanotherdoor" );
|
|
level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_wellwaitforyour" );
|
|
wait 0.5;
|
|
thread maps\enemyhq_code::nag_player_until_flag( level.player, "breach_activate", "enemyhq_kgn_adamgetoverto", "enemyhq_kgn_getovertothe", "enemyhq_kgn_adamgetoverhere" );
|
|
thread clubhouse_breach();
|
|
maps\_utility::enable_trigger_with_targetname( "breach_trigger" );
|
|
common_scripts\utility::flag_wait( "breach_activate" );
|
|
wait 0.5;
|
|
level.allies[1] thread maps\_utility::smart_radio_dialogue_interrupt( "enemyhq_kgn_breachin5" );
|
|
thread enemy_breach_vo();
|
|
}
|
|
|
|
enemy_breach_vo()
|
|
{
|
|
common_scripts\utility::flag_wait( "enemies_surprised" );
|
|
var_0 = getent( "enemy_vo_struct2", "targetname" );
|
|
var_0 playsound( "enemyhq_fs5_whatwasthat", "done" );
|
|
var_0 waittill( "done" );
|
|
var_0 playsound( "enemyhq_pmc3_teargastapersoffinto", "done" );
|
|
}
|
|
|
|
ch_dog_breach()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "breach_struct3", "targetname" );
|
|
var_1 = getent( "CH_dog_guy", "targetname" );
|
|
var_2 = var_1 maps\_utility::spawn_ai( 1 );
|
|
var_2.animname = "generic";
|
|
var_2 maps\_utility::gun_remove();
|
|
level.dog.animname = "dog";
|
|
var_3 = maps\_utility::make_array( var_2, level.dog );
|
|
var_0 maps\_anim::anim_first_frame( var_3, "dog_breach" );
|
|
common_scripts\utility::flag_wait( "start_the_dog" );
|
|
var_0 thread maps\_anim::anim_single( var_3, "dog_breach" );
|
|
level.dog waittillmatch( "single_anim", "end" );
|
|
level.dog setgoalpos( level.dog.origin );
|
|
level.dog maps\_utility::disable_ai_color();
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
wait 0.1;
|
|
level.dog maps\_utility::enable_ai_color();
|
|
}
|
|
|
|
near_allies_breach()
|
|
{
|
|
var_0 = getnode( "keegan_breach_node2", "targetname" );
|
|
level.allies[1] maps\_utility::teleport_ai( var_0 );
|
|
wait 0.5;
|
|
var_1 = common_scripts\utility::getstruct( "breach_struct2", "targetname" );
|
|
level.allies[1].animname = "ally2";
|
|
var_1 thread maps\_anim::anim_single( [ level.allies[1] ], "ch_breach" );
|
|
}
|
|
|
|
kick_breach_anim( var_0 )
|
|
{
|
|
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
|
|
var_2 = maps\_utility::spawn_anim_model( "clubhouse_doors" );
|
|
level.breach_player_rig = maps\_utility::spawn_anim_model( "player_rig" );
|
|
level.breach_player_rig hide();
|
|
level.breach_player_legs = maps\_utility::spawn_anim_model( "player_legs" );
|
|
level.breach_player_legs hide();
|
|
level.breach_grenade = maps\_utility::spawn_anim_model( "clubhouse_grenade" );
|
|
level.breach_grenade hide();
|
|
var_3 = [ level.breach_player_rig, level.breach_player_legs, var_2, level.breach_grenade ];
|
|
var_1 maps\_anim::anim_first_frame( var_3, "ch_breach" );
|
|
var_4 = getent( "clubhouse_door2", "targetname" );
|
|
var_5 = getent( "clubhouse_door3", "targetname" );
|
|
var_4 linkto( var_2, "J_prop_1" );
|
|
var_5 linkto( var_2, "J_prop_2" );
|
|
level.player playerlinktoblend( level.breach_player_rig, "tag_player", 0.4, 0.2, 0.2 );
|
|
var_6 = 0.4;
|
|
wait( var_6 );
|
|
level.breach_player_rig show();
|
|
level.breach_player_legs show();
|
|
level.breach_grenade show();
|
|
thread breach_grenade_smoke( level.breach_grenade, 1.88, 1 );
|
|
level.allies[1].animname = "keegan";
|
|
common_scripts\utility::flag_set( "keegan_breach" );
|
|
var_1 thread maps\_anim::anim_single( var_3, "ch_breach" );
|
|
level.breach_player_rig waittillmatch( "single anim", "end" );
|
|
maps\_utility::battlechatter_on( "axis" );
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
level.player unlink();
|
|
level.breach_player_rig delete();
|
|
level.breach_player_legs delete();
|
|
level notify( "kick_breach_anim_done" );
|
|
}
|
|
|
|
keegan_breach_anim()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "club_traverse", "targetname" );
|
|
var_1 = common_scripts\utility::getstruct( "breach_struct_player", "targetname" );
|
|
var_2 = maps\_utility::spawn_anim_model( "ch_breach_gun_l" );
|
|
var_3 = maps\_utility::spawn_anim_model( "ch_breach_gun_r" );
|
|
var_4 = level.allies[1];
|
|
level.keegan_gun_l = var_2;
|
|
level.keegan_gun_r = var_3;
|
|
var_3 linkto( var_4, "tag_weapon_chest", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_2 linkto( var_4, "tag_weapon_left", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_2 hide();
|
|
var_3 hide();
|
|
var_5 = [ var_4 ];
|
|
var_0 thread maps\_anim::anim_loop( var_5, "ch_idle", "stop_loop" );
|
|
common_scripts\utility::flag_wait( "keegan_breach" );
|
|
var_0 notify( "stop_loop" );
|
|
level.keegan_gun_r show();
|
|
|
|
if ( isdefined( level.flare_gun ) )
|
|
{
|
|
level.flare_gun hide();
|
|
level.flare_gun unlink();
|
|
level.flare_gun delete();
|
|
}
|
|
|
|
var_1 maps\_anim::anim_single_run( var_5, "ch_breach" );
|
|
var_2 unlink();
|
|
var_3 unlink();
|
|
}
|
|
|
|
keegan_breach_enemies()
|
|
{
|
|
var_0 = "CH_keegan_guy";
|
|
level.keegan_shoot_guys = 6;
|
|
level.keegan_breach_guys = [];
|
|
level.keegan_shoot_next = 0;
|
|
level.keegan_shots_so_far = 0;
|
|
|
|
for ( var_1 = 1; var_1 <= level.keegan_shoot_guys; var_1++ )
|
|
{
|
|
var_2 = var_0 + maps\_utility::string( var_1 );
|
|
var_3 = getent( var_2, "targetname" );
|
|
var_4 = var_3 spawn_animate_and_get_shot( 256, 5, 1 );
|
|
level.keegan_breach_guys[level.keegan_breach_guys.size] = var_4;
|
|
}
|
|
}
|
|
|
|
keegan_shoots_a_guy( var_0 )
|
|
{
|
|
var_1 = 8;
|
|
level.keegan_shots_so_far++;
|
|
var_2 = 0;
|
|
|
|
if ( level.keegan_shots_so_far > var_1 - level.keegan_breach_guys.size )
|
|
var_2 = 1;
|
|
|
|
var_3 = var_0 gettagorigin( "tag_flash" );
|
|
var_4 = var_0 gettagangles( "tag_flash" );
|
|
var_5 = anglestoforward( var_4 );
|
|
var_6 = var_3 + var_5 * 500;
|
|
playfxontag( level._effect["keegan_muzzleflash"], var_0, "tag_flash" );
|
|
|
|
if ( level.keegan_shots_so_far > var_1 - level.keegan_breach_guys.size && var_2 )
|
|
{
|
|
var_7 = level.keegan_breach_guys[level.keegan_shoot_next];
|
|
|
|
if ( isalive( var_7 ) )
|
|
var_6 = var_7.origin + ( 0, 0, 30 );
|
|
|
|
magicbullet( "sc2010", var_3, var_6 );
|
|
wait 0.2;
|
|
|
|
if ( isalive( var_7 ) )
|
|
var_7 maps\_utility::die();
|
|
|
|
level.keegan_shoot_next++;
|
|
}
|
|
else
|
|
magicbullet( "sc2010", var_3, var_6 );
|
|
}
|
|
|
|
breach_grenade_smoke( var_0, var_1, var_2 )
|
|
{
|
|
wait( var_1 );
|
|
var_3 = playfxontag( level._effect["smoke_tgas_trail_ehq"], var_0, "tag_fx" );
|
|
wait 3;
|
|
stopfxontag( level._effect["smoke_tgas_trail_ehq"], var_0, "tag_fx" );
|
|
|
|
if ( isdefined( var_2 ) && var_2 )
|
|
var_0 delete();
|
|
}
|
|
|
|
setup_hvt()
|
|
{
|
|
level.start_point = "hvt_rescue";
|
|
maps\enemyhq::setup_common();
|
|
thread maps\enemyhq_audio::aud_check( "hvt" );
|
|
common_scripts\utility::flag_set( "clubhouse_done" );
|
|
spawn_bishop( 1 );
|
|
level.player thread maps\enemyhq_code::gasmask_hud_on();
|
|
common_scripts\utility::flag_set( "FLAG_ehq_give_objective" );
|
|
maps\enemyhq_intro::obj_getingetajaxgetout();
|
|
thread maps\enemyhq_code::handle_leave_team_fail( "leaving_clubhouse", "left_clubhouse" );
|
|
}
|
|
|
|
begin_hvt()
|
|
{
|
|
maps\_utility::autosave_by_name( "hvt_rescue" );
|
|
thread new_hvt_find();
|
|
level.dog maps\enemyhq_code::set_dog_scripted_mode( level.player );
|
|
common_scripts\utility::flag_wait( "hvt_done" );
|
|
}
|
|
|
|
new_hvt_find()
|
|
{
|
|
common_scripts\utility::flag_wait( "clubhouse_done" );
|
|
maps\_utility::stop_exploder( 306 );
|
|
maps\_utility::stop_exploder( 307 );
|
|
thread hvt_dog_bark();
|
|
var_0 = common_scripts\utility::getstruct( "hvt_find_struct", "targetname" );
|
|
var_1 = level.bishop;
|
|
thread start_hvt_scene( var_0 );
|
|
thread hvt_dog_bishop_anims( var_0 );
|
|
wait 2;
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "post_rescue" );
|
|
common_scripts\utility::flag_wait( "pick_up_bishop" );
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::enable_ai_color );
|
|
level.dog maps\_utility_dogs::disable_dog_sneak();
|
|
level.dog maps\_utility::enable_ai_color();
|
|
common_scripts\utility::flag_set( "obj_rescue_obj" );
|
|
thread escape_objective();
|
|
maps\_utility::autosave_by_name( "gotbishop" );
|
|
thread maps\enemyhq_finale::enable_finale_and_ghost_chopper_clips();
|
|
common_scripts\utility::flag_set( "to_trophy_room" );
|
|
common_scripts\utility::flag_set( "hvt_done" );
|
|
}
|
|
|
|
start_hvt_scene( var_0 )
|
|
{
|
|
level.hvt_guys_in_position = 0;
|
|
level.allies[0].animname = "merrick";
|
|
level.allies[1].animname = "keegan";
|
|
level.allies[2].animname = "hesh";
|
|
var_0 thread maps\_anim::anim_reach_together( level.allies, "find_bishop" );
|
|
common_scripts\utility::array_thread( level.allies, ::hvt_reach_and_animate, var_0 );
|
|
maps\_utility::delaythread( 10, common_scripts\utility::flag_set, "allies_in_position" );
|
|
|
|
while ( level.hvt_guys_in_position < 4 && !common_scripts\utility::flag( "allies_in_position" ) )
|
|
wait 0.1;
|
|
|
|
common_scripts\utility::flag_wait( "start_hvt_fight" );
|
|
common_scripts\utility::flag_set( "start_hvt_rescue" );
|
|
var_1 = common_scripts\utility::array_add( level.allies, level.bishop );
|
|
var_0 thread maps\_anim::anim_single_run( var_1, "find_bishop" );
|
|
|
|
foreach ( var_3 in level.allies )
|
|
{
|
|
var_3 maps\enemyhq_code::gasmask_on_npc( 0 );
|
|
var_3 detach( "prop_sas_gasmask_attach", "j_head" );
|
|
}
|
|
|
|
thread animate_chairs( var_0 );
|
|
maps\_utility::delaythread( 1, maps\enemyhq_code::gas_mask_off_player_anim );
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::disable_cqbwalk );
|
|
thread maps\enemyhq_audio::aud_hvt_rescue_thread();
|
|
level.allies[1] waittillmatch( "single anim", "end" );
|
|
level.allies[1] maps\enemyhq_code::carry_bishop();
|
|
thread maps\enemyhq_finale::keegan_idle_with_bishop();
|
|
}
|
|
|
|
animate_chairs( var_0 )
|
|
{
|
|
var_0 thread maps\_anim::anim_single( [ level.stool_prop, level.bishop_mask, level.flashlight_prop ], "find_bishop" );
|
|
thread unclip( "aj_p_stool_clip", 8.17 );
|
|
thread unclip( "aj_p_chair_clip", 29 );
|
|
level.stool_prop waittillmatch( "single anim", "end" );
|
|
level.bishop_chair unlink();
|
|
level.bishop_stool unlink();
|
|
level.flashlight_prop waittillmatch( "single anim", "end" );
|
|
}
|
|
|
|
unclip( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_0, "targetname" );
|
|
wait( var_1 );
|
|
var_2 notsolid();
|
|
}
|
|
|
|
hvt_reach_and_animate( var_0 )
|
|
{
|
|
self waittill( "anim_reach_complete" );
|
|
level.hvt_guys_in_position++;
|
|
}
|
|
|
|
hvt_dog_bishop_anims( var_0 )
|
|
{
|
|
var_0 thread maps\_anim::anim_first_frame_solo( level.bishop, "find_bishop" );
|
|
level.dog.animname = "dog";
|
|
var_0 maps\_anim::anim_reach_solo( level.dog, "find_bishop" );
|
|
level.hvt_guys_in_position++;
|
|
common_scripts\utility::flag_wait( "start_hvt_rescue" );
|
|
var_0 maps\_anim::anim_single_solo( level.dog, "find_bishop" );
|
|
var_0 thread maps\_anim::anim_loop_solo( level.dog, "find_bishop_dog_loop", "stop_dog_loop" );
|
|
common_scripts\utility::flag_wait( "dog_leave_rescue" );
|
|
var_0 notify( "stop_dog_loop" );
|
|
var_0 maps\_anim::anim_single_solo_run( level.dog, "find_bishop_exit" );
|
|
}
|
|
|
|
hvt_dog_bark()
|
|
{
|
|
while ( !common_scripts\utility::flag( "start_hvt_fight" ) )
|
|
{
|
|
level.dog playsound( "anml_dog_bark" );
|
|
wait( randomfloatrange( 0.25, 0.75 ) );
|
|
}
|
|
}
|
|
|
|
breach_gun_up( var_0 )
|
|
{
|
|
level.player playerlinkto( level.breach_player_rig, "tag_player", 1, 70, 70, 70, 70 );
|
|
level.player enableweapons();
|
|
}
|
|
|
|
bishop_speaks( var_0 )
|
|
{
|
|
level.bishop maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_oby_var" );
|
|
}
|
|
|
|
time_to_go( var_0 )
|
|
{
|
|
common_scripts\utility::flag_set( "pick_up_bishop" );
|
|
maps\_utility::delaythread( 0.25, maps\enemyhq_code::safe_activate_trigger_with_targetname, "pre_exit" );
|
|
common_scripts\utility::exploder( 8 );
|
|
}
|
|
|
|
setup_hvt_test()
|
|
{
|
|
level.start_point = "hvt_rescue";
|
|
maps\enemyhq::setup_common();
|
|
}
|
|
|
|
begin_hvt_test()
|
|
{
|
|
var_0 = getent( "bishop", "targetname" );
|
|
var_1 = var_0 maps\_utility::spawn_ai( 1 );
|
|
var_1 maps\_utility::gun_remove();
|
|
var_1.animname = "bishop";
|
|
level.bishop = var_1;
|
|
var_2 = common_scripts\utility::getstruct( "new_hvt_find_struct", "targetname" );
|
|
var_2 maps\_anim::anim_first_frame_solo( level.bishop, "find_bishop" );
|
|
common_scripts\utility::flag_wait( "hvt_done" );
|
|
}
|