// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool main() { setsaveddvar( "bg_viewKickMax", 30 ); setsaveddvar( "ammoCounterHide", 1 ); level.baker thread maps\ship_graveyard_util::dyn_swimspeed_disable(); level.player disableweapons(); level.player thread maps\_utility::vision_set_fog_changes( "shpg_start_chasm_lessfog", 0.05 ); level.killfirm_suffix = "_loud"; setsaveddvar( "player_swimSpeed", 80 ); setsaveddvar( "player_sprintUnlimited", "1" ); maps\ship_graveyard_stealth::stealth_disable(); level.baker.goalradius = 64; level.baker.pathrandompercent = 0; level.stealth_ally_accu = 1; level.baker.baseaccuracy = level.stealth_ally_accu; maps\ship_graveyard_util::set_start_positions( "new_trench" ); maps\_utility::autosave_by_name_silent( "drown" ); maps\ship_graveyard_util::baker_glint_off(); thread trench_drowning(); thread trench_things_crashing(); thread trench_light_flicker(); } trench_intel_drop() { common_scripts\utility::flag_wait( "start_new_canyon" ); var_0 = getent( "intelligence_item", "targetname" ); var_1 = getent( var_0.target, "targetname" ); var_2 = 800; var_3 = 185; var_4 = 20; var_1.old_org = var_1.origin; var_1.old_ang = var_1.angles; var_0.origin = var_0.origin + ( 0, 0, -1 * var_2 ); var_1.origin = var_1.origin + ( 0, 0, var_2 ); var_1.angles = var_1.angles + ( var_3, var_3, var_3 ); var_1 moveto( var_1.old_org, var_4 ); var_1 rotateto( var_1.old_ang, var_4 ); var_1 waittill( "movedone" ); var_0.origin = var_0.origin + ( 0, 0, var_2 ); } trench_light_flicker() { level endon( "start_new_canyon" ); var_0 = common_scripts\utility::get_target_ent( "new_trench_drown_light" ); var_1 = var_0 getlightintensity(); for (;;) { var_2 = randomfloatrange( var_1 * 0.7, var_1 * 1.2 ); var_0 setlightintensity( var_2 ); wait 0.05; } } canyon_main() { setsaveddvar( "ammoCounterHide", 0 ); setsaveddvar( "bg_viewKickMax", 20 ); level.killfirm_suffix = "_loud"; common_scripts\utility::flag_set( "allow_killfirms" ); level.baker.pathrandompercent = 50; level.baker thread maps\ship_graveyard_util::dyn_swimspeed_disable(); level.baker.moveplaybackrate = 1.25; level.baker.movetransitionrate = level.baker.moveplaybackrate; thread start_canyon_combat(); thread hit_player_when_flag(); thread trench_intel_drop(); } trench_drowning() { var_0 = getdvar( "g_friendlyNameDist" ); setsaveddvar( "g_friendlyNameDist", 0 ); var_1 = common_scripts\utility::get_target_ent( "new_trench_first_crash" ); var_1 delete(); level.ro_index = 0; level.player freezecontrols( 1 ); level.player disableweapons(); level.player notify( "stop_scuba_breathe" ); level.player thread maps\_swim_player::shellshock_forever(); var_2 = maps\_utility::spawn_anim_model( "crash_chopper" ); level.baker.animname = "generic"; var_3 = common_scripts\utility::get_target_ent( "trench_bottom_boat" ); var_4 = getentarray( "trench_bottom_boat_attach", "targetname" ); common_scripts\utility::array_call( var_4, ::linkto, var_3 ); var_5 = maps\_utility::spawn_anim_model( "trench_boat" ); var_6 = maps\_utility::spawn_anim_model( "debris" ); var_7 = maps\_utility::spawn_anim_model( "breather_hose" ); var_8 = ( 0, 0, 48 ); var_9 = maps\_player_rig::get_player_rig(); var_9.origin = level.player.origin - var_8; var_9.angles = level.player.angles; var_10 = common_scripts\utility::spawn_tag_origin(); var_10.origin = var_9.origin; var_10.angles = var_9.angles; var_10 linkto( var_9, "tag_player", var_8, ( 0, 0, 0 ) ); level.player playerlinktoabsolute( var_10, "tag_origin" ); var_11 = [ var_9, var_2, level.baker, var_5, var_7, var_6 ]; var_12 = common_scripts\utility::get_target_ent( "new_trench_anim_node" ); var_12 maps\_anim::anim_first_frame( var_11, "trench_drown" ); wait 0.5; level notify( "stop_sun_movement" ); resetsundirection(); level.f_min["gasmask_overlay"] = 0.7; level.f_max["gasmask_overlay"] = 0.9; level.player.breathing_overlay["gasmask_overlay"].alpha = 0.9; var_3 linkto( var_5 ); common_scripts\utility::exploder( "lcs_collapsing" ); wait 2; common_scripts\utility::exploder( "dead_bodies_underwater" ); common_scripts\utility::exploder( "lcs_collapsing" ); thread drowning_hudfx(); var_7 thread hose_fx(); var_7 thread maps\_utility::play_sound_on_tag( "scn_shipg_rescue_hose", "tag_fx" ); thread drowning_dialogue(); var_2 thread chopper_fx(); var_2 hide(); level.f_min["halo_overlay_scuba_steam"] = 0.7; level.f_max["halo_overlay_scuba_steam"] = 0.9; level.player.breathing_overlay["halo_overlay_scuba_steam"].alpha = 0.9; maps\_utility::delaythread( 14, ::player_gives_up ); thread rig_fx( var_9 ); thread rebreather_plug_in(); thread unlink_player( var_12, var_9, var_7, var_5 ); thread unlink_baker(); thread lcs_back(); thread drowning_dof( var_10, var_9 ); var_13 = common_scripts\utility::get_target_ent( "first_cheap_object" ); var_13.origin = var_13.origin + ( 0, 0, 500 ); var_13 maps\_utility::delaythread( 22.5, ::generate_cheap_falling_object, 217, 50 ); level.baker maps\_utility::disable_exits(); var_12 maps\_anim::anim_single( var_11, "trench_drown" ); wait 0.2; level.baker maps\_utility::enable_exits(); var_10 delete(); setsaveddvar( "g_friendlyNameDist", var_0 ); } rescue_scene_sfx() { wait 8.266; level.player playsound( "scn_shipg_rescue_hand" ); wait 9.3; level.player playsound( "scn_shipg_rescue_helmet" ); wait 2.634; level.player playsound( "scn_shipg_rescue_heave" ); wait 10.166; level.player playsound( "scn_shipg_rescue_heli" ); wait 3.734; level.player playsound( "scn_shipg_rescue_hitback" ); } drowning_dof( var_0, var_1 ) { wait 7.25; common_scripts\utility::flag_set( "pause_dynamic_dof" ); maps\_art::dof_enable_script( 0, 0, 10, 30, 60, 1.5, 1 ); common_scripts\utility::flag_wait( "drown_rebreather_plugin" ); wait 4.5; maps\_art::dof_enable_script( 0, 0, 10, 450, 750, 1.5, 3.5 ); common_scripts\utility::flag_wait( "drown_debris_impact" ); var_1 hide(); level.player enableslowaim( 0.5, 0.5 ); level.player allowsprint( 0 ); setsaveddvar( "player_swimSpeed", 15 ); setsaveddvar( "player_swimVerticalSpeed", 15 ); wait 0.5; maps\_art::dof_enable_script( 0, 0, 10, 450, 750, 3, 2.5 ); common_scripts\utility::flag_wait( "drown_chopper_i1" ); var_1 show(); level.player disableslowaim(); level.player allowsprint( 1 ); level.player playerlinktoblend( var_0, "tag_origin", 0.5, 0, 0 ); wait 0.05; maps\_art::dof_enable_script( 0, 150, 10, 1100, 5000, 5, 0.5 ); common_scripts\utility::flag_wait( "drown_chopper_i2" ); maps\_art::dof_disable_script( 1 ); wait 1; common_scripts\utility::flag_clear( "pause_dynamic_dof" ); } drowning_dialogue() { level.player endon( "death" ); level.baker waittillmatch( "single anim", "shipg_bkr_rookrook" ); thread maps\_utility::smart_radio_dialogue( "shipg_bkr_rookrook_new" ); level.baker waittillmatch( "single anim", "shipg_bkr_cmonstaywithme" ); thread maps\_utility::smart_radio_dialogue( "shipg_bkr_cmonstaywithme_new" ); level.baker waittillmatch( "single anim", "shipg_bkr_alrightletsgetthis" ); thread maps\_utility::smart_radio_dialogue( "shipg_bkr_alrightletsgetthis_new" ); level.f_min["gasmask_overlay"] = 0.3; level.f_max["gasmask_overlay"] = 0.95; level.baker waittillmatch( "single anim", "shipg_bkr_grunt" ); thread maps\_utility::smart_radio_dialogue_overlap( "shipg_bkr_grunt_new" ); maps\_utility::delaythread( 7.5, maps\_utility::smart_radio_dialogue_overlap, "shipg_bkr_youok" ); level.baker waittillmatch( "single anim", "shipg_bkr_whatthe" ); thread maps\_utility::smart_radio_dialogue_overlap( "shipg_bkr_whatthe_new" ); level.baker waittillmatch( "single anim", "shipg_bkr_move_2" ); thread maps\_utility::smart_radio_dialogue_overlap( "shipg_bkr_move_2_new" ); } drowning_hudfx() { wait 2; thread maps\_hud_util::fade_in( 5.5 ); level.player setblurforplayer( 0, 6 ); wait 4.5; thread mash_to_survive(); } mash_to_survive() { wait 2; fade_in_x_hint( 2 ); thread x_hint_blinks(); thread increase_difficulty(); level endon( "drown_rebreather_plugin" ); level.player endon( "death" ); level.fade_out_death_time = 2.5; level.occumulator = 0; level.drown_max_alpha = 0; for (;;) { fade_out_death(); wait 0.05; } } increase_difficulty() { level waittill( "player_hit_x" ); } fade_out_death() { thread wait_for_x_input(); level endon( "player_hit_x" ); thread maps\_hud_util::fade_out( level.fade_out_death_time ); var_0 = max( 0, level.fade_out_death_time - 1.75 ); var_1 = level.fade_out_death_time - var_0; wait( var_0 ); level.occumulator = 0; wait( var_1 ); level.player.overlay["black"].foreground = 0; fade_out_x_hint( 0.25 ); maps\ship_graveyard_util::force_deathquote( &"SHIP_GRAVEYARD_HINT_DROWN" ); level.player kill(); } wait_for_x_input() { level.player endon( "death" ); level endon( "drown_rebreather_plugin" ); while ( use_pressed() ) wait 0.05; while ( !use_pressed() ) wait 0.05; level notify( "player_hit_x" ); thread fade_in_to_alpha( 0.1, level.drown_max_alpha ); earthquake( 0.25, 0.2, level.player.origin, 512 ); level.player playrumbleonentity( "damage_light" ); level.occumulator = level.occumulator + 1; } fade_in_to_alpha( var_0, var_1 ) { if ( level.missionfailed ) return; var_2 = maps\_hud_util::get_optional_overlay( "black" ); var_2 fadeovertime( var_0 ); var_2.alpha = var_1; wait( var_0 ); } fade_in_x_hint( var_0 ) { if ( maps\ship_graveyard_util::greenlight_check() ) return; if ( !isdefined( var_0 ) ) var_0 = 1.5; if ( !isdefined( level.x_hint ) ) draw_x_hint(); foreach ( var_2 in level.x_hint ) { var_2 fadeovertime( var_0 ); var_2.alpha = 0.95; } } draw_x_hint() { var_0 = 125; var_1 = 0; var_2 = level.player maps\_hud_util::createclientfontstring( "default", 2 ); var_2.x = var_1 * -1; var_2.y = var_0; var_2.horzalign = "right"; var_2.alignx = "right"; var_2 set_default_hud_stuff(); var_2 settext( &"SHIP_GRAVEYARD_HINT_RT" ); var_3 = []; var_3["text"] = var_2; level.x_hint = var_3; } x_hint_blinks() { if ( maps\ship_graveyard_util::greenlight_check() ) return; level notify( "fade_out_x_hint" ); level endon( "fade_out_x_hint" ); if ( !isdefined( level.x_hint ) ) draw_x_hint(); var_0 = 0.6; var_1 = 0.2; foreach ( var_3 in level.x_hint ) { var_3 fadeovertime( 0.1 ); var_3.alpha = 0.95; } wait 0.1; var_5 = level.x_hint["text"]; var_6 = 3; for (;;) { var_5 fadeovertime( 0.01 ); var_5.alpha = 0.95; var_5 changefontscaleovertime( 0.01 ); if ( !level.console && !level.player usinggamepad() ) var_5.fontscale = 2; else var_5.fontscale = 2 * var_6; wait 0.18; var_5 fadeovertime( var_0 ); var_5.alpha = 0.0; var_5 changefontscaleovertime( var_0 ); if ( !level.console && !level.player usinggamepad() ) var_5.fontscale = 0.25; else var_5.fontscale = 0.25 * var_6; wait( var_1 ); var_7 = 4; while ( isdefined( level.occumulator ) ) { if ( level.occumulator < var_7 ) break; foreach ( var_3 in level.x_hint ) var_3.alpha = 0; var_0 = 0.3; var_1 = 0.1; wait 0.05; } } } fade_out_x_hint( var_0 ) { level notify( "fade_out_x_hint" ); if ( !isdefined( var_0 ) ) var_0 = 1.5; if ( !isdefined( level.x_hint ) ) draw_x_hint(); foreach ( var_2 in level.x_hint ) { var_2 fadeovertime( var_0 ); var_2.alpha = 0; } } set_default_hud_stuff() { self.alignx = "center"; self.aligny = "middle"; self.horzalign = "center"; self.vertalign = "middle"; self.hidewhendead = 1; self.hidewheninmenu = 1; self.sort = 205; self.foreground = 1; self.alpha = 0; } use_pressed() { return level.player attackbuttonpressed(); } player_gives_up() { level notify( "stop_drowning" ); level.fade_out_death_time = 1; level.drown_max_alpha = 0.5; } lcs_back_bubbles() { maps\_utility::script_delay(); playfxontag( common_scripts\utility::getfx( self.script_fxid ), self, "Tag_origin" ); self waittill( "stopfx" ); maps\_utility::script_delay(); stopfxontag( common_scripts\utility::getfx( self.script_fxid ), self, "Tag_origin" ); maps\_utility::script_delay(); self delete(); } lcs_back() { var_0 = common_scripts\utility::get_target_ent( "first_lcs_crash" ); var_1 = var_0 common_scripts\utility::get_linked_ents(); var_0 hide(); var_2 = var_0 common_scripts\utility::spawn_tag_origin(); var_2 linkto( var_0 ); var_3 = []; var_4 = maps\_utility::getstructarray_delete( "lcs_back_bubble_fx", "targetname" ); var_5 = 0.0; foreach ( var_7 in var_4 ) { var_8 = common_scripts\utility::spawn_tag_origin(); var_8.origin = var_7.origin; var_8.angles = var_7.angles; var_8.script_fxid = var_7.script_fxid; var_8.script_delay = var_5; var_5 = var_5 + 0.2; var_3 = common_scripts\utility::array_add( var_3, var_8 ); var_8 linkto( var_0 ); } common_scripts\utility::flag_wait( "drown_drop_lcs" ); common_scripts\utility::array_thread( var_3, ::lcs_back_bubbles ); wait 1; var_0 thread maps\_utility::play_sound_on_entity( "scn_shipg_lcs_back_fall" ); var_0 thread crash_model_go( var_1 ); common_scripts\utility::array_thread( var_1, ::lcs_back_damage ); var_10 = common_scripts\utility::get_target_ent( "lcs_back_crash_vol" ); var_10 thread lcs_back_damage(); var_11 = var_0 common_scripts\utility::get_target_ent(); var_0 common_scripts\utility::delaycall( 0.5, ::rotateto, var_11.angles, 6, 0, 6 ); wait 3.5; thread maps\_utility::smart_radio_dialogue( "shipg_bkr_timetogo" ); common_scripts\utility::flag_set( "trench_allow_things_to_crash" ); common_scripts\utility::flag_set( "start_base_alarm" ); level.player thread maps\_utility::vision_set_fog_changes( "", 4 ); wait 1; common_scripts\utility::array_thread( var_3, maps\_utility::send_notify, "stopfx" ); maps\_utility::music_play( "mus_shipgrave_trenchrun_battle" ); wait 2; var_2 delete(); } lcs_back_damage() { self waittill( "stop_damage" ); var_0 = common_scripts\utility::get_target_ent( "lcs_back_crash_vol" ); if ( var_0 != self ) var_0 notify( "stop_damage" ); if ( level.player istouching( self ) ) player_smash_death(); } rebreather_plug_in() { wait 4; thread scn_rescue_shockfile_thread(); level.player lerpfov( 50, 10 ); common_scripts\utility::flag_wait( "drown_rebreather_plugin" ); thread fade_out_x_hint( 0.25 ); level.player lerpfov( 65, 0.6 ); level notify( "stop_shellshock" ); level.player thread maps\_utility::play_sound_on_entity( "shipg_player_better_breath" ); level.player.playerfxorg = spawn( "script_model", level.player.origin + ( 0, 0, 0 ) ); level.player.playerfxorg setmodel( "tag_origin" ); level.player maps\_utility::delaythread( 0.1, maps\ship_graveyard_util::player_panic_bubbles ); thread maps\_hud_util::fade_in( 0.1 ); level.player.playerfxorg.angles = level.player getplayerangles(); level.player.playerfxorg.origin = level.player geteye() - ( 0, 0, 10 ); level.player.playerfxorg linktoplayerview( level.player, "tag_origin", ( 5, 0, -55 ), ( 0, 0, 0 ), 1 ); playfxontag( common_scripts\utility::getfx( "scuba_bubbles" ), level.player.playerfxorg, "TAG_ORIGIN" ); wait 0.25; thread maps\_hud_util::fade_out( 3 ); level.f_min["gasmask_overlay"] = 0.1; level.f_max["gasmask_overlay"] = 0.2; wait 0.5; maps\_hud_util::fade_in( 1 ); level.f_min["halo_overlay_scuba_steam"] = 0.4; level.f_max["halo_overlay_scuba_steam"] = 0.6; wait 0.5; level.player.playerfxorg delete(); wait 0.1; level.player thread maps\_underwater::player_scuba(); wait 0.1; level.player thread maps\_swim_player::flashlight(); } scn_rescue_shockfile_thread() { wait 10; level.player shellshock( "shipg_player_drown", 5 ); } rig_fx( var_0 ) { wait 10.66; var_1 = var_0 gettagorigin( "j_wrist_ri" ); playfx( common_scripts\utility::getfx( "player_arm_blood" ), var_1, ( 0, 0, 1 ), ( 1, 0, 0 ) ); } unlink_player( var_0, var_1, var_2, var_3 ) { setsaveddvar( "sv_znear", "1" ); common_scripts\utility::flag_wait( "drown_hand_sound" ); var_1 thread maps\_utility::play_sound_on_tag( "scn_shipg_rescue_hand", "j_wrist_ri" ); common_scripts\utility::flag_init( "drown_player_triggered_unlink" ); level.player freezecontrols( 0 ); common_scripts\utility::flag_wait( "drown_debris_impact" ); level.player playsound( "scn_shipg_rescue_metal_drop" ); common_scripts\utility::exploder( 49 ); common_scripts\utility::flag_wait( "drown_player_impact" ); earthquake( 0.4, 0.5, level.player.origin, 512 ); level.player playrumbleonentity( "damage_heavy" ); common_scripts\utility::flag_wait( "drown_pre_unlink_player" ); setsaveddvar( "sv_znear", "4" ); level.player enableweapons(); thread unlink_on_stick(); common_scripts\utility::flag_wait_either( "drown_unlink_player", "drown_player_triggered_unlink" ); thread trench_smash_death(); thread trench_stay_close_1(); thread trench_stay_close_2(); level.player unlink(); thread deathquote_on_death(); setsaveddvar( "player_swimSpeed", 80 ); setsaveddvar( "player_swimVerticalSpeed", 80 ); level.f_min["gasmask_overlay"] = 0.3; level.f_max["gasmask_overlay"] = 0.95; var_1 hide(); var_2 hide(); var_3 hide(); maps\_utility::autosave_by_name( "trench" ); common_scripts\utility::flag_wait( "drown_unlink_player" ); var_1 delete(); var_2 delete(); var_3 delete(); level.player clearclienttriggeraudiozone( 1.0 ); thread trench_run_dialogue(); thread random_trench_falling(); } unlink_on_stick() { level endon( "drown_unlink_player" ); while ( distance( level.player getnormalizedmovement(), ( 0, 0, 0 ) ) < 0.3 ) wait 0.05; common_scripts\utility::flag_set( "drown_player_triggered_unlink" ); } unlink_baker() { level.baker.goalradius = 128; level.baker.moveplaybackrate = 1.2; level.baker.movetransitionrate = level.baker.moveplaybackrate; level.baker thread maps\ship_graveyard_util::dyn_swimspeed_enable( 500 ); level.baker thread maps\_utility::follow_path_and_animate( common_scripts\utility::get_target_ent( "new_trench_baker_path" ), 0 ); } chopper_fx() { common_scripts\utility::flag_wait( "drown_chopper_start" ); self show(); playfxontag( common_scripts\utility::getfx( "ship_wreckage_spark_underwater" ), self, "tag_fire" ); playfxontag( common_scripts\utility::getfx( "ship_wreckage_spark_underwater" ), self, "main_rotor" ); common_scripts\utility::flag_wait( "drown_chopper_i1" ); wait 0.1; common_scripts\utility::exploder( 51 ); earthquake( 0.5, 0.7, self.origin, 2000 ); common_scripts\utility::flag_wait( "drown_chopper_i2" ); earthquake( 0.7, 1.5, self.origin, 3000 ); common_scripts\utility::exploder( 52 ); player_shake( 100 ); level.player playrumbleonentity( "damage_light" ); level.player common_scripts\utility::delaycall( 0.25, ::playrumbleonentity, "damage_heavy" ); common_scripts\utility::flag_wait( "drown_chopper_i3" ); level.player playrumbleonentity( "damage_heavy" ); common_scripts\utility::exploder( 53 ); wait 4; stopfxontag( common_scripts\utility::getfx( "ship_wreckage_spark_underwater" ), self, "tag_fire" ); wait 0.1; stopfxontag( common_scripts\utility::getfx( "ship_wreckage_spark_underwater" ), self, "main_rotor" ); } hose_fx() { playfxontag( common_scripts\utility::getfx( "rebreather_hose_bubbles" ), self, "TAG_FX" ); common_scripts\utility::flag_wait( "drown_rebreather_plugin" ); stopfxontag( common_scripts\utility::getfx( "rebreather_hose_bubbles" ), self, "TAG_FX" ); } trench_wakeup() { var_0 = getdvarint( "trench_drown", 1 ); if ( var_0 ) { thread trench_drowning(); return; } common_scripts\utility::flag_set( "trench_allow_things_to_crash" ); level.player freezecontrols( 1 ); level.player disableweapons(); common_scripts\utility::waitframe(); var_1 = common_scripts\utility::getstructarray( "new_trench", "targetname" ); var_2 = undefined; foreach ( var_4 in var_1 ) { if ( var_4.script_noteworthy == "player" ) { var_2 = var_4; break; } } var_6 = var_2 common_scripts\utility::spawn_tag_origin(); level.player playerlinktoabsolute( var_6, "tag_origin" ); level.baker.moveplaybackrate = 1.15; level.baker.movetransitionrate = level.baker.moveplaybackrate; level.baker thread maps\ship_graveyard_util::dyn_swimspeed_enable( 300 ); level.player thread maps\_swim_player::shellshock_forever(); wait 1; level.player playerlinktodelta( var_6, "tag_origin", 1, 40, 40, 40, 40 ); var_7 = common_scripts\utility::get_target_ent( "new_trench_first_crash" ); var_8 = var_7 common_scripts\utility::get_linked_ents(); var_7 thread crash_model_go( var_8 ); wait 3; common_scripts\utility::flag_set( "start_base_alarm" ); thread maps\_hud_util::fade_in( 5 ); wait 2; level notify( "player_wakeup" ); thread maps\_utility::smart_radio_dialogue( "shipg_bkr_wakeup" ); level notify( "stop_shellshock" ); common_scripts\utility::flag_wait( "new_trench_first_crash" ); level.player freezecontrols( 0 ); trench_death_warning(); thread maps\_utility::smart_radio_dialogue( "shipg_bkr_pain2" ); wait 2.75; level.baker thread maps\_utility::follow_path_and_animate( common_scripts\utility::get_target_ent( "new_trench_baker_path" ), 0 ); level.player freezecontrols( 0 ); level.player enableweapons(); maps\_utility::autosave_by_name( "trench" ); thread trench_run_dialogue(); thread random_trench_falling(); wait 0.25; level.player unlink(); var_6 delete(); } deathquote_on_death() { level endon( "start_new_canyon" ); level.player waittill( "death" ); var_0 = getdvarint( "shpg_trench_times_died", 0 ); setdvar( "shpg_trench_times_died", var_0 + 1 ); maps\ship_graveyard_util::force_deathquote( &"SHIP_GRAVEYARD_HINT_TRENCH" ); } trench_sprint_hint() { wait 0.75; var_0 = getdvarint( "shpg_trench_times_died", 0 ); if ( var_0 > 1 || level.gameskill == 0 ) thread maps\_utility::display_hint( "hint_sprint" ); } trench_run_dialogue() { level.baker maps\_utility::disable_pain(); thread trench_sprint_hint(); wait 1.12; maps\_utility::smart_radio_dialogue( "shipg_bkr_clearedforphase2" ); wait 1.27; maps\_utility::smart_radio_dialogue( "shipg_orb_quiteastir" ); wait 0.96; maps\_utility::smart_radio_dialogue( "shipg_bkr_handleourselves2" ); wait 3.25; level.baker maps\_utility::enable_pain(); if ( maps\ship_graveyard_util::greenlight_check() && level.start_point == "e3" ) return; common_scripts\utility::flag_wait( "new_canyon_combat_start" ); wait 4; maps\_utility::smart_radio_dialogue( "shipg_hsh_morediverstakeem" ); wait 5; maps\_utility::smart_radio_dialogue( "shipg_bkr_movethisway" ); } fake_shellshock_sound() { level.player thread common_scripts\utility::play_loop_sound_on_entity( "scn_shipg_drowning_loop" ); level waittill( "stop_shellshock" ); level.player maps\_utility::delaythread( 0.5, common_scripts\utility::stop_loop_sound_on_entity, "scn_shipg_drowning_loop" ); level.player maps\_utility::play_sound_on_entity( "scn_shipg_drowning_end" ); } trench_things_crashing() { thread trench_lcs_crashing(); common_scripts\utility::array_thread( getentarray( "crashing_trigger", "targetname" ), ::crash_trigger_think ); var_0 = common_scripts\utility::get_target_ent( "trench_cars_node" ); var_1 = maps\_utility::spawn_anim_model( "cars" ); var_2 = getentarray( "trench_crashing_cars", "targetname" ); var_0 thread maps\_anim::anim_first_frame( [ var_1 ], "car_crash" ); wait 0.1; foreach ( var_4 in var_2 ) { var_4 linkto( var_1, "tag_" + var_4.script_parameters ); wait 0.1; var_5 = var_4 common_scripts\utility::get_linked_ents(); common_scripts\utility::array_thread( var_5, ::trigger_enablelinkto ); common_scripts\utility::array_call( var_5, ::linkto, var_4 ); common_scripts\utility::array_thread( var_5, ::crash_model_damage ); } var_1 hide(); maps\_utility::trigger_wait_targetname( "car_crashing_trigger" ); var_0 thread maps\_anim::anim_single( [ var_1 ], "car_crash" ); var_7 = var_1 gettagorigin( "tag_car0" ); var_1 thread maps\_utility::play_sound_on_tag( "scn_shipg_car_fall", "tag_car0" ); wait 2.2; playfxontag( common_scripts\utility::getfx( "falling_car_bubbles" ), var_1, "tag_car0" ); thread common_scripts\utility::play_sound_in_space( "scn_shipg_car_fall_debris", var_7 ); var_0 waittill( "car_crash" ); var_1 delete(); } trench_lcs_crashing() { var_0 = common_scripts\utility::get_target_ent( "trench_cars_node" ); var_1 = common_scripts\utility::get_target_ent( "lcs_crashing_animated" ); var_1.animname = "lcs"; var_1 maps\_anim::setanimtree(); var_1 hide(); var_2 = common_scripts\utility::get_target_ent( "barge_crashing_animated" ); var_2.animname = "barge"; var_2 maps\_anim::setanimtree(); var_3 = var_1 common_scripts\utility::get_linked_ents(); common_scripts\utility::array_call( var_3, ::linkto, var_1, "j_front" ); var_4 = var_1 common_scripts\utility::spawn_tag_origin(); var_4 linkto( var_1, "j_front" ); wait 0.1; var_0 thread maps\_anim::anim_first_frame( [ var_1, var_2 ], "lcs_crash" ); common_scripts\utility::flag_wait( "trench_lcs_crash" ); var_1 show(); var_0 thread maps\_anim::anim_single( [ var_1, var_2 ], "lcs_crash" ); playfxontag( common_scripts\utility::getfx( "lcs_front_lights" ), var_4, "tag_origin" ); playfxontag( common_scripts\utility::getfx( "lcs_front_bubbles" ), var_4, "tag_origin" ); var_1 thread maps\_utility::play_sound_on_entity( "scn_shipg_lcs_fall" ); common_scripts\utility::flag_wait( "trench_lcs_hit_ground" ); common_scripts\utility::exploder( 60 ); common_scripts\utility::flag_wait( "trench_lcs_hit_barge" ); wait 0.5; for ( var_5 = 0; var_5 < 5; var_5++ ) { var_6 = getglass( "barge_glass_" + var_5 ); destroyglass( var_6, ( 0, 0, -1 ) ); wait( randomfloatrange( 0.05, 0.15 ) ); } common_scripts\utility::flag_wait( "start_new_canyon" ); stopfxontag( common_scripts\utility::getfx( "lcs_front_lights" ), var_4, "Tag_origin" ); stopfxontag( common_scripts\utility::getfx( "lcs_front_bubbles" ), var_4, "tag_origin" ); var_4 delete(); } crash_trigger_think() { var_0 = getentarray( self.target, "targetname" ); common_scripts\utility::array_thread( var_0, ::crash_model_think ); common_scripts\utility::flag_wait( "trench_allow_things_to_crash" ); self waittill( "trigger" ); common_scripts\utility::array_thread( var_0, maps\_utility::send_notify, "trigger" ); } crash_model_think() { var_0 = self; var_0 hide(); var_1 = var_0 common_scripts\utility::get_linked_ents(); common_scripts\utility::array_call( var_1, ::hide ); var_0 waittill( "trigger" ); var_0 crash_model_go( var_1 ); } crash_model_go( var_0 ) { var_1 = self; var_1 show(); common_scripts\utility::array_call( var_0, ::show ); common_scripts\utility::array_thread( var_0, ::trigger_enablelinkto ); common_scripts\utility::array_call( var_0, ::linkto, var_1 ); common_scripts\utility::array_thread( var_0, ::crash_model_damage, var_1 ); var_2 = 20; var_3 = 0; var_4 = 0; var_5 = var_1 common_scripts\utility::get_target_ent(); var_6 = 0; var_7 = []; if ( isdefined( var_1.script_soundalias ) ) var_1 thread maps\_utility::play_sound_on_entity( var_1.script_soundalias ); var_8 = undefined; var_9 = undefined; var_10 = 0; var_11 = undefined; var_12 = 0; if ( var_1.model == "shpg_machinery_baggage_container_dmg" ) { var_1.fxorg = var_1; var_8 = "falling_box_bubbles"; var_9 = "tag_origin"; var_10 = 1; var_12 = 1; } else if ( var_1.model == "vehicle_mi24p_hind_plaza_body_destroy_animated" ) { var_11 = common_scripts\utility::spawn_tag_origin(); var_11 linkto( var_1, "tag_origin", ( 28, 152, -48 ), ( 0, 0, 0 ) ); playfxontag( common_scripts\utility::getfx( "ship_wreckage_spark_underwater" ), var_11, "tag_origin" ); var_8 = "falling_box_bubbles"; var_9 = "tag_origin"; var_10 = 1; } else if ( var_1.model == "com_boat_fishing_1" ) { self.fxorg = var_1 common_scripts\utility::spawn_tag_origin(); self.fxorg linkto( var_1 ); var_8 = "falling_box_bubbles"; var_9 = "tag_origin"; var_10 = 1; } if ( var_10 ) playfxontag( common_scripts\utility::getfx( var_8 ), var_1.fxorg, var_9 ); while ( isdefined( var_5 ) ) { if ( isdefined( var_5.speed ) ) var_2 = var_5.speed; if ( isdefined( var_5.script_accel ) ) var_3 = var_5.script_accel; if ( isdefined( var_5.script_decel ) ) var_4 = var_5.script_decel; if ( isdefined( var_5.script_fxid ) ) { if ( var_5.script_fxid == "boat_fall_impact_wreck" ) var_5 thread play_boat_crash_fx_early( var_7, var_1 ); } var_1 maps\ship_graveyard_util::moveto_rotateto_speed( var_5, var_2, var_3, var_4 ); var_13 = distance( level.player.origin, var_1.origin ); if ( isdefined( var_5.script_flag_set ) ) common_scripts\utility::flag_set( var_5.script_flag_set ); if ( isdefined( var_5.script_earthquake ) ) thread common_scripts\utility::do_earthquake( var_5.script_earthquake, var_1.origin ); if ( isdefined( var_5.script_soundalias ) ) var_1 thread maps\_utility::play_sound_on_entity( var_5.script_soundalias ); if ( isdefined( var_5.script_fxid ) ) { if ( var_5.script_fxid != "boat_fall_impact_wreck" ) { var_14 = -1 * anglestoup( var_1.angles ); if ( vectordot( ( 0, 0, -1 ), var_14 ) < 0.2 ) var_14 = ( 0, 0, -1 ); var_15 = bullettrace( var_1.origin, var_1.origin + var_14 * 500, 0, var_1 ); var_16 = common_scripts\utility::spawn_tag_origin(); var_16.origin = var_15["position"]; var_16.angles = var_1.angles; var_16 linkto( var_1 ); playfx( common_scripts\utility::getfx( var_5.script_fxid ), var_16.origin, ( 0, 0, 1 ), var_16.origin - level.player.origin ); var_7[var_7.size] = var_16; } } if ( isdefined( var_5.script_noteworthy ) && var_5.script_noteworthy == "crash" ) { if ( isdefined( var_5.target ) ) { var_6 = 1; var_14 = -1 * anglestoup( var_1.angles ); if ( vectordot( ( 0, 0, -1 ), var_14 ) < 0.2 ) var_14 = ( 0, 0, -1 ); if ( isdefined( var_1.fxorg ) && var_1.fxorg != var_1 ) var_1.sliding_fx_org = var_1.fxorg; else { var_1.sliding_fx_org = common_scripts\utility::spawn_tag_origin(); var_1.sliding_fx_org.origin = var_1.origin; var_1.sliding_fx_org.angles = var_1.angles; var_1.sliding_fx_org linkto( var_1 ); var_7[var_7.size] = var_1.sliding_fx_org; } if ( !var_12 ) playfxontag( common_scripts\utility::getfx( "boat_fall_slide" ), var_1.sliding_fx_org, "tag_origin" ); var_1 thread sliding_earthquake( var_5.script_earthquake ); var_1 playrumblelooponentity( "littoral_ship_rumble" ); } if ( var_13 < 300 ) { if ( isdefined( var_5.script_earthquake ) && var_5.script_earthquake != "small" ) thread player_shake( var_13 ); thread maps\ship_graveyard_util::thrash_player( 300, 0.1, var_1.origin ); } } if ( isdefined( var_5.target ) ) { var_5 = var_5 common_scripts\utility::get_target_ent(); continue; } var_5 = undefined; } if ( var_6 ) { stopfxontag( common_scripts\utility::getfx( "boat_fall_slide" ), var_1.sliding_fx_org, "tag_origin" ); var_1 stoprumble( "littoral_ship_rumble" ); var_1 notify( "stopped" ); var_13 = distance( level.player.origin, var_1.origin ); if ( var_13 < 300 && !var_12 ) { earthquake( 0.35, 0.7, var_1.origin, 1500 ); level.player playrumbleonentity( "damage_heavy" ); thread maps\ship_graveyard_util::thrash_player( 300, 0.1, var_1.origin ); } } if ( var_10 ) stopfxontag( common_scripts\utility::getfx( var_8 ), var_1.fxorg, var_9 ); if ( isdefined( var_1.fxorg ) && var_1.fxorg != var_1 ) var_1.fxorg delete(); common_scripts\utility::array_thread( var_0, maps\_utility::send_notify, "stop_damage" ); foreach ( var_18 in var_7 ) var_18 delete(); if ( var_1.model == "vehicle_mi24p_hind_plaza_body_destroy_animated" ) { wait 8; stopfxontag( common_scripts\utility::getfx( "ship_wreckage_spark_underwater" ), var_11, "tag_origin" ); var_11 delete(); } } play_boat_crash_fx_early( var_0, var_1 ) { wait 3.2; var_2 = -1 * anglestoup( var_1.angles ); if ( vectordot( ( 0, 0, -1 ), var_2 ) < 0.2 ) var_2 = ( 0, 0, -1 ); var_3 = bullettrace( var_1.origin, var_1.origin + var_2 * 500 - ( 0, 650, 0 ), 0, var_1 ); var_4 = common_scripts\utility::spawn_tag_origin(); var_4.origin = var_3["position"]; var_4.angles = var_1.angles; var_4 linkto( var_1 ); playfx( common_scripts\utility::getfx( self.script_fxid ), var_4.origin, ( 0, 0, 1 ), var_4.origin - level.player.origin ); var_0[var_0.size] = var_4; } player_shake( var_0 ) { if ( var_0 < 200 ) { level.player playrumbleonentity( "damage_heavy" ); level.player shellshock( "nearby_crash_underwater", 3.5 ); level.player thread maps\ship_graveyard_util::delay_reset_swim_shock( 5 ); } else if ( var_0 < 300 ) { level.player playrumbleonentity( "damage_light" ); level.player shellshock( "nearby_crash_underwater", 2.5 ); level.player thread maps\ship_graveyard_util::delay_reset_swim_shock( 3 ); } else level.player playrumbleonentity( "damage_light" ); } sliding_earthquake( var_0 ) { self endon( "death" ); self endon( "stopped" ); var_1 = 512; if ( isdefined( var_0 ) ) { switch ( var_0 ) { case "small": var_1 = 50; break; } } for (;;) { earthquake( 0.3, 0.2, self.origin, var_1 ); wait 0.1; } } crash_model_damage( var_0 ) { if ( isdefined( var_0 ) && self.classname == "script_model" ) { if ( self.model == "tag_origin" ) { var_0.fxorg = self; return; } } if ( self.classname != "script_brushmodel" && self.classname != "trigger_multiple" ) return; self endon( "stop_damage" ); if ( isdefined( self.damage ) ) var_1 = self.damage; else var_1 = 60; for (;;) { if ( level.player istouching( self ) ) { level.player dodamage( var_1, self.origin ); wait 0.05; continue; } wait 0.1; } } random_trench_falling() { level endon( "new_canyon_combat_start" ); level.ro_index = 0; var_0 = maps\_utility::getstructarray_delete( "new_trench_random", "targetname" ); for (;;) { var_1 = common_scripts\utility::random( var_0 ); if ( distance2d( var_1.origin, level.player.origin ) < 1000 ) { wait 0.1; continue; } var_1 thread generate_cheap_falling_object(); wait( randomfloatrange( 3, 6 ) ); } } generate_cheap_falling_object( var_0, var_1 ) { var_2 = bullettrace( self.origin, self.origin - ( 0, 0, 9999 ), 0 ); var_3 = spawn( "script_model", self.origin ); var_3 setmodel( common_scripts\utility::random( level.debris ) ); var_3.angles = ( randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ) ); var_3.target = "randomobject" + level.ro_index; var_4 = spawn( "script_origin", var_2["position"] - ( 0, 0, 30 ) ); var_4.targetname = "randomobject" + level.ro_index; if ( !isdefined( var_0 ) ) var_4.speed = randomfloatrange( 200, 260 ); else var_4.speed = var_0; var_4.script_earthquake = "small"; var_4.script_soundalias = "scn_shipg_box_fall_generic"; var_4.script_noteworthy = "crash"; var_4.target = var_4.targetname + "_2"; var_4.angles = ( 0, 0, 0 ); var_4.script_decel = 0.1; if ( isdefined( var_1 ) ) var_4.script_exploder = var_1; else var_4.script_fxid = "boat_fall_impact_small"; level.ro_index = level.ro_index + 1; var_5 = spawn( "script_origin", var_4.origin - ( 0, 0, 80 ) ); var_5.speed = 30; var_5.script_accel = 0.4; var_5.targetname = var_4.targetname + "_2"; var_5.angles = var_3.angles; var_4.script_decel = 0.1; var_3 crash_model_go( [] ); wait 0.5; var_4 delete(); var_5 delete(); while ( distance2d( var_3.origin, level.player.origin ) < 800 && level.player maps\_utility::player_looking_at( var_3.origin, 0.6, 1 ) ) wait 0.1; var_3 delete(); } trigger_enablelinkto() { if ( self.classname == "trigger_multiple" ) self enablelinkto(); } trench_smash_death() { level endon( "new_canyon_combat_start" ); common_scripts\utility::flag_wait( "new_trench_smash_death" ); player_smash_death(); } trench_stay_close_1() { level.player endon( "death" ); level endon( "new_canyon_combat_start" ); for (;;) { if ( distance( level.player.origin, level.baker.origin ) > 750 ) { trench_death_warning(); wait 6; if ( distance( level.player.origin, level.baker.origin ) > 750 ) player_smash_death(); } wait 0.1; } } trench_death_warning() { var_0 = anglestoforward( level.player.angles ); var_1 = level.player.origin - var_0 * 64; playfx( common_scripts\utility::getfx( "boat_fall_impact" ), var_1, ( 0, 0, 1 ), var_1 - level.player.origin ); thread common_scripts\utility::play_sound_in_space( "middle_boat_crash", var_1 ); level.player playrumbleonentity( "damage_heavy" ); earthquake( 0.35, 0.7, var_1, 1500 ); level.player viewkick( 100, var_1 ); level.player playrumbleonentity( "damage_heavy" ); level.player thread maps\_gameskill::blood_splat_on_screen( "bottom" ); level.player maps\_utility::delaythread( 0.1, maps\_utility::playlocalsoundwrapper, "breathing_hurt" ); level.player dodamage( 30, var_1 ); } trench_stay_close_2() { level.player endon( "death" ); level endon( "new_canyon_combat_start" ); for (;;) { if ( distance( level.player.origin, level.baker.origin ) > 1200 ) { player_smash_death(); return; } wait 0.1; } } player_smash_death() { level.player notify( "smash_death" ); thread trench_death_warning(); wait 0.25; level.player kill(); } start_canyon_combat() { var_0 = maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "new_canyon_boats_1" ); common_scripts\utility::array_thread( var_0, ::trench_boat_think ); common_scripts\utility::flag_wait( "new_canyon_combat_start" ); maps\_utility::autosave_by_name( "new_canyon" ); if ( !maps\ship_graveyard_util::greenlight_check() ) level.baker maps\_utility::set_force_color( "r" ); maps\ship_graveyard_util::baker_glint_off(); maps\_utility::array_spawn_targetname( "nc_enemies_1" ); maps\_utility::delaythread( 45, maps\ship_graveyard_util::try_to_melee_player, "start_depth_charges" ); } trench_boat_think() { self endon( "death" ); self waittill( "reached_end_node" ); var_0 = common_scripts\utility::get_target_ent( self.script_noteworthy + "_trigger" ); var_0 common_scripts\utility::trigger_off(); common_scripts\utility::flag_wait( "new_canyon_combat_start" ); var_1 = maps\_utility::array_spawn_targetname( self.script_noteworthy + "_guys" ); common_scripts\utility::array_thread( var_1, ::canyon_jumper_setup ); var_1[0] common_scripts\utility::waittill_either( "done_jumping_in", "death" ); wait( randomfloatrange( 1, 3 ) ); level endon( "stop_killing_player" ); level waittill( "never" ); thread maps\ship_graveyard_util::boat_shoot_entity( level.player, "stop_killing_player" ); var_0 common_scripts\utility::trigger_on(); for (;;) { var_0 waittill( "trigger", var_2 ); if ( var_2 == level.player ) break; } self notify( "stop_shooting" ); var_3 = common_scripts\utility::get_target_ent( self.script_noteworthy + "_body" ); var_4 = var_3 maps\_utility::spawn_ai( 1 ); var_4.origin = ( var_3.origin[0], var_3.origin[1], level.water_level_z + 5 ); common_scripts\utility::waitframe(); var_5 = var_3; var_6 = anglestoforward( var_5.angles ); var_5.origin = var_5.origin + var_6 * 16; var_4 thread maps\_utility::magic_bullet_shield(); var_4.forceragdollimmediate = 1; var_4.skipdeathanim = 1; playfxontag( common_scripts\utility::getfx( "underwater_object_trail" ), var_4, "tag_origin" ); var_3 thread maps\_anim::anim_generic( var_4, "death_boat_A" ); wait 1.5; playfx( common_scripts\utility::getfx( "jump_into_water_splash" ), var_5.origin ); thread common_scripts\utility::play_sound_in_space( "enemy_water_splash", var_5.origin ); var_3 waittill( "death_boat_A" ); var_7 = var_4 common_scripts\utility::spawn_tag_origin(); var_4 linkto( var_7, "tag_origin" ); var_8 = getweaponmodel( var_4.weapon ); var_9 = var_4.weapon; if ( isdefined( var_8 ) ) { var_4 detach( var_8, "tag_weapon_right" ); var_5 = var_4 gettagorigin( "tag_weapon_right" ); var_10 = var_4 gettagangles( "tag_weapon_right" ); var_11 = spawn( "weapon_" + var_9, ( 0, 0, 0 ) ); var_11.angles = var_10; var_11.origin = var_5; } var_7 thread maps\_anim::anim_generic_loop( var_4, "death_boat_A_loop" ); var_12 = bullettrace( var_4.origin - ( 0, 0, 200 ), var_4.origin - ( 0, 0, 6000 ), 0, var_4 ); var_13 = var_12["position"]; var_13 = ( var_13[0], var_13[1], var_13[2] + 50 ); var_7 maps\ship_graveyard_util::moveto_speed( var_13, 100, 0, 0 ); stopfxontag( common_scripts\utility::getfx( "underwater_object_trail" ), var_4, "tag_origin" ); var_4 maps\_utility::stop_magic_bullet_shield(); var_4 startragdoll(); var_4 unlink(); var_7 notify( "stop_loop" ); wait 0.1; var_7 delete(); wait 0.5; var_4 kill(); } canyon_jumper_setup() { self endon( "death" ); var_0 = common_scripts\utility::get_target_ent(); if ( isdefined( var_0 ) ) { if ( isdefined( var_0.target ) ) { self waittill( "done_jumping_in" ); var_0 = var_0 common_scripts\utility::get_target_ent(); maps\_utility::follow_path_and_animate( var_0, 0 ); } } } hit_player_when_flag() { level endon( "stop_killing_player" ); for (;;) { if ( common_scripts\utility::flag( "trench_shoot_player" ) ) { var_0 = anglestoforward( level.player.angles ); var_1 = level.player geteye() + ( 0, 0, 5 ) + var_0; var_2 = level.player geteye(); magicbullet( "aps_underwater", var_1, var_2 ); } wait( randomfloatrange( 0.3, 0.5 ) ); } }