// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool main_init() { if ( isdefined( level.entrance_main_init ) ) return; level.entrance_main_init = 1; level.player_in_bus = 0; } spawn_functions() { maps\_utility::array_spawn_function_noteworthy( "entrance_chopper_unloader", ::postspawn_entrance_chopper_unloader ); maps\_utility::array_spawn_function_noteworthy( "entrance_chopper_shooter", ::postspawn_entrance_chopper_shooter ); maps\_utility::array_spawn_function_noteworthy( "chopper_courtyard", ::postspawn_courtyard_chopper ); maps\_utility::array_spawn_function_targetname( "chopper_shooter2", ::postspawn_chopper_shooter ); maps\_utility::array_spawn_function_noteworthy( "courtyard_enemy", ::postspawn_courtyard_enemy ); maps\_utility::array_spawn_function_targetname( "exfil_chopper", ::postspawn_exfil_chopper ); maps\_utility::array_spawn_function_targetname( "exfil_f18", ::postspawn_exfil_f18 ); } start_entrance() { maps\las_vegas_code::set_player_speed(); var_0 = common_scripts\utility::getstruct( "casino_player_slide_start", "targetname" ); maps\las_vegas_code::set_start_locations( "entrance_startspot" ); common_scripts\utility::flag_set( "start_outside_animated_props" ); } start_entrance_combat() { maps\las_vegas_code::set_player_speed(); maps\las_vegas_code::set_start_locations( "entrance_startspot" ); level.keegan maps\_utility::clear_force_color(); level.hesh maps\_utility::clear_force_color(); init_courtyard(); change_chopper_spawner( "entrance_chopper_shooter", "entrance_chopper_shooter_late_start" ); change_chopper_spawner( "entrance_chopper_unloader", "entrance_chopper_unloader_late_start" ); thread entrance_pursuers(); common_scripts\utility::flag_set( "start_outside_animated_props" ); } start_exfil() { init_courtyard(); maps\las_vegas_code::set_player_speed(); maps\las_vegas_code::set_start_locations( "exfil_startpots" ); level.hesh maps\_utility::set_force_color( "b" ); level.keegan maps\_utility::set_force_color( "g" ); level.merrick maps\_utility::set_force_color( "r" ); var_0 = maps\las_vegas_code::spawn_drone_dog(); level.dog = var_0; var_0.origin = level.player.origin; var_0 thread maps\las_vegas_code::dog_thread(); wait 0.1; var_0 notify( "trigger" ); } change_chopper_spawner( var_0, var_1 ) { var_2 = getent( var_0, "script_noteworthy" ); var_3 = common_scripts\utility::getstruct( var_1, "script_noteworthy" ); var_2.origin = var_3.origin; var_4 = var_3 common_scripts\utility::get_target_ent(); var_2.angles = vectortoangles( var_4.origin - var_3.origin ); var_5 = getentarray( var_2.target, "targetname" ); foreach ( var_7 in var_5 ) var_7.targetname = var_3.targetname; var_2.target = var_3.targetname; } entrance_init() { if ( isdefined( level.entrance_init ) ) return; level.entrance_init = 1; level.hesh maps\_utility::battlechatter_off(); level.merrick maps\_utility::battlechatter_off(); level.keegan maps\_utility::battlechatter_off(); } entrance() { main_init(); entrance_init(); init_courtyard(); foreach ( var_1 in level.heroes ) var_1 show(); setsaveddvar( "ai_friendlyFireBlockDuration", "2000" ); level.merrick maps\las_vegas_code::set_not_wounded(); maps\las_vegas_code::set_player_speed( "entrance" ); level.hesh maps\_utility::battlechatter_off(); level.merrick maps\_utility::battlechatter_off(); maps\_utility::transient_switch( "las_vegas_transient_hotel_tr", "las_vegas_transient_crasharea_tr" ); getup(); } getup() { maps\_hud_util::fade_out( 0 ); maps\las_vegas_code::sun_direction( "hand" ); level.player disableweapons(); level.keegan maps\_utility::battlechatter_off(); maps\_utility::battlechatter_off( "axis" ); common_scripts\utility::array_thread( level.heroes, maps\las_vegas_code::set_ai_name, "" ); level notify( "casino_player_jumped" ); level.keegan maps\_utility::clear_force_color(); level.hesh maps\_utility::clear_force_color(); setsaveddvar( "player_sprintUnlimited", 0 ); level.player allowcrouch( 0 ); level.player allowprone( 0 ); level.player setstance( "stand" ); var_0 = common_scripts\utility::getstruct( "bottom_anim_entrance", "targetname" ); var_1 = spawnstruct(); var_1.origin = var_0.origin; var_1.angles = var_0.angles; var_1.origin = var_1.origin + ( 0, 0, 1 ); level.player_rig = maps\_utility::spawn_anim_model( "player_rig", var_1.origin ); level.player_rig.animname = "player_rig"; wait 4; thread getup_screen_effects(); thread getup_fx(); thread entrance_pursuers(); level.player clearclienttriggeraudiozone( 18.0 ); level.merrick notify( "stop_custom_anim_run" ); foreach ( var_3 in level.heroes ) { var_3 maps\_utility::clear_force_color(); var_3 maps\_utility::battlechatter_off(); } maps\_utility::battlechatter_off( "axis" ); var_5 = 15; level.player playerlinktodelta( level.player_rig, "tag_player", 1, var_5, var_5, 0, var_5, 1 ); thread getup_dialogue(); common_scripts\utility::noself_delaycall( 1, ::playrumblelooponposition, "subtle_tank_rumble", level.player.origin + ( 0, 0, 500 ) ); common_scripts\utility::noself_delaycall( 14.5, ::stopallrumbles ); level.player common_scripts\utility::delaycall( 14.8, ::playrumbleonentity, "damage_light" ); var_6 = common_scripts\utility::array_add( level.heroes, level.player_rig ); var_1 maps\_anim::anim_single( var_6, "raid_getup" ); level.player enableweapons(); level.player unlink(); level.player_rig delete(); level.player allowcrouch( 1 ); level.player allowprone( 1 ); level.player setstance( "stand", "crouch", "prone" ); common_scripts\utility::array_thread( level.heroes, maps\las_vegas_code::reset_ai_name ); common_scripts\utility::flag_set( "intro_lines" ); common_scripts\utility::flag_set( "getup_done" ); level notify( "getup_dialogue_continue" ); common_scripts\utility::flag_clear( "disable_autosaves" ); maps\_utility::autosave_by_name( "entrance" ); } custom_dirt_hud() { var_0 = []; var_0[var_0.size] = [ "fullscreen_dirt_left", -100, 5 ]; var_0[var_0.size] = [ "fullscreen_dirt_right", -200, 15 ]; var_1 = []; var_2 = 1.5; foreach ( var_4 in var_0 ) { var_5 = newhudelem(); var_5 setshader( var_4[0], int( 640 * var_2 ), int( 480 * var_2 ) ); var_5.horzalign = "fullscreen"; var_5.vertalign = "fullscreen"; var_5.y = var_5.y + var_4[1]; var_5 fadeovertime( var_4[2] ); var_5.alpha = 0; var_1[var_1.size] = var_5; } var_7 = newhudelem(); var_7 setshader( "buried_sand_screen", 640, 480 ); var_7.horzalign = "fullscreen"; var_7.vertalign = "fullscreen"; var_7.alpha = 0; var_7.y = 200; level waittill( "buried_sand_screen_increase" ); var_7 fadeovertime( 3 ); var_7.alpha = 1; level waittill( "buried_sand_screen_remove" ); var_8 = 2; var_7 fadeovertime( var_8 ); var_7.alpha = 0; wait( var_8 ); var_7 destroy(); common_scripts\utility::flag_wait( "leaving_entrance" ); maps\las_vegas_code::sun_direction( "courtyard" ); } getup_dialogue() { level endon( "entrance_combat_start" ); thread getup_enemy_radio(); } getup_enemy_radio() { var_0 = [ "vegas_spl_welostsightof", 1, "vegas_sp2_theywentoutthe", 2, "vegas_death_theentrancetheyshould", 1, "vegas_spl_allteamsconvergeon" ]; maps\las_vegas_code::array_play_enemy_radio( var_0 ); } getup_screen_effects() { thread custom_dirt_hud(); if ( isdefined( level.fadein ) ) level.fadein destroy(); thread maps\_hud_util::fade_in( 3 ); level.player shellshock( "las_vegas_getup", 5 ); thread getup_screenshake( 5 ); setblur( 30, 0.05 ); wait 0.1; maps\_art::dof_enable_script( 1, 499, 10, 500, 600, 10, 0.1 ); setblur( 5, 2 ); wait 1; maps\_art::dof_enable_script( 1, 250, 10, level.dof["base"]["current"]["farStart"], level.dof["base"]["current"]["farEnd"], 10, 3.1 ); wait 1; setblur( 0, 5 ); wait 5; maps\_art::dof_disable_script( 2.5 ); } getup_screenshake( var_0 ) { var_1 = gettime() + var_0 * 1000; while ( var_1 > gettime() ) { earthquake( 0.105, 0.2, level.player.origin, 500 ); wait 0.1; } } getup_fx() { var_0 = "vfx_thick_falling_stream"; var_1 = "vfx_sand_ground_spawn_loop"; var_2 = ( -16, 70, 720 ); thread getup_fx_thread( var_0, level.player_rig.origin + var_2, "stop_hand_sand_stream" ); thread getup_fx_thread( var_1, maps\_utility::groundpos( level.player_rig.origin + var_2 + ( 0, 0, -500 ) ), "stop_hand_sand_stream" ); } getup_fx_thread( var_0, var_1, var_2 ) { var_3 = spawnfx( common_scripts\utility::getfx( var_0 ), var_1, ( 1, 0, 0 ) ); triggerfx( var_3, -5 ); if ( isdefined( var_2 ) ) { level waittill( var_2 ); var_3 delete(); } } entrance_combat() { init_courtyard(); main_init(); entrance_init(); thread fail_no_pickup(); maps\las_vegas_code::set_player_speed( "entrance_combat", 2 ); thread combat_enemy_radio(); thread train_fall(); level.hesh thread maps\_utility::enable_cqbwalk(); level.keegan thread maps\_utility::enable_cqbwalk(); foreach ( var_1 in level.heroes ) { var_1.ignoreall = 1; var_1.grenadeawareness = 1; if ( var_1.type != "dog" ) var_1 thread waittill_combat_start(); } level.keegan allowedstances( "crouch" ); level.hesh allowedstances( "crouch" ); level.hesh maps\_utility::set_force_color( "b" ); level.keegan thread start_walk( "path_switch_to_sniper", "g" ); level.merrick maps\_utility::delaythread( 4, maps\_utility::set_force_color, "r" ); maps\_utility::activate_trigger_with_targetname( "color_post_getup" ); maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "courtyard_chopper_1" ); level thread entrance_combat_dialogue(); common_scripts\utility::flag_wait( "entrance_combat_start" ); maps\_utility::battlechatter_on(); thread battle_think(); } fail_no_pickup() { common_scripts\utility::flag_wait( "start_train_fall" ); if ( !common_scripts\utility::flag( "dog_first_pickup" ) ) maps\las_vegas_code::dog_mission_fail(); } combat_enemy_radio() { common_scripts\utility::flag_wait( "entrance_combat_start" ); wait 2; maps\las_vegas_code::play_enemy_radio( "vegas_sp3_takingfireweneed" ); wait 3; var_0 = [ "vegas_spl_spreadoutcoverthe", 2, "vegas_death_movingclosertothe", 3, "vegas_sp2_wevegotcontactgo", 5, "vegas_spl_sendingmoresupportnow" ]; thread maps\las_vegas_code::array_play_enemy_radio( var_0 ); } entrance_combat_dialogue() { level.merrick thread maps\las_vegas_code::flag_smart_dialogue( "entrance_combat_start", "vegas_mrk_gogo" ); level.hesh thread maps\las_vegas_code::flag_smart_dialogue( "incoming_chopper", "vegas_hsh_putsomefireon" ); } entrance_pursuers() { if ( level.start_point != "entrance_combat" ) wait 4; maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "entrance_chopper" ); } entrance_enemy_alert_thread() { self endon( "death" ); self endon( "stop_alert_thread" ); self.ignoreall = 1; maps\_utility::set_archetype( "creepwalk" ); var_0 = self.walkdist; self.walkdist = 1200; thread maps\las_vegas_code::waittill_flag_set( "too_close", "entrance_combat_start" ); thread maps\las_vegas_code::waittill_flag_set( "damage", "entrance_combat_start" ); thread maps\las_vegas_code::waittill_flag_set( "bulletwhizby", "entrance_combat_start" ); thread maps\las_vegas_code::waittill_flag_set( "explode", "entrance_combat_start" ); thread maps\las_vegas_code::too_close_to_allies( "too_close", 250, "entrance_combat_start" ); self waittill( "jumpedout" ); var_1 = common_scripts\utility::getstructarray( "entrance_shooter_path", "targetname" ); var_1 = sortbydistance( var_1, self.origin ); var_2 = undefined; foreach ( var_4 in var_1 ) { if ( isdefined( var_4.is_taken ) ) continue; var_4.is_taken = 1; var_2 = var_4; break; } self waittill( "quick_getout_end" ); self.qsetgoalpos = 0; var_6 = 0; if ( isdefined( var_2.script_noteworthy ) ) { if ( var_2.script_noteworthy == "dog_guy" ) { self.disablebulletwhizbyreaction = 1; thread courtyard_dog_intro(); var_6 = 1; } } else thread courtyard_dog_reaction(); thread maps\_utility::follow_path( var_2 ); common_scripts\utility::flag_wait( "entrance_combat_start" ); if ( var_6 ) return; self notify( "_utility::follow_path" ); maps\_utility::clear_archetype(); self.walkdist = var_0; self.ignoreall = 0; self.goalradius = 1024; } start_walk( var_0, var_1 ) { maps\_utility::set_force_color( var_1 ); maps\_utility::disable_ai_color(); maps\_utility::walkdist_zero(); var_2 = common_scripts\utility::getstruct( var_0, "targetname" ); maps\_utility::follow_path( var_2, undefined, ::follow_path_node_anim ); maps\_utility::walkdist_reset(); maps\_utility::enable_ai_color(); } waittill_combat_start() { common_scripts\utility::flag_wait( "entrance_combat_start" ); if ( self.team == "axis" ) self.goalradius = level.default_goalradius; maps\las_vegas_code::clear_ignore_everything(); } courtyard_sniper() { var_0 = maps\_utility::spawn_targetname( "courtyard_sniper", 1 ); var_0.disablelongdeath = 1; var_0.targetname = "courtyard_sniper_ai"; var_0 setgoalpos( var_0.origin ); var_0.ignoreall = 1; var_0 allowedstances( "stand" ); var_0 setcandamage( 0 ); level waittill( "laser_on" ); setsaveddvar( "laserrange", 5000 ); var_1 = spawn( "script_model", var_0 gettagorigin( "tag_flash" ) ); var_0 thread courtyard_sniper_laser( var_1 ); var_1.targetname = "courtyard_laser"; var_1 setmodel( "tag_flash" ); var_1.angles = vectortoangles( level.player.origin - var_1.origin ); var_1.angles = var_1.angles + ( -70, 0, 0 ); var_1 laserforceon(); var_2 = 0.2; while ( !common_scripts\utility::flag( "dog_down" ) ) { var_3 = vectortoangles( level.dog.origin + ( 0, 0, 20 ) - var_1.origin ); var_1 rotateto( var_3, var_2 ); wait( var_2 ); } var_0 setcandamage( 1 ); var_1 rotateto( var_1.angles + ( 30, 0, 0 ), 0.5 ); wait 0.5; var_1 laserforceoff(); var_1 delete(); if ( isdefined( var_0 ) && isalive( var_0 ) ) { var_0 endon( "death" ); var_0 laserforceon(); var_0.ignoreall = 0; } common_scripts\utility::flag_wait( "leaving_entrance" ); wait( randomfloatrange( 10, 20 ) ); if ( isdefined( var_0 ) && isalive( var_0 ) ) var_0 kill(); } courtyard_sniper_laser( var_0 ) { self endon( "death" ); var_0 endon( "death" ); for (;;) { var_0.origin = self gettagorigin( "tag_flash" ); wait 0.05; } } courtyard_dog_intro( var_0 ) { self setcandamage( 0 ); self.grenadeawareness = 0; self.badplaceawareness = 0; maps\_utility::disable_arrivals(); self.fixednode = 1; maps\_utility::forceuseweapon( "lsat", "primary" ); maps\_utility::clear_archetype(); var_1 = common_scripts\utility::getstruct( "courtyard_dog_spawn_struct", "targetname" ); var_2 = maps\las_vegas_code::spawn_hero( "riley", var_1 ); var_2.ignoreall = 1; var_2.ignoreme = 1; var_2.fixednode = 1; var_2 setcandamage( 0 ); self waittill( "reached_path_end" ); maps\_utility::set_archetype( "creepwalk" ); var_1 = common_scripts\utility::getstruct( var_1.target, "targetname" ); var_2 thread maps\_utility::follow_path( var_1 ); var_0 = common_scripts\utility::getstruct( "dog_kill_struct", "targetname" ); var_0.origin = common_scripts\utility::drop_to_ground( var_0.origin, 10, -100 ); self notify( "stop_alert_thread" ); self.ignoreall = 1; self.ignoreme = 1; self.goalradius = 145; self setgoalpos( var_0.origin ); self waittill( "goal" ); level thread courtyard_sniper(); var_2 notify( "_utility::follow_path" ); var_3 = [ self, var_2 ]; self.animname = "dog_guy"; var_2.fixednode = 1; var_2.grenadeawareness = 0; var_2.badplaceawareness = 0; var_2 maps\_utility::delaythread( 0.1, ::dog_hack ); var_0 maps\_anim::anim_reach( var_3, "dog_kill" ); level.hesh thread maps\_utility::smart_dialogue( "vegas_hsh_riley" ); level notify( "laser_on" ); level.dog thread maps\_utility_dogs::dog_bark(); level notify( "dog_reaction" ); common_scripts\utility::flag_set( "entrance_combat_start" ); var_2.ignoreme = 0; var_0 thread maps\_anim::anim_single( var_3, "dog_kill" ); wait 3; level.dog thread dog_intro_pain(); self.allowdeath = 1; self.a.nodeath = 1; self kill(); } dog_hack() { self.fixednode = 1; self.goalradius = 32; } dog_friendly_react() { level.keegan.baseaccuracy = 500; dog_friendly_react_wait(); var_0 = common_scripts\utility::getstruct( "riley_hurt_struct_hesh", "targetname" ); level.hesh.alertlevelint = 0; level.hesh maps\_utility::disable_ai_color(); var_0 maps\_anim::anim_reach_solo( level.hesh, "dog_hurt_enter" ); level thread dog_friendly_dialogue(); level thread keegan_cover_dog(); var_0 maps\_anim::anim_single_solo( level.hesh, "dog_hurt_enter" ); level.hesh thread maps\_anim::anim_single_solo( level.hesh, "dog_hurt_loop" ); level notify( "stop_dog_hurt_anim" ); var_0 maps\las_vegas_code::struct_stopanimscripted(); level.hesh maps\_anim::anim_single_solo( level.hesh, "dog_hurt_exit" ); level.hesh maps\_utility::enable_ai_color(); maps\_utility::activate_trigger_with_targetname( "entrance_battle_colors" ); common_scripts\utility::flag_set( "entrance_chopper_reinforcement" ); thread courtyard_dialogue(); level.keegan maps\_utility::set_force_color( "g" ); level.keegan waittill( "goal" ); } courtyard_dialogue() { common_scripts\utility::flag_wait( "courtyard_stairs" ); level.keegan thread maps\_utility::smart_dialogue( "vegas_kgn_thereitis" ); wait 3; level.merrick maps\_utility::smart_dialogue( "vegas_mrk_everyoneonthebus" ); wait 2; level.keegan thread maps\_utility::smart_dialogue( "vegas_mrk_moveyourasskid" ); } keegan_cover_dog() { var_0 = getnode( "keegan_cover_dog", "targetname" ); level.keegan maps\_utility::disable_ai_color(); level.keegan.goalradius = 32; level.keegan setgoalnode( var_0 ); var_1 = getent( "courtyard_sniper_ai", "targetname" ); if ( isdefined( var_1 ) ) level.keegan.favoriteenemy = var_1; } dog_friendly_react_wait() { var_0 = getent( "courtyard_entry_volume", "targetname" ); for (;;) { wait 0.05; var_1 = var_0 maps\_utility::get_ai_touching_volume( "axis" ); if ( common_scripts\utility::flag( "entrance_chopper_reinforcement" ) ) break; if ( var_1.size < 2 ) break; } } dog_friendly_dialogue() { wait 2; var_0 = spawn( "script_model", level.dog.origin + ( 0, 0, -200 ) ); var_0 maps\_utility_dogs::set_dog_model( "fullbody_dog_b_cam_obj_hurt" ); level.hesh maps\_utility::smart_dialogue( "vegas_kgn_hesokbulletwent" ); level.dog maps\_utility::delaythread( 1, maps\las_vegas_code::dog_thread ); level notify( "stop_dog_hurt_anim" ); level.hesh maps\_utility::smart_dialogue( "vegas_hsh_loganyoucarryhim" ); var_0 maps\_utility_dogs::kill_dog_fur_effect(); common_scripts\utility::waitframe(); var_0 delete(); } dog_intro_pain() { maps\_utility::anim_stopanimscripted(); common_scripts\utility::flag_set( "dog_down" ); var_0 = getent( "courtyard_laser", "targetname" ); thread common_scripts\utility::play_sound_in_space( "weap_gm6_fire_npc", var_0.origin ); var_1 = self.origin + ( 0, 0, 20 ); thread common_scripts\utility::play_sound_in_space( "bullet_ap_flesh", var_1 ); var_2 = vectornormalize( var_0.origin - self.origin ); playfx( common_scripts\utility::getfx( "blood_spurt" ), var_1, var_2 ); maps\_utility_dogs::set_dog_model( "fullbody_dog_b_hurt" ); self playsound( "vegas_riley_shot" ); var_3 = maps\las_vegas_code::makestruct(); var_3.origin = common_scripts\utility::drop_to_ground( var_3.origin + ( 0, 0, 10 ), 10, -100 ); var_3 maps\_anim::anim_single_solo( self, "dog_pain" ); maps\_utility::anim_stopanimscripted(); thread dog_friendly_react(); thread maps\_anim::anim_single_solo( self, "hurt_idle_single" ); wait 0.5; thread maps\_anim::anim_loop_solo( self, "hurt_idle" ); var_4 = maps\las_vegas_code::spawn_drone_dog(); var_4 hide(); var_3 = maps\las_vegas_code::makestruct(); var_3 maps\_anim::anim_first_frame_solo( var_4, "hurt_idle_single" ); var_4 show(); maps\_utility::stop_magic_bullet_shield(); self delete(); level.dog = var_4; var_4 maps\_utility::ent_flag_init( "picked_up" ); var_4 thread maps\las_vegas_code::dog_loop_audio(); badplace_cylinder( "dog_place", 0, var_4.origin, 32, 60 ); var_4 thread maps\_anim::anim_loop_solo( var_4, "hurt_idle" ); } courtyard_dog_reaction() { self endon( "death" ); level waittill( "dog_reaction" ); wait( randomfloatrange( 0.2, 1.5 ) ); self animcustom( maps\las_vegas_code::do_reaction ); self orientmode( "face point", level.dog.origin ); } init_courtyard() { if ( isdefined( level.courtyard ) ) return; level.courtyard = spawnstruct(); level.courtyard.enemy_volume = getent( "courtyard_volume", "targetname" ); level.courtyard.enemies = []; level.courtyard.chopper_shooter_count = 0; level.courtyard.chopper_shooter_total = 0; level.courtyard.chopper_shooter_holding = 0; level.courtyard.next_chopper_shooter = 0; level.courtyard.choppers = []; } battle_think() { var_0 = getentarray( "courtyard_volume_triggers", "targetname" ); common_scripts\utility::array_thread( var_0, maps\las_vegas_code::enemy_volume_trigger_thread, level.courtyard, "courtyard_battle_done" ); maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "chopper_shooter2" ); var_1 = getentarray( "courtyard_chopper", "script_noteworthy" ); common_scripts\utility::array_thread( var_1, maps\_vehicle::spawn_vehicle_and_gopath ); } unload_thread() { self endon( "death" ); self notify( "unload_thread" ); self endon( "unload_thread" ); level.courtyard.enemies[level.courtyard.enemies.size] = self; self waittill( "jumpedout" ); self.ignoreall = 0; wait 2; maps\las_vegas_code::set_goal_volume( level.courtyard.enemy_volume, randomfloat( 2 ) ); } chopper_shooter_holding() { self endon( "death" ); var_0 = maps\las_vegas_code::get_sorted_structs( "courtyard_chopper_holding", self.origin ); var_1 = maps\las_vegas_code::get_unused_struct( var_0 ); var_1.inuse = 1; var_1 thread maps\las_vegas_code::reset_inuse( self, "holding_done" ); self setvehgoalpos( var_1.origin, 1 ); common_scripts\utility::waittill_any( "near_goal", "goal" ); var_2 = 0; for (;;) { if ( var_2 ) { var_2 = 0; self settargetyaw( var_1.angles[1] + 180 ); } else { var_2 = 1; self settargetyaw( var_1.angles[1] ); } var_3 = gettime() + randomfloatrange( 5, 10 ) * 1000; while ( var_3 > gettime() ) { if ( level.courtyard.chopper_shooter_count < 1 ) { self cleartargetyaw(); return; } wait 0.2; } } } postspawn_courtyard_enemy() { level.courtyard.enemies = common_scripts\utility::array_removeundefined( level.courtyard.enemies ); level.courtyard.enemies[level.courtyard.enemies.size] = self; } #using_animtree("script_model"); train_fall() { var_0 = common_scripts\utility::getstruct( "courtyard_train_spot", "targetname" ); var_1 = getentarray( var_0.target, "targetname" ); var_2 = getentarray( "trainfall_spark_spots", "targetname" ); foreach ( var_4 in var_1 ) { var_4.animname = var_4.script_noteworthy; var_4 useanimtree( #animtree ); var_0 maps\_anim::anim_first_frame_solo( var_4, "vegas_train_fall" ); } level.train_drippy_num_right = 0; level.train_drippy_num_left = 0; var_6 = undefined; foreach ( var_4 in var_1 ) { var_4.animname = var_4.script_noteworthy; var_4 useanimtree( #animtree ); var_0 maps\_anim::anim_first_frame_solo( var_4, "vegas_train_fall" ); if ( var_4.script_noteworthy == "train1" ) { var_6 = var_4; var_0 thread maps\_anim::anim_loop_solo( var_4, "vegas_train_fall_idle", "stop_anim" ); } foreach ( var_9 in var_2 ) { if ( var_9.script_noteworthy == var_4.script_noteworthy ) { var_9 linkto( var_4, "train1_jnt" ); var_4 thread train_crash_fx( var_9 ); } } } common_scripts\utility::flag_wait( "leaving_entrance" ); var_12 = [ ( -29881, -34947, 458 ), ( -29681, -34883, 458 ) ]; for (;;) { wait 0.1; if ( distancesquared( level.player.origin, var_6.origin ) > squared( 1200 ) ) continue; if ( distancesquared( level.player.origin, var_6.origin ) > squared( 950 ) ) { var_13 = 0; foreach ( var_9 in var_12 ) { if ( level.player maps\_utility::player_looking_at( var_9 ) ) var_13++; } if ( var_13 == 0 ) continue; } wait( randomfloat( 1 ) ); common_scripts\utility::flag_set( "FLAG_traincrash_start" ); thread train_quake_crash(); var_0 notify( "stop_anim" ); var_0 maps\_anim::anim_single( var_1, "vegas_train_fall" ); break; } } train_crash_fx( var_0 ) { common_scripts\utility::flag_wait( "FLAG_traincrash_start" ); if ( self.script_noteworthy == "train1" ) { if ( level.train_drippy_num_left > 2 ) return; level.train_drippy_num_left++; var_0 thread train_crash_fx_sparks( 0, 0.25, "vfx_electrical_spark" ); var_0 thread train_crash_fx_sparks( randomfloatrange( 0.5, 0.7 ), 0.2 ); var_0 thread train_crash_fx_sparks( randomfloatrange( 1.15, 1.45 ), 0.3 ); var_0 thread train_crash_fx_sparks( randomfloatrange( 2.15, 2.35 ), 0.4 ); common_scripts\utility::exploder( 3 ); wait 0.6; common_scripts\utility::exploder( "train_fall_track_impact" ); common_scripts\utility::exploder( 3 ); wait 2.2; common_scripts\utility::exploder( 1 ); } else { if ( level.train_drippy_num_right > 0 ) return; level.train_drippy_num_right++; var_0 thread train_crash_fx_sparks( 0, 0.3, "vfx_electrical_spark" ); } } train_crash_fx_sparks( var_0, var_1, var_2 ) { var_3 = "vfx_train_track_sparks"; if ( isdefined( var_2 ) ) var_3 = var_2; wait( var_0 ); var_4 = gettime(); var_1 = var_1 * 1000; while ( gettime() - var_4 <= var_1 ) { var_5 = anglestoforward( ( 0, 90, randomintrange( -360, 360 ) ) ); playfx( common_scripts\utility::getfx( var_3 ), self.origin, var_5 ); wait( randomfloatrange( 0.1, 0.25 ) ); } } train_quake_crash() { wait 0.7; earthquake( 0.2, 0.5, level.player.origin, 1000 ); wait 2.2; earthquake( 0.4, 0.8, level.player.origin, 1000 ); } off_timed_run_back( var_0, var_1 ) { foreach ( var_3 in var_0 ) { var_3 endon( "death" ); wait( randomfloatrange( 0.3, 1 ) ); var_3.ignoreall = 1; var_3 setgoalvolumeauto( var_1 ); var_3 thread reset_ignore_for_enemy(); } } attack_if_player_close_when_retreating() { self endon( "death" ); for (;;) { if ( distance2d( level.player.origin, self.origin ) <= 300 ) { self.ignoreall = 0; self setgoalentity( level.player ); break; } wait 0.3; } } reset_ignore_for_enemy() { self endon( "death" ); self waittill( "goal" ); self.ignoreall = 0; wait 10; self.goalradius = 2048; } exfil() { common_scripts\utility::flag_wait( "exfil" ); thread exfil_end(); maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "exfil_chopper" ); common_scripts\utility::flag_wait( "exfil_f18" ); thread maps\_utility::smart_radio_dialogue( "vegas_hsh_letsgoadammove" ); var_0 = [ "vegas_mrk_movethisthingget", "vegas_mrk_choppers" ]; foreach ( var_3, var_2 in level.exfil_choppers ) { maps\_utility::delaythread( 1, maps\_utility::smart_radio_dialogue, var_0[var_3] ); level thread f18_sidewinder( var_2 ); wait 2; } if ( isdefined( level.courtyard.choppers ) ) { level.courtyard.choppers = common_scripts\utility::array_removeundefined( level.courtyard.choppers ); foreach ( var_2 in level.courtyard.choppers ) { if ( isdefined( var_2 ) ) level thread f18_sidewinder( var_2 ); wait 0.5; } } wait 2; var_6 = getentarray( "courtyard_color_triggers", "script_noteworthy" ); common_scripts\utility::array_call( var_6, ::delete ); maps\_utility::delaythread( 4, maps\_utility::activate_trigger, "color_get_to_bus", "targetname" ); maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "exfil_f18" ); thread exfil_silenthawk(); } f18_sidewinder( var_0 ) { var_1 = getent( "sidewinder", "targetname" ); var_2 = spawn( "script_model", var_1.origin ); var_2 setmodel( var_1.model ); playfxontag( common_scripts\utility::getfx( "smoke_geotrail_rpg" ), var_2, "tag_fx" ); var_2 playloopsound( "sidewinder_loop" ); var_3 = squared( 200 ); var_4 = 500; var_5 = 8800.0; var_2 rotateroll( 1280, randomfloatrange( 4, 6 ) ); var_6 = ( 0, 0, -70 ); var_7 = undefined; for (;;) { if ( isdefined( var_0 ) ) var_7 = var_0.origin; else var_7 = ( -20000, randomfloatrange( -38000, -36000 ), randomfloatrange( 3000, 6000 ) ); if ( var_2.origin[0] > var_7[0] ) break; var_8 = vectornormalize( var_7 + var_6 - var_2.origin ); var_7 = var_2.origin + var_8 * var_4; var_9 = var_4 / var_5; var_2 moveto( var_7, var_9 ); wait( var_9 ); } if ( isdefined( var_0 ) ) { var_0 vehicle_turnengineoff(); thread common_scripts\utility::play_sound_in_space( "sidewinder_exp", var_7 ); var_0 kill(); } var_2 delete(); } postspawn_exfil_chopper() { if ( !isdefined( level.exfil_choppers ) ) level.exfil_choppers = []; if ( self.script_index == 1 ) self.preferred_death_anim = "aas_72x_explode_C"; else self.preferred_death_anim = "aas_72x_explode_B"; level.exfil_choppers[level.exfil_choppers.size] = self; common_scripts\utility::waittill_either( "death", "reached_dynamic_path_end" ); common_scripts\utility::flag_set( "exfil_f18" ); } postspawn_exfil_f18() { var_0 = spawn( "script_origin", self.origin + ( -1000, 0, 0 ) ); var_0 linkto( self ); if ( isdefined( self.script_index ) ) var_0 playsound( "veh_f18_long_flyby2" ); else var_0 playsound( "veh_f18_long_flyby" ); } exfil_silenthawk() { var_0 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "exfil_silenthawk_hover" ); var_0 thread exfil_hover(); var_1 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "exfil_silenthawk" ); var_1 waittillmatch( "noteworthy", "exfil_dialogue" ); thread exfil_chopper_dialogue(); var_1 waittillmatch( "noteworthy", "land" ); var_1 notify( "newpath" ); var_2 = var_1.currentnode; var_2 = common_scripts\utility::getstruct( var_2.target, "targetname" ); var_1 setgoalyaw( var_2.angles[1] ); var_1 setvehgoalpos( var_2.origin, 1 ); var_1 sethoverparams( 10, 5, 15 ); var_1 setneargoalnotifydist( 100 ); var_1 waittill( "near_goal" ); thread exfil_trigger( var_1 ); } exfil_chopper_dialogue() { maps\_utility::smart_radio_dialogue( "vegas_hsh_gogo" ); wait 2; maps\_utility::smart_radio_dialogue( "vegas_mrk_wegottalosesome" ); level.hesh maps\_utility::smart_dialogue( "vegas_kgn_hardrighthardright" ); } exfil_end() { common_scripts\utility::flag_wait( "exfil_run" ); if ( !level.dog maps\_utility::ent_flag( "picked_up" ) ) level.dog maps\_utility::ent_flag_wait( "picked_up" ); level.dog maps\_utility::ent_flag_set( "disable_put_down" ); level.dog maps\las_vegas_code::dog_disable_trigger(); level.hesh thread maps\_utility::smart_dialogue( "vegas_hsh_leftsidesgettinghit" ); common_scripts\utility::flag_wait( "exfil_reached" ); thread exfil_fade(); maps\_utility::smart_radio_dialogue( "vegas_hsh_ontheright" ); maps\_utility::smart_radio_dialogue( "vegas_mrk_thisthingsdragginass" ); maps\_utility::nextmission(); } exfil_fade() { common_scripts\utility::flag_wait( "exfil_fade" ); maps\_hud_util::fade_out( 3 ); level.player freezecontrols( 1 ); } exfil_trigger( var_0 ) { var_1 = spawn( "trigger_radius", var_0.origin + ( 0, 0, -200 ), 0, 800, 500 ); var_1 waittill( "trigger" ); common_scripts\utility::flag_set( "exfil_reached" ); var_1.radius = 300; var_1 waittill( "trigger" ); common_scripts\utility::flag_set( "exfil_fade" ); } exfil_hover() { self waittillmatch( "noteworthy", "hover" ); self notify( "newpath" ); var_0 = get_hover_points(); self setneargoalnotifydist( 300 ); var_1 = get_nearest_hover_point( var_0 ); for (;;) { for ( var_2 = var_1; var_2 < var_0.size; var_2++ ) { self setvehgoalpos( var_0[var_2] ); self waittill( "near_goal" ); } var_1 = 0; } } get_nearest_hover_point( var_0 ) { var_1 = 0; var_2 = distancesquared( var_0[0], self.origin ); foreach ( var_6, var_4 in var_0 ) { var_5 = distancesquared( var_4, self.origin ); if ( var_5 < var_2 ) { var_1 = var_6; var_2 = var_5; } } return var_1; } get_hover_point( var_0, var_1 ) { var_2 = 24.0; var_3 = ( 0, var_2 * var_1, 0 ); var_4 = anglestoforward( var_3 ); var_5 = var_0.origin + var_4 * var_0.radius; return var_5; } get_hover_points() { var_0 = []; var_1 = common_scripts\utility::getstruct( "exfil_hover_struct", "targetname" ); for ( var_2 = 0; var_2 < 15; var_2++ ) var_0[var_2] = get_hover_point( var_1, var_2 ); return var_0; } postspawn_entrance_chopper() { self.quick_getout = 1; level.courtyard.choppers = common_scripts\utility::array_removeundefined( level.courtyard.choppers ); level.courtyard.choppers[level.courtyard.choppers.size] = self; thread maps\las_vegas_code::vehicle_path_notifies(); self setmaxpitchroll( 60, 40 ); } postspawn_entrance_chopper_unloader() { self setcontents( 0 ); thread postspawn_entrance_chopper(); foreach ( var_1 in self.shooters ) { var_2 = var_1.vehicle_position; var_3 = 0; if ( var_2 == 2 ) var_1.delay = 0 + var_3; else if ( var_2 == 3 ) var_1.delay = 1 + var_3; else if ( var_2 == 4 ) var_1.delay = 3 + var_3; else if ( var_2 == 5 ) var_1.delay = 4 + var_3; var_1 thread entrance_enemy_alert_thread(); } } postspawn_entrance_chopper_shooter() { thread postspawn_entrance_chopper(); maps\las_vegas_code::enable_shooters( 0 ); common_scripts\utility::flag_wait( "entrance_combat_start" ); maps\las_vegas_code::enable_shooters( 1 ); self setmaxpitchroll( 30, 30 ); self sethoverparams( 60, 20, 50 ); self waittill( "reached_dynamic_path_end" ); wait 0.5; level.courtyard.chopper_shooter_count++; self.shooter_side = "left"; thread maps\las_vegas_code::chopper_shooter_init( "courtyard_dyn_path" ); } postspawn_courtyard_chopper() { self.quick_getout = 1; level.courtyard.choppers = common_scripts\utility::array_removeundefined( level.courtyard.choppers ); level.courtyard.choppers[level.courtyard.choppers.size] = self; thread maps\las_vegas_code::vehicle_path_notifies(); thread maps\las_vegas_code::shooter_range(); if ( isdefined( self.shooters ) ) common_scripts\utility::array_thread( self.shooters, ::unload_thread ); } postspawn_chopper_shooter() { self endon( "death" ); self.quick_getout = 1; level.courtyard.choppers = common_scripts\utility::array_removeundefined( level.courtyard.choppers ); level.courtyard.choppers[level.courtyard.choppers.size] = self; thread maps\las_vegas_code::shooter_range(); maps\las_vegas_code::enable_shooters( 0 ); common_scripts\utility::flag_wait( "chopper_shooter_is_needed" ); level.courtyard.chopper_shooter_count++; wait( randomfloatrange( 20, 30 ) ); thread chopper_inbound_dialogue(); thread maps\las_vegas_code::chopper_shooter_init( "courtyard_dyn_path" ); } chopper_inbound_dialogue() { self endon( "death" ); wait 4; level.merrick maps\_utility::smart_dialogue( "vegas_mrk_keeppushingforwardtowards" ); } follow_path_node_anim( var_0 ) { if ( !isdefined( var_0.animation ) ) return; var_1 = "normal"; if ( isdefined( var_0.script_type ) ) var_1 = var_0.script_type; var_2 = var_0.animation; if ( var_1 == "play_once" ) var_0.animation = undefined; var_3 = 1; if ( isdefined( var_0.script_parameters ) ) { if ( var_0.script_parameters == "no_arrivals" ) var_3 = 0; } if ( !var_3 ) { maps\_utility::disable_arrivals(); maps\_utility::disable_exits(); } var_0 maps\_anim::anim_generic_reach( self, var_2 ); self notify( "start_follow_path_anim" ); switch ( var_1 ) { case "run_anim": var_0 maps\_anim::anim_generic_run( self, var_2 ); break; case "switch_to_sniper": thread switch_to_sniper( var_0 ); break; default: var_0 maps\_anim::anim_generic( self, var_2 ); break; } if ( !var_3 ) { maps\_utility::enable_arrivals(); maps\_utility::enable_exits(); } } switch_to_sniper( var_0 ) { self orientmode( "face angle", var_0.angles[1] ); self animcustom( ::switch_to_sniper_internal ); } switch_to_sniper_internal() { var_0 = animscripts\utility::lookupanim( "cqb", "shotgun_pullout" ); animscripts\run::shotgunswitchstandruninternal( "sniper_pullout", var_0, "gun_2_chest", "none", self.secondaryweapon, "shotgun_pickup" ); } array_remove_after_index( var_0, var_1 ) { var_2 = []; for ( var_3 = 0; var_3 < var_1; var_3++ ) var_2[var_2.size] = var_0[var_3]; return var_2; } get_script_index() { return self.script_index; }