// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool section_main() { maps\_utility::add_hint_string( "attack_hint", &"FLOOD_STEALTH_ATTACK", ::no_attack_hint ); maps\_utility::add_hint_string( "crouch_hint", &"FLOOD_CROUCH_HINT", ::no_crouch_hint ); } section_precache() { precacheitem( "flood_knife" ); precachestring( &"FLOOD_STEALTH_FAIL0" ); precachestring( &"FLOOD_STEALTH_FAIL1" ); precachestring( &"FLOOD_STEALTH_FAIL2" ); precachestring( &"FLOOD_STEALTH_FAIL3" ); precachemodel( "com_hatchet" ); precachemodel( "com_flashlight_off" ); } section_flag_inits() { common_scripts\utility::flag_init( "stealth_attack_player" ); common_scripts\utility::flag_init( "stealth_kill_01_done" ); common_scripts\utility::flag_init( "player_start_stealth_kill_02" ); common_scripts\utility::flag_init( "stealth_kill_02_done" ); common_scripts\utility::flag_init( "stealth_player_touching" ); common_scripts\utility::flag_init( "hatchet_linked" ); common_scripts\utility::flag_init( "stealth_enemy_3_dead" ); } roof_stealth_start() { maps\flood_util::player_move_to_checkpoint_start( "roof_stealth_start" ); maps\flood_util::spawn_allies(); level.allies[0] maps\_utility::gun_remove(); level.allies[0] thread ally0_main(); var_0 = level.player getweaponslistprimaries(); foreach ( var_2 in var_0 ) level.player takeweapon( var_2 ); level.player disableoffhandweapons(); maps\flood_util::setup_default_weapons( 1 ); setsaveddvar( "ammoCounterHide", 1 ); thread maps\flood_swept::swept_water_toggle( "swim", "show" ); thread maps\flood_swept::swept_water_toggle( "debri_bridge", "hide" ); visionsetnaked( "flood_stealth", 0 ); maps\_utility::fog_set_changes( "flood_stealth", 0 ); level.cw_vision_above = "flood_stealth"; level.cw_fog_above = "flood_stealth"; } roof_stealth() { level thread maps\_utility::autosave_now(); maps\_utility::battlechatter_off( "allies" ); maps\_utility::battlechatter_off( "axis" ); thread maps\flood_coverwater::register_coverwater_area( "coverwater_stealth", "skybridge_done" ); level.cw_player_in_rising_water = 0; level.cw_player_allowed_underwater_time = 30; maps\_utility::stop_exploder( "swept_under_fx" ); thread float_stuff(); thread check_for_weapon_pickup(); thread firstframe_stealth_debris(); thread maps\flood_fx::fx_stealth_ambient(); thread maps\flood_fx::exit_stealth_misc_fx(); level.player thread maps\_gameskill::healthoverlay(); level.cover_warnings_disabled = undefined; var_0 = level.player getfractionmaxammo( "fraggrenade" ); if ( var_0 == 1 ) { var_1 = level.player getweaponammoclip( "fraggrenade" ); level.player setweaponammoclip( "fraggrenade", var_1 - 1 ); } level.player disableinvulnerability(); level.player enableweaponpickup(); level.player giveweapon( "flood_knife" ); level.player switchtoweaponimmediate( "flood_knife" ); common_scripts\utility::flag_wait( "stealth_kill_02_done" ); level notify( "onto_skybridge" ); } ally0_main() { level endon( "stealth_attack_player" ); maps\_utility::clear_force_color(); self.ignoreall = 1; self pushplayer( 1 ); maps\_utility::set_ignoreme( 1 ); thread ally0_instruction_vo_table(); thread stealth_kill_01(); common_scripts\utility::flag_wait_any( "stealth_kill_01_done", "player_start_stealth_kill_02" ); if ( !common_scripts\utility::flag( "player_start_stealth_kill_02" ) ) { var_0 = getent( "stealth_kill_01", "targetname" ); var_0 thread maps\_anim::anim_loop_solo( self, "stealth_kill_idle", "stop_idle" ); level waittill( "player_start_stealth_kill_02" ); var_0 notify( "stop_idle" ); } level thread maps\flood_anim::skybridge_doorbreach_setup(); stealth_kill_02_ally(); self pushplayer( 0 ); maps\_utility::set_force_color( "r" ); } ally0_instruction_vo( var_0 ) { var_0 endon( "death" ); level endon( "stealth_attack_player" ); level endon( "player_start_stealth_kill_02" ); level endon( "player_passed_table" ); if ( !common_scripts\utility::flag( "player_passed_table" ) ) { if ( common_scripts\utility::flag( "cw_player_underwater" ) ) maps\_utility::radio_dialogue( "flood_vrg_onlytwomoreup" ); else var_0 maps\_utility::dialogue_queue( "flood_diz_yougoleft" ); wait 3; var_1 = []; var_1[0] = "flood_diz_getbelow"; var_1[1] = "flood_diz_gounderwater"; var_2 = []; var_2[0] = "flood_vrg_gounderwaterandwell"; var_0 thread play_nag_stealth( var_1, var_2, "player_passed_table", 8, 1, 1.5 ); } } play_nag_stealth( var_0, var_1, var_2, var_3, var_4, var_5 ) { self endon( "death" ); self endon( "stop nags" ); var_6 = var_3; var_7 = 30; var_8 = 0; while ( !common_scripts\utility::flag( var_2 ) ) { if ( common_scripts\utility::flag( "cw_player_underwater" ) ) { var_9 = var_1[randomint( var_1.size )]; maps\_utility::radio_dialogue( var_9 ); } else { var_9 = var_0[randomint( var_0.size )]; maps\_utility::dialogue_queue( var_9 ); } wait( randomfloatrange( var_6 * 0.8, var_6 * 1.2 ) ); if ( var_7 > var_6 ) { var_8 = var_8 + 1; if ( var_8 == var_4 ) { var_8 = 0; var_6 = var_6 * var_5; if ( var_7 < var_6 ) var_6 = var_7; } } } } ally0_instruction_vo_table() { self endon( "death" ); level endon( "stealth_attack_player" ); level endon( "player_start_stealth_kill_02" ); common_scripts\utility::flag_wait( "player_passed_table" ); maps\_utility::radio_dialogue( "flood_vrg_welltakethemout" ); } ally0_instruction_vo_holdup( var_0 ) { if ( !common_scripts\utility::flag( "player_passed_table" ) ) { if ( common_scripts\utility::flag( "cw_player_underwater" ) ) maps\_utility::radio_dialogue( "flood_vrg_holdup_2" ); else var_0 thread maps\_utility::dialogue_queue( "flood_vrg_holdup" ); } } roof_stealth_create_enemies() { var_0 = getent( "stealth_enemy_1", "targetname" ); var_0 maps\_utility::add_spawn_function( ::roof_stealth_enemy_spawn_func, "stealth_kill_02_done" ); var_1 = var_0 maps\_utility::spawn_ai(); level.stealth_enemy_1 = var_1; var_1.animname = "stealth_enemy_flash"; var_2 = getent( "stealth_enemy_2", "targetname" ); var_2 maps\_utility::add_spawn_function( ::roof_stealth_enemy_spawn_func, "stealth_kill_02_done" ); var_3 = var_2 maps\_utility::spawn_ai(); level.stealth_enemy_2 = var_3; var_3.animname = "stealth_enemy_debris"; var_4 = getent( "stealth_enemy_3", "targetname" ); var_4 maps\_utility::add_spawn_function( ::roof_stealth_enemy_spawn_func, "stealth_enemy_3_dead" ); var_5 = var_4 maps\_utility::spawn_ai(); level.stealth_enemy_3 = var_5; var_5.animname = "stealth_enemy_3"; } roof_stealth_enemy_spawn_func( var_0 ) { thread maps\_utility::enable_cqbwalk(); maps\_utility::magic_bullet_shield( 1 ); self.favoriteenemy = level.player; self.aggressivemode = 1; maps\_utility::disable_surprise(); maps\_utility::disable_pain(); self setengagementmindist( 0, 0 ); self setengagementmaxdist( 64, 64 ); self.fixednode = 0; var_1 = randomfloatrange( 0.7, 0.75 ); self.moveplaybackrate = var_1; self.movetransitionrate = var_1; self.animplaybackrate = var_1; } roof_stealth_enemy_flashlight() { self endon( "death" ); level endon( "stealth_attack_player" ); self.allowdeath = 1; self.health = 150; var_0 = getent( "stealth_kill_02", "targetname" ); var_0 maps\_anim::anim_reach_solo( self, "stealth_kill_02_idle" ); thread enemy_debris_vo(); var_0 thread check_break_stealth( 210, "debris" ); var_0 thread maps\_anim::anim_loop_solo( self, "stealth_kill_02_idle", "stop_first_loop" ); stopfxontag( level._effect["flood_swept_flashlight"], self, "tag_flash" ); playfxontag( level._effect["flood_swept_flashlight"], self.flashlight, "tag_light" ); thread check_for_melee_stab(); thread detect_player_touching(); common_scripts\utility::flag_wait( "player_passed_table" ); var_0 notify( "stop_first_loop" ); var_0 maps\_anim::anim_single_solo( self, "stealth_kill_02_into_idle2" ); var_0 thread maps\_anim::anim_loop_solo( self, "stealth_kill_02_idle2", "stop_second_loop" ); } roof_stealth_enemy_debris() { self endon( "death" ); level endon( "stealth_attack_player" ); take_flashlight(); var_0 = getent( "stealth_kill_02", "targetname" ); var_0 maps\_anim::anim_reach_solo( self, "stealth_kill_02_idle" ); thread drop_grenade_bag(); maps\_utility::gun_remove(); var_0 thread maps\_anim::anim_loop_solo( self, "stealth_kill_02_idle" ); } check_for_weapon_pickup() { for (;;) { var_0 = level.player getcurrentweapon(); if ( var_0 != "none" && var_0 != "flood_knife" ) { maps\flood_util::jkuprint( "unhiding ammo counter because of weapon pickup. taking knife" ); level.player takeweapon( "flood_knife" ); level.player enableoffhandweapons(); setsaveddvar( "ammoCounterHide", 0 ); break; } common_scripts\utility::waitframe(); } } stealth_door_traverse_think() { level.player endon( "mantle_used" ); var_0 = getent( "stealth_mantle_lookat", "targetname" ); notifyoncommand( "mantle", "+gostand" ); for (;;) { if ( common_scripts\utility::flag( "mantle_copier" ) && maps\_utility::player_looking_at( var_0.origin, 0.8, 1 ) && level.player getstance() == "stand" && !level.player isthrowinggrenade() && !level.player ismeleeing() ) { setsaveddvar( "hud_forceMantleHint", 1 ); level.player allowjump( 0 ); level.player disableweapons(); level.player thread player_mantle_wait(); while ( common_scripts\utility::flag( "mantle_copier" ) && maps\_utility::player_looking_at( var_0.origin, 0.8, 1 ) && level.player getstance() == "stand" && !level.player isthrowinggrenade() && !level.player ismeleeing() ) { if ( level.player getstance() != "stand" ) break; common_scripts\utility::waitframe(); } } else { level.player notify( "not_active" ); setsaveddvar( "hud_forceMantleHint", 0 ); level.player allowjump( 1 ); level.player enableweapons(); } common_scripts\utility::waitframe(); } } player_mantle_wait() { self endon( "not_active" ); self waittill( "mantle" ); setsaveddvar( "hud_forceMantleHint", 0 ); self notify( "mantle_used" ); level.player freezecontrols( 1 ); level.player allowprone( 0 ); level.player allowcrouch( 0 ); level.player disableweapons(); var_0 = maps\_utility::spawn_anim_model( "player_rig" ); var_1 = []; var_1["player_rig"] = var_0; var_2 = getent( "stealth_kill_02", "targetname" ); var_2 maps\_anim::anim_first_frame( var_1, "stealth_traverse" ); level.player playerlinktoblend( var_0, "tag_player", 0.25, 0.1, 0.1, 1 ); thread maps\flood_audio::sfx_plr_vault(); level thread maps\flood_rooftops::skybridge_teleport_cheats(); var_2 maps\_anim::anim_single( var_1, "stealth_traverse" ); var_0 delete(); level.player unlink(); level.player freezecontrols( 0 ); level.player allowjump( 1 ); level.player allowprone( 1 ); level.player allowcrouch( 1 ); level.player enableweapons(); stealth_debris_collision( "on" ); thread maps\flood_swept::swept_water_toggle( "swim", "show" ); thread maps\flood_swept::swept_water_toggle( "debri_bridge", "hide" ); level notify( "player_done_stealth_mantle" ); } reset_allies_to_defaults() { var_0 = randomfloatrange( 0.9, 1.1 ); level.allies[0] thread maps\_utility::disable_cqbwalk(); level.allies[0].goalradius = 2048; level.allies[0].ignoreall = 0; level.allies[0] maps\_utility::set_ignoreme( 0 ); level.allies[0].moveplaybackrate = 1.0; level.allies[0].movetransitionrate = var_0; level.allies[0].animplaybackrate = var_0; } drop_grenade_bag() { var_0 = self.team; maps\_spawner::waittilldeathorpaindeath(); if ( !isdefined( self ) ) return; if ( isdefined( self.nodrop ) ) return; self.ignoreforfixednodesafecheck = 1; var_1 = 25; var_2 = 12; var_3 = self.origin + ( randomint( var_1 ) - var_2, randomint( var_1 ) - var_2, 2 ) + ( 0, 0, 42 ); var_4 = ( 0, randomint( 360 ), 90 ); thread maps\_spawner::spawn_grenade_bag( var_3, var_4, self.team ); level.player enableoffhandweapons(); } float_stuff() { var_0 = getentarray( "stealth_bob", "targetname" ); foreach ( var_2 in var_0 ) var_2 maps\_utility::delaythread( randomfloatrange( 0, 1.5 ), ::floater_logic, "stealth_bob" ); } floater_logic( var_0 ) { level endon( "window_smash" ); self endon( "popped" ); self endon( "death" ); switch ( var_0 ) { case "stealth_bob": for (;;) { var_1 = 2; var_2 = 1; var_3 = 1.25; self moveto( self.origin - ( 0, 0, var_1 ), var_3, 0.2, 0.2 ); self rotateto( self.angles - ( var_2, 0, var_2 ), var_3, 0.4, 0.4 ); wait( var_3 ); self moveto( self.origin + ( 0, 0, var_1 ), var_3, 0.2, 0.2 ); self rotateto( self.angles + ( var_2, 0, var_2 ), var_3, 0.4, 0.4 ); wait( var_3 ); } } } enemy_start_vo( var_0 ) { level.stealth_enemy_1 endon( "death" ); level.stealth_enemy_2 endon( "death" ); level.stealth_enemy_3 endon( "death" ); level endon( "stealth_attack_player" ); level endon( "player_start_stealth_kill_02" ); level.allies[0] maps\_utility::dialogue_queue( "flood_vrg_itlookslikeits" ); if ( common_scripts\utility::flag( "cw_player_underwater" ) ) { level thread maps\_utility::radio_dialogue( "flood_vrg_folowmyleashit" ); thread maps\flood_audio::sfx_rorke_submerge( level.allies[0] ); } else { level.allies[0] thread maps\_utility::dialogue_queue( "flood_vrg_theyrecomingthisway" ); thread maps\flood_audio::sfx_rorke_submerge( level.allies[0] ); } level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_duartecheckinthere" ); level.stealth_enemy_3 maps\_utility::dialogue_queue( "flood_vs7_yessir" ); wait 1; level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_castilloyourewithme" ); level.stealth_enemy_2 maps\_utility::dialogue_queue( "flood_vs9_whatsthatupahead" ); level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_ithinkthatsanother" ); wait 1; level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_castillotryandclear" ); level.stealth_enemy_2 maps\_utility::dialogue_queue( "flood_vs9_couldigetsome" ); level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_sure" ); } enemy_debris_vo() { level.stealth_enemy_1 endon( "death" ); level.stealth_enemy_2 endon( "death" ); level endon( "stealth_attack_player" ); level endon( "player_start_stealth_kill_02" ); level.stealth_enemy_2 maps\_utility::dialogue_queue( "flood_vs9_getthrough" ); level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_dontgiveup" ); wait 2; level.stealth_enemy_2 maps\_utility::dialogue_queue( "flood_vs9_makingprogress" ); level.stealth_enemy_2 maps\_utility::dialogue_queue( "flood_vs9_goodgrip" ); level.stealth_enemy_2 maps\_utility::dialogue_queue( "flood_vs9_lightsteady" ); level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_keepthelight" ); level.stealth_enemy_2 maps\_utility::dialogue_queue( "flood_vs9_finejustkeep" ); wait 3; level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_thinksomething" ); level.stealth_enemy_2 maps\_utility::dialogue_queue( "flood_vs9_thelight" ); level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_ohright" ); for (;;) { if ( randomint( 2 ) ) { level.stealth_enemy_2 maps\_utility::dialogue_queue( "flood_vs9_getthrough" ); level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_dontgiveup" ); } else { level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_thinksomething" ); level.stealth_enemy_2 maps\_utility::dialogue_queue( "flood_vs9_thelight" ); level.stealth_enemy_1 maps\_utility::dialogue_queue( "flood_vs8_ohright" ); } wait( randomintrange( 6, 9 ) ); } } ai_alert_player_break_stealth() { common_scripts\utility::flag_set( "stealth_attack_player" ); level notify( "stealth_attack_player" ); level.allies[0] thread maps\_utility::dialogue_queue( "flood_diz_theyseeyou" ); level.allies[0] thread take_hatchet(); level.allies[0] stopanimscripted(); if ( !isdefined( level.allies[0].magic_bullet_shield ) ) level.allies[0] maps\_utility::stop_magic_bullet_shield(); level.allies[0].health = 1; var_0 = getnode( "ally_stealth_break_01_node", "targetname" ); level.allies[0] allowedstances( "crouch" ); var_1 = getent( "stealth_kill_01", "targetname" ); var_1 notify( "stop_idle" ); waittillframeend; level.allies[0] thread maps\_anim::anim_loop_solo( level.allies[0], "stealth_busted_idle", "stop_loop" ); level maps\_utility::delaythread( 5, maps\_utility::missionfailedwrapper ); if ( isalive( level.stealth_enemy_1 ) ) { level.stealth_enemy_1 stopanimscripted(); level.stealth_enemy_1 drop_flashlight(); level.stealth_enemy_1.ignoreall = 0; level.stealth_enemy_1.goalradius = 8; level.stealth_enemy_1 setgoalpos( level.player.origin ); } level.stealth_enemy_2 stopanimscripted(); level.stealth_enemy_2 drop_flashlight(); level.stealth_enemy_2.ignoreall = 0; level.stealth_enemy_2.goalradius = 64; level.stealth_enemy_2 setgoalpos( level.player.origin ); level.stealth_enemy_2 maps\_utility::gun_recall(); if ( !common_scripts\utility::flag( "hatchet_linked" ) ) { level.stealth_enemy_3 stopanimscripted(); level.stealth_enemy_3 drop_flashlight(); level.stealth_enemy_3.ignoreall = 0; level.stealth_enemy_3 setgoalpos( level.player.origin ); } } check_break_stealth( var_0, var_1 ) { self endon( "death" ); level endon( "start_evade_success" ); level endon( "player_start_stealth_kill_02" ); level endon( "onto_skybridge" ); maps\flood_util::jkuprint( "looking" ); for (;;) { if ( !common_scripts\utility::flag( "cw_player_underwater" ) && distance2d( level.player.origin, self.origin ) < var_0 || common_scripts\utility::flag( "stealth_player_touching" ) || !isalive( level.stealth_enemy_1 ) || !isalive( level.stealth_enemy_2 ) ) { thread clean_up_attack( 1 ); thread maps\flood_coverwater::player_abovewater_defaults(); thread ai_alert_player_break_stealth(); break; } common_scripts\utility::waitframe(); } maps\flood_util::jkuprint( "spotted!" ); maps\_utility::delaythread( 2, ::break_stealth_mg, var_1 ); } break_stealth_mg( var_0 ) { while ( isalive( level.player ) ) { var_1 = level.player getplayerangles(); var_2 = anglestoforward( var_1 ); var_3 = level.player.origin + 15 * var_2 + ( randomfloatrange( -10, 10 ), randomfloatrange( -10, 10 ), 55 ); magicbullet( "pp19", var_3, level.player.origin ); level.player dodamage( 50, level.player.origin ); wait( randomfloatrange( 0.05, 0.15 ) ); } if ( var_0 == "start" ) setdvar( "ui_deadquote", &"FLOOD_STEALTH_FAIL0" ); else if ( randomint( 2 ) ) setdvar( "ui_deadquote", &"FLOOD_STEALTH_FAIL1" ); else setdvar( "ui_deadquote", &"FLOOD_STEALTH_FAIL2" ); } no_attack_hint() { if ( !isalive( level.player ) ) return 1; if ( !isdefined( level.player.ready_to_attack ) || !level.player.ready_to_attack ) return 1; if ( isdefined( level.player.in_attack ) && level.player.in_attack ) return 1; if ( common_scripts\utility::flag( "stealth_attack_player" ) ) return 1; return 0; } ready_to_attack() { level.player allowmelee( 0 ); level.player.ready_to_attack = 1; } clean_up_attack( var_0 ) { if ( isdefined( level.player.ready_to_attack ) && level.player.ready_to_attack ) level.player.ready_to_attack = undefined; if ( var_0 ) level.player allowmelee( 1 ); } check_for_melee_stab() { level.player endon( "death" ); level endon( "stealth_attack_player" ); var_0 = 8100; for (;;) { var_1 = distancesquared( level.player.origin, self.origin ); if ( var_1 < var_0 && maps\_utility::player_looking_at( self.origin + ( 0, 0, 30 ), 0.7 ) ) { ready_to_attack(); if ( level.player meleebuttonpressed() && !level.player ismeleeing() && !level.player isthrowinggrenade() ) { common_scripts\utility::flag_set( "player_start_stealth_kill_02" ); level notify( "player_start_stealth_kill_02" ); level.player.in_attack = 1; stealth_kill_02_player(); level.stealth_enemy_1.a.nodeath = 1; level.stealth_enemy_1.allowdeath = 1; level.stealth_enemy_1.diequietly = 1; level.stealth_enemy_1 kill(); level.stealth_enemy_2 dropweapon( "pp19", "right", 0 ); level.stealth_enemy_2 maps\_utility::stop_magic_bullet_shield(); level.stealth_enemy_2.a.nodeath = 1; level.stealth_enemy_2.allowdeath = 1; level.stealth_enemy_2.diequietly = 1; level.stealth_enemy_2 kill(); clean_up_attack( 1 ); return; } } else if ( var_1 < var_0 && common_scripts\utility::flag( "cw_player_underwater" ) ) clean_up_attack( 0 ); else clean_up_attack( 1 ); common_scripts\utility::waitframe(); } } firstframe_stealth_debris() { var_0 = getent( "stealth_kill_02", "targetname" ); var_1 = getent( "firstframe_test", "targetname" ); level.stealth_filecab1 = maps\_utility::spawn_anim_model( "flood_stealthkill_02_filecabinet_01" ); level.stealth_filecab1.origin = var_1.origin; var_2 = getent( "stealth_door_filecab1", "targetname" ); var_2 linkto( level.stealth_filecab1 ); level.stealth_filecab2 = maps\_utility::spawn_anim_model( "flood_stealthkill_02_filecabinet_02" ); level.stealth_filecab2.origin = var_1.origin; var_2 = getent( "stealth_door_filecab2", "targetname" ); var_2 linkto( level.stealth_filecab2 ); level.stealth_photocopier = maps\_utility::spawn_anim_model( "stealthkill_photocopier" ); level.stealth_photocopier.origin = var_1.origin; var_2 = getent( "stealth_door_copier", "targetname" ); var_2 linkto( level.stealth_photocopier ); var_3 = []; var_3["flood_stealthkill_02_filecabinet_01"] = level.stealth_filecab1; var_3["flood_stealthkill_02_filecabinet_02"] = level.stealth_filecab2; var_3["stealthkill_photocopier"] = level.stealth_photocopier; var_0 maps\_anim::anim_first_frame( var_3, "stealth_kill_02" ); var_2 disconnectpaths(); } stealth_debris_collision( var_0 ) { switch ( var_0 ) { case "on": var_1 = getent( "stealth_door_filecab1", "targetname" ); var_1 solid(); break; case "off": var_1 = getent( "stealth_door_filecab1", "targetname" ); var_1 notsolid(); break; } } crouch_hint() { level.player maps\_utility::display_hint_timeout( "crouch_hint", 3 ); } no_crouch_hint() { if ( !isalive( level.player ) ) return 1; return 0; } remove_kill1_collision() { var_0 = getent( "stealth kill1 collision", "targetname" ); var_0 notsolid(); } detect_player_touching() { self endon( "death" ); level endon( "player_start_stealth_kill_02" ); level endon( "stealth_attack_player" ); for (;;) { var_0 = gettime(); var_1 = undefined; while ( distance2d( level.player.origin, self.origin ) < 36 || level.player istouching( self ) ) { var_2 = gettime(); if ( var_2 - var_0 > 3000 || level.player istouching( self ) ) { common_scripts\utility::flag_set( "stealth_player_touching" ); break; } else if ( var_2 - var_0 > 500 ) { if ( !isdefined( var_1 ) ) { var_1 = 1; level.player maps\_utility::display_hint( "attack_hint" ); } } common_scripts\utility::waitframe(); } common_scripts\utility::waitframe(); } } stealth_kill_01() { roof_stealth_create_enemies(); var_0 = getent( "stealth_kill_01", "targetname" ); level.stealth_enemy_1 thread stealth_kill_01_enemy1( var_0 ); level.stealth_enemy_2 thread stealth_kill_01_enemy2( var_0 ); var_1 = maps\_utility::spawn_anim_model( "stealth_axebox" ); var_2 = getent( "axbox_collision", "targetname" ); var_2.origin = var_1 gettagorigin( "j_bone_door_1" ) + ( 13.5, 0, 2.5 ); var_2.angles = var_1 gettagangles( "j_bone_door_1" ); var_2 linkto( var_1, "j_bone_door_1" ); level.allies[0] thread create_hatchet(); var_3 = []; var_3["ally_0"] = level.allies[0]; var_3["stealth_axebox"] = var_1; var_3["stealth_enemy_3"] = level.stealth_enemy_3; level.stealth_enemy_2 maps\_utility::delaythread( 11, ::check_break_stealth, 666, "start" ); maps\_utility::delaythread( 16, ::check_break_stealth_end ); maps\_utility::delaythread( 1, ::remove_kill1_collision ); maps\_utility::delaythread( 21, maps\_utility::autosave_now ); level.stealth_enemy_3 give_flashlight(); var_0 maps\_anim::anim_single( var_3, "stealth_kill_01" ); level.stealth_enemy_3 maps\_vignette_util::vignette_actor_kill(); common_scripts\utility::flag_set( "stealth_kill_01_done" ); } stealth_kill_01_enemy1( var_0 ) { maps\_utility::stop_magic_bullet_shield(); maps\_utility::enable_pain(); give_flashlight(); var_0 maps\_anim::anim_single_solo( self, "stealth_kill_01" ); stopfxontag( level._effect["flashlight"], self.flashlight, "tag_light" ); playfxontag( level._effect["flashlight"], self, "tag_flash" ); roof_stealth_enemy_flashlight(); } stealth_kill_01_enemy2( var_0 ) { give_flashlight(); var_0 maps\_anim::anim_single_solo( self, "stealth_kill_01" ); roof_stealth_enemy_debris(); } enemy_dead( var_0 ) { maps\flood_util::jkuprint( "killing enemy via notetrack to stop coverwater" ); var_0 notify( "ai_stop_coverwater" ); } give_flashlight() { self.flashlight = maps\_utility::spawn_anim_model( "stealth_flashlight" ); self.flashlight.origin = self gettagorigin( "tag_inhand" ); self.flashlight.angles = self gettagangles( "tag_inhand" ); self.flashlight linkto( self, "tag_inhand" ); playfxontag( level._effect["flood_swept_flashlight"], self.flashlight, "tag_light" ); } take_flashlight() { stopfxontag( level._effect["flood_swept_flashlight"], self.flashlight, "tag_light" ); self.flashlight unlink(); self.flashlight delete(); self.flashlight = undefined; } off_flashlight( var_0, var_1 ) { if ( !isdefined( var_0 ) ) var_0 = self; if ( !isdefined( var_1 ) ) var_1 = 0; if ( var_1 ) { stopfxontag( level._effect["flood_swept_flashlight"], var_0.flashlight, "tag_light" ); var_0.flashlight setmodel( "com_flashlight_off" ); } else { stopfxontag( level._effect["flood_swept_flashlight"], var_0.flashlight, "tag_light" ); var_0.flashlight setmodel( "com_flashlight_off" ); wait 0.15; playfxontag( level._effect["flood_swept_flashlight"], var_0.flashlight, "tag_light" ); var_0.flashlight setmodel( "com_flashlight_on" ); wait 0.2; stopfxontag( level._effect["flood_swept_flashlight"], var_0.flashlight, "tag_light" ); var_0.flashlight setmodel( "com_flashlight_off" ); wait 0.1; playfxontag( level._effect["flood_swept_flashlight"], var_0.flashlight, "tag_light" ); var_0.flashlight setmodel( "com_flashlight_on" ); wait 0.25; stopfxontag( level._effect["flood_swept_flashlight"], var_0.flashlight, "tag_light" ); var_0.flashlight setmodel( "com_flashlight_off" ); } } drop_flashlight() { if ( isdefined( self.flashlight ) ) { self.flashlight unlink(); var_0 = physicstrace( self.flashlight.origin, self.flashlight.origin + ( 0, 0, -300 ) ); var_1 = 0.6; thread off_flashlight( undefined, 1 ); var_2 = []; var_2[0] = 90; var_2[1] = -90; self.flashlight moveto( var_0 + ( 0, 0, 1 ), var_1 ); self.flashlight rotateto( ( common_scripts\utility::random( var_2 ), self.flashlight.angles[0], common_scripts\utility::random( var_2 ) ), var_1 ); } } check_break_stealth_end() { level notify( "start_evade_success" ); maps\flood_util::jkuprint( "not looking" ); } create_hatchet() { if ( !isdefined( self.hatchet ) ) self.hatchet = maps\_utility::spawn_anim_model( "stealth_hatchet", ( 4191.98, -2684.73, 66.7125 ) ); self.hatchet.angles = ( 90, 0, 0 ); } #using_animtree("generic_human"); give_hatchet( var_0 ) { var_0 clearanim( %flood_stealthkill_01_ally1_face1, 0.2 ); common_scripts\utility::flag_set( "hatchet_linked" ); if ( !common_scripts\utility::flag( "player_passed_table" ) ) var_0 thread maps\_utility::dialogue_queue( "flood_vrg_thiswillbeuseful" ); var_0.hatchet.origin = var_0 gettagorigin( "tag_inhand" ); var_0.hatchet.angles = var_0 gettagangles( "tag_inhand" ); var_0.hatchet delete(); var_0 attach( "com_hatchet", "tag_inhand", 1 ); } take_hatchet() { if ( common_scripts\utility::flag( "hatchet_linked" ) ) self detach( "com_hatchet", "tag_inhand" ); } detach_hatchet( var_0 ) { var_1 = maps\_utility::spawn_anim_model( "stealth_hatchet" ); var_1.origin = var_0 gettagorigin( "tag_inhand" ); var_1.angles = var_0 gettagangles( "tag_inhand" ); var_0 detach( "com_hatchet", "tag_inhand" ); } hatchet_linked( var_0 ) { common_scripts\utility::flag_set( "hatchet_linked" ); } stealth_kill_02_player() { var_0 = getent( "stealth_kill_02", "targetname" ); level.player freezecontrols( 1 ); level.player allowcrouch( 0 ); level.player disableweapons(); level.cw_no_waterwipe = 1; thread maps\flood_audio::sfx_stealth_kill_death_vo( level.stealth_enemy_1 ); level.stealth_enemy_1 thread off_flashlight( undefined, 1 ); var_1 = maps\_utility::spawn_anim_model( "player_rig" ); var_2 = common_scripts\utility::spawn_tag_origin(); var_2.origin = var_1 gettagorigin( "tag_player" ) + ( 0, 0, 20 ); var_2.angles = var_1 gettagangles( "tag_player" ); var_2 linkto( var_1, "tag_player" ); var_3 = []; var_3["vignette_stealth_kill2_opfor1"] = level.stealth_enemy_1; var_3["player_rig"] = var_1; var_0 maps\_anim::anim_first_frame( var_3, "stealth_kill_02" ); var_1 hide(); level.allies[0] hide(); level.player playerlinktoblend( var_2, "tag_origin", 0.1 ); wait 0.1; level.player hideviewmodel(); level.player playerlinktodelta( var_1, "tag_player", 1, 0, 0, 0, 0, 1 ); var_1 attach( "viewmodel_knife_iw6", "tag_knife_attach", 1 ); level.player playsound( "scn_flood_plr_stealth_kill" ); var_1 show(); level.allies[0] common_scripts\utility::delaycall( 0.3, ::show ); level thread stealth_kill_02_vision_hack(); var_0 maps\_anim::anim_single( var_3, "stealth_kill_02" ); var_1 detach( "viewmodel_knife_iw6", "tag_knife_attach", 1 ); level.player unlink(); var_1 delete(); level.player showviewmodel(); level.player freezecontrols( 0 ); level.player allowcrouch( 1 ); level.player enableweapons(); level.cw_no_waterwipe = 0; var_4 = getent( "stealth_hall_clip", "targetname" ); var_4 hide(); var_4 notsolid(); } stealth_kill_02_ally() { var_0 = getent( "stealth_kill_02", "targetname" ); var_1 = []; var_1["flood_stealthkill_02_filecabinet_01"] = level.stealth_filecab1; var_1["flood_stealthkill_02_filecabinet_02"] = level.stealth_filecab2; var_1["stealthkill_photocopier"] = level.stealth_photocopier; var_1["vignette_stealth_kill2_opfor2"] = level.stealth_enemy_2; var_1["vignette_stealth_kill2_ally1"] = level.allies[0]; thread maps\flood_audio::sfx_diaz_stealth_kills2( var_1["vignette_stealth_kill2_ally1"] ); level.allies[0] maps\_utility::delaythread( 11, maps\_utility::smart_dialogue, "flood_diz_stabelground" ); stealth_debris_collision( "off" ); maps\_utility::delaythread( 13.5, ::stealth_door_traverse_think ); level.allies[0] maps\_utility::delaythread( 13, maps\_utility::gun_recall ); level.allies[0] maps\_utility::delaythread( 13, maps\_utility::forceuseweapon, "fads", "primary" ); var_0 maps\_anim::anim_single( var_1, "stealth_kill_02" ); common_scripts\utility::flag_set( "stealth_kill_02_done" ); } roof_stealth_cleanup() { var_0 = getentarray( "stealth_bob", "targetname" ); maps\_utility::array_delete( var_0 ); var_0 = getentarray( "stealth_cleanup", "script_noteworthy" ); maps\_utility::array_delete( var_0 ); } stealth_kill_02_vision_hack() { level.player visionsetnakedforplayer( "flood_underwater_stealth", 0 ); level.player setwatersurfacetransitionfx( common_scripts\utility::getfx( "small_water_splash" ), common_scripts\utility::getfx( "small_water_splash" ), common_scripts\utility::getfx( "small_water_splash" ), common_scripts\utility::getfx( "small_water_splash" ) ); wait 1.75; maps\flood_util::jkuprint( "turning water transition hack off" ); level.player visionsetnakedforplayer( level.cw_vision_above, 0 ); maps\flood::flood_default_water_transion_fx(); } stealth_kill_01_facial( var_0 ) { var_0 setanim( %flood_stealthkill_01_ally1_face1, 1, 0.2 ); } stealth_kill_01_facial_start( var_0 ) { var_0 setanim( %flood_stealthkill_01_ally1_facestart, 1, 0.2 ); } stealth_kill_01_opfor_facial( var_0 ) { var_0 setanim( %flood_stealthkill_01_opfor3_face, 1, 0.2 ); }