1215 lines
41 KiB
Plaintext
1215 lines
41 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
section_flag_inits()
|
|
{
|
|
common_scripts\utility::flag_init( "flag_rooftops_jump" );
|
|
common_scripts\utility::flag_init( "flag_rooftops_start" );
|
|
common_scripts\utility::flag_init( "flag_rooftops_rt0_hit" );
|
|
common_scripts\utility::flag_init( "flag_rt0_move_up" );
|
|
common_scripts\utility::flag_init( "flag_rt1_move_up" );
|
|
common_scripts\utility::flag_init( "flag_helo_ready" );
|
|
common_scripts\utility::flag_init( "flag_helo_start" );
|
|
common_scripts\utility::flag_init( "flag_helo_reinforce" );
|
|
common_scripts\utility::flag_init( "flag_helo_tunnel" );
|
|
common_scripts\utility::flag_init( "flag_helo_fail" );
|
|
common_scripts\utility::flag_init( "flag_helos_dead" );
|
|
common_scripts\utility::flag_init( "flag_helo_end" );
|
|
common_scripts\utility::flag_init( "flag_tunnel_ready" );
|
|
}
|
|
|
|
section_precache()
|
|
{
|
|
vehicle_scripts\aas_72x::main( "vehicle_aas_72x", undefined, "script_model" );
|
|
}
|
|
|
|
section_post_inits()
|
|
{
|
|
thread setup_spawners();
|
|
var_0 = getentarray( "rt_helos", "script_noteworthy" );
|
|
common_scripts\utility::array_call( var_0, ::hide );
|
|
var_1 = getent( "rt0_trig_jump", "targetname" );
|
|
var_1 setmovingplatformtrigger();
|
|
}
|
|
|
|
start()
|
|
{
|
|
iprintln( "rooftops" );
|
|
var_0 = getent( "rt1_start_player", "targetname" );
|
|
level.player setorigin( var_0.origin );
|
|
level.player setplayerangles( var_0.angles );
|
|
var_1 = getent( "rt1_start_ally", "targetname" );
|
|
level._ally forceteleport( var_1.origin, var_1.angles );
|
|
common_scripts\utility::flag_set( "flag_helo_ready" );
|
|
thread maps\skyway_util::ambient_airbursts_startpoint();
|
|
}
|
|
|
|
main()
|
|
{
|
|
var_0 = [ "train_rt0", "train_rt1", "train_rt2" ];
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
level._train.cars[var_2].trigs = common_scripts\utility::array_removeundefined( level._train.cars[var_2].trigs );
|
|
common_scripts\utility::array_call( level._train.cars[var_2].trigs, ::setmovingplatformtrigger );
|
|
}
|
|
|
|
level.ally_impact_org = getent( "rt_helo_crash_ally", "targetname" );
|
|
level.old_goalradius = level.default_goalradius;
|
|
level.default_goalradius = 768;
|
|
level._ally.a.bdisablemovetwitch = undefined;
|
|
level._ally thread maps\_utility::enable_careful();
|
|
level._ally thread maps\_utility::set_grenadeammo( 0 );
|
|
level._ally thread maps\_utility::follow_path( getnode( "rt0_node_start_ally", "targetname" ) );
|
|
thread maps\skyway_fx::fx_turnon_loco_exterior_lights();
|
|
common_scripts\utility::flag_set( "flag_pause_ambient_train_shakes" );
|
|
level.player setclienttriggeraudiozone( "skyway_train_ext_rooftop", 0.5 );
|
|
level.player setmantlesoundflavor( "scn_skyway_train_mantle", "scn_skyway_train_mantle" );
|
|
rt_start();
|
|
level.player setmantlesoundflavor( undefined, undefined );
|
|
rt_helos( level._train );
|
|
thread rt_helos_dead();
|
|
}
|
|
|
|
rt_start()
|
|
{
|
|
common_scripts\utility::flag_wait( "flag_rooftops_jump" );
|
|
wait 0.05;
|
|
level._ally thread maps\_utility::follow_path( getnode( "rt0_node_wait_ally", "targetname" ) );
|
|
level.player maps\_utility::blend_movespeedscale( 0.8 );
|
|
common_scripts\utility::flag_wait( "flag_rooftops_start" );
|
|
common_scripts\utility::flag_clear( "can_save" );
|
|
level._ally thread maps\_utility::set_force_color( "r" );
|
|
thread rt_hero_train_impact( level._train.cars["train_rt0"], level._ally );
|
|
common_scripts\utility::flag_wait( "flag_rt0_move_up" );
|
|
getent( "rt1_color_reach", "targetname" ) notify( "trigger" );
|
|
}
|
|
|
|
rt_hero_train_impact( var_0, var_1 )
|
|
{
|
|
thread maps\skyway_util::jet_flyover( level._train.cars["train_loco"].body, "rt_bomb" );
|
|
|
|
while ( !common_scripts\utility::flag( "flag_rooftops_rt0_hit" ) && distancesquared( var_0.body gettagorigin( "j_spineupper" ), var_1.origin ) > 302500 )
|
|
wait 0.1;
|
|
|
|
thread rt_hero_train_impact_sequence();
|
|
thread rt_train_impact_fic();
|
|
level waittill( "hero_train_impact_ready" );
|
|
maps\_utility::delaythread( 0.2, ::player_push_train, level._train.cars["train_rt0"], ( 0, 285, 0 ), 40, 0.7, undefined, 1 );
|
|
maps\_utility::delaythread( 0.9, ::player_push_train, level._train.cars["train_rt0"], ( 0, 75, 0 ), 60, 0.5, undefined, 1 );
|
|
maps\_utility::delaythread( 1.4, ::player_push_train, level._train.cars["train_rt0"], ( 0, 300, 0 ), 20, 0.4, undefined, 1 );
|
|
maps\_utility::delaythread( 1.8, common_scripts\utility::flag_set, "can_save" );
|
|
maps\_utility::delaythread( 1.9, maps\_utility::autosave_by_name, "rooftops_start" );
|
|
maps\_utility::delaythread( 1.95, ::rt_respawn_ammo );
|
|
var_2 = level._ally animscripts\utility::getanimendpos( level.scr_anim["ally1"]["rt_train_impact"] );
|
|
var_3 = distancesquared( var_0.body gettagorigin( "j_spineupper" ), level._ally.origin );
|
|
var_4 = distancesquared( var_0.body gettagorigin( "j_spineupper" ), var_2 );
|
|
|
|
if ( var_3 < 160000 && var_4 < 144400 )
|
|
{
|
|
var_5 = level._ally common_scripts\utility::spawn_tag_origin();
|
|
var_6 = maps\skyway_util::get_local_coords( level._ally.origin, var_0.body gettagorigin( "j_spineupper" ), var_0.body gettagangles( "j_spineupper" ), 1 );
|
|
var_5 linkto( var_0.body, "j_spineupper", var_6, ( 0, 0, 0 ) );
|
|
level._ally linkto( var_5, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_5 maps\_anim::anim_single_solo( level._ally, "rt_train_impact", undefined, 0.1 );
|
|
level._ally unlink();
|
|
wait 0.1;
|
|
var_5 unlink();
|
|
var_5 delete();
|
|
}
|
|
}
|
|
|
|
rt_hero_train_impact_sequence( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 0.65;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 1;
|
|
|
|
var_2 = "tag_explode_close_r";
|
|
var_3 = "tag_explode_close_r2";
|
|
var_4 = "tag_explode_close_r3";
|
|
var_5 = "sathit_sat_explode_R";
|
|
var_6 = [ "scn_skyway_missile_explode", "scn_skyway_missile_impact", "skyway_missile_hit_01" ];
|
|
var_7 = 0.7;
|
|
thread maps\skyway_util::hero_train_impact( level._train.cars["train_rt1"].body, var_2, var_5, var_6, var_0, var_1 );
|
|
wait( var_7 );
|
|
thread maps\skyway_util::hero_train_impact( level._train.cars["train_rt1"].body, var_3, var_5, var_6, 0, 0, 0 );
|
|
wait( var_7 );
|
|
thread maps\skyway_util::hero_train_impact( level._train.cars["train_rt1"].body, var_4, var_5, var_6, 0, 0, 0 );
|
|
}
|
|
|
|
rt_train_impact_fic()
|
|
{
|
|
level waittill( "hero_train_impact_near" );
|
|
level._ally maps\_utility::smart_dialogue( "skyway_hsh_incoming" );
|
|
level waittill( "hero_train_impact_ready" );
|
|
wait 2.1;
|
|
level._ally maps\_utility::smart_dialogue( "skyway_hsh_youokloganlets" );
|
|
}
|
|
|
|
rt_helos( var_0 )
|
|
{
|
|
common_scripts\utility::flag_wait_all( "flag_helo_start", "flag_helo_ready" );
|
|
setthreatbias( "axis", "player", 500 );
|
|
thread rt_helos_fic();
|
|
level._ally thread maps\_utility::set_force_color( "b" );
|
|
getent( "rt1_color_mid", "targetname" ) notify( "trigger" );
|
|
level.helos = [ getent( "rt_helo0", "targetname" ), getent( "rt_helo1", "targetname" ) ];
|
|
var_1 = level.helos.size;
|
|
|
|
foreach ( var_4, var_3 in level.helos )
|
|
{
|
|
var_3.org = maps\_utility::spawn_anim_model( "rt_helo" + maps\_utility::string( var_4 ) + "_mover" );
|
|
var_3.org.link1 = common_scripts\utility::spawn_tag_origin();
|
|
var_3.org.link2 = common_scripts\utility::spawn_tag_origin();
|
|
var_3 vehicle_scripts\aas_72x::init_local();
|
|
init_helo( var_3 );
|
|
var_3 thread maps\skyway_util::rt_helo_bullethits();
|
|
var_3 thread maps\skyway_audio::sfx_skyway_helo( var_4 );
|
|
|
|
if ( var_4 > 0 )
|
|
var_3 thread rt_helo_lane_switch( level.helos[0] );
|
|
}
|
|
|
|
wait 0.05;
|
|
common_scripts\utility::flag_set( "sfx_helo_flyin" );
|
|
common_scripts\utility::flag_clear( "flag_helo_tunnel" );
|
|
common_scripts\utility::array_thread( level.helos, ::rt_helo_proc, var_0, var_0.cars["train_rt1"] );
|
|
thread rt_tunnel_queue( var_0.cars["train_rt1"] );
|
|
thread rt_traincar_tracker( level._train, [ "train_rt1", "train_rt2", "train_rt3" ] );
|
|
maps\_utility::delaythread( 10, ::rt_traincar_tracker, level._train, [ "train_rt0", "train_rt1", "train_rt2", "train_rt3" ] );
|
|
wait 15;
|
|
common_scripts\utility::flag_set( "flag_helo_reinforce" );
|
|
|
|
if ( level.helos.size >= var_1 || level.helos.size <= 0 )
|
|
return;
|
|
|
|
var_5 = level.helos[0].linked_car;
|
|
var_3 = getent( "rt_helo2", "targetname" );
|
|
level.helos[level.helos.size] = var_3;
|
|
var_3.org = maps\_utility::spawn_anim_model( "rt_helo1_mover" );
|
|
var_3.org.link1 = common_scripts\utility::spawn_tag_origin();
|
|
var_3.org.link2 = common_scripts\utility::spawn_tag_origin();
|
|
var_3 vehicle_scripts\aas_72x::init_local();
|
|
init_helo( var_3 );
|
|
var_3 thread maps\skyway_util::rt_helo_bullethits();
|
|
var_3 thread rt_helo_lane_switch( level.helos[0] );
|
|
wait 0.05;
|
|
var_3 thread rt_helo_proc( var_0, var_0.cars[var_5], level.helos[0] );
|
|
}
|
|
|
|
rt_helos_dead()
|
|
{
|
|
common_scripts\utility::flag_wait_any( "flag_helo_end", "flag_helo_tunnel", "flag_rooftops_combat_done" );
|
|
|
|
if ( common_scripts\utility::flag( "flag_helo_tunnel" ) || common_scripts\utility::flag( "flag_rooftops_combat_done" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "flag_helo_fail" );
|
|
|
|
foreach ( var_1 in level.helos )
|
|
{
|
|
if ( isdefined( var_1 ) && isalive( var_1 ) )
|
|
var_1 notify( "rt_helo_dead", "tunnel" );
|
|
}
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( "flag_helos_dead" ) )
|
|
common_scripts\utility::flag_set( "flag_helos_dead" );
|
|
|
|
if ( !common_scripts\utility::flag( "flag_helo_end" ) )
|
|
common_scripts\utility::flag_set( "flag_helo_end" );
|
|
|
|
if ( common_scripts\utility::flag( "flag_rooftops_combat_done" ) || common_scripts\utility::flag( "flag_loco_started" ) )
|
|
return;
|
|
|
|
if ( !common_scripts\utility::flag( "flag_rt2_combat_start" ) )
|
|
thread maps\_utility::autosave_by_name( "rooftops_helo_end" );
|
|
|
|
level._ally thread maps\_utility::set_force_color( "r" );
|
|
|
|
if ( !common_scripts\utility::flag( "flag_rt2_combat_start" ) )
|
|
getent( "rt2_color_start", "targetname" ) notify( "trigger" );
|
|
|
|
common_scripts\utility::flag_wait( "flag_rt2_combat_start" );
|
|
maps\_utility::autosave_by_name( "rooftops_combat" );
|
|
}
|
|
|
|
rt_helos_fic()
|
|
{
|
|
level endon( "flag_helo_tunnel" );
|
|
level endon( "flag_rooftops_end" );
|
|
wait 3;
|
|
level._ally maps\_utility::smart_dialogue( "skyway_hsh_helostakecoveradam" );
|
|
var_0 = level common_scripts\utility::waittill_notify_or_timeout_return( "rt_helo_dead", randomfloatrange( 3, 5 ) );
|
|
|
|
if ( isdefined( var_0 ) && var_0 == "timeout" )
|
|
level._ally maps\_utility::smart_dialogue( "skyway_hsh_takeoutthegunners" );
|
|
|
|
while ( level.helos.size > 1 )
|
|
wait 0.5;
|
|
|
|
if ( !common_scripts\utility::flag( "flag_helo_reinforce" ) )
|
|
{
|
|
level._ally maps\_utility::smart_dialogue( "skyway_hsh_niceshot" );
|
|
common_scripts\utility::flag_wait( "flag_helo_reinforce" );
|
|
wait 0.1;
|
|
|
|
while ( level.helos.size > 1 )
|
|
wait 0.05;
|
|
}
|
|
else
|
|
level._ally maps\_utility::smart_dialogue( "skyway_hsh_onedown" );
|
|
|
|
common_scripts\utility::flag_wait( "flag_helos_dead" );
|
|
wait 1.0;
|
|
|
|
if ( !common_scripts\utility::flag( "flag_rt2_combat_start" ) )
|
|
{
|
|
level._ally thread maps\_utility::smart_dialogue( "skyway_hsh_helosdownletsgo" );
|
|
level._ally maps\_utility::delaythread( 1.75, maps\_utility::smart_dialogue, "skyway_hsh_getdown" );
|
|
}
|
|
else
|
|
level._ally thread maps\_utility::smart_dialogue( "skyway_hsh_helosdown" );
|
|
|
|
level waittill( "rt1_compromised" );
|
|
wait 3;
|
|
|
|
if ( !common_scripts\utility::flag( "flag_rt2_combat_start" ) )
|
|
level._ally maps\_utility::smart_dialogue( "skyway_hsh_moveitthecars" );
|
|
|
|
wait 2;
|
|
|
|
if ( !common_scripts\utility::flag( "flag_rt1_move_up" ) )
|
|
level._ally maps\_utility::smart_dialogue( "skyway_hsh_cmonlogankeepmoving" );
|
|
|
|
wait 10;
|
|
var_1 = [ "skyway_hsh_comeonadamget", "skyway_hsh_moveitweneed", "skyway_hsh_whereareyouwe", "skyway_hsh_moveitthecars" ];
|
|
|
|
for ( var_2 = 0; !common_scripts\utility::flag( "flag_rt2_combat_start" ); var_2++ )
|
|
{
|
|
level._ally maps\_utility::smart_dialogue( var_1[common_scripts\utility::mod( var_2, var_1.size )] );
|
|
wait( 5 + var_2 + randomfloat( 1 ) );
|
|
}
|
|
}
|
|
|
|
rt_helo_proc( var_0, var_1, var_2 )
|
|
{
|
|
self.train = var_0;
|
|
self.car = var_1;
|
|
self.linked_car = var_1.body.script_noteworthy;
|
|
self.healthbuffer = 20000;
|
|
self.health = self.healthbuffer + 3000;
|
|
self.critical = self.healthbuffer + 2500;
|
|
self.damaged = self.healthbuffer + 1000;
|
|
self.is_idling = 0;
|
|
self show();
|
|
maps\skyway_util::rt_helo_fx_setup( self.car );
|
|
var_3 = getentarray( self.targetname + "_clip", "targetname" );
|
|
|
|
if ( isdefined( var_3 ) && var_3.size > 0 )
|
|
{
|
|
foreach ( var_5 in var_3 )
|
|
var_5 linkto( self );
|
|
}
|
|
|
|
self.dam = [];
|
|
thread rt_helo_loc_dam( "tail", 600, 500, 200 );
|
|
thread rt_helo_loc_dam( "engine", 600, 500, 200 );
|
|
thread rt_helo_loc_dam( "belly", 1200, 1000, 300 );
|
|
thread rt_helo_loc_dam_watcher();
|
|
thread rt_helo_dam();
|
|
thread rt_helo_shooter_check();
|
|
thread rt_helo_driver_check();
|
|
self.riders[0].allowdeath = 1;
|
|
self.riders[0].deathanim = level.scr_anim["generic"]["helo_pilot_death"][randomint( 1 )];
|
|
common_scripts\utility::array_thread( self.riders, maps\_utility::set_ignoreall, 1 );
|
|
common_scripts\utility::array_thread( self.riders, maps\_utility::set_ignoreme, 1 );
|
|
wait 0.05;
|
|
var_7 = level.scr_anim["generic"]["helo_shooter_death"];
|
|
|
|
foreach ( var_10, var_9 in self.shooters )
|
|
var_9.deathanim = var_7[common_scripts\utility::mod( var_10, var_7.size )];
|
|
|
|
self.deathanims = var_7;
|
|
maps\_utility::assign_animtree( "rt_helo_small" );
|
|
self setanim( level.scr_anim["rt_helo_small"]["blades"] );
|
|
self.org.link1 linkto( var_1.body, "j_mainroot", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
self.org.link2 linkto( var_1.body, "j_spineupper", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
self.org thread maps\skyway_util::blended_link( self.org.link1, self.org.link2, 1 );
|
|
wait 0.05;
|
|
self teleportentityrelative( self, self.org );
|
|
self linkto( self.org, "tag_helo", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
self.org setanimknob( level.scr_anim[self.org.animname]["flyin"] );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
{
|
|
wait( getanimlength( level.scr_anim[self.org.animname]["flyin"] ) - 0.5 );
|
|
self.org setanimknob( level.scr_anim[self.org.animname]["idle"][0], 1, 0.5 );
|
|
}
|
|
else
|
|
{
|
|
wait( getanimlength( level.scr_anim[self.org.animname]["flyin"] ) - 2.5 );
|
|
var_11 = var_2 getanimtime( level.scr_anim[var_2.org.animname]["idle"][0] );
|
|
self.org setanimknob( level.scr_anim[self.org.animname]["idle"][0], 1, 2.5 );
|
|
self.org setanimtime( level.scr_anim[self.org.animname]["idle"][0], var_11 );
|
|
}
|
|
|
|
self.is_idling = 1;
|
|
self setcandamage( 1 );
|
|
thread rt_helo_target_anim();
|
|
thread rt_helo_set_ignore( 0 );
|
|
self waittill( "rt_helo_dead", var_12 );
|
|
level.helos = common_scripts\utility::array_remove( level.helos, self );
|
|
thread rt_helo_set_ignore( 1, 0 );
|
|
self setcandamage( 0 );
|
|
|
|
if ( !isdefined( var_12 ) )
|
|
var_12 = "generic";
|
|
|
|
self.org thread maps\skyway_util::blend_link_over_time( self.org.link1, self.org.link2, 1.8, 0.5 );
|
|
|
|
if ( level.helos.size > 0 || self.linked_car != "train_rt1" && self.linked_car != "train_rt0" )
|
|
{
|
|
var_13 = 0;
|
|
|
|
if ( level.helos.size <= 0 )
|
|
{
|
|
common_scripts\utility::flag_set( "flag_helos_dead" );
|
|
var_13 = 1;
|
|
}
|
|
|
|
switch ( var_12 )
|
|
{
|
|
case "shooters":
|
|
case "tunnel":
|
|
rt_helo_flyout( "flyout" );
|
|
break;
|
|
case "tail":
|
|
rt_helo_crash_ground( "death_spin" );
|
|
break;
|
|
case "driver":
|
|
case "generic":
|
|
case "belly":
|
|
case "engine":
|
|
rt_helo_crash_ground( "death_norm" );
|
|
}
|
|
|
|
if ( var_13 )
|
|
common_scripts\utility::flag_set( "flag_helo_end" );
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_set( "flag_helos_dead" );
|
|
|
|
if ( self.linked_car == "train_rt0" && var_12 != "tunnel" )
|
|
{
|
|
var_14 = var_0.cars[self.linked_car].body;
|
|
var_15 = var_0.cars["train_rt1"].body;
|
|
self.org.link1 thread maps\skyway_util::blend_link_over_time( var_14, var_15, 3.35, 0, "j_mainroot", "j_mainroot" );
|
|
self.org.link2 thread maps\skyway_util::blend_link_over_time( var_14, var_15, 3.35, 0, "j_spineupper", "j_spineupper" );
|
|
self.linked_car = "train_rt1";
|
|
self.car = var_0.cars[self.linked_car];
|
|
wait 1;
|
|
}
|
|
|
|
switch ( var_12 )
|
|
{
|
|
case "tunnel":
|
|
rt_helo_flyout( "flyout" );
|
|
break;
|
|
case "shooters":
|
|
case "engine":
|
|
case "tail":
|
|
rt_helo_crash_train( "crash_spin" );
|
|
break;
|
|
case "driver":
|
|
case "generic":
|
|
case "belly":
|
|
rt_helo_crash_train( "crash_norm" );
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "flag_helo_end" );
|
|
thread maps\skyway_util::rt_helo_cleanup();
|
|
return;
|
|
}
|
|
|
|
self notify( "rt_helo_delete" );
|
|
self notify( "stop_link_train_angles" );
|
|
maps\skyway_util::rt_helo_cleanup();
|
|
self delete();
|
|
}
|
|
|
|
rt_helo_flyout( var_0 )
|
|
{
|
|
wait( randomfloat( 1 ) );
|
|
self.org setanim( level.scr_anim[self.org.animname]["tilt_parent"], 0, 2.0 );
|
|
self.org setanimknob( level.scr_anim[self.org.animname][var_0], 1, 2.7 );
|
|
wait( getanimlength( level.scr_anim[self.org.animname][var_0] ) );
|
|
self stoploopsound( "scn_skyway_heli_loop" );
|
|
}
|
|
|
|
rt_helo_crash_train( var_0 )
|
|
{
|
|
var_0 = level.scr_anim[self.org.animname][var_0];
|
|
self.org setanim( level.scr_anim[self.org.animname]["tilt_parent"], 0, 2.0 );
|
|
self.org setanimknob( var_0, 1, 2.7 );
|
|
self setanim( level.scr_anim["rt_helo_small"]["blades_death"] );
|
|
var_1 = distancesquared( level._ally.origin, level.ally_impact_org.origin );
|
|
|
|
if ( var_1 < 16 )
|
|
level._ally thread rt_helo_crash_ally();
|
|
|
|
thread maps\skyway_audio::sfx_heli_crash( self );
|
|
self stoploopsound( "scn_skyway_heli_loop" );
|
|
thread maps\_utility::play_sound_on_entity( "aascout72x_helicopter_hit" );
|
|
thread common_scripts\utility::play_loop_sound_on_entity( "aascout72x_helicopter_dying_loop" );
|
|
self.crashed = maps\_utility::spawn_anim_model( "rt_helo_crashed" );
|
|
self.crashed hide();
|
|
self.crashed linkto( self.org, "tag_helo", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
self.crashed playloopsound( "emt_sw_fire_metal_large" );
|
|
self.crashed setanim( level.scr_anim["rt_helo_crashed"]["rt_helo_crash"] );
|
|
self.car thread maps\skyway_util::train_overlay_solo( "rt_helo_crash", undefined, undefined, undefined, 2, undefined, 1 );
|
|
self.car thread maps\skyway_util::train_overlay_solo( "rt_helo_damaged", "waitforpreviousanim", 1, undefined, undefined, undefined, 1 );
|
|
maps\skyway_util::rt_helo_crashed_fx_setup( self.car );
|
|
var_2 = common_scripts\utility::spawn_tag_origin();
|
|
var_2 thread maps\skyway_fx::fx_origin_link_with_train_angles( self.car.sus_f, self.car.body, "j_elbow_le" );
|
|
var_3 = getnotetracktimes( var_0, "helo_hit_train" )[0] * getanimlength( var_0 );
|
|
wait( var_3 );
|
|
level notify( "rt1_compromised" );
|
|
thread maps\skyway_audio::sfx_heli_crash_impact( self );
|
|
playfxontag( common_scripts\utility::getfx( "rt_helo_blades_shred" ), self, "TAG_blades_damage_fx" );
|
|
wait( getnotetracktimes( var_0, "helo_explode" )[0] * getanimlength( var_0 ) - var_3 );
|
|
thread maps\skyway_audio::sfx_heli_crash_explo( self );
|
|
thread rt_player_helocrash_effect( self.crashed.origin );
|
|
stopfxontag( common_scripts\utility::getfx( "rt_helo_blades_shred" ), self, "TAG_blades_damage_fx" );
|
|
self stoploopsound( "scn_skyway_heli_loop" );
|
|
thread common_scripts\utility::stop_loop_sound_on_entity( "aascout72x_helicopter_dying_loop" );
|
|
thread maps\skyway_audio::sfx_train_derail();
|
|
radiusdamage( self.crashed.fx_org_body.origin, 320, 999, 50 );
|
|
maps\skyway_util::delay_multi_fx( 0, self.crashed.fx_org_body, [ "roofhit_helo_explode", "roofhit_helo_smoke" ] );
|
|
maps\skyway_util::delay_multi_fx( 0, self.crashed.fx_org_tail_rotor, [ "rt_helo_tail_fire_rotor" ] );
|
|
maps\skyway_util::delay_multi_fx( 0, self.crashed.fx_org_tail_break, [ "rt_helo_tail_fire_break" ] );
|
|
maps\skyway_util::delay_multi_fx( 0, var_2, [ "roofhit_wheel_break", "roofhit_wheel_sparks_small" ] );
|
|
thread rt_fire_proc( getent( "rt1_dam_fire", "targetname" ), 200, 4, 0.1, "flag_rooftops_combat_done" );
|
|
level._train thread maps\skyway_util::train_new_sus_path_anims( "train_rt1", "sus_r_broken" );
|
|
var_4 = getent( "rt1_helo_col", "targetname" );
|
|
var_5 = getent( "rt1_sus_col", "targetname" );
|
|
var_4 linkto( level._train.cars["train_rt1"].body, "j_spineupper", ( 374, -2, -58 ), ( 0, 0, 0 ) );
|
|
var_5 linkto( level._train.cars["train_rt1"].sus_f, "j_mainroot", ( 0, 0, 63 ), ( 0, 0, 0 ) );
|
|
self.org linkto( level._train.cars["train_rt1"].body, "j_spineupper" );
|
|
self.crashed show();
|
|
self hide();
|
|
maps\_vehicle::vehicle_lights_off( "running" );
|
|
wait 0.1;
|
|
|
|
if ( level.player istouching( var_4 ) || level.player istouching( var_5 ) )
|
|
level.player kill();
|
|
}
|
|
|
|
rt_helo_crash_ally()
|
|
{
|
|
level._ally linkto( level.ally_impact_org );
|
|
level.ally_impact_org maps\_anim::anim_single_solo( level._ally, "rt_helo_crash", undefined, 0.1 );
|
|
level._ally unlink();
|
|
}
|
|
|
|
rt_player_helocrash_effect( var_0 )
|
|
{
|
|
level endon( "flag_loco_enter" );
|
|
player_push( var_0, 500, 10, 75, 2, ::rumble_helo_hit );
|
|
|
|
if ( level.player.car == "train_rt1" )
|
|
thread maps\skyway_util::player_view_roll_with_traincar( "roll_R", 1 );
|
|
else
|
|
thread maps\skyway_util::player_view_roll_with_traincar( "roll_R", 0.4 );
|
|
|
|
var_1 = 0.6;
|
|
var_2 = 0.15;
|
|
var_3 = 0.11;
|
|
var_4 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player.car == "train_rt1" && level.player isonground() )
|
|
{
|
|
if ( !var_4 )
|
|
{
|
|
level.player_rumble_ent maps\_utility::rumble_ramp_to( var_3, 0.05 );
|
|
maps\skyway_util::player_sway_blendto( 0.2, var_1 );
|
|
maps\skyway_util::player_wind_blendto( 0.2, var_2 );
|
|
var_4 = 1;
|
|
}
|
|
}
|
|
else if ( var_4 )
|
|
{
|
|
maps\skyway_util::player_sway_blendto( 0.2, level.player_default_sway_weight );
|
|
maps\skyway_util::player_wind_blendto( 0.2, 0.0 );
|
|
level.player_rumble_ent maps\_utility::rumble_ramp_to( 0.0, 0.05 );
|
|
var_4 = 0;
|
|
}
|
|
|
|
wait( level.timestep );
|
|
}
|
|
}
|
|
|
|
rt_fire_proc( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
level endon( var_4 );
|
|
|
|
for (;;)
|
|
{
|
|
radiusdamage( var_0.origin, var_1, var_2, var_2 );
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
rt_helo_crash_ground( var_0 )
|
|
{
|
|
thread rt_helo_blend_backward( level._train, 2 );
|
|
self.org setanim( level.scr_anim[self.org.animname]["tilt_parent"], 0, 2.0 );
|
|
self.org setanimknob( level.scr_anim[self.org.animname][var_0], 1, 2.7 );
|
|
self stoploopsound( "scn_skyway_heli_loop" );
|
|
thread maps\_utility::play_sound_on_entity( "aascout72x_helicopter_hit" );
|
|
thread common_scripts\utility::play_loop_sound_on_entity( "aascout72x_helicopter_dying_loop" );
|
|
wait( getanimlength( level.scr_anim[self.org.animname][var_0] ) );
|
|
thread maps\_utility::play_sound_on_entity( "aascout72x_helicopter_crash" );
|
|
}
|
|
|
|
rt_helo_blend_backward( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = 0;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 3;
|
|
|
|
foreach ( var_3, var_5 in var_0.names )
|
|
{
|
|
if ( var_5 == self.linked_car )
|
|
break;
|
|
}
|
|
|
|
var_3 = int( clamp( var_3 - 1, var_1, var_0.names.size - 1 ) );
|
|
var_6 = var_0.cars[self.linked_car].body;
|
|
var_7 = var_0.cars[var_0.names[var_3]].body;
|
|
self.org.link1 thread maps\skyway_util::blend_link_over_time( var_6, var_7, var_2, 0, "j_mainroot", "j_mainroot" );
|
|
self.org.link2 thread maps\skyway_util::blend_link_over_time( var_6, var_7, var_2, 0, "j_spineupper", "j_spineupper" );
|
|
self.linked_car = var_0.names[var_3];
|
|
self.car = var_0.cars[self.linked_car];
|
|
}
|
|
|
|
rt_helo_tunnel_check()
|
|
{
|
|
self endon( "rt_helo_dead" );
|
|
self endon( "rt_helo_delete" );
|
|
common_scripts\utility::flag_wait( "flag_helo_tunnel" );
|
|
self notify( "rt_helo_dead", "tunnel" );
|
|
}
|
|
|
|
rt_helo_shooter_check()
|
|
{
|
|
self endon( "rt_helo_dead" );
|
|
self endon( "rt_helo_delete" );
|
|
|
|
while ( self.shooters.size > 0 )
|
|
wait 1;
|
|
|
|
wait( randomfloat( 1 ) );
|
|
self notify( "rt_helo_dead", "shooters" );
|
|
}
|
|
|
|
rt_helo_driver_check()
|
|
{
|
|
self endon( "rt_helo_dead" );
|
|
self endon( "rt_helo_delete" );
|
|
|
|
while ( self.usedpositions[0] )
|
|
wait 0.1;
|
|
|
|
self notify( "rt_helo_dead", "driver" );
|
|
}
|
|
|
|
rt_helo_dam()
|
|
{
|
|
self endon( "rt_helo_dead" );
|
|
self endon( "rt_helo_delete" );
|
|
|
|
while ( self.health > self.damaged )
|
|
wait 0.05;
|
|
|
|
thread maps\skyway_util::rt_helo_damage_fx( "belly_damage" );
|
|
|
|
while ( self.health > self.critical )
|
|
wait 0.05;
|
|
|
|
thread maps\skyway_util::rt_helo_damage_fx( "engine_damage" );
|
|
|
|
while ( self.health > self.healthbuffer )
|
|
wait 0.05;
|
|
|
|
thread maps\skyway_util::rt_helo_damage_fx( "belly_death" );
|
|
thread maps\skyway_util::rt_helo_damage_fx( "engine_death" );
|
|
self notify( "rt_helo_dead", "generic" );
|
|
}
|
|
|
|
rt_helo_loc_dam( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "rt_helo_dead" );
|
|
self endon( "rt_helo_delete" );
|
|
self.dam[var_0] = spawnstruct();
|
|
self.dam[var_0].healthbuffer = 20000;
|
|
self.dam[var_0].health = self.dam[var_0].healthbuffer + 1000;
|
|
self.dam[var_0].damaged = self.dam[var_0].healthbuffer + 750;
|
|
self.dam[var_0].critical = self.dam[var_0].healthbuffer + 200;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
self.dam[var_0].health = self.dam[var_0].healthbuffer + var_1;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
self.dam[var_0].damaged = self.dam[var_0].healthbuffer + var_2;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
self.dam[var_0].critical = self.dam[var_0].healthbuffer + var_3;
|
|
|
|
while ( self.dam[var_0].health > self.dam[var_0].damaged )
|
|
wait 0.05;
|
|
|
|
thread maps\skyway_util::rt_helo_damage_fx( var_0 + "_damage" );
|
|
|
|
while ( self.dam[var_0].health > self.dam[var_0].critical )
|
|
wait 0.05;
|
|
|
|
thread maps\skyway_util::rt_helo_damage_fx( var_0 + "_crit" );
|
|
|
|
while ( self.dam[var_0].health > self.dam[var_0].healthbuffer )
|
|
wait 0.05;
|
|
|
|
thread maps\skyway_util::rt_helo_damage_fx( var_0 + "_death" );
|
|
self notify( "rt_helo_dead", var_0 );
|
|
}
|
|
|
|
rt_helo_loc_dam_watcher()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "rt_helo_dead" );
|
|
self endon( "rt_helo_delete" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 );
|
|
var_12 = maps\skyway_util::get_local_coords( var_3, var_10, var_11 );
|
|
|
|
if ( var_12[0] < -220 )
|
|
{
|
|
self.dam["tail"].health = self.dam["tail"].health - var_0;
|
|
continue;
|
|
}
|
|
|
|
if ( var_12[0] > -90 && var_12[2] > -65 && var_12[2] < -35 )
|
|
{
|
|
self.dam["engine"].health = self.dam["engine"].health - var_0;
|
|
continue;
|
|
}
|
|
|
|
if ( var_12[0] > -95 && var_12[0] < 20 && var_12[2] > -130 && var_12[2] < -65 )
|
|
self.dam["belly"].health = self.dam["belly"].health - var_0;
|
|
}
|
|
}
|
|
|
|
rt_helo_target_anim()
|
|
{
|
|
self endon( "rt_helo_dead" );
|
|
self endon( "rt_helo_delete" );
|
|
self.org setanim( level.scr_anim[self.org.animname]["tilt"], 1, 0 );
|
|
self.org setanim( level.scr_anim[self.org.animname]["tilt_parent"], 0, 0 );
|
|
wait 5;
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = distance( self.origin, level.player.origin );
|
|
var_1 = distance( self.origin, level._ally.origin ) + 100;
|
|
var_2 = level.player;
|
|
|
|
if ( var_1 < var_0 )
|
|
var_2 = level._ally;
|
|
|
|
var_3 = vectortoangles( var_2.origin - self.origin ) - self.angles - ( 0, 90, 0 );
|
|
var_4 = clamp( var_3[1], 0, 90 ) / 90.0;
|
|
self.org setanim( level.scr_anim[self.org.animname]["tilt_parent"], var_4, 1.5 );
|
|
wait( randomfloatrange( 2, 5 ) );
|
|
self.org setanim( level.scr_anim[self.org.animname]["tilt_parent"], var_4, 1.5 );
|
|
wait( randomfloatrange( 1.5, 4 ) );
|
|
}
|
|
}
|
|
|
|
rt_helo_lane_switch( var_0 )
|
|
{
|
|
self endon( "rt_helo_dead" );
|
|
self endon( "rt_helo_delete" );
|
|
var_0 waittill( "rt_helo_dead" );
|
|
wait( randomfloatrange( 1, 5 ) );
|
|
|
|
while ( !isdefined( self.is_idling ) || !self.is_idling )
|
|
wait 0.05;
|
|
|
|
self.org setanimknob( level.scr_anim[self.org.animname]["idle_inside"], 1, 2.7 );
|
|
wait( getanimlength( level.scr_anim[self.org.animname]["idle_inside"] ) - 0.5 );
|
|
self.org maps\_utility::assign_animtree( "rt_helo0_mover" );
|
|
self.org setanimknob( level.scr_anim[self.org.animname]["idle"][0], 1, 0.5 );
|
|
}
|
|
|
|
rt_tunnel_queue( var_0 )
|
|
{
|
|
if ( isdefined( level.debug_no_move ) && level.debug_no_move )
|
|
return;
|
|
|
|
var_1 = var_0.body maps\_utility::getanim( level._train.path.anime );
|
|
var_2 = ( 1 - var_0.body getanimtime( var_1 ) ) * getanimlength( var_1 );
|
|
|
|
if ( level._train.path.anime == "loop_a2" && var_2 < 20 )
|
|
{
|
|
while ( level._train.path.anime == "loop_a2" )
|
|
wait 0.25;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "flag_tunnel_ready" );
|
|
}
|
|
|
|
rt_traincar_tracker( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "flag_helos_dead" );
|
|
level notify( "starting_traincar_tracker" );
|
|
level endon( "starting_traincar_tracker" );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = [ "train_hangar", "train_sat_1", "train_sat_2" ];
|
|
|
|
wait( randomfloatrange( 0.1, 1 ) );
|
|
|
|
while ( !common_scripts\utility::flag( "flag_helos_dead" ) )
|
|
{
|
|
wait 1;
|
|
|
|
if ( level.player.car != level.helos[0].linked_car )
|
|
{
|
|
if ( maps\_utility::is_in_array( var_2, level.player.car ) )
|
|
{
|
|
rt_helos_kill_ally( var_0, var_2 );
|
|
|
|
foreach ( var_4 in level.helos )
|
|
{
|
|
foreach ( var_6 in var_4.shooters )
|
|
{
|
|
if ( isdefined( var_6 ) && isai( var_6 ) && isalive( var_6 ) )
|
|
var_6.baseaccuracy = 1;
|
|
}
|
|
}
|
|
|
|
level._ally maps\_utility::set_ignoresuppression( 0 );
|
|
level._ally.v.invincible = 1;
|
|
continue;
|
|
}
|
|
|
|
if ( !maps\_utility::is_in_array( var_1, level.player.car ) )
|
|
continue;
|
|
|
|
var_9 = var_0.cars[level.helos[0].linked_car].body;
|
|
var_10 = var_0.cars[level.player.car].body;
|
|
|
|
foreach ( var_4 in level.helos )
|
|
{
|
|
var_4.org.link1 thread maps\skyway_util::blend_link_over_time( var_9, var_10, 4, 0, "j_mainroot", "j_mainroot" );
|
|
var_4.org.link2 thread maps\skyway_util::blend_link_over_time( var_9, var_10, 4, 0, "j_spineupper", "j_spineupper" );
|
|
var_4.linked_car = level.player.car;
|
|
var_4.car = var_0.cars[var_4.linked_car];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
rt_helos_kill_ally( var_0, var_1 )
|
|
{
|
|
level endon( "flag_helos_dead" );
|
|
level endon( "starting_traincar_tracker" );
|
|
var_2 = var_0.cars[level.helos[0].linked_car].body;
|
|
var_3 = var_0.cars["train_rt1"].body;
|
|
|
|
foreach ( var_5 in level.helos )
|
|
{
|
|
var_5.org.link1 thread maps\skyway_util::blend_link_over_time( var_2, var_3, 4, 0, "j_mainroot", "j_mainroot" );
|
|
var_5.org.link2 thread maps\skyway_util::blend_link_over_time( var_2, var_3, 4, 0, "j_spineupper", "j_spineupper" );
|
|
var_5.linked_car = "train_rt1";
|
|
var_5.car = var_0.cars[var_5.linked_car];
|
|
|
|
foreach ( var_7 in var_5.shooters )
|
|
{
|
|
if ( isdefined( var_7 ) && isai( var_7 ) && isalive( var_7 ) )
|
|
var_7.baseaccuracy = 9;
|
|
}
|
|
}
|
|
|
|
level._ally thread rt_ally_dam_watch();
|
|
|
|
while ( maps\_utility::is_in_array( var_1, level.player.car ) )
|
|
wait 0.1;
|
|
|
|
level notify( "rt_player_stopped_avoiding_helos" );
|
|
}
|
|
|
|
rt_ally_dam_watch()
|
|
{
|
|
level endon( "flag_helos_dead" );
|
|
level endon( "starting_traincar_tracker" );
|
|
level endon( "rt_player_stopped_avoiding_helos" );
|
|
maps\_utility::set_ignoresuppression( 1 );
|
|
self.v.invincible = 0;
|
|
wait( randomintrange( 3, 5 ) );
|
|
self waittill( "damage" );
|
|
setdvar( "ui_deadquote", &"SKYWAY_HESH_BY_HELOS" );
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
player_push( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = distance( level.player.origin, var_0 );
|
|
|
|
if ( var_6 < var_1 )
|
|
{
|
|
var_7 = clamp( var_6 / var_1, 0, 1 );
|
|
var_8 = vectornormalize( level.player.origin - var_0 );
|
|
var_8 = var_8 * ( var_2 * var_7 + var_3 * ( 1 - var_7 ) );
|
|
thread player_push_impulse( var_8, var_4 );
|
|
}
|
|
|
|
if ( isdefined( var_5 ) )
|
|
thread [[ var_5 ]]( var_6 / var_1, var_0 );
|
|
}
|
|
|
|
player_push_train( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
if ( isdefined( var_5 ) && var_5 && level.player.car != var_0.body.script_noteworthy )
|
|
return;
|
|
|
|
var_6 = ( 0, 1, 0 ) * var_0.body gettagangles( "j_spineupper" ) + var_1;
|
|
var_7 = anglestoforward( var_6 ) * var_2;
|
|
thread player_push_impulse( var_7, var_3 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
thread [[ var_4 ]]( level.player.origin + var_7, var_2 );
|
|
}
|
|
|
|
player_push_impulse( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0.5;
|
|
|
|
var_2 = var_1;
|
|
|
|
while ( var_2 > 0.0 )
|
|
{
|
|
var_3 = clamp( var_2 / var_1, 0, 1 );
|
|
var_4 = var_0 * var_3;
|
|
level.player pushplayervector( var_4 );
|
|
var_2 = var_2 - 0.05;
|
|
wait 0.05;
|
|
}
|
|
|
|
level.player pushplayervector( ( 0, 0, 0 ) );
|
|
}
|
|
|
|
rumble_player_push( var_0, var_1 )
|
|
{
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
maps\skyway_util::train_quake( 0.3, 1.2, level.player.origin, 256 );
|
|
level.player viewkick( 10, var_0 );
|
|
}
|
|
|
|
rumble_helo_hit( var_0, var_1 )
|
|
{
|
|
if ( level.player.car == "train_rt1" )
|
|
{
|
|
if ( var_0 > 1 )
|
|
{
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
maps\skyway_util::train_quake( 0.33, 1.4, level.player.origin, 128 );
|
|
}
|
|
else
|
|
{
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
maps\skyway_util::train_quake( 0.45, 1.6, level.player.origin, 256 );
|
|
level.player shellshock( "default_nosound", 2 );
|
|
level.player dodamage( 50, var_1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
rt_helo_set_ignore( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = var_0;
|
|
|
|
foreach ( var_3 in self.shooters )
|
|
{
|
|
if ( isdefined( var_3 ) && isai( var_3 ) && isalive( var_3 ) )
|
|
{
|
|
var_3 thread maps\_utility::set_ignoreall( var_0 );
|
|
var_3 thread maps\_utility::set_ignoreme( var_1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
rt_helo_tele_proc( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "train_teleport_ready" );
|
|
wait 0.05;
|
|
self teleportentityrelative( var_0.path.start_org, var_0.path.end_org );
|
|
self notify( "goal" );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
rt_respawn_ammo()
|
|
{
|
|
while ( common_scripts\utility::flag( "game_saving" ) )
|
|
wait 0.05;
|
|
|
|
var_0 = getdvarint( "rt_helo_lives", 0 );
|
|
setdvar( "rt_helo_lives", var_0 + 1 );
|
|
|
|
if ( getdvarint( "rt_helo_lives", 0 ) > 1 )
|
|
{
|
|
var_1 = level.player getweaponslistprimaries();
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( level.player getfractionmaxammo( var_3 ) < 0.7 )
|
|
level.player setweaponammostock( var_3, int( weaponmaxammo( var_3 ) * 0.8 ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
setup_spawners()
|
|
{
|
|
maps\_utility::array_spawn_function_targetname( "rt_helo0_link", ::init_helo_ai );
|
|
maps\_utility::array_spawn_function_targetname( "rt_helo1_link", ::init_helo_ai );
|
|
maps\_utility::array_spawn_function_targetname( "rt_helo2_link", ::init_helo_ai );
|
|
}
|
|
|
|
init_helo_ai()
|
|
{
|
|
self endon( "death" );
|
|
self.ridingvehicle endon( "rt_helo_dead" );
|
|
self.ridingvehicle endon( "rt_helo_delete" );
|
|
thread helo_ai_handle_death();
|
|
wait 0.05;
|
|
|
|
if ( self.vehicle_position > 1 )
|
|
{
|
|
while ( self.ridingvehicle.shooters.size > 1 )
|
|
wait 0.05;
|
|
}
|
|
|
|
thread helo_ai_dam_mon();
|
|
}
|
|
|
|
helo_ai_handle_death()
|
|
{
|
|
self.ridingvehicle endon( "rt_helo_dead" );
|
|
self.ridingvehicle endon( "rt_helo_delete" );
|
|
self waittill( "death" );
|
|
|
|
if ( self.vehicle_position > 1 )
|
|
self.ridingvehicle.shooters = common_scripts\utility::array_remove( self.ridingvehicle.shooters, self );
|
|
else
|
|
self linkto( self.ridingvehicle, "tag_pilot1", ( 0, 0, -16 ), ( 16, 16, 0 ) );
|
|
}
|
|
|
|
helo_ai_dam_mon()
|
|
{
|
|
self endon( "death" );
|
|
self.ridingvehicle endon( "rt_helo_dead" );
|
|
self.ridingvehicle endon( "rt_helo_delete" );
|
|
self.damageshield = 1;
|
|
|
|
for (;;)
|
|
{
|
|
if ( maps\_utility::player_can_see_ai( self ) )
|
|
{
|
|
self.damageshield = 0;
|
|
wait 0.5;
|
|
}
|
|
else if ( !self.damageshield )
|
|
self.damageshield = 1;
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
rt_falling_death()
|
|
{
|
|
self endon( "no_falling_death" );
|
|
self waittill( "death" );
|
|
self unlink();
|
|
}
|
|
|
|
init_helo( var_0 )
|
|
{
|
|
var_1 = var_0.classname;
|
|
|
|
if ( isdefined( level.vehicle_hide_list[var_1] ) )
|
|
{
|
|
foreach ( var_3 in level.vehicle_hide_list[var_1] )
|
|
var_0 hidepart( var_3 );
|
|
}
|
|
|
|
var_5 = var_0.vehicletype;
|
|
var_0 maps\_utility::ent_flag_init( "unloaded" );
|
|
var_0 maps\_utility::ent_flag_init( "loaded" );
|
|
var_0.riders = [];
|
|
var_0.unloadque = [];
|
|
var_0.unload_group = "default";
|
|
var_0.fastroperig = [];
|
|
|
|
if ( isdefined( level.vehicle_attachedmodels ) && isdefined( level.vehicle_attachedmodels[var_1] ) )
|
|
{
|
|
var_6 = level.vehicle_attachedmodels[var_1];
|
|
var_7 = getarraykeys( var_6 );
|
|
|
|
foreach ( var_9 in var_7 )
|
|
{
|
|
var_0.fastroperig[var_9] = undefined;
|
|
var_0.fastroperiganimating[var_9] = 0;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_0.script_godmode ) )
|
|
var_0.godmode = 1;
|
|
|
|
var_0.damage_functions = [];
|
|
var_0 thread maps\_vehicle_aianim::handle_attached_guys();
|
|
var_0 thread maps\_vehicle_code::vehicle_rumble();
|
|
|
|
if ( isdefined( var_0.script_physicsjolt ) && var_0.script_physicsjolt )
|
|
var_0 thread maps\_utility::physicsjolt_proximity();
|
|
|
|
if ( isdefined( level.vehiclespawncallbackthread ) )
|
|
level thread [[ level.vehiclespawncallbackthread ]]( var_0 );
|
|
|
|
maps\_vehicle_code::vehicle_levelstuff( var_0 );
|
|
var_0 maps\_vehicle_code::spawn_group();
|
|
}
|
|
|
|
bmcd_debug_loop()
|
|
{
|
|
level notify( "stop_cody_debug" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player buttonpressed( "DPAD_RIGHT" ) )
|
|
break;
|
|
else if ( level.player buttonpressed( "DPAD_LEFT" ) || level.player buttonpressed( "DPAD_UP" ) || level.player buttonpressed( "DPAD_DOWN" ) )
|
|
return;
|
|
|
|
wait 0.1;
|
|
}
|
|
|
|
iprintln( "starting bmcd debug loop" );
|
|
wait 1;
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player buttonpressed( "DPAD_LEFT" ) )
|
|
{
|
|
iprintln( "blue" );
|
|
level._ally thread maps\_utility::set_force_color( "b" );
|
|
wait 0.2;
|
|
}
|
|
else if ( level.player buttonpressed( "DPAD_RIGHT" ) )
|
|
{
|
|
iprintln( "red" );
|
|
level._ally thread maps\_utility::set_force_color( "r" );
|
|
wait 0.2;
|
|
}
|
|
else if ( level.player buttonpressed( "DPAD_UP" ) )
|
|
{
|
|
iprintln( "dist check" );
|
|
thread temp_dist_check();
|
|
wait 0.2;
|
|
}
|
|
else if ( level.player buttonpressed( "DPAD_DOWN" ) )
|
|
{
|
|
if ( isdefined( level._ally.ignoreall ) && level._ally.ignoreall )
|
|
{
|
|
iprintln( "ignoreall off" );
|
|
level._ally maps\_utility::set_ignoreme( 0 );
|
|
level._ally maps\_utility::set_ignoreall( 0 );
|
|
}
|
|
else
|
|
{
|
|
iprintln( "ignoreall on" );
|
|
level._ally maps\_utility::set_ignoreme( 1 );
|
|
level._ally maps\_utility::set_ignoreall( 1 );
|
|
}
|
|
|
|
wait 0.2;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
temp_dist_check()
|
|
{
|
|
level endon( "stop_temp_dist_check" );
|
|
|
|
if ( isdefined( level.test_dist_check ) )
|
|
{
|
|
level.test_dist_check = undefined;
|
|
level notify( "stop_temp_dist_check" );
|
|
}
|
|
else
|
|
level.test_dist_check = 1;
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = distance( level.player.origin, level._train.cars["train_rt3"].sus_f.origin );
|
|
iprintln( var_0 );
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
temp_ref_check()
|
|
{
|
|
level endon( "temp_ref_check" );
|
|
|
|
if ( isdefined( level.test_ref_check ) )
|
|
{
|
|
level.test_ref_check = undefined;
|
|
level notify( "temp_ref_check" );
|
|
}
|
|
else
|
|
level.test_ref_check = 1;
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = level.player_rumble_ent.origin;
|
|
var_1 = level.player geteye();
|
|
|
|
if ( isdefined( distance( var_0 - var_1 ) ) )
|
|
iprintln( "delta: " + distance( var_0 - var_1 ) );
|
|
else
|
|
iprintln( "delta: 0" );
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|