2935 lines
85 KiB
Plaintext
2935 lines
85 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
carrier_init()
|
|
{
|
|
precacheshader( "white" );
|
|
precacheshader( "overlay_rain" );
|
|
precacheshader( "overlay_rain_large" );
|
|
precacheshader( "overlay_rain_large_02" );
|
|
precacheshader( "overlay_rain_small" );
|
|
precacheshader( "overlay_rain_small_02" );
|
|
precacheshader( "ac130_hud_friendly_ai_diamond_s_w" );
|
|
precacheshader( "ac130_hud_enemy_ai_target_s_w" );
|
|
precacheshader( "ac130_hud_enemy_vehicle_target_s_w" );
|
|
precacheturret( "phalanx_turret" );
|
|
thread carrier_post_load();
|
|
thread gameskill_settings();
|
|
level.water_level = 720;
|
|
level.cached_arcs = [];
|
|
}
|
|
|
|
carrier_post_load()
|
|
{
|
|
level waittill( "load_finished" );
|
|
}
|
|
|
|
setup_common( var_0 )
|
|
{
|
|
thread setup_front_elevator();
|
|
thread balcony_kill_trigger();
|
|
thread water_kill_trigger();
|
|
thread deck_tilt_water_kill_trigger();
|
|
thread update_sun();
|
|
thread update_deck_post_intro();
|
|
thread setup_ocean_vista_tilt();
|
|
thread vista_oil_slicks();
|
|
thread run_destructibles();
|
|
thread setup_island_flag();
|
|
setup_player();
|
|
|
|
if ( !isdefined( var_0 ) || !var_0 )
|
|
{
|
|
thread phalanx_gun_fire( "crr_phalanx_01" );
|
|
thread phalanx_gun_fire( "crr_phalanx_02" );
|
|
thread phalanx_gun_fire( "crr_phalanx_03" );
|
|
thread phalanx_gun_fire( "crr_phalanx_04" );
|
|
thread phalanx_gun_fire( "crr_phalanx_05" );
|
|
}
|
|
|
|
anim.fire_notetrack_functions["drone"] = maps\carrier_code_zodiac::drone_shoot;
|
|
}
|
|
|
|
setup_player()
|
|
{
|
|
var_0 = level.start_point + "_start";
|
|
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
level.player setorigin( var_1.origin );
|
|
|
|
if ( isdefined( var_1.angles ) )
|
|
level.player setplayerangles( var_1.angles );
|
|
else
|
|
iprintlnbold( "Your script_struct " + level.start_point + "_start has no angles! Set some." );
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
spawn_allies()
|
|
{
|
|
level.allies = [];
|
|
level.allies[level.allies.size] = spawn_ally( "hesh" );
|
|
level.allies[level.allies.size - 1].animname = "hesh";
|
|
level.hesh = level.allies[level.allies.size - 1];
|
|
level.hesh maps\_utility::make_hero();
|
|
}
|
|
|
|
spawn_ally( var_0, var_1 )
|
|
{
|
|
var_2 = undefined;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_2 = level.start_point + "_" + var_0;
|
|
else
|
|
var_2 = var_1 + "_" + var_0;
|
|
|
|
var_3 = spawn_targetname_at_struct_targetname( var_0, var_2 );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
return undefined;
|
|
|
|
var_3 maps\_utility::make_hero();
|
|
|
|
if ( !isdefined( var_3.magic_bullet_shield ) )
|
|
var_3 maps\_utility::magic_bullet_shield();
|
|
|
|
return var_3;
|
|
}
|
|
|
|
gameskill_settings()
|
|
{
|
|
level.difficultysettings["gunboat_aiSpread"]["easy"] = 4;
|
|
level.difficultysettings["gunboat_aiSpread"]["normal"] = 3;
|
|
level.difficultysettings["gunboat_aiSpread"]["hardened"] = 0.75;
|
|
level.difficultysettings["gunboat_aiSpread"]["veteran"] = 0.2;
|
|
level.difficultysettings["gunboat_convergenceTime"]["easy"] = 6;
|
|
level.difficultysettings["gunboat_convergenceTime"]["normal"] = 3;
|
|
level.difficultysettings["gunboat_convergenceTime"]["hardened"] = 1;
|
|
level.difficultysettings["gunboat_convergenceTime"]["veteran"] = 0.33;
|
|
level.difficultysettings["zodiac_rider_playerHitRatio"]["easy"] = 0.3;
|
|
level.difficultysettings["zodiac_rider_playerHitRatio"]["normal"] = 0.4;
|
|
level.difficultysettings["zodiac_rider_playerHitRatio"]["hardened"] = 0.45;
|
|
level.difficultysettings["zodiac_rider_playerHitRatio"]["veteran"] = 0.75;
|
|
level.difficultysettings["rappeler_playerHitRatio"]["easy"] = 3;
|
|
level.difficultysettings["rappeler_playerHitRatio"]["normal"] = 5;
|
|
level.difficultysettings["rappeler_playerHitRatio"]["hardened"] = 6;
|
|
level.difficultysettings["rappeler_playerHitRatio"]["veteran"] = 12;
|
|
level.difficultysettings["osprey_hitsToSucceed"]["easy"] = 0;
|
|
level.difficultysettings["osprey_hitsToSucceed"]["normal"] = 1;
|
|
level.difficultysettings["osprey_hitsToSucceed"]["hardened"] = 10;
|
|
level.difficultysettings["osprey_hitsToSucceed"]["veteran"] = 20;
|
|
}
|
|
|
|
nag_until_flag( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
if ( common_scripts\utility::flag( var_1 ) )
|
|
return;
|
|
|
|
for ( var_5 = -1; !common_scripts\utility::flag( var_1 ); var_3 = var_3 + var_4 )
|
|
{
|
|
var_6 = randomfloatrange( var_2, var_3 );
|
|
wait( var_6 );
|
|
var_7 = randomint( var_0.size );
|
|
|
|
if ( var_7 == var_5 )
|
|
{
|
|
var_7++;
|
|
|
|
if ( var_7 >= var_0.size )
|
|
var_7 = 0;
|
|
}
|
|
|
|
var_8 = var_0[var_7];
|
|
|
|
if ( common_scripts\utility::flag( var_1 ) )
|
|
break;
|
|
|
|
thread maps\_utility::smart_radio_dialogue( var_8 );
|
|
var_5 = var_7;
|
|
var_2 = var_2 + var_4;
|
|
}
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
carrier_life_jet_takeoff_guys( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = common_scripts\utility::getstruct( "redshirt_forklift_stopper_ref", "targetname" );
|
|
var_7 = maps\_utility::spawn_targetname( var_0 );
|
|
var_7.animname = var_1;
|
|
var_7.runanim = maps\_utility::getgenericanim( "unarmed_run" );
|
|
var_7 maps\_utility::magic_bullet_shield( 1 );
|
|
var_7 maps\_utility::gun_remove();
|
|
var_8 = getanimlength( level.scr_anim[var_1][var_3] );
|
|
var_9 = var_5 / var_8;
|
|
var_6 thread maps\_anim::anim_single_solo( var_7, var_3 );
|
|
common_scripts\utility::waitframe();
|
|
var_7 setanimtime( level.scr_anim[var_1][var_3], var_9 );
|
|
var_7 waittillmatch( "single anim", "end" );
|
|
var_7.target = var_2;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_7 maps\_utility::set_moveplaybackrate( var_4 );
|
|
else
|
|
var_7 maps\_utility::set_moveplaybackrate( 1 );
|
|
|
|
var_7.idleanim = %unarmed_cowercrouch_idle;
|
|
var_7 thread maps\_drone::drone_move();
|
|
var_7 thread safe_delete_drone( 1500 );
|
|
}
|
|
|
|
carrier_life_jet_takeoff_jet( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = common_scripts\utility::getstruct( "redshirt_forklift_stopper_ref", "targetname" );
|
|
var_6 = maps\_vehicle::spawn_vehicle_from_targetname( var_0 );
|
|
var_6.animname = var_1;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
var_5 thread maps\_anim::anim_first_frame_solo( var_6, var_2 );
|
|
wait( var_4 );
|
|
}
|
|
|
|
var_6 thread maps\carrier_fx::handle_jet_launch_fx();
|
|
var_7 = getanimlength( level.scr_anim[var_1][var_2] );
|
|
var_8 = var_3 / var_7;
|
|
var_5 thread maps\_anim::anim_single_solo( var_6, var_2 );
|
|
common_scripts\utility::waitframe();
|
|
var_6 setanimtime( level.scr_anim[var_1][var_2], var_8 );
|
|
var_6 waittillmatch( "single anim", "end" );
|
|
thread maps\_vehicle::gopath( var_6 );
|
|
var_9 = [ var_6 ];
|
|
thread maps\_utility::ai_delete_when_out_of_sight( var_9, 20000 );
|
|
}
|
|
|
|
setup_jet_and_clip( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = undefined;
|
|
var_5 = undefined;
|
|
var_6 = undefined;
|
|
var_7 = undefined;
|
|
var_8 = getentarray( var_0, "targetname" );
|
|
|
|
foreach ( var_10 in var_8 )
|
|
{
|
|
if ( var_10.script_noteworthy == "item" )
|
|
var_4 = var_10;
|
|
|
|
if ( var_10.script_noteworthy == "clip" )
|
|
var_5 = var_10;
|
|
|
|
if ( var_10.script_noteworthy == "clip_l" )
|
|
var_6 = var_10;
|
|
|
|
if ( var_10.script_noteworthy == "clip_r" )
|
|
var_7 = var_10;
|
|
}
|
|
|
|
var_12 = var_4 gettagorigin( "le_wing_fold_jnt" );
|
|
var_13 = var_4 gettagorigin( "ri_wing_fold_jnt" );
|
|
var_5.origin = var_4.origin;
|
|
var_6.origin = var_12;
|
|
var_7.origin = var_13;
|
|
var_5 linkto( var_4, "tag_body" );
|
|
var_6 linkto( var_4, "le_wing_fold_jnt" );
|
|
var_7 linkto( var_4, "ri_wing_fold_jnt" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_5 thread maps\carrier_deck_tilt::player_hit_detect( var_1, var_2, var_3 );
|
|
var_6 thread maps\carrier_deck_tilt::player_hit_detect( var_1, var_2, var_3 );
|
|
var_7 thread maps\carrier_deck_tilt::player_hit_detect( var_1, var_2, var_3 );
|
|
}
|
|
|
|
return var_4;
|
|
}
|
|
|
|
setup_island_flag()
|
|
{
|
|
var_0 = getent( "island_flag", "targetname" );
|
|
var_0.animname = "flag";
|
|
var_0 maps\_anim::setanimtree();
|
|
var_1 = common_scripts\utility::getstruct( "deck_tilt_animnode", "targetname" );
|
|
var_1 thread maps\_anim::anim_loop_solo( var_0, "carrier_flag_idle", "stop_flag" );
|
|
common_scripts\utility::flag_wait( "start_main_odin_strike" );
|
|
var_1 notify( "stop_flag" );
|
|
var_1 maps\_anim::anim_single_solo( var_0, "carrier_deck_tilt_flag" );
|
|
var_0 delete();
|
|
}
|
|
|
|
clear_deck_props()
|
|
{
|
|
wait 0.1;
|
|
|
|
if ( level.start_point != "slow_intro" && level.start_point != "medbay" && level.start_point != "deck_combat" && level.start_point != "defend_zodiac" )
|
|
{
|
|
var_0 = getent( "anim_jet_launcher1", "targetname" );
|
|
var_0 hide();
|
|
var_1 = getent( "anim_jet_launcher2", "targetname" );
|
|
var_1 hide();
|
|
}
|
|
|
|
if ( level.start_point != "slow_intro" && level.start_point != "medbay" && level.start_point != "deck_combat" && level.start_point != "deck_transition" )
|
|
{
|
|
var_2 = getent( "taxing_osprey_clip", "targetname" );
|
|
var_2 delete();
|
|
}
|
|
}
|
|
|
|
move_deck_props()
|
|
{
|
|
wait 0.1;
|
|
|
|
if ( level.start_point != "deck_victory" && level.start_point != "deck_tilt" )
|
|
common_scripts\utility::flag_wait( "defend_sparrow_start" );
|
|
|
|
level notify( "deleting_ammo_refill" );
|
|
level.deck_damage = getentarray( "deck_damaged", "targetname" );
|
|
common_scripts\utility::array_thread( level.deck_damage, maps\_utility::show_entity );
|
|
|
|
foreach ( var_1 in level.deck_damage )
|
|
var_1 movez( -4096, 0.05 );
|
|
|
|
var_3 = getentarray( "tower_damage", "targetname" );
|
|
|
|
foreach ( var_1 in var_3 )
|
|
var_1 movez( -4096, 0.05 );
|
|
|
|
var_6 = getentarray( "tower_panel_clean", "targetname" );
|
|
common_scripts\utility::array_thread( var_6, maps\_utility::show_entity );
|
|
|
|
foreach ( var_1 in var_6 )
|
|
var_1 movez( -4096, 0.05 );
|
|
|
|
var_9 = getentarray( "deck_tilt_clip", "targetname" );
|
|
|
|
foreach ( var_1 in var_9 )
|
|
var_1 movez( -4096, 0.05 );
|
|
|
|
var_12 = getent( "blast_shield1", "targetname" );
|
|
var_12 rotateto( ( 0, 0, -65 ), 0.5 );
|
|
level.deck_clean = getentarray( "deck_clean", "targetname" );
|
|
level.blast_shield = getent( "blast_shield2", "targetname" );
|
|
maps\_utility::array_delete( level.deck_clean );
|
|
level.blast_shield delete();
|
|
var_13 = getent( "deck_tilt_tugger_1", "targetname" );
|
|
var_14 = getent( "deck_tilt_tugger_1_clip", "targetname" );
|
|
var_15 = getent( "deck_tilt_tugger_1_mantle", "targetname" );
|
|
var_13 movez( 120, 0.05 );
|
|
var_14 movez( 120, 0.05 );
|
|
var_15 movez( 120, 0.05 );
|
|
var_16 = getentarray( "sliding_crate_01b", "targetname" );
|
|
|
|
foreach ( var_1 in var_16 )
|
|
var_1 movey( 192, 0.05 );
|
|
|
|
var_19 = getweaponarray();
|
|
maps\_utility::array_delete( var_19 );
|
|
var_20 = getentarray( "stern_corner_dmg", "targetname" );
|
|
|
|
foreach ( var_1 in var_20 )
|
|
{
|
|
if ( var_1.classname == "script_model" && var_1.model == "crr_blastholes_01" )
|
|
var_1 delete();
|
|
}
|
|
|
|
var_23 = getent( "blast_shield4", "targetname" );
|
|
var_24 = getent( "blast_shield5", "targetname" );
|
|
var_25 = getent( "blast_shield6", "targetname" );
|
|
var_23 delete();
|
|
var_24 delete();
|
|
var_25 delete();
|
|
var_26 = getent( "depth_charge_cart", "targetname" );
|
|
var_27 = getent( "depth_charge_cart_clip", "targetname" );
|
|
var_26 delete();
|
|
var_27 delete();
|
|
var_28 = getentarray( "front_elevator_jet", "targetname" );
|
|
maps\_utility::array_delete( var_28 );
|
|
level.exploding_heli maps\_utility::show_entity();
|
|
var_29 = getentarray( "rear_forklift1", "targetname" );
|
|
|
|
foreach ( var_1 in var_29 )
|
|
var_1 delete();
|
|
|
|
var_32 = getentarray( "anim_tugger", "targetname" );
|
|
maps\_utility::array_delete( var_32 );
|
|
|
|
foreach ( var_34 in level.rear_elevator.attachments )
|
|
{
|
|
if ( isdefined( var_34 ) )
|
|
var_34 delete();
|
|
}
|
|
|
|
var_36 = getentarray( "carrier_elevator_front_scripted_attachments", "targetname" );
|
|
|
|
foreach ( var_34 in var_36 )
|
|
{
|
|
if ( isdefined( var_34 ) )
|
|
var_34 delete();
|
|
}
|
|
|
|
var_39 = getentarray( "deck_weapons", "script_noteworthy" );
|
|
maps\_utility::array_delete( var_39 );
|
|
var_40 = getentarray( "deck_props_delete", "targetname" );
|
|
maps\_utility::array_delete( var_40 );
|
|
var_41 = getentarray( "odin_carts", "targetname" );
|
|
maps\_utility::array_delete( var_41 );
|
|
maps\_utility::array_delete( level.deck_ac130_dmg );
|
|
|
|
if ( isdefined( level.deck_ac130_dmg_badplace_size ) )
|
|
{
|
|
for ( var_42 = 0; var_42 < level.deck_ac130_dmg_badplace_size; var_42++ )
|
|
badplace_delete( "deck_ac130_dmg_badplace" + var_42 );
|
|
}
|
|
|
|
maps\_utility::array_delete( level.deck_ac130_dmg_clip );
|
|
maps\_utility::array_delete( level.dz_deck_explode_dmg );
|
|
var_43 = getscriptablearray( "scriptable_destructible_barrel", "targetname" );
|
|
|
|
foreach ( var_1 in var_43 )
|
|
var_1 setscriptablepartstate( 0, 2, 1 );
|
|
|
|
thread maps\carrier_deck_tilt::tilt_props_large();
|
|
thread maps\carrier_deck_tilt::tilt_props_medium();
|
|
thread maps\carrier_deck_tilt::tilt_props_odin_jet();
|
|
thread maps\carrier_deck_tilt::tilt_props_elevator();
|
|
thread maps\carrier_deck_tilt::tilt_props_impact_barrels();
|
|
thread maps\carrier_deck_tilt::tilt_props_impact_x30();
|
|
thread maps\carrier_deck_tilt::tilt_props_tugger_vault();
|
|
thread maps\carrier_deck_tilt::tilt_props_tugger3();
|
|
thread maps\carrier_deck_tilt::tilt_props_tugger4();
|
|
thread maps\carrier_deck_tilt::tilt_props_barrels_x3( "gp3_group_a", "carrier_deck_tilt_barrels1_gp_a" );
|
|
thread maps\carrier_deck_tilt::tilt_props_barrels_x3( "gp3_group_b", "carrier_deck_tilt_barrels1_gp_b" );
|
|
thread maps\carrier_deck_tilt::tilt_props_barrels_x30();
|
|
var_46 = getentarray( "ally_movement_triggers_deckcombat", "script_noteworthy" );
|
|
maps\_utility::array_delete( var_46 );
|
|
var_47 = getentarray( "kill_triggers", "script_noteworthy" );
|
|
maps\_utility::array_delete( var_47 );
|
|
thread tilt_ocean_fx_setup();
|
|
}
|
|
|
|
tilt_ocean_fx_setup()
|
|
{
|
|
|
|
}
|
|
|
|
setup_front_elevator()
|
|
{
|
|
var_0 = getent( "carrier_elevator_front_scripted", "targetname" );
|
|
level.front_elevator_vol = getent( "elevator_touching_vol", "targetname" );
|
|
var_1 = getentarray( "carrier_elevator_front_scripted_attachments", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 linkto( var_0 );
|
|
|
|
var_5 = common_scripts\utility::getstruct( "redshirt_forklift_stopper_ref", "targetname" );
|
|
var_6 = maps\_utility::spawn_anim_model( "front_elevator" );
|
|
var_5 maps\_anim::anim_first_frame_solo( var_6, "tugger_scene_enter" );
|
|
var_7 = var_6 gettagorigin( "j_prop_1" );
|
|
var_8 = var_6 gettagangles( "j_prop_1" );
|
|
var_0.origin = var_7;
|
|
var_0.angles = var_8;
|
|
var_0 linkto( var_6, "j_prop_1" );
|
|
|
|
if ( level.start_point == "slow_intro" || level.start_point == "medbay" || level.start_point == "deck_combat" )
|
|
{
|
|
common_scripts\utility::flag_wait( "combat_1_kick" );
|
|
var_9 = level.front_elevator_vol maps\_utility::get_ai_touching_volume();
|
|
|
|
foreach ( var_11 in var_9 )
|
|
var_11 linkto( var_0 );
|
|
|
|
common_scripts\utility::waitframe();
|
|
var_5 maps\_anim::anim_single_solo( var_6, "tugger_scene_enter" );
|
|
common_scripts\utility::flag_set( "front_elevator_raised" );
|
|
|
|
foreach ( var_11 in var_9 )
|
|
{
|
|
if ( isdefined( var_11 ) && isalive( var_11 ) )
|
|
var_11 unlink();
|
|
}
|
|
}
|
|
else
|
|
var_5 maps\_anim::anim_last_frame_solo( var_6, "tugger_scene_enter" );
|
|
}
|
|
|
|
setup_rear_elevator()
|
|
{
|
|
level.rear_elevator = getent( "carrier_elevator_rear_scripted", "targetname" );
|
|
level.rear_elevator.lowered = 1;
|
|
level.rear_elevator.height = 342;
|
|
level.rear_elevator.time = 25;
|
|
level.rear_elevator_vol = getent( "rear_elevator_touching_vol", "targetname" );
|
|
level.rear_elevator.attachments = getentarray( "carrier_elevator_rear_scripted_attachments", "targetname" );
|
|
|
|
foreach ( var_1 in level.rear_elevator.attachments )
|
|
var_1 linkto( level.rear_elevator );
|
|
|
|
if ( level.start_point != "slow_intro" && level.start_point != "medbay" && level.start_point != "deck_combat" )
|
|
{
|
|
level.rear_elevator.lowered = 0;
|
|
|
|
foreach ( var_1 in level.rear_elevator.attachments )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_1 unlink();
|
|
|
|
if ( isdefined( var_1.script_noteworthy ) && var_1.script_noteworthy == "clip" )
|
|
var_1 disconnectpaths();
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "rear_elevator_raised" );
|
|
}
|
|
else
|
|
reset_rear_elevator();
|
|
}
|
|
|
|
raise_rear_elevator()
|
|
{
|
|
if ( level.rear_elevator.lowered )
|
|
{
|
|
var_0 = level.rear_elevator_vol maps\_utility::get_ai_touching_volume();
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 linkto( level.rear_elevator );
|
|
|
|
var_4 = level.rear_elevator.height;
|
|
var_5 = level.rear_elevator.time;
|
|
level.rear_elevator moveto( level.rear_elevator.origin + ( 0, 0, var_4 ), var_5, 2, 2 );
|
|
thread maps\carrier_audio::aud_carr_elevator_rear();
|
|
wait( var_5 );
|
|
level.rear_elevator.lowered = 0;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( isdefined( var_2 ) && isalive( var_2 ) )
|
|
var_2 unlink();
|
|
}
|
|
|
|
foreach ( var_9 in level.rear_elevator.attachments )
|
|
{
|
|
if ( isdefined( var_9 ) )
|
|
{
|
|
var_9 unlink();
|
|
|
|
if ( isdefined( var_9.script_noteworthy ) && var_9.script_noteworthy == "clip" )
|
|
var_9 disconnectpaths();
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "rear_elevator_raised" );
|
|
thread maps\carrier_audio::aud_carr_osprey_engines();
|
|
}
|
|
}
|
|
|
|
reset_rear_elevator()
|
|
{
|
|
level.rear_elevator.lowered = 1;
|
|
level.rear_elevator moveto( level.rear_elevator.origin - ( 0, 0, level.rear_elevator.height ), 0.05, 0, 0 );
|
|
}
|
|
|
|
raise_rear_elevator_intro()
|
|
{
|
|
if ( level.rear_elevator.lowered )
|
|
{
|
|
var_0 = level.rear_elevator.height;
|
|
var_1 = 15;
|
|
level.rear_elevator moveto( level.rear_elevator.origin + ( 0, 0, var_0 ), var_1, 2, 2 );
|
|
}
|
|
}
|
|
|
|
balcony_kill_trigger()
|
|
{
|
|
common_scripts\utility::flag_wait( "lower_balcony_kill_trigger" );
|
|
thread maps\_hud_util::fade_out( 1.5, "black" );
|
|
level.player kill();
|
|
}
|
|
|
|
water_kill_trigger()
|
|
{
|
|
common_scripts\utility::flag_wait( "fall_water_kill_trigger" );
|
|
thread maps\_hud_util::fade_out( 1.5, "black" );
|
|
level.player kill();
|
|
}
|
|
|
|
deck_tilt_water_kill_trigger()
|
|
{
|
|
var_0 = getent( "water_kill_clip", "targetname" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player istouching( var_0 ) || common_scripts\utility::flag( "tilt_water_kill_trigger" ) )
|
|
{
|
|
thread maps\_hud_util::fade_out( 1.5, "black" );
|
|
level.player kill();
|
|
return;
|
|
}
|
|
else
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
setup_ocean_vista_tilt()
|
|
{
|
|
level.ocean_water = getent( "ocean_water", "targetname" );
|
|
level.vista_rig = maps\_utility::spawn_anim_model( "tilt_vista" );
|
|
level.vista_rig.origin = level.ocean_water.origin;
|
|
level.vista_rig.angles = ( 0, 0, 0 );
|
|
level.vista_rig maps\_anim::anim_first_frame_solo( level.vista_rig, "carrier_deck_tilt_world" );
|
|
level.ocean_water linkto( level.vista_rig, "j_prop_1" );
|
|
var_0 = getent( "tilt_water_death_trigger", "targetname" );
|
|
var_1 = getent( "water_kill_clip", "targetname" );
|
|
var_0 enablelinkto();
|
|
var_0 linkto( level.vista_rig, "j_prop_1" );
|
|
var_1 linkto( level.vista_rig, "j_prop_1" );
|
|
var_2 = getentarray( "vista_terrain", "targetname" );
|
|
|
|
foreach ( var_4 in var_2 )
|
|
var_4 linkto( level.ocean_water );
|
|
|
|
var_6 = common_scripts\utility::getstruct( "deck_tilt_animnode", "targetname" );
|
|
level.exfil_animnode = var_6 common_scripts\utility::spawn_tag_origin();
|
|
level.tilt_sky = getent( "carrier_tilt_sky", "targetname" );
|
|
level.tilt_sky linkto( level.ocean_water );
|
|
level.tilt_sky hide();
|
|
level.tilt_ground_ref = getent( "player_ref_ent", "targetname" );
|
|
level.tilt_ground_ref linkto( level.ocean_water );
|
|
|
|
if ( level.start_point != "deck_tilt" && level.start_point != "deck_victory" )
|
|
common_scripts\utility::flag_wait( "sparrow_hud_black" );
|
|
|
|
level.tilt_sky show();
|
|
common_scripts\utility::flag_wait( "start_main_odin_strike" );
|
|
level.player playersetgroundreferenceent( level.tilt_ground_ref );
|
|
}
|
|
|
|
vista_tilt()
|
|
{
|
|
level.sun_angles_deck_tilt_end = ( -30.5, -73, 0 );
|
|
var_0 = ( -16.5, 2, 0 );
|
|
var_1 = 400;
|
|
var_2 = 30;
|
|
level.vista_rig thread maps\_anim::anim_single_solo( level.vista_rig, "carrier_deck_tilt_world" );
|
|
level.exfil_animnode rotateto( var_0, 0.05 );
|
|
lerpsunangles( level.sun_angles_deck_tilt, level.sun_angles_deck_tilt_end, var_2 );
|
|
}
|
|
|
|
vista_boats()
|
|
{
|
|
level.boats = getentarray( "all_boats", "script_noteworthy" );
|
|
thread setup_fed_destroyer_osprey();
|
|
|
|
foreach ( var_1 in level.boats )
|
|
var_1 thread vista_boat_animate();
|
|
}
|
|
|
|
setup_fed_destroyer_osprey()
|
|
{
|
|
level.fed_destroyer_clip linkto( level.fed_destroyer_osprey );
|
|
common_scripts\utility::array_call( level.fed_destroyer_fx_guns, ::linkto, level.fed_destroyer_osprey );
|
|
common_scripts\utility::array_call( level.destroyer_guy_nodes, ::linkto, level.fed_destroyer_osprey );
|
|
}
|
|
|
|
vista_boat_animate()
|
|
{
|
|
thread attach_deck_gun();
|
|
var_0 = maps\_utility::spawn_anim_model( "boat", self.origin );
|
|
self.rig = var_0;
|
|
var_1 = 704;
|
|
|
|
if ( self.model == "crr_destroyer_01_left" || self.model == "crr_destroyer_01_right" || self.model == "crr_destroyer_01" )
|
|
var_0.origin = ( var_0.origin[0], var_0.origin[1], var_1 );
|
|
else if ( self.model == "crr_destroyer_02_fed" )
|
|
var_0.origin = ( var_0.origin[0], var_0.origin[1], var_1 - 1236 );
|
|
else
|
|
var_0.origin = ( var_0.origin[0], var_0.origin[1], -64 );
|
|
|
|
var_0.angles = self.angles;
|
|
self linkto( var_0, "j_prop_1", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
common_scripts\utility::waitframe();
|
|
var_0 thread maps\_anim::anim_loop_solo( var_0, "carrier_destroyer_idle", "stop_loop" );
|
|
common_scripts\utility::waitframe();
|
|
var_0 setanimtime( level.scr_anim["boat"]["carrier_destroyer_idle"][0], randomfloat( 0.75 ) );
|
|
common_scripts\utility::flag_wait( "start_main_odin_strike" );
|
|
var_0 linkto( level.ocean_water );
|
|
}
|
|
|
|
attach_deck_gun()
|
|
{
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
self.gun = getent( self.target, "targetname" );
|
|
self.gun linkto( self );
|
|
|
|
if ( isdefined( self.gun.target ) )
|
|
{
|
|
self.gun.fx = getent( self.gun.target, "targetname" );
|
|
self.gun.fx linkto( self.gun );
|
|
level.fed_destroyer_fx_guns = common_scripts\utility::array_add( level.fed_destroyer_fx_guns, self.gun.fx );
|
|
}
|
|
}
|
|
}
|
|
|
|
vista_oil_slicks()
|
|
{
|
|
var_0 = getentarray( "ocean_water_slick", "targetname" );
|
|
|
|
if ( level.start_point == "slow_intro" )
|
|
{
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::hide_entity );
|
|
common_scripts\utility::flag_wait( "slow_intro_finished" );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::show_entity );
|
|
}
|
|
|
|
if ( level.start_point == "slow_intro" || level.start_point == "medbay" )
|
|
common_scripts\utility::flag_wait( "medbay_finished" );
|
|
|
|
common_scripts\utility::array_thread( var_0, ::vista_element_move );
|
|
}
|
|
|
|
vista_element_move()
|
|
{
|
|
level endon( "odin_strike_starting" );
|
|
var_0 = 67488;
|
|
var_1 = 240;
|
|
var_2 = var_0 - self.origin[1];
|
|
var_3 = var_2 / var_1;
|
|
thread vista_element_link();
|
|
|
|
if ( level.start_point == "defend_zodiac" )
|
|
{
|
|
self movey( var_2 * 0.2, 0.05, 0, 0 );
|
|
wait 0.05;
|
|
var_2 = var_0 - self.origin[1];
|
|
}
|
|
|
|
if ( level.start_point == "defend_sparrow" || level.start_point == "deck_victory" )
|
|
{
|
|
self movey( var_2 * 0.4, 0.05, 0, 0 );
|
|
wait 0.05;
|
|
var_2 = var_0 - self.origin[1];
|
|
}
|
|
|
|
if ( level.start_point == "deck_tilt" )
|
|
{
|
|
self movey( var_2 * 0.7, 0.05, 0, 0 );
|
|
wait 0.05;
|
|
var_2 = var_0 - self.origin[1];
|
|
}
|
|
|
|
if ( isdefined( self ) )
|
|
self movey( var_2, var_3, 0, 0 );
|
|
|
|
wait( var_3 );
|
|
|
|
if ( isdefined( self ) )
|
|
self delete();
|
|
}
|
|
|
|
vista_element_link()
|
|
{
|
|
level waittill( "odin_strike_starting" );
|
|
|
|
if ( isdefined( self ) )
|
|
self linkto( level.ocean_water );
|
|
}
|
|
|
|
ocean_death()
|
|
{
|
|
level endon( "death" );
|
|
level endon( "no_water_death" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player istouching( self ) )
|
|
{
|
|
level.player dodamage( level.player.health + 100, level.player.origin );
|
|
continue;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
rod_of_god_carrier()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "deck_tilt_animnode", "targetname" );
|
|
var_1 = maps\_utility::spawn_anim_model( "tilt_rog" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_1, "carrier_deck_tilt_RoG_prop" );
|
|
level.player playrumbleonentity( "carrier_rod_of_god" );
|
|
var_2 = common_scripts\utility::getstruct( "rog_target_carrier", "targetname" );
|
|
playfxontag( level._effect["vfx_rog_trail"], var_1, "tag_origin" );
|
|
var_1 waittillmatch( "single anim", "tower_impact" );
|
|
common_scripts\utility::exploder( 90000 );
|
|
var_1 waittillmatch( "single anim", "corner_impact" );
|
|
common_scripts\utility::flag_set( "tower_corner_hit" );
|
|
var_1 waittillmatch( "single anim", "deck_impact" );
|
|
common_scripts\utility::flag_set( "rog_impacts_deck" );
|
|
screenshake( level.player.origin, 3, 2, 2, 2.5, 0, 2.0, 256, 8, 15, 12, 5.0 );
|
|
var_1 waittillmatch( "single anim", "water_impact" );
|
|
var_3 = getent( "carrier_odin_water_impact", "targetname" );
|
|
var_3 linkto( level.ocean_water );
|
|
var_1 waittillmatch( "single anim", "end" );
|
|
var_1 delete();
|
|
}
|
|
|
|
rod_of_god_carrier_front()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "deck_tilt_animnode", "targetname" );
|
|
var_1 = maps\_utility::spawn_anim_model( "tilt_rog" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_1, "carrier_exfil_2nd_RoG_GP" );
|
|
level.player playrumbleonentity( "carrier_rod_of_god" );
|
|
var_2 = common_scripts\utility::getstruct( "rog_front_impact", "targetname" );
|
|
playfxontag( level._effect["vfx_rog_trail"], var_1, "tag_origin" );
|
|
var_1 waittillmatch( "single anim", "impact_deck" );
|
|
common_scripts\utility::flag_set( "carrier_front_impact" );
|
|
stopfxontag( level._effect["vfx_rog_trail"], var_1, "tag_origin" );
|
|
thread maps\carrier_audio::aud_carr_exfil_rog();
|
|
common_scripts\utility::exploder( 6002 );
|
|
screenshake( level.player.origin, 4, 3, 3, 2.5, 0, 2.0, 256, 8, 15, 12, 1.8 );
|
|
var_1 waittillmatch( "single anim", "end" );
|
|
var_1 delete();
|
|
}
|
|
|
|
player_slide_manager()
|
|
{
|
|
level.x_slide_incr = 0;
|
|
level.damage_slide_incr = 0;
|
|
level.damage_slide_time = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !common_scripts\utility::flag( "damage_slide" ) )
|
|
{
|
|
level.player pushplayervector( ( level.x_slide_incr, 0, 0 ) );
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
level.player pushplayervector( ( level.damage_slide_incr + level.x_slide_incr, 0, 0 ) );
|
|
wait( level.damage_slide_time );
|
|
level.player pushplayervector( ( level.x_slide_incr, 0, 0 ) );
|
|
level.damage_slide_incr = 0;
|
|
level.damage_slide_time = 0;
|
|
common_scripts\utility::flag_clear( "damage_slide" );
|
|
}
|
|
}
|
|
|
|
player_gravity_slide()
|
|
{
|
|
level endon( "player_in_heli" );
|
|
|
|
while ( abs( level.tilt_ground_ref.angles[0] ) > 352 )
|
|
{
|
|
var_0 = level.player getnormalizedmovement();
|
|
|
|
if ( abs( var_0[0] ) > 0.1 )
|
|
level.x_slide_incr = 2;
|
|
else
|
|
level.x_slide_incr = 0;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
level.x_slide_incr = 2;
|
|
|
|
while ( abs( level.tilt_ground_ref.angles[0] ) >= 343.5 )
|
|
{
|
|
level.x_slide_incr = level.x_slide_incr + 0.1;
|
|
wait 0.1;
|
|
iprintln( "Tilt angle is " + level.tilt_ground_ref.angles );
|
|
}
|
|
}
|
|
|
|
player_gravity_slide_punish()
|
|
{
|
|
level endon( "end_player_slide" );
|
|
|
|
while ( abs( level.tilt_ground_ref.angles[0] ) <= 17 )
|
|
{
|
|
level.x_slide_incr = level.x_slide_incr + 0.15;
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
player_slide_fall()
|
|
{
|
|
level endon( "player_in_heli" );
|
|
level.player setstance( "stand" );
|
|
level.player allowcrouch( 0 );
|
|
level.player allowprone( 0 );
|
|
level.player disableweapons();
|
|
level.player freezecontrols( 1 );
|
|
var_0 = getent( "touching_ladder", "targetname" );
|
|
|
|
if ( !level.player istouching( var_0 ) && level.player.origin[2] < 1410 && level.player.origin[2] > 1390 )
|
|
{
|
|
var_1 = maps\_utility::spawn_anim_model( "player_rig", ( level.player.origin[0], level.player.origin[1], 1400 ) );
|
|
var_1.angles = ( 0, 90, 0 );
|
|
var_1 thread player_fade_out_trace();
|
|
level.player playerlinktoblend( var_1, "tag_player", 0.3 );
|
|
var_1 maps\_anim::anim_single_solo( var_1, "carrier_player_slide" );
|
|
}
|
|
else
|
|
{
|
|
level.player dodamage( level.player.health * 0.9, level.player.origin + ( 0, 0, 72 ) );
|
|
setdvar( "ui_deadquote", &"CARRIER_FAIL_DECK_TILT" );
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
}
|
|
|
|
player_fade_out_trace()
|
|
{
|
|
while ( !common_scripts\utility::flag( "slide_fade_out" ) )
|
|
{
|
|
var_0 = self.origin + ( 16, 0, 8 );
|
|
var_1 = self.origin + ( 100, 0, 8 );
|
|
var_2 = playerphysicstrace( var_0, var_1 );
|
|
|
|
if ( var_2 != var_1 )
|
|
common_scripts\utility::flag_set( "slide_fade_out" );
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
ai_cleanup_fake_death( var_0 )
|
|
{
|
|
var_1 = getentarray( var_0, "script_noteworthy" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( isai( var_3 ) && isalive( var_3 ) )
|
|
{
|
|
if ( isdefined( var_3.script_noteworthy ) && var_3.script_noteworthy == var_0 )
|
|
var_3 thread maps\ss_util::fake_death_bullet( 1.5 );
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( !isspawner( var_3 ) && isalive( var_3 ) && isdefined( var_3.script_drone ) && var_3.script_drone )
|
|
var_3 dodamage( var_3.health, var_3.origin );
|
|
}
|
|
}
|
|
|
|
array_spawn_targetname_allow_fail( var_0, var_1 )
|
|
{
|
|
var_2 = getentarray( var_0, "targetname" );
|
|
var_3 = array_spawn_allow_fail( var_2 );
|
|
return var_3;
|
|
}
|
|
|
|
array_spawn_allow_fail( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
var_4.count = 1;
|
|
var_5 = var_4 maps\_utility::spawn_ai( var_1 );
|
|
|
|
if ( isdefined( var_5 ) )
|
|
var_2[var_2.size] = var_5;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
retreat_from_vol_to_vol( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = getent( var_0, "targetname" );
|
|
var_5 = var_4 maps\_utility::get_ai_touching_volume( "axis" );
|
|
var_6 = getent( var_1, "targetname" );
|
|
var_7 = getnode( var_6.target, "targetname" );
|
|
|
|
foreach ( var_9 in var_5 )
|
|
{
|
|
if ( isdefined( var_9 ) && isalive( var_9 ) )
|
|
{
|
|
if ( issubstr( var_9.model, "shotgun" ) )
|
|
return;
|
|
|
|
var_9.forcegoal = 0;
|
|
var_9.fixednode = 0;
|
|
var_9.pathrandompercent = randomintrange( 75, 100 );
|
|
var_9 setgoalnode( var_7 );
|
|
var_9 setgoalvolumeauto( var_6 );
|
|
}
|
|
}
|
|
}
|
|
|
|
ai_array_killcount_flag_set( var_0, var_1, var_2, var_3 )
|
|
{
|
|
maps\_utility::waittill_dead_or_dying( var_0, var_1, var_3 );
|
|
common_scripts\utility::flag_set( var_2 );
|
|
}
|
|
|
|
check_trigger_flagset( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
|
|
if ( isdefined( var_1.script_flag_set ) )
|
|
common_scripts\utility::flag_set( var_1.script_flag_set );
|
|
}
|
|
|
|
run_to_volume_and_delete( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
self setgoalvolumeauto( getent( var_0, "targetname" ) );
|
|
self waittill( "goal" );
|
|
waittill_player_not_looking();
|
|
self delete();
|
|
}
|
|
}
|
|
|
|
ignore_everything( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self.ignoreall = 1;
|
|
self.ignoreme = 1;
|
|
self.grenadeawareness = 0;
|
|
self.ignoreexplosionevents = 1;
|
|
self.ignorerandombulletdamage = 1;
|
|
self.ignoresuppression = 1;
|
|
self.disablebulletwhizbyreaction = 1;
|
|
maps\_utility::disable_pain();
|
|
self.dontavoidplayer = 1;
|
|
self.og_newenemyreactiondistsq = self.newenemyreactiondistsq;
|
|
self.newenemyreactiondistsq = 0;
|
|
|
|
if ( isdefined( var_0 ) && var_0 != 0.0 )
|
|
{
|
|
wait( var_0 );
|
|
clear_ignore_everything();
|
|
}
|
|
}
|
|
|
|
clear_ignore_everything()
|
|
{
|
|
self.ignoreall = 0;
|
|
self.ignoreme = 0;
|
|
self.grenadeawareness = 1;
|
|
self.ignoreexplosionevents = 0;
|
|
self.ignorerandombulletdamage = 0;
|
|
self.ignoresuppression = 0;
|
|
self.disablebulletwhizbyreaction = 0;
|
|
maps\_utility::enable_pain();
|
|
self.dontavoidplayer = 0;
|
|
self.script_dontpeek = 0;
|
|
|
|
if ( isdefined( self.og_newenemyreactiondistsq ) )
|
|
self.newenemyreactiondistsq = self.og_newenemyreactiondistsq;
|
|
}
|
|
|
|
anim_fake_loop_endon( var_0, var_1, var_2 )
|
|
{
|
|
var_0 endon( "death" );
|
|
var_0 endon( "endon_flag" );
|
|
|
|
while ( isdefined( var_0 ) )
|
|
maps\_anim::anim_single_solo( var_0, var_1 );
|
|
}
|
|
|
|
stop_anim_fake_loop( var_0, var_1 )
|
|
{
|
|
var_0 endon( "death" );
|
|
common_scripts\utility::flag_wait( var_1 );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 stopanimscripted();
|
|
}
|
|
|
|
safe_kill()
|
|
{
|
|
self endon( "death" );
|
|
self kill();
|
|
}
|
|
|
|
spawn_targetname_at_struct_targetname( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_0, "targetname" );
|
|
var_3 = common_scripts\utility::getstruct( var_1, "targetname" );
|
|
|
|
if ( isdefined( var_2 ) && isdefined( var_3 ) )
|
|
{
|
|
var_2.origin = var_3.origin;
|
|
|
|
if ( isdefined( var_3.angles ) )
|
|
var_2.angles = var_3.angles;
|
|
|
|
var_4 = var_2 maps\_utility::spawn_ai();
|
|
return var_4;
|
|
}
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
var_4 = var_2 maps\_utility::spawn_ai();
|
|
iprintlnbold( "Add a script struct called: " + var_1 + " to spawn him in the correct location." );
|
|
var_4 teleport( level.player.origin, level.player.angles );
|
|
return var_4;
|
|
}
|
|
|
|
iprintlnbold( "failed to spawn " + var_0 + " at " + var_1 );
|
|
return undefined;
|
|
}
|
|
|
|
targetname_spawn( var_0 )
|
|
{
|
|
var_1 = getentarray( var_0, "targetname" );
|
|
common_scripts\utility::array_thread( var_1, maps\_utility::spawn_ai );
|
|
}
|
|
|
|
array_combine_unique( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( !isdefined( common_scripts\utility::array_find( var_2, var_4 ) ) )
|
|
var_2[var_2.size] = var_4;
|
|
}
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
if ( !isdefined( common_scripts\utility::array_find( var_2, var_4 ) ) )
|
|
var_2[var_2.size] = var_4;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
set_black_fade( var_0, var_1 )
|
|
{
|
|
level notify( "set_black_fade", var_0, var_1 );
|
|
level endon( "set_black_fade" );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 1;
|
|
|
|
var_0 = max( 0.0, min( 1.0, var_0 ) );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 1;
|
|
|
|
var_1 = max( 0.01, var_1 );
|
|
|
|
if ( !isdefined( level.hud_black ) )
|
|
{
|
|
level.hud_black = newhudelem();
|
|
level.hud_black.x = 0;
|
|
level.hud_black.y = 0;
|
|
level.hud_black.horzalign = "fullscreen";
|
|
level.hud_black.vertalign = "fullscreen";
|
|
level.hud_black.foreground = 1;
|
|
level.hud_black.sort = -999;
|
|
level.hud_black setshader( "black", 650, 490 );
|
|
level.hud_black.alpha = 0.0;
|
|
}
|
|
|
|
level.hud_black fadeovertime( var_1 );
|
|
level.hud_black.alpha = max( 0.0, min( 1.0, var_0 ) );
|
|
|
|
if ( var_0 <= 0 )
|
|
{
|
|
wait( var_1 );
|
|
level.hud_black destroy();
|
|
level.hud_black = undefined;
|
|
}
|
|
}
|
|
|
|
lerp_player_to_position_accurate( var_0, var_1 )
|
|
{
|
|
var_2 = spawn( "script_model", level.player getorigin() );
|
|
var_2 setmodel( "tag_origin" );
|
|
level.player playerlinkto( var_2, "tag_origin" );
|
|
var_2 moveto( var_0, var_1 );
|
|
wait( var_1 + 0.05 );
|
|
var_2 delete();
|
|
}
|
|
|
|
move_arc_dist( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = self.origin + anglestoforward( self.angles ) * var_0;
|
|
move_arc( self.origin, var_3, var_1, var_2 );
|
|
}
|
|
|
|
move_arc( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
self endon( "deleted" );
|
|
self endon( "destroyed" );
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = ( 0, 0, 0 );
|
|
|
|
var_5 = ceil( min( var_3 * 3, 20 ) );
|
|
var_6 = calculate_arc( var_0, var_1, var_2, var_5 );
|
|
self.angles = vectortoangles( var_6[1] - self.origin ) + var_4;
|
|
|
|
foreach ( var_9, var_8 in var_6 )
|
|
{
|
|
if ( var_9 < 1 )
|
|
continue;
|
|
|
|
self rotateto( vectortoangles( var_8 - self.origin ) + var_4, var_3 / var_5 );
|
|
self moveto( var_8, var_3 / var_5 );
|
|
wait( var_3 / var_5 );
|
|
}
|
|
}
|
|
|
|
calculate_arc( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = arc_cached( var_0, var_1 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
return var_4;
|
|
|
|
var_5 = var_0[0];
|
|
var_6 = var_0[1];
|
|
var_7 = var_0[2];
|
|
var_8 = var_1[0];
|
|
var_9 = var_1[1];
|
|
var_10 = var_1[2];
|
|
var_11 = [ var_0, var_1 ];
|
|
var_12 = get_midpoint_arc( var_11, var_2 );
|
|
var_13 = var_12[0];
|
|
var_14 = var_12[1];
|
|
var_15 = var_12[2];
|
|
var_16 = [];
|
|
|
|
for ( var_17 = 1; var_17 <= var_3; var_17++ )
|
|
{
|
|
var_18 = var_17 / var_3;
|
|
var_19 = int( ( 1 - var_18 ) * ( 1 - var_18 ) * var_5 + 2 * ( 1 - var_18 ) * var_18 * var_13 + var_18 * var_18 * var_8 );
|
|
var_20 = int( ( 1 - var_18 ) * ( 1 - var_18 ) * var_6 + 2 * ( 1 - var_18 ) * var_18 * var_14 + var_18 * var_18 * var_9 );
|
|
var_21 = int( ( 1 - var_18 ) * ( 1 - var_18 ) * var_7 + 2 * ( 1 - var_18 ) * var_18 * var_15 + var_18 * var_18 * var_10 );
|
|
var_16[var_17] = ( var_19, var_20, var_21 );
|
|
}
|
|
|
|
cache_arc( var_0, var_1, var_16 );
|
|
return var_16;
|
|
}
|
|
|
|
get_midpoint_arc( var_0, var_1 )
|
|
{
|
|
var_2 = 0;
|
|
var_3 = 0;
|
|
var_4 = 0;
|
|
|
|
for ( var_5 = 0; var_5 < var_0.size; var_5++ )
|
|
{
|
|
var_2 = var_2 + var_0[var_5][0];
|
|
var_3 = var_3 + var_0[var_5][1];
|
|
var_4 = var_4 + var_0[var_5][2];
|
|
}
|
|
|
|
return ( var_2 / var_0.size, var_3 / var_0.size, var_4 / var_0.size + var_1 );
|
|
}
|
|
|
|
arc_cached( var_0, var_1 )
|
|
{
|
|
foreach ( var_3 in level.cached_arcs )
|
|
{
|
|
if ( var_0 == var_3.startorigin && var_1 == var_3.endorigin )
|
|
return var_3.array;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
cache_arc( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = spawnstruct();
|
|
var_3.startorigin = var_0;
|
|
var_3.endorigin = var_1;
|
|
var_3.array = var_2;
|
|
level.cached_arcs = common_scripts\utility::array_add( level.cached_arcs, var_3 );
|
|
}
|
|
|
|
cinematic_on()
|
|
{
|
|
level.player disableweapons();
|
|
level.player allowcrouch( 0 );
|
|
level.player allowprone( 0 );
|
|
level.player allowjump( 0 );
|
|
level.player allowfire( 0 );
|
|
}
|
|
|
|
cinematic_off()
|
|
{
|
|
level.player enableweapons();
|
|
level.player allowcrouch( 1 );
|
|
level.player allowprone( 1 );
|
|
level.player allowjump( 1 );
|
|
level.player allowfire( 1 );
|
|
}
|
|
|
|
setup_mantle_hint()
|
|
{
|
|
level.strings["mantle"] = &"SCRIPT_MANTLE";
|
|
maps\_hud_util::create_mantle();
|
|
}
|
|
|
|
show_mantle_hint()
|
|
{
|
|
level.player allowjump( 0 );
|
|
level.hud_mantle["text"].alpha = 1;
|
|
level.hud_mantle["icon"].alpha = 1;
|
|
}
|
|
|
|
hide_mantle_hint()
|
|
{
|
|
level.player allowjump( 1 );
|
|
level.hud_mantle["text"].alpha = 0;
|
|
level.hud_mantle["icon"].alpha = 0;
|
|
}
|
|
|
|
player_check_jump()
|
|
{
|
|
self endon( "left_volume" );
|
|
self endon( "player_vaulted" );
|
|
self endon( "not_looking_at_mantle" );
|
|
level endon( "stop_player_vault" );
|
|
self notifyonplayercommand( "player_vaulted", "+gostand" );
|
|
self waittill( "player_vaulted" );
|
|
}
|
|
|
|
player_volume_check( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
self endon( var_0 );
|
|
|
|
level.player endon( "player_vaulted" );
|
|
level endon( "stop_player_vault" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( !level.player istouching( self ) )
|
|
{
|
|
level.player notify( "left_volume" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
self notify( var_0 );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
player_check_mantle_lookat()
|
|
{
|
|
level.player endon( "stop_mantle_lookat" );
|
|
level endon( "stop_player_vault" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = abs( angleclamp( level.player getplayerangles()[1] ) - self.angles[1] );
|
|
level.player.looking_at_mantle = var_0 < 60;
|
|
|
|
if ( !level.player.looking_at_mantle )
|
|
level.player notify( "not_looking_at_mantle" );
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
do_notetracks( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "new_anim" );
|
|
var_2 = getanimlength( var_0 );
|
|
var_3 = getnotetracktimes( var_0, var_1 );
|
|
var_4 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_5 = self getanimtime( var_0 );
|
|
|
|
if ( var_4 < var_3.size && var_5 >= var_3[var_4] )
|
|
{
|
|
self notify( var_1 );
|
|
var_4++;
|
|
}
|
|
else if ( var_4 >= var_3.size && var_5 < var_3[0] )
|
|
var_4 = 0;
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
hide_and_drop_entity()
|
|
{
|
|
maps\_utility::hide_entity();
|
|
self.dropped = 1;
|
|
self.origin = maps\_utility::set_z( self.origin, self.origin[2] - 5000 );
|
|
}
|
|
|
|
show_and_raise_entity()
|
|
{
|
|
maps\_utility::show_entity();
|
|
|
|
if ( eval( self.dropped ) )
|
|
self.origin = maps\_utility::set_z( self.origin, self.origin[2] + 5000 );
|
|
}
|
|
|
|
fast_jog( var_0 )
|
|
{
|
|
if ( var_0 == 1 )
|
|
{
|
|
self.animname = "generic";
|
|
maps\_utility::set_run_anim( "clock_jog", 1 );
|
|
self.moveplaybackrate = 1;
|
|
}
|
|
else
|
|
{
|
|
maps\_utility::clear_run_anim();
|
|
self.moveplaybackrate = 1;
|
|
}
|
|
}
|
|
|
|
setup_blackhawk( var_0 )
|
|
{
|
|
level.player_blackhawk = maps\_vehicle::spawn_vehicle_from_targetname( var_0 );
|
|
level.player_blackhawk.dont_crush_player = 1;
|
|
level.player_blackhawk.path_gobbler = 1;
|
|
level.player_blackhawk maps\_vehicle::godon();
|
|
level.player_blackhawk.lookat_ent = spawn( "script_origin", level.player_blackhawk.origin );
|
|
level.player_blackhawk setmaxpitchroll( 0, 10 );
|
|
level.player_blackhawk maps\_vehicle_code::kill_lights();
|
|
var_1 = level.player_blackhawk common_scripts\utility::spawn_tag_origin();
|
|
var_1.origin = level.player_blackhawk gettagorigin( "tag_light_cargo01" );
|
|
var_1.angles = level.player_blackhawk gettagangles( "tag_light_cargo01" );
|
|
var_1 linkto( level.player_blackhawk );
|
|
playfxontag( common_scripts\utility::getfx( "aircraft_light_cockpit_white_300" ), var_1, "tag_origin" );
|
|
common_scripts\utility::waitframe();
|
|
thread maps\_vehicle::gopath( level.player_blackhawk );
|
|
init_player_on_blackhawk( level.player, var_0 + "_seat" );
|
|
}
|
|
|
|
init_player_on_blackhawk( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
var_2 = common_scripts\utility::spawn_tag_origin();
|
|
var_2 linkto( level.player_blackhawk, "tag_player", ( 0, -11, -6 ), ( 0, -75, 0 ) );
|
|
level.player playerlinktodelta( var_2, "tag_origin", 1.0, 10, 50, 5, 25, 0 );
|
|
level.player setplayerangles( ( 0, level.player_blackhawk.angles[1] - 30, 0 ) );
|
|
var_0 allowjump( 0 );
|
|
var_0 allowsprint( 0 );
|
|
var_0 allowprone( 0 );
|
|
var_0 allowcrouch( 0 );
|
|
var_0 disableweapons();
|
|
var_0.is_on_heli = 1;
|
|
}
|
|
|
|
update_sun()
|
|
{
|
|
level.sun_angles_default = getmapsunangles();
|
|
level.sun_angles_intro = ( -35, -36, 0 );
|
|
level.sun_angles_intro_deck = ( -35, -36, 0 );
|
|
level.sun_angles_deck_combat = ( -35, -36, 0 );
|
|
level.sun_angles_deck_tilt = ( -19, -116, 0 );
|
|
|
|
if ( level.start_point == "slow_intro" )
|
|
{
|
|
lerpsunangles( level.sun_angles_default, level.sun_angles_intro, 0.05 );
|
|
common_scripts\utility::exploder( 8002 );
|
|
|
|
if ( maps\_utility::is_gen4() )
|
|
var_0 = 2.8;
|
|
else
|
|
var_0 = 1.1;
|
|
|
|
setsunlight( 1.0 * var_0, 0.8 * var_0, 0.57 * var_0 );
|
|
maps\_utility::setsaveddvar_cg_ng( "r_specularcolorscale", 3.0, 2.0 );
|
|
maps\_utility::setsaveddvar_cg_ng( "r_diffusecolorscale", 1.5, 1.5 );
|
|
common_scripts\utility::flag_wait( "slow_intro_finished" );
|
|
lerpsunangles( level.sun_angles_default, level.sun_angles_deck_combat, 0.05 );
|
|
|
|
if ( maps\_utility::is_gen4() )
|
|
var_0 = 2.8;
|
|
else
|
|
var_0 = 1.1;
|
|
|
|
setsunlight( 1.0 * var_0, 0.8 * var_0, 0.57 * var_0 );
|
|
maps\_utility::setsaveddvar_cg_ng( "r_specularcolorscale", 3.0, 2.0 );
|
|
maps\_utility::setsaveddvar_cg_ng( "r_diffusecolorscale", 1.5, 1.5 );
|
|
common_scripts\utility::flag_wait( "defend_sparrow_start" );
|
|
lerpsunangles( level.sun_angles_deck_combat, level.sun_angles_deck_tilt, 45, 5, 5 );
|
|
maps\_utility::stop_exploder( 8002 );
|
|
common_scripts\utility::exploder( 8001 );
|
|
}
|
|
else if ( level.start_point == "medbay" || level.start_point == "deck_combat" || level.start_point == "deck_transition" || level.start_point == "defend_zodiac" || level.start_point == "run_to_sparrow" || level.start_point == "defend_sparrow" )
|
|
{
|
|
lerpsunangles( level.sun_angles_default, level.sun_angles_deck_combat, 0.05 );
|
|
common_scripts\utility::exploder( 8002 );
|
|
|
|
if ( maps\_utility::is_gen4() )
|
|
var_0 = 2.8;
|
|
else
|
|
var_0 = 1.1;
|
|
|
|
setsunlight( 1.0 * var_0, 0.8 * var_0, 0.57 * var_0 );
|
|
maps\_utility::setsaveddvar_cg_ng( "r_specularcolorscale", 3.0, 2.0 );
|
|
maps\_utility::setsaveddvar_cg_ng( "r_diffusecolorscale", 1.5, 1.5 );
|
|
common_scripts\utility::flag_wait( "defend_sparrow_start" );
|
|
lerpsunangles( level.sun_angles_deck_combat, level.sun_angles_deck_tilt, 45, 5, 5 );
|
|
maps\_utility::stop_exploder( 8002 );
|
|
common_scripts\utility::exploder( 8001 );
|
|
}
|
|
else
|
|
{
|
|
if ( maps\_utility::is_gen4() )
|
|
var_0 = 2.8;
|
|
else
|
|
var_0 = 1.1;
|
|
|
|
setsunlight( 1.0 * var_0, 0.8 * var_0, 0.57 * var_0 );
|
|
maps\_utility::setsaveddvar_cg_ng( "r_specularcolorscale", 2.0, 1.5 );
|
|
maps\_utility::setsaveddvar_cg_ng( "r_diffusecolorscale", 1.5, 1.5 );
|
|
lerpsunangles( level.sun_angles_deck_combat, level.sun_angles_deck_tilt, 0.05 );
|
|
maps\_utility::stop_exploder( 8002 );
|
|
common_scripts\utility::exploder( 8001 );
|
|
}
|
|
}
|
|
|
|
update_deck_post_intro()
|
|
{
|
|
level.sliding_jet2 hide();
|
|
level.sliding_jet3 hide();
|
|
common_scripts\utility::flag_wait( "slow_intro_finished" );
|
|
level.sliding_jet2 show();
|
|
level.sliding_jet3 show();
|
|
}
|
|
|
|
generic_prop_raven_anim( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
var_8 = undefined;
|
|
var_9 = undefined;
|
|
var_10 = undefined;
|
|
var_11 = undefined;
|
|
var_12 = undefined;
|
|
var_13 = undefined;
|
|
var_14 = undefined;
|
|
var_15 = undefined;
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = 1;
|
|
|
|
var_16 = maps\_utility::spawn_anim_model( var_1 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
var_8 = getentarray( var_3, "targetname" );
|
|
|
|
foreach ( var_18 in var_8 )
|
|
{
|
|
if ( var_18.script_noteworthy == "item" )
|
|
{
|
|
var_9 = var_18;
|
|
continue;
|
|
}
|
|
|
|
if ( var_18.script_noteworthy == "clip" )
|
|
{
|
|
var_10 = var_18;
|
|
continue;
|
|
}
|
|
|
|
var_11 = var_18;
|
|
}
|
|
|
|
if ( isdefined( var_10 ) )
|
|
var_10 linkto( var_9 );
|
|
|
|
if ( isdefined( var_11 ) )
|
|
var_11 linkto( var_9 );
|
|
}
|
|
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
var_12 = getentarray( var_4, "targetname" );
|
|
|
|
foreach ( var_18 in var_12 )
|
|
{
|
|
if ( var_18.script_noteworthy == "item" )
|
|
{
|
|
var_13 = var_18;
|
|
continue;
|
|
}
|
|
|
|
if ( var_18.script_noteworthy == "clip" )
|
|
{
|
|
var_14 = var_18;
|
|
continue;
|
|
}
|
|
|
|
var_15 = var_18;
|
|
}
|
|
|
|
if ( isdefined( var_14 ) )
|
|
var_14 linkto( var_13 );
|
|
|
|
if ( isdefined( var_15 ) )
|
|
var_15 linkto( var_13 );
|
|
}
|
|
|
|
var_0 maps\_anim::anim_first_frame_solo( var_16, var_2 );
|
|
var_22 = var_16 gettagorigin( "J_prop_1" );
|
|
var_23 = var_16 gettagangles( "J_prop_1" );
|
|
var_24 = var_16 gettagorigin( "J_prop_2" );
|
|
var_25 = var_16 gettagangles( "J_prop_2" );
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( isdefined( var_3 ) && var_9.classname == "script_model" )
|
|
{
|
|
var_9.origin = var_22;
|
|
|
|
if ( var_5 == 1 )
|
|
var_9.angles = var_23;
|
|
}
|
|
|
|
if ( isdefined( var_4 ) && var_13.classname == "script_model" )
|
|
{
|
|
var_13.origin = var_24;
|
|
|
|
if ( var_5 == 1 )
|
|
var_13.angles = var_25;
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_9 linkto( var_16, "J_prop_1" );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_13 linkto( var_16, "J_prop_2" );
|
|
|
|
common_scripts\utility::flag_wait( var_6 );
|
|
|
|
if ( isdefined( self.script_delay ) )
|
|
wait( self.script_delay );
|
|
|
|
var_0 maps\_anim::anim_single_solo( var_16, var_2 );
|
|
|
|
if ( isdefined( var_7 ) && var_7 == 1 )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
var_9 delete();
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_13 delete();
|
|
|
|
var_16 delete();
|
|
}
|
|
else
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
var_9 unlink();
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_13 unlink();
|
|
|
|
var_16 delete();
|
|
}
|
|
}
|
|
|
|
player_animate( var_0 )
|
|
{
|
|
level.player setstance( "stand" );
|
|
level.player allowcrouch( 0 );
|
|
level.player allowprone( 0 );
|
|
level.player disableweapons();
|
|
level.player freezecontrols( 1 );
|
|
var_1 = maps\_utility::spawn_anim_model( "player_rig", level.player.origin );
|
|
var_1.angles = ( 0, 90, 0 );
|
|
level.player playerlinktoblend( var_1, "tag_player", 0.3 );
|
|
maps\_anim::anim_single_solo( var_1, var_0 );
|
|
var_1 delete();
|
|
}
|
|
|
|
spawn_animate_delete( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_0, "targetname" );
|
|
var_3 = var_2 maps\_utility::spawn_ai( 1, 0 );
|
|
var_3.animname = "generic";
|
|
maps\_anim::anim_single_solo( var_3, var_1 );
|
|
var_3 delete();
|
|
}
|
|
|
|
eval( var_0 )
|
|
{
|
|
return isdefined( var_0 ) && var_0;
|
|
}
|
|
|
|
safe_deleteent( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
maps\_utility::deleteent( var_0 );
|
|
}
|
|
|
|
#using_animtree("vehicles");
|
|
|
|
init_gunboats()
|
|
{
|
|
level.vttype = "gunboat";
|
|
level.vtmodel = "vehicle_gun_boat_iw6";
|
|
level.vtclassname = "script_vehicle_gunboat";
|
|
maps\_vehicle::build_drive( %carrier_rappel_defend_gun_boat_moving, %carrier_rappel_defend_gun_boat_moving, 17 );
|
|
}
|
|
|
|
spawn_gunboat( var_0, var_1 )
|
|
{
|
|
foreach ( var_3 in level.gunboats )
|
|
{
|
|
if ( isalive( var_3 ) && isdefined( var_3.saved_targetname ) && var_3.saved_targetname == var_0 )
|
|
return;
|
|
}
|
|
|
|
level.gunboats = maps\_utility::array_removedead( level.gunboats );
|
|
|
|
if ( level.gunboats.size >= 4 )
|
|
return;
|
|
|
|
maps\_utility::array_spawn_function_targetname( var_0, ::setup_target_on_vehicle );
|
|
var_3 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( var_0 );
|
|
var_3.saved_targetname = var_0;
|
|
var_3.health = 25000;
|
|
var_3.currenthealth = var_3.health;
|
|
var_3 thread gunboat_treadfx();
|
|
level.gunboats = common_scripts\utility::array_add( level.gunboats, var_3 );
|
|
var_3.mgturret[0] setaispread( level.difficultysettings["gunboat_aiSpread"][maps\_gameskill::get_skill_from_index( level.gameskill )] );
|
|
var_3.mgturret[0] setconvergencetime( level.difficultysettings["gunboat_convergenceTime"][maps\_gameskill::get_skill_from_index( level.gameskill )] );
|
|
|
|
if ( eval( var_1 ) && maps\_gameskill::get_skill_from_index( level.gameskill ) != "easy" )
|
|
var_3.mgturret[0] settargetentity( level.player );
|
|
|
|
var_3 thread gunboat_think();
|
|
}
|
|
|
|
gunboat_treadfx()
|
|
{
|
|
stopfxontag( common_scripts\utility::getfx( "gunboat_wake" ), self, "j_bodymid" );
|
|
var_0 = common_scripts\utility::spawn_tag_origin();
|
|
var_0 linkto( self, "tag_origin", anglestoforward( ( 0, self.angles[1], 0 ) ) * ( 450, 0, 0 ) + ( 0, 0, 15 ), ( 0, 0, 0 ) );
|
|
playfxontag( common_scripts\utility::getfx( "gunboat_wake" ), var_0, "tag_origin" );
|
|
self waittill( "death" );
|
|
stopfxontag( common_scripts\utility::getfx( "gunboat_wake" ), var_0, "tag_origin" );
|
|
var_0 delete();
|
|
}
|
|
|
|
gunboat_think()
|
|
{
|
|
self endon( "death" );
|
|
thread gunboat_dumbfire();
|
|
maps\_utility::ent_flag_init( "end" );
|
|
maps\_utility::ent_flag_wait( "end" );
|
|
self kill();
|
|
}
|
|
|
|
gunboat_dumbfire()
|
|
{
|
|
self endon( "death" );
|
|
common_scripts\utility::flag_wait( "osprey_intermission" );
|
|
self.mgturret[0] setaispread( level.difficultysettings["gunboat_aiSpread"]["easy"] );
|
|
self.mgturret[0] setconvergencetime( level.difficultysettings["gunboat_convergenceTime"]["easy"] );
|
|
wait 4;
|
|
self.mgturret[0] setaispread( level.difficultysettings["gunboat_aiSpread"][maps\_gameskill::get_skill_from_index( level.gameskill )] );
|
|
self.mgturret[0] setconvergencetime( level.difficultysettings["gunboat_convergenceTime"][maps\_gameskill::get_skill_from_index( level.gameskill )] );
|
|
common_scripts\utility::flag_wait( "gunship_attack" );
|
|
self.mgturret[0] setaispread( 100 );
|
|
self.mgturret[0] setconvergencetime( 100 );
|
|
}
|
|
|
|
explode_gunboats( var_0, var_1, var_2 )
|
|
{
|
|
wait 0.2;
|
|
|
|
foreach ( var_4 in level.gunboats )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
var_5 = distance( var_4.origin, var_0 );
|
|
|
|
if ( var_5 <= var_1 )
|
|
{
|
|
level.osprey_hit_gunboats++;
|
|
level.osprey_total_hits++;
|
|
var_4 kill();
|
|
wait 0.1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
kill_remaining_gunboats()
|
|
{
|
|
foreach ( var_1 in level.gunboats )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_1 kill();
|
|
wait 0.1;
|
|
}
|
|
}
|
|
}
|
|
|
|
vehicles_loop_until_endon( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
level endon( var_1 );
|
|
|
|
for (;;)
|
|
{
|
|
var_5 = maps\_vehicle::spawn_vehicles_from_targetname_and_drive( var_0 );
|
|
|
|
if ( eval( var_4 ) )
|
|
level.vista_vehicles = common_scripts\utility::array_combine( level.vista_vehicles, var_5 );
|
|
|
|
foreach ( var_7 in var_5 )
|
|
{
|
|
if ( isdefined( var_7 ) && isalive( var_7 ) )
|
|
var_7 common_scripts\utility::waittill_any( "reached_dynamic_path_end", "death" );
|
|
}
|
|
|
|
if ( eval( var_4 ) )
|
|
level.vista_vehicles = common_scripts\utility::array_remove_array( level.vista_vehicles, var_5 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 3;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 7;
|
|
|
|
wait( randomfloatrange( var_2, var_3 ) );
|
|
}
|
|
}
|
|
|
|
vehicles_loop_and_unload_until_endon( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
level endon( var_1 );
|
|
maps\_utility::array_spawn_function_targetname( var_0, ::vehicle_unload_drones, var_2, var_3 );
|
|
|
|
for (;;)
|
|
{
|
|
var_6 = maps\_vehicle::spawn_vehicles_from_targetname_and_drive( var_0 );
|
|
|
|
foreach ( var_8 in var_6 )
|
|
{
|
|
if ( isdefined( var_8 ) && isalive( var_8 ) )
|
|
var_8 common_scripts\utility::waittill_any( "reached_dynamic_path_end", "death" );
|
|
}
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = 3;
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = 7;
|
|
|
|
wait( randomfloatrange( var_4, var_5 ) );
|
|
}
|
|
}
|
|
|
|
vehicle_unload_drones( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self waittill( "unloading" );
|
|
var_2 = 1;
|
|
var_3 = getentarray( self.script_parameters, "script_noteworthy" );
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( isdefined( var_5 ) && var_5.classname == "script_model" )
|
|
{
|
|
var_5 thread drone_unload( var_0, var_2 );
|
|
var_2++;
|
|
|
|
if ( var_2 > var_1 )
|
|
var_2 = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
setup_target_on_vehicle()
|
|
{
|
|
self endon( "death" );
|
|
thread clear_target_on_vehicle_death();
|
|
|
|
for (;;)
|
|
{
|
|
if ( !eval( level.player.in_osprey ) )
|
|
level.player waittill( "using_depth_charge" );
|
|
|
|
if ( target_getarray().size >= 63 )
|
|
return;
|
|
|
|
if ( !isdefined( level.target_count ) )
|
|
level.target_count = 0;
|
|
|
|
while ( level.target_count > 5 )
|
|
{
|
|
wait 0.05;
|
|
|
|
if ( !isdefined( level.target_time ) || level.target_time != gettime() )
|
|
{
|
|
level.target_count = 0;
|
|
level.target_time = gettime();
|
|
}
|
|
}
|
|
|
|
if ( target_getarray().size >= 63 )
|
|
return;
|
|
|
|
var_0 = "ac130_hud_enemy_ai_target_s_w";
|
|
var_1 = ( 0, 0, 32 );
|
|
var_2 = 0;
|
|
var_3 = 1;
|
|
var_4 = 0;
|
|
var_5 = 60;
|
|
var_6 = ( 1, 0, 0 );
|
|
|
|
if ( ( isai( self ) || is_drone() ) && isdefined( self.team ) && self.team == "allies" )
|
|
{
|
|
var_0 = "ac130_hud_friendly_ai_diamond_s_w";
|
|
var_6 = ( 0.3, 1, 0.3 );
|
|
var_2 = 1;
|
|
}
|
|
else if ( maps\_vehicle::isvehicle() && maps\_vehicle::ishelicopter() )
|
|
{
|
|
var_0 = "ac130_hud_enemy_vehicle_target_s_w";
|
|
var_6 = ( 1, 0, 0 );
|
|
var_4 = 1;
|
|
var_5 = 150;
|
|
}
|
|
else if ( issubstr( self.classname, "vehicle" ) && isdefined( self.script_team ) && self.script_team != "allies" || eval( self.fake ) && issubstr( self.model, "zodiac" ) )
|
|
{
|
|
var_0 = "ac130_hud_enemy_vehicle_target_s_w";
|
|
var_6 = ( 1, 0, 0 );
|
|
var_4 = 1;
|
|
var_5 = 150;
|
|
}
|
|
else if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "big" )
|
|
{
|
|
var_0 = "ac130_hud_enemy_vehicle_target_s_w";
|
|
var_6 = ( 1, 0, 0 );
|
|
var_5 = 200;
|
|
}
|
|
|
|
target_alloc( self, var_1 );
|
|
target_setshader( self, var_0 );
|
|
target_setscaledrendermode( self, 1 );
|
|
|
|
if ( var_2 )
|
|
target_drawsingle( self );
|
|
|
|
if ( var_3 )
|
|
target_drawsquare( self, var_5 );
|
|
|
|
if ( var_4 )
|
|
target_drawcornersonly( self, 1 );
|
|
|
|
target_setcolor( self, var_6 );
|
|
target_showtoplayer( self, level.player );
|
|
target_flush( self );
|
|
level.target_count++;
|
|
level.player waittill( "depth_charge_exit" );
|
|
}
|
|
}
|
|
|
|
clear_target_on_vehicle_death()
|
|
{
|
|
level.player endon( "depth_charge_exit" );
|
|
self waittill( "death" );
|
|
|
|
if ( isdefined( self ) && target_istarget( self ) )
|
|
target_remove( self );
|
|
}
|
|
|
|
fake_vehicles_loop_until_endon( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
level endon( var_3 );
|
|
var_8 = 17.6;
|
|
|
|
if ( var_0 == 0 )
|
|
{
|
|
|
|
}
|
|
|
|
var_9 = common_scripts\utility::getstructarray( var_1, "targetname" );
|
|
var_10 = [];
|
|
|
|
foreach ( var_12 in var_9 )
|
|
{
|
|
var_13 = spawn( "script_model", var_12.origin );
|
|
var_13 setmodel( var_2 );
|
|
var_13.angles = var_12.angles;
|
|
var_13.target = var_12.target;
|
|
var_14 = common_scripts\utility::getstruct( var_13.target, "targetname" );
|
|
|
|
if ( isdefined( var_14 ) && isdefined( var_14.target ) )
|
|
var_13.target2 = var_14.target;
|
|
|
|
var_13 hide();
|
|
var_10 = common_scripts\utility::array_add( var_10, var_13 );
|
|
}
|
|
|
|
if ( eval( var_6 ) )
|
|
level.vista_vehicles = common_scripts\utility::array_combine( level.vista_vehicles, var_10 );
|
|
|
|
for (;;)
|
|
{
|
|
foreach ( var_13 in var_10 )
|
|
{
|
|
if ( !isdefined( var_13.start_origin ) )
|
|
var_13.start_origin = var_13.origin;
|
|
|
|
var_13.origin = var_13.start_origin;
|
|
}
|
|
|
|
if ( !eval( var_7 ) )
|
|
fake_vehicles_waittill_not_looking( var_10 );
|
|
|
|
var_18 = 0;
|
|
var_19 = 0;
|
|
|
|
foreach ( var_13 in var_10 )
|
|
{
|
|
var_13 show();
|
|
var_21 = common_scripts\utility::getstruct( var_13.target, "targetname" );
|
|
var_13.angles = vectortoangles( var_21.origin - var_13.origin );
|
|
var_22 = distance( var_13.origin, var_21.origin );
|
|
var_23 = var_22 / ( var_0 * var_8 );
|
|
var_24 = var_23;
|
|
var_13 moveto( var_21.origin, var_23 );
|
|
|
|
if ( isdefined( var_13.target2 ) )
|
|
{
|
|
var_25 = common_scripts\utility::getstruct( var_13.target2, "targetname" );
|
|
var_26 = distance( var_21.origin, var_25.origin );
|
|
var_19 = var_26 / ( var_0 * var_8 ) / 2;
|
|
var_13 maps\_utility::delaythread( var_23, ::goto_dest2, var_25, var_19 );
|
|
var_24 = var_24 + var_19;
|
|
}
|
|
|
|
var_18 = max( var_18, var_23 );
|
|
}
|
|
|
|
wait( var_18 );
|
|
fake_vehicles_waittill_not_looking( var_10 );
|
|
common_scripts\utility::array_call( var_10, ::hide );
|
|
|
|
foreach ( var_13 in var_10 )
|
|
var_13 notify( "stop_goto_dest2" );
|
|
|
|
if ( eval( var_7 ) )
|
|
{
|
|
common_scripts\utility::array_call( var_10, ::delete );
|
|
return;
|
|
}
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = 3;
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = 7;
|
|
|
|
wait( randomfloatrange( var_4, var_5 ) );
|
|
}
|
|
}
|
|
|
|
goto_dest2( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_goto_dest2" );
|
|
self moveto( var_0.origin, var_1, 0, var_1 / 2 );
|
|
wait( var_1 );
|
|
self hide();
|
|
}
|
|
|
|
fake_vehicles_waittill_not_looking( var_0 )
|
|
{
|
|
var_1 = 1;
|
|
|
|
while ( var_1 )
|
|
{
|
|
wait 0.5;
|
|
var_1 = 0;
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( maps\_utility::either_player_looking_at( var_3.origin, cos( 65 ), 1 ) )
|
|
{
|
|
var_1 = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
drone_unload( var_0, var_1 )
|
|
{
|
|
self waittill( "jumpedout" );
|
|
self.target = var_0 + var_1;
|
|
maps\_drone::drone_init();
|
|
thread randomly_kill_drone();
|
|
self waittill( "death" );
|
|
maps\_drone::drone_drop_real_weapon_on_death();
|
|
}
|
|
|
|
randomly_kill_drone()
|
|
{
|
|
self endon( "death" );
|
|
wait( randomfloatrange( 8, 16 ) );
|
|
self dodamage( self.health, self.origin );
|
|
}
|
|
|
|
drone_respawner( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 8;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 20;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 8;
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = 20;
|
|
|
|
waittill_player_not_looking( 1 );
|
|
var_5 = maps\_utility::spawn_ai( 1 );
|
|
var_5.ignoreme = 1;
|
|
var_5.noragdoll = undefined;
|
|
var_5 thread kill_drone_respawner( var_0 );
|
|
level endon( var_0 );
|
|
|
|
for (;;)
|
|
{
|
|
wait( randomfloatrange( var_1, var_2 ) );
|
|
|
|
if ( isdefined( var_5 ) )
|
|
{
|
|
var_5 dodamage( var_5.health, var_5.origin );
|
|
level.dead_ally_drones = common_scripts\utility::array_add( level.dead_ally_drones, var_5 );
|
|
}
|
|
|
|
wait( randomfloatrange( var_3, var_4 ) );
|
|
|
|
while ( eval( self.inhibit_respawn ) )
|
|
common_scripts\utility::waitframe();
|
|
|
|
waittill_player_not_looking( 1 );
|
|
var_5 = maps\_utility::spawn_ai( 0 );
|
|
var_5 thread kill_drone_respawner( var_0 );
|
|
}
|
|
}
|
|
|
|
kill_drone_respawner( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
common_scripts\utility::flag_wait( var_0 );
|
|
|
|
if ( isdefined( self ) )
|
|
self dodamage( self.health, self.origin );
|
|
}
|
|
|
|
waittill_player_not_looking( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( eval( var_0 ) )
|
|
{
|
|
var_1 = cos( 65 );
|
|
|
|
while ( maps\_utility::either_player_looking_at( self.origin, var_1, 1 ) )
|
|
wait 1;
|
|
}
|
|
else
|
|
{
|
|
while ( maps\_utility::either_player_looking_at( self.origin ) )
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
inhibit_respawn( var_0 )
|
|
{
|
|
self.inhibit_respawn = var_0;
|
|
}
|
|
|
|
heli_fast_explode( var_0 )
|
|
{
|
|
wait 0.1;
|
|
|
|
if ( maps\_vehicle::isvehicle() && maps\_vehicle::ishelicopter() && ( isdefined( self.script_parameters ) && self.script_parameters == "fast_explode" || isdefined( var_0 ) && randomint( 100 ) <= var_0 ) )
|
|
{
|
|
self waittill( "death" );
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
playfx( common_scripts\utility::getfx( "vfx_x_mphnd_primary" ), self.origin, anglestoforward( self.angles ) );
|
|
self delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
drone_delete_on_unload()
|
|
{
|
|
if ( isdefined( self.riders ) )
|
|
{
|
|
foreach ( var_1 in self.riders )
|
|
var_1.drone_delete_on_unload = 1;
|
|
}
|
|
}
|
|
|
|
is_drone()
|
|
{
|
|
return self.classname == "script_model";
|
|
}
|
|
|
|
safe_delete_drone( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 500;
|
|
|
|
thread maps\_utility::ai_delete_when_out_of_sight( [ self ], var_0 );
|
|
}
|
|
|
|
run_destructibles()
|
|
{
|
|
thread carrier_liferaft();
|
|
}
|
|
|
|
carrier_liferaft()
|
|
{
|
|
var_0 = getentarray( "liferaft_trigger", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread carrier_liferaft_think();
|
|
}
|
|
|
|
carrier_liferaft_think()
|
|
{
|
|
level endon( "deck_tilt_start" );
|
|
var_0 = 0;
|
|
var_1 = randomintrange( 2000, 5000 );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_2 );
|
|
var_0 = var_0 + var_2;
|
|
|
|
if ( var_0 >= var_1 )
|
|
{
|
|
var_3 = getentarray( self.target, "targetname" );
|
|
var_3 = common_scripts\utility::array_reverse( var_3 );
|
|
var_4 = var_3[0];
|
|
|
|
if ( isdefined( var_4.target ) )
|
|
{
|
|
var_5 = getent( var_4.target, "targetname" );
|
|
var_5 delete();
|
|
}
|
|
|
|
var_4 physicslaunchserver( var_4.origin, ( randomfloatrange( 0, 500 ), 0, 0 ) );
|
|
var_4 thread liferaft_splash_on_hit_water();
|
|
wait( randomfloatrange( 0.2, 0.3 ) );
|
|
var_4 = var_3[1];
|
|
|
|
if ( isdefined( var_4.target ) )
|
|
{
|
|
var_5 = getent( var_4.target, "targetname" );
|
|
var_5 delete();
|
|
}
|
|
|
|
var_4 physicslaunchserver( var_4.origin, ( randomfloatrange( 2500, 4000 ), 0, 0 ) );
|
|
var_4 thread liferaft_splash_on_hit_water();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
liferaft_splash_on_hit_water()
|
|
{
|
|
while ( isdefined( self ) && self.origin[2] > level.water_level )
|
|
wait 0.05;
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
var_0 = ( self.origin[0], self.origin[1], level.water_level );
|
|
playfx( common_scripts\utility::getfx( "body_splash" ), var_0 );
|
|
}
|
|
|
|
wait 0.1;
|
|
self delete();
|
|
}
|
|
|
|
setup_edge_lean()
|
|
{
|
|
var_0 = getentarray( "edge_lean", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread edge_lean_natural();
|
|
}
|
|
|
|
edge_lean_natural()
|
|
{
|
|
level.player endon( "death" );
|
|
self.player_in = 0;
|
|
level.player.in_lean_vol = 0;
|
|
thread bump_player();
|
|
|
|
if ( level.gameskill < 2 )
|
|
level.player thread edge_lean_shield();
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger" );
|
|
level.player.in_lean_vol = 1;
|
|
level.player_view_pitch_down = getdvar( "player_view_pitch_down" );
|
|
setsaveddvar( "player_view_pitch_down", 89 );
|
|
|
|
while ( level.player istouching( self ) )
|
|
{
|
|
self.player_in = 1;
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
self.player_in = 0;
|
|
level.player.in_lean_vol = 0;
|
|
setsaveddvar( "player_view_pitch_down", level.player_view_pitch_down );
|
|
}
|
|
}
|
|
|
|
bump_player()
|
|
{
|
|
var_0 = 7;
|
|
var_1 = 90;
|
|
var_2 = 10;
|
|
var_3 = -10;
|
|
var_4 = var_1 - var_2;
|
|
var_5 = common_scripts\utility::getstruct( self.target, "targetname" );
|
|
var_6 = undefined;
|
|
|
|
if ( isdefined( var_5.target ) )
|
|
var_6 = getent( var_5.target, "targetname" );
|
|
else
|
|
return;
|
|
|
|
var_7 = var_6.origin;
|
|
var_8 = -1 * anglestoforward( var_5.angles );
|
|
var_9 = vectornormalize( ( var_8[0], var_8[1], 0 ) );
|
|
var_10 = -1 * var_9;
|
|
var_11 = vectortoangles( var_10 );
|
|
var_12 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !self.player_in )
|
|
{
|
|
common_scripts\utility::waitframe();
|
|
continue;
|
|
}
|
|
|
|
var_13 = level.player getplayerangles();
|
|
var_14 = anglestoforward( var_13 );
|
|
var_14 = vectornormalize( ( var_14[0], var_14[1], 0 ) );
|
|
var_15 = vectordot( var_14, var_10 );
|
|
var_16 = acos( var_15 );
|
|
var_16 = round_num( var_16, 2 );
|
|
|
|
if ( var_16 < var_4 )
|
|
{
|
|
if ( var_6.origin != var_7 )
|
|
{
|
|
var_6 moveto( var_7, 0.1 );
|
|
wait 0.1;
|
|
}
|
|
else
|
|
common_scripts\utility::waitframe();
|
|
|
|
continue;
|
|
}
|
|
|
|
var_17 = min( ( var_16 - var_4 ) / ( var_2 - var_3 ), 1 );
|
|
var_18 = var_7 + var_9 * var_0 * var_17;
|
|
|
|
if ( var_17 != var_12 )
|
|
var_6 moveto( var_18, 0.1 );
|
|
|
|
wait 0.1;
|
|
|
|
if ( !self.player_in && var_6.origin != var_7 )
|
|
{
|
|
var_6 moveto( var_7, 0.1 );
|
|
wait 0.1;
|
|
}
|
|
|
|
var_12 = var_17;
|
|
}
|
|
}
|
|
|
|
round_num( var_0, var_1 )
|
|
{
|
|
var_2 = 10 * var_1;
|
|
|
|
if ( var_1 == 0 )
|
|
var_2 = 1;
|
|
|
|
var_3 = int( var_0 * var_2 );
|
|
var_4 = var_3 / var_2;
|
|
return var_4;
|
|
}
|
|
|
|
edge_lean_shield()
|
|
{
|
|
self endon( "death" );
|
|
var_0 = 60;
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = level.player getplayerangles();
|
|
var_2 = angleclamp180( var_1[0] );
|
|
|
|
if ( self.in_lean_vol && var_2 >= var_0 )
|
|
level.player enabledeathshield( 1 );
|
|
else
|
|
level.player enabledeathshield( 0 );
|
|
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
player_rain_drops()
|
|
{
|
|
level.rain_overlay = [];
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large_02";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small_02";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large_02";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small_02";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_large_02";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small";
|
|
level.rain_overlay[level.rain_overlay.size] = "overlay_rain_small_02";
|
|
}
|
|
|
|
rain_overlay_alpha( var_0, var_1 )
|
|
{
|
|
var_2 = self;
|
|
|
|
if ( !isplayer( var_2 ) )
|
|
var_2 = level.player;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 1;
|
|
|
|
var_3 = get_rain_overlay( var_2 );
|
|
var_3[0].x = 0;
|
|
var_3[0].y = 0;
|
|
var_3[0] setshader( "overlay_rain", 640, 480 );
|
|
var_3[0].sort = 50;
|
|
var_3[0].lowresbackground = 0;
|
|
var_3[0].alignx = "left";
|
|
var_3[0].aligny = "top";
|
|
var_3[0].alpha = 0.85;
|
|
var_3[0].horzalign = "fullscreen";
|
|
var_3[0].vertalign = "fullscreen";
|
|
var_3[0] fadeovertime( var_0 );
|
|
var_3[0].alpha = var_1;
|
|
|
|
for ( var_4 = 1; var_4 < var_3.size; var_4++ )
|
|
{
|
|
var_5 = common_scripts\utility::random( level.rain_overlay );
|
|
var_3[var_4].x = 0 + randomint( 360 );
|
|
var_3[var_4].y = 0 + randomint( 360 );
|
|
var_3[var_4] setshader( var_5, 256, 256 );
|
|
var_3[var_4].sort = 50;
|
|
var_3[var_4].lowresbackground = 0;
|
|
var_3[var_4].alignx = "left";
|
|
var_3[var_4].aligny = "top";
|
|
var_3[var_4].horzalign = "fullscreen";
|
|
var_3[var_4].vertalign = "fullscreen";
|
|
var_3[var_4].alpha = randomfloatrange( 0.15, 0.3 );
|
|
var_3[var_4] fadeovertime( var_0 );
|
|
var_3[var_4].alpha = var_1;
|
|
wait 0.8;
|
|
}
|
|
}
|
|
|
|
get_rain_overlay( var_0 )
|
|
{
|
|
if ( !isdefined( var_0.overlay_frozen ) )
|
|
{
|
|
var_0.overlay_frozen = [];
|
|
var_0.overlay_frozen[0] = newclienthudelem( var_0 );
|
|
var_0.overlay_frozen[1] = newclienthudelem( var_0 );
|
|
var_0.overlay_frozen[2] = newclienthudelem( var_0 );
|
|
var_0.overlay_frozen[3] = newclienthudelem( var_0 );
|
|
var_0.overlay_frozen[4] = newclienthudelem( var_0 );
|
|
}
|
|
|
|
return var_0.overlay_frozen;
|
|
}
|
|
|
|
phalanx_gun_fire( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return;
|
|
|
|
var_1 endon( "stop_firing" );
|
|
|
|
if ( !isdefined( var_1.turret ) )
|
|
{
|
|
var_1.turret = spawnturret( "misc_turret", var_1.origin, "phalanx_turret" );
|
|
var_1.turret.angles = var_1.angles;
|
|
var_1.turret maketurretinoperable();
|
|
var_1.turret setcandamage( 0 );
|
|
var_1.turret setmodel( "crr_weapon_phalanx_01" );
|
|
var_1.turret setturretteam( "allies" );
|
|
var_1.turret setdefaultdroppitch( -20 );
|
|
var_1.turret setmode( "manual" );
|
|
var_1.turret.weaponinfo = "phalanx_turret";
|
|
var_1.turret.weaponname = "phalanx_turret";
|
|
var_1.turret_target = common_scripts\utility::spawn_tag_origin();
|
|
var_1.turret settargetentity( var_1.turret_target );
|
|
var_1 hide();
|
|
var_1.turret_target.on_target = 0;
|
|
var_1 thread phalanx_gun_fire_at_missiles();
|
|
}
|
|
|
|
var_2 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_3 = randomfloatrange( 15, 45 );
|
|
var_4 = randomfloatrange( -60, 60 );
|
|
var_5 = randomfloatrange( 2.0, 3.0 );
|
|
var_6 = var_5 * randomfloatrange( 0.333, 0.666 );
|
|
var_1.turret_target moveto( var_1.origin + anglestoforward( ( var_1.angles[0] - var_3, var_1.angles[1] + var_4, 0 ) ) * 2000, var_6 );
|
|
|
|
while ( var_5 > 0 && !var_1.turret_target.on_target && ( !isdefined( level.player.using_depth_charge ) || !level.player.using_depth_charge ) )
|
|
{
|
|
if ( !var_2 && var_6 < randomfloat( 0.5 ) )
|
|
var_1 phalanx_shoot();
|
|
else
|
|
var_1 phalanx_stop_shoot();
|
|
|
|
wait 0.05;
|
|
var_5 = var_5 - 0.05;
|
|
var_6 = var_6 - 0.05;
|
|
}
|
|
|
|
var_2 = 0;
|
|
var_1 phalanx_stop_shoot();
|
|
wait( randomfloat( 1.0 ) );
|
|
|
|
if ( isdefined( level.player.using_depth_charge ) && level.player.using_depth_charge )
|
|
level.player waittill( "depth_charge_exit" );
|
|
|
|
if ( var_1.turret_target.on_target )
|
|
{
|
|
var_1 waittill( "off_target" );
|
|
var_2 = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
phalanx_gun_fire_target( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = getent( var_0, "targetname" );
|
|
var_6 endon( "stop_firing" );
|
|
|
|
if ( !isdefined( var_6 ) || !isdefined( var_6.turret_target ) || var_6.turret_target.on_target )
|
|
return;
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = ( 0, 0, 0 );
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = "tag_origin";
|
|
|
|
if ( !isdefined( var_1.ent_flag ) || !isdefined( var_1.ent_flag[var_2] ) )
|
|
{
|
|
var_1 maps\_utility::ent_flag_init( var_2 );
|
|
var_1 maps\_utility::ent_flag_init( var_3 );
|
|
}
|
|
|
|
var_1 maps\_utility::ent_flag_wait( var_2 );
|
|
var_6.turret_target.on_target = 1;
|
|
|
|
for ( var_7 = vectornormalize( var_1 gettagorigin( var_5 ) + var_1 vehicle_getvelocity() * 0.25 - var_6.turret_target.origin ); vectordot( var_7, anglestoforward( var_1.angles ) ) < 0 && ( !isdefined( level.player.using_depth_charge ) || !level.player.using_depth_charge ); var_7 = vectornormalize( var_1 gettagorigin( var_5 ) + var_1 vehicle_getvelocity() * 0.25 - var_6.turret_target.origin ) )
|
|
{
|
|
var_6.turret_target moveto( var_6.turret_target.origin + var_7 * 8000, 1 );
|
|
|
|
if ( vectordot( anglestoforward( var_6.turret gettagangles( "tag_flash" ) ), vectornormalize( var_1.origin - var_6.origin ) ) > 0.9 )
|
|
var_6 phalanx_shoot();
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
var_8 = randomfloat( 0.25 );
|
|
var_9 = -0.05;
|
|
|
|
while ( isdefined( var_1 ) && !var_1 maps\_utility::ent_flag( var_3 ) && abs( angleclamp180( var_6.turret gettagangles( "tag_flash" )[1] - var_6.angles[1] ) ) < 70 && ( !isdefined( level.player.using_depth_charge ) || !level.player.using_depth_charge ) )
|
|
{
|
|
var_6.turret_target moveto( var_1 gettagorigin( var_5 ) + ( randomfloatrange( -800, 800 ), randomfloatrange( -800, 800 ), randomfloatrange( -800, 800 ) ) + var_1 vehicle_getvelocity() * ( var_8 + 0.5 ), 0.5 );
|
|
var_6 phalanx_shoot();
|
|
var_8 = var_8 + var_9;
|
|
|
|
if ( randomfloat( 1 ) > 0.9 || var_8 <= 0.25 && var_9 < 0 || var_8 >= 0.25 && var_9 > 0 )
|
|
var_9 = var_9 * -1;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
var_6 phalanx_stop_shoot();
|
|
var_6.turret_target.on_target = 0;
|
|
var_6 notify( "off_target" );
|
|
}
|
|
|
|
phalanx_gun_fire_at_missiles()
|
|
{
|
|
self endon( "stop_firing" );
|
|
|
|
for (;;)
|
|
{
|
|
while ( self.turret_target.on_target || !isdefined( level.land_missiles ) )
|
|
wait 0.05;
|
|
|
|
var_0 = undefined;
|
|
var_1 = -1;
|
|
|
|
foreach ( var_3 in level.land_missiles )
|
|
{
|
|
if ( angleclamp180( var_3.angles[0] ) < randomfloatrange( 45, 60 ) && abs( angleclamp180( vectortoangles( var_3.origin - self.origin )[1] - self.angles[1] ) ) < 45 )
|
|
{
|
|
var_4 = vectordot( anglestoforward( self.turret gettagangles( "tag_flash" ) ), vectornormalize( var_3.origin - self.origin ) );
|
|
|
|
if ( var_4 > var_1 )
|
|
{
|
|
var_1 = var_4;
|
|
var_0 = var_3;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
level.land_missiles = common_scripts\utility::array_remove( level.land_missiles, var_0 );
|
|
var_6 = var_0.origin;
|
|
wait 0.05;
|
|
var_7 = distance( var_6, var_0.origin ) / 0.05;
|
|
self.turret_target.on_target = 1;
|
|
var_8 = var_0.origin - anglestoforward( var_0.angles ) * var_7 * 0.5;
|
|
var_9 = vectornormalize( var_8 - self.turret_target.origin );
|
|
|
|
for ( var_10 = var_9; isdefined( var_0 ) && distancesquared( var_8, self.turret_target.origin ) > 160000 && vectordot( var_9, var_10 ) >= 0.0; var_9 = vectornormalize( var_8 - self.turret_target.origin ) )
|
|
{
|
|
self.turret_target moveto( self.turret_target.origin + var_9 * 10000, 0.5 );
|
|
|
|
if ( vectordot( anglestoforward( self.turret gettagangles( "tag_flash" ) ), vectornormalize( var_0.origin - self.origin ) ) > 0.996 )
|
|
phalanx_shoot();
|
|
|
|
wait 0.05;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_8 = var_0.origin - anglestoforward( var_0.angles ) * var_7 * 0.5;
|
|
|
|
var_10 = var_9;
|
|
}
|
|
|
|
var_11 = 0;
|
|
var_12 = 0;
|
|
|
|
while ( isdefined( var_0 ) && var_11 < 2 && abs( angleclamp180( self.turret gettagangles( "tag_flash" )[1] - self.angles[1] ) ) < 70 )
|
|
{
|
|
self.turret_target moveto( var_0.origin - anglestoforward( var_0.angles ) * var_7 * 0.5 - ( 0, 0, randomfloatrange( -50, 100 ) ), 0.25 );
|
|
phalanx_shoot();
|
|
var_11 = var_11 + 0.05;
|
|
var_12 = var_12 + 0.05;
|
|
|
|
if ( var_11 > 1 && var_12 >= 0.2 )
|
|
{
|
|
playfx( common_scripts\utility::getfx( "vfx_phalanx_missile_impact" ), var_0.origin );
|
|
var_12 = 0;
|
|
}
|
|
|
|
if ( var_11 >= 2 )
|
|
var_0 notify( "destroyed" );
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( var_11 >= 2 )
|
|
{
|
|
for ( var_13 = 0; var_13 < randomintrange( 5, 10 ); var_13++ )
|
|
{
|
|
phalanx_shoot();
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
phalanx_stop_shoot();
|
|
self.turret_target.on_target = 0;
|
|
self notify( "off_target" );
|
|
}
|
|
}
|
|
|
|
phalanx_gun_fire_stop( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return;
|
|
|
|
var_1 notify( "stop_firing" );
|
|
var_1 phalanx_stop_shoot();
|
|
|
|
if ( isdefined( var_1.turret_target ) )
|
|
var_1.turret_target.origin = var_1.origin + anglestoforward( var_1.angles ) * 2000;
|
|
}
|
|
|
|
phalanx_gun_offline( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return;
|
|
|
|
var_1 notify( "stop_firing" );
|
|
|
|
if ( isdefined( var_1.turret ) )
|
|
{
|
|
var_1.turret stopfiring();
|
|
var_1.turret turretsetbarrelspinenabled( 0 );
|
|
var_1.turret_target.origin = var_1.origin + anglestoforward( var_1.angles + ( 20, 0, 0 ) ) * 2000;
|
|
var_1 stoploopsound( "amb_carr_phalanx_loop" );
|
|
}
|
|
}
|
|
|
|
phalanx_shoot()
|
|
{
|
|
self.turret shootturret();
|
|
|
|
if ( isdefined( self.turret ) && !self.turret isfiringturret() )
|
|
{
|
|
self.turret startfiring();
|
|
self playloopsound( "amb_carr_phalanx_loop" );
|
|
}
|
|
}
|
|
|
|
phalanx_stop_shoot()
|
|
{
|
|
if ( isdefined( self.turret ) && self.turret isfiringturret() )
|
|
{
|
|
self.turret stopfiring();
|
|
self playsound( "amb_carr_phalanx_stop" );
|
|
self stoploopsound( "amb_carr_phalanx_loop" );
|
|
}
|
|
}
|
|
|
|
modulus( var_0, var_1 )
|
|
{
|
|
var_2 = int( var_0 / var_1 );
|
|
return var_0 - var_2 * var_1;
|
|
}
|
|
|
|
ac130_magic_bullet( var_0, var_1 )
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
var_2 = get_gun_tag();
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
{
|
|
var_3 = self gettagangles( "tag_flash_" + var_0 + "_" + var_2 );
|
|
var_3 = var_3 + ( 32, 0, 0 );
|
|
var_1 = self gettagorigin( "tag_flash_" + var_0 + "_" + var_2 ) + anglestoforward( var_3 ) * 10000;
|
|
}
|
|
|
|
var_4 = self gettagorigin( "tag_flash_" + var_0 + "_" + var_2 );
|
|
var_5 = magicbullet( "ac130_" + var_0 + "_carrier", var_4, var_1 );
|
|
var_6 = "tag_flash_" + var_0 + "_" + var_2;
|
|
playfxontag( common_scripts\utility::getfx( "ac130_40mm_muzzle" ), self, var_6 );
|
|
var_5 thread ac130_magic_bullet_splash( var_0 );
|
|
}
|
|
|
|
ac130_magic_bullet_fake( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = magicbullet( "ac130_" + var_0 + "_carrier", var_1, var_2 );
|
|
var_3 thread ac130_magic_bullet_splash( var_0 );
|
|
}
|
|
|
|
ac130_magic_bullet_splash( var_0 )
|
|
{
|
|
while ( isdefined( self ) )
|
|
{
|
|
if ( self.origin[2] < level.water_level + 100 )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( isdefined( self ) )
|
|
playfx( common_scripts\utility::getfx( "ac130_" + var_0 + "_impact_water" ), ( self.origin[0], self.origin[1], level.water_level ) );
|
|
}
|
|
|
|
ac130_magic_105( var_0 )
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
var_1 = get_gun_tag();
|
|
var_2 = magicbullet( "ac130_105mm_carrier", self gettagorigin( "tag_flash_105mm_" + var_1 ), var_0 );
|
|
playfxontag( common_scripts\utility::getfx( "ac130_105mm_muzzle" ), self, "tag_flash_105mm_" + var_1 );
|
|
var_2 ac130_magic_105_impact( var_0 );
|
|
}
|
|
|
|
ac130_magic_105_fake( var_0, var_1 )
|
|
{
|
|
var_2 = magicbullet( "ac130_105mm_carrier", var_0, var_1 );
|
|
var_2 ac130_magic_105_impact( var_1 );
|
|
}
|
|
|
|
ac130_magic_105_impact( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
if ( distancesquared( self.origin, var_0 ) < squared( 50 ) )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
playfx( common_scripts\utility::getfx( "ac130_105mm_impact" ), var_0 );
|
|
thread maps\carrier_audio::aud_carr_sparrow_105_hit( var_0 );
|
|
}
|
|
}
|
|
|
|
get_gun_tag()
|
|
{
|
|
if ( is_player_right() )
|
|
return "ri";
|
|
|
|
return "le";
|
|
}
|
|
|
|
is_player_right()
|
|
{
|
|
var_0 = 0.707;
|
|
var_1 = vectornormalize( level.player.origin - self.origin );
|
|
var_2 = anglestoright( self.angles );
|
|
var_3 = vectordot( var_1, var_2 );
|
|
|
|
if ( var_3 > var_0 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
gunship_line_attack( var_0, var_1 )
|
|
{
|
|
var_2 = common_scripts\utility::getstruct( var_0, "targetname" );
|
|
var_3 = common_scripts\utility::getstruct( var_2.target, "targetname" );
|
|
var_4 = 3;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_4 = var_1;
|
|
|
|
var_5 = common_scripts\utility::spawn_tag_origin();
|
|
var_5.origin = var_2.origin;
|
|
var_5 moveto( var_3.origin, var_4 );
|
|
var_6 = gettime() + var_4 * 1000;
|
|
var_7 = level.ac_130 common_scripts\utility::spawn_tag_origin();
|
|
var_8 = level.ac_130 get_gun_tag();
|
|
var_9 = level.ac_130 gettagorigin( "tag_flash_25mm_" + var_8 );
|
|
var_7.origin = var_9;
|
|
var_7 linkto( level.ac_130, "tag_flash_25mm_" + var_8 );
|
|
|
|
while ( gettime() < var_6 )
|
|
{
|
|
level.ac_130 thread ac130_magic_bullet( "25mm", var_5.origin );
|
|
var_7 maps\_utility::play_sound_on_entity( "ac130_25mm_fire_npc" );
|
|
wait 0.05;
|
|
}
|
|
|
|
var_5 delete();
|
|
var_7 delete();
|
|
}
|
|
|
|
gunship_line_attack_death()
|
|
{
|
|
var_0 = level.player.origin + anglestoforward( level.player getplayerangles() ) * 1000;
|
|
var_1 = level.player.origin + anglestoforward( level.player getplayerangles() ) * -100;
|
|
var_2 = 3;
|
|
var_3 = common_scripts\utility::spawn_tag_origin();
|
|
var_3.origin = var_0;
|
|
var_3 moveto( var_1, var_2 );
|
|
var_4 = gettime() + var_2 * 1000;
|
|
var_5 = level.ac_130 common_scripts\utility::spawn_tag_origin();
|
|
var_6 = level.ac_130 get_gun_tag();
|
|
var_7 = level.ac_130 gettagorigin( "tag_flash_25mm_" + var_6 );
|
|
var_5.origin = var_7;
|
|
var_5 linkto( level.ac_130, "tag_flash_25mm_" + var_6 );
|
|
|
|
while ( gettime() < var_4 )
|
|
{
|
|
level.ac_130 thread ac130_magic_bullet( "25mm", var_3.origin );
|
|
var_5 maps\_utility::play_sound_on_entity( "ac130_25mm_fire_npc" );
|
|
wait 0.05;
|
|
}
|
|
|
|
var_3 delete();
|
|
var_5 delete();
|
|
}
|
|
|
|
gunship_line_attack_fake( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = common_scripts\utility::getstruct( var_0, "targetname" );
|
|
var_4 = common_scripts\utility::getstruct( var_3.target, "targetname" );
|
|
var_5 = 3;
|
|
var_6 = common_scripts\utility::spawn_tag_origin();
|
|
var_6.origin = var_1;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_5 = var_2;
|
|
|
|
var_7 = common_scripts\utility::spawn_tag_origin();
|
|
var_7.origin = var_3.origin;
|
|
var_7 moveto( var_4.origin, var_5 );
|
|
var_8 = gettime() + var_5 * 1000;
|
|
|
|
while ( gettime() < var_8 )
|
|
{
|
|
thread ac130_magic_bullet_fake( "25mm", var_1, var_7.origin );
|
|
var_6 maps\_utility::play_sound_on_entity( "ac130_25mm_fire_npc" );
|
|
wait 0.05;
|
|
}
|
|
|
|
var_7 delete();
|
|
var_6 delete();
|
|
}
|