mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-23 01:25:52 +00:00
440 lines
14 KiB
Plaintext
440 lines
14 KiB
Plaintext
#include maps\_anim;
|
|
#include maps\_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\_vehicle;
|
|
#include maps\_vehicle_aianim;
|
|
#using_animtree( "vehicles" );
|
|
|
|
|
|
main( model, hideparts, type, no_death )
|
|
{
|
|
build_template( "nx_chinese_vtol", model, type );
|
|
build_localinit( ::init_local );
|
|
|
|
//build_deathfx( "explosions/aerial_explosion_harrier", "tag_deathfx", "explo_metal_rand", undefined, undefined, undefined, undefined, undefined, undefined, 0 );
|
|
|
|
build_life( 24000, 22000, 26000 );
|
|
build_team( "axis" );
|
|
build_drive ( %nx_vh_chinese_vtol_movement,undefined, 150 );
|
|
|
|
if ( !isdefined( no_death ) )
|
|
{
|
|
blackhawk_death_fx = [];
|
|
blackhawk_death_fx[ "nx_vehicle_chinese_vtol" ] = "explosions/helicopter_explosion";
|
|
|
|
build_deathfx( "explosions/helicopter_explosion_secondary_small", "tag_threat_id_1", "vtol_helicopter_secondary_exp", undefined, undefined, undefined, 0.2, true );
|
|
build_deathfx( "explosions/helicopter_explosion_secondary_small", "back_l_thruster", "vtol_helicopter_secondary_exp", undefined, undefined, undefined, 0.5, true );
|
|
build_deathfx( "fire/fire_smoke_trail_L", "back_l_thruster", "vtol_helicopter_dying_loop", true, 0.05, true, 0.5, true );
|
|
build_deathfx( "explosions/helicopter_explosion_secondary_small", "tag_threat_id_2", "vtol_helicopter_tertiary_exp", undefined, undefined, undefined, 2.5, true );
|
|
build_deathfx( "explosions/helicopter_explosion_secondary_small", "tag_deathfx", "vtol_helicopter_secondary_exp", undefined, undefined, undefined, 4.0 );
|
|
build_deathfx( blackhawk_death_fx[ model ], undefined, "vtol_helicopter_crash", undefined, undefined, undefined, - 1, undefined, "stop_crash_loop_sound" );
|
|
|
|
build_rocket_deathfx( "explosions/aerial_explosion_heli_large", "tag_deathfx", undefined,undefined, undefined, undefined, undefined, true, undefined, 0 );
|
|
}
|
|
|
|
|
|
// build_rumble( "mig_rumble", 0.05, 0.2, 1500, 0.05, 0.05 );
|
|
|
|
build_treadfx();
|
|
build_aianims( ::setanims, ::set_vehicle_anims );
|
|
build_attach_models( ::set_attached_models );
|
|
build_unload_groups( ::Unload_Groups );
|
|
build_mainturret();
|
|
|
|
delete_delay = 10.0;
|
|
build_turret( "nx_chinese_vtol_turret", "tag_wing_l_gun_turret", "nx_vehicle_chinese_vtol_gun_turret", undefined, undefined, delete_delay );
|
|
build_turret( "nx_chinese_vtol_turret", "tag_wing_l_missle_turret", "nx_vehicle_chinese_vtol_missile_turret", undefined, undefined, delete_delay );
|
|
build_turret( "nx_chinese_vtol_turret", "tag_wing_r_gun_turret", "nx_vehicle_chinese_vtol_gun_turret", undefined, undefined, delete_delay );
|
|
build_turret( "nx_chinese_vtol_turret", "tag_wing_r_missle_turret", "nx_vehicle_chinese_vtol_missile_turret", undefined, undefined, delete_delay );
|
|
build_flare( %nx_vh_chinese_vtol_stopflare, 0.2 );
|
|
|
|
//special for ec_vtol/////
|
|
level._effect[ "engineeffect_large" ] = loadfx( "nx/misc/nx_ec_vtol_thruster_large" );
|
|
level._effect[ "engineeffect_med" ] = loadfx( "nx/misc/nx_ec_vtol_thruster_med" );
|
|
level._effect[ "engineeffect_small" ] = loadfx( "nx/misc/nx_ec_vtol_thruster_small" );
|
|
level._effect[ "afterburner" ] = loadfx( "fire/jet_afterburner_ignite" );
|
|
level._effect[ "contrail" ] = loadfx( "smoke/jet_contrail" );
|
|
////////////////////////
|
|
|
|
// Hide parts.
|
|
parts = [];
|
|
if ( IsDefined( type ) && type == "nx_chinese_vtol_troop_cabin" )
|
|
{
|
|
parts[ parts.size ] = "tag_ec_ugv_cabin";
|
|
}
|
|
else
|
|
{
|
|
parts[ parts.size ] = "tag_troop_cabin";
|
|
parts[ parts.size ] = "tag_troop_cabin_btm_door_l";
|
|
parts[ parts.size ] = "tag_troop_cabin_btm_door_r";
|
|
parts[ parts.size ] = "tag_troop_cabin_top_door_l";
|
|
parts[ parts.size ] = "tag_troop_cabin_top_door_r";
|
|
parts[ parts.size ] = "tag_fast_rope_hook_arm";
|
|
}
|
|
build_hideparts( parts );
|
|
|
|
}
|
|
|
|
unload_callback( anim_pos )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( IsAlive( self ))
|
|
{
|
|
self.block_ragdoll_fall = true;
|
|
self.allowdeath = true;
|
|
}
|
|
|
|
// Wait for note track to fire.
|
|
while ( 1 )
|
|
{
|
|
notetrack = undefined;
|
|
self waittill( "vehicle_getout", notetrack );
|
|
if ( notetrack == "start_fastrope_fall" )
|
|
{
|
|
break;
|
|
}
|
|
wait( 0.01 );
|
|
}
|
|
|
|
// line( self.origin, self.origin + ( 0, 0, -200 ) );
|
|
|
|
if ( IsAlive( self ))
|
|
{
|
|
self.block_ragdoll_fall = false;
|
|
self.allowdeath = false;
|
|
anim_pos.ragdoll_getout_death = true;
|
|
}
|
|
}
|
|
|
|
vtol_disable_turrets()
|
|
{
|
|
self endon( "enable_turrets" );
|
|
|
|
while( 1 )
|
|
{
|
|
if ( isdefined( self.mgturret ))
|
|
{
|
|
foreach ( turret in self.mgturret )
|
|
{
|
|
turret TurretFireDisable();
|
|
// turret SetMode( "sentry_offline" );
|
|
}
|
|
break;
|
|
}
|
|
wait( 0.01 );
|
|
}
|
|
}
|
|
|
|
vtol_enable_turrets()
|
|
{
|
|
self notify( "enable_turrets" );
|
|
|
|
if ( isdefined( self.mgturret ))
|
|
{
|
|
foreach ( turret in self.mgturret )
|
|
{
|
|
turret TurretFireEnable();
|
|
}
|
|
}
|
|
}
|
|
|
|
init_local()
|
|
{
|
|
self.originheightoffset = distance( self gettagorigin( "tag_origin" ), self gettagorigin( "tag_ground" ) );// TODO - FIXME: this is ugly. Derive from distance between tag_origin and tag_base or whatever that tag was.
|
|
self.script_badplace = false;// All helicopters dont need to create bad places
|
|
thread playEngineEffects();
|
|
//thread test();
|
|
|
|
self thread vtol_disable_turrets();
|
|
}
|
|
|
|
#using_animtree( "vehicles" );
|
|
test()
|
|
{
|
|
level._scr_animtree[ "nx_chinese_vtol" ] = #animtree;
|
|
level._scr_anim[ "nx_chinese_vtol" ][ "nx_vh_chinese_vtol_getout" ] = %nx_vh_chinese_vtol_getout;
|
|
level._scr_model[ "nx_chinese_vtol" ] = "nx_vehicle_chinese_vtol";
|
|
//iprintlnbold( "burn!" );
|
|
//playAfterBurner();
|
|
//playfxontag( level._effect[ "engineeffect_large" ], self, "tag_fx_back_r_thruster_exhst" );
|
|
addNotetrack_customFunction( "nx_chinese_vtol", "fx_vtol_unflare_nt", ::playAfterBurner );
|
|
|
|
}
|
|
|
|
#using_animtree( "vehicles" );
|
|
set_vehicle_anims( positions )
|
|
{
|
|
for ( i = 0;i < positions.size;i++ )
|
|
positions[ i ].vehicle_getoutanim = %nx_vh_chinese_vtol_getout;
|
|
|
|
return positions;
|
|
}
|
|
|
|
#using_animtree( "generic_human" );
|
|
|
|
setanims()
|
|
{
|
|
positions = [];
|
|
for ( i = 0;i < 6;i++ )
|
|
positions[ i ] = spawnstruct();
|
|
|
|
positions[ 0 ].idle = %nx_tp_chinese_vtol_guy2_idle;
|
|
positions[ 1 ].idle = %nx_tp_chinese_vtol_guy3_idle;
|
|
positions[ 2 ].idle = %nx_tp_chinese_vtol_guy4_idle;
|
|
positions[ 3 ].idle = %nx_tp_chinese_vtol_guy6_idle;
|
|
|
|
positions[ 4 ].idle = %nx_tp_chinese_vtol_driver_idle;
|
|
positions[ 5 ].idle = %nx_tp_chinese_vtol_passenger_idle;
|
|
|
|
positions[ 0 ].sittag = "tag_detach";
|
|
positions[ 1 ].sittag = "tag_detach";
|
|
positions[ 2 ].sittag = "tag_detach";
|
|
positions[ 3 ].sittag = "tag_detach";
|
|
positions[ 4 ].sittag = "tag_detach";
|
|
positions[ 5 ].sittag = "tag_detach";
|
|
|
|
positions[ 0 ].getout = %nx_tp_chinese_vtol_guy2_getout;;
|
|
positions[ 1 ].getout = %nx_tp_chinese_vtol_guy3_getout;
|
|
positions[ 2 ].getout = %nx_tp_chinese_vtol_guy4_getout;
|
|
positions[ 3 ].getout = %nx_tp_chinese_vtol_guy6_getout;
|
|
|
|
|
|
positions[ 0 ].getoutstance = "crouch";
|
|
positions[ 1 ].getoutstance = "crouch";
|
|
positions[ 2 ].getoutstance = "crouch";
|
|
positions[ 3 ].getoutstance = "crouch";
|
|
positions[ 4 ].getoutstance = "crouch";
|
|
positions[ 5 ].getoutstance = "crouch";
|
|
|
|
positions[ 0 ].unload_callback = ::unload_callback;
|
|
positions[ 1 ].unload_callback = ::unload_callback;
|
|
positions[ 2 ].unload_callback = ::unload_callback;
|
|
positions[ 3 ].unload_callback = ::unload_callback;
|
|
|
|
positions[ 0 ].death = %pistol_death_4;
|
|
positions[ 1 ].death = %pistol_death_4;
|
|
positions[ 2 ].death = %pistol_death_4;
|
|
positions[ 3 ].death = %pistol_death_4;
|
|
positions[ 4 ].death = %pistol_death_4;
|
|
positions[ 5 ].death = %pistol_death_4;
|
|
|
|
positions[ 0 ].death_no_ragdoll = true;
|
|
positions[ 1 ].death_no_ragdoll = true;
|
|
positions[ 2 ].death_no_ragdoll = true;
|
|
positions[ 3 ].death_no_ragdoll = true;
|
|
positions[ 4 ].death_no_ragdoll = true;
|
|
positions[ 5 ].death_no_ragdoll = true;
|
|
|
|
positions[ 0 ].ragdoll_fall_anim = %fastrope_fall;
|
|
positions[ 1 ].ragdoll_fall_anim = %fastrope_fall;
|
|
positions[ 2 ].ragdoll_fall_anim = %fastrope_fall;
|
|
positions[ 3 ].ragdoll_fall_anim = %fastrope_fall;
|
|
positions[ 4 ].ragdoll_fall_anim = %fastrope_fall;
|
|
positions[ 5 ].ragdoll_fall_anim = %fastrope_fall;
|
|
|
|
positions[ 0 ].rappel_kill_achievement = 1;
|
|
positions[ 1 ].rappel_kill_achievement = 1;
|
|
positions[ 2 ].rappel_kill_achievement = 1;
|
|
positions[ 3 ].rappel_kill_achievement = 1;
|
|
positions[ 4 ].rappel_kill_achievement = 1;
|
|
positions[ 5 ].rappel_kill_achievement = 1;
|
|
|
|
// 1, 2, 4, 5, 6, & 8
|
|
positions[ 0 ].fastroperig = "TAG_FastRope_RI";// 1 %bh_1_drop
|
|
positions[ 1 ].fastroperig = "TAG_FastRope_RI"; // 2 %bh_2_drop
|
|
positions[ 2 ].fastroperig = "TAG_FastRope_RI"; // 4 %bh_4_drop
|
|
positions[ 3 ].fastroperig = "TAG_FastRope_RI"; // 5 %bh_5_drop
|
|
positions[ 4 ].fastroperig = "TAG_FastRope_RI";// 8 %bh_8_drop
|
|
positions[ 5 ].fastroperig = "TAG_FastRope_RI";// 6 %bh_6_drop
|
|
|
|
// return setplayer_anims( positions );
|
|
|
|
return positions;
|
|
}
|
|
|
|
|
|
unload_groups()
|
|
{
|
|
unload_groups = [];
|
|
unload_groups[ "left" ] = [];
|
|
unload_groups[ "right" ] = [];
|
|
unload_groups[ "both" ] = [];
|
|
|
|
unload_groups[ "left" ][ unload_groups[ "left" ].size ] = 0;
|
|
unload_groups[ "left" ][ unload_groups[ "left" ].size ] = 1;
|
|
|
|
unload_groups[ "right" ][ unload_groups[ "right" ].size ] = 0;
|
|
unload_groups[ "right" ][ unload_groups[ "right" ].size ] = 1;
|
|
unload_groups[ "right" ][ unload_groups[ "right" ].size ] = 2;
|
|
unload_groups[ "right" ][ unload_groups[ "right" ].size ] = 3;
|
|
|
|
unload_groups[ "both" ][ unload_groups[ "both" ].size ] = 0;
|
|
unload_groups[ "both" ][ unload_groups[ "both" ].size ] = 1;
|
|
unload_groups[ "both" ][ unload_groups[ "both" ].size ] = 2;
|
|
unload_groups[ "both" ][ unload_groups[ "both" ].size ] = 3;
|
|
|
|
unload_groups[ "default" ] = unload_groups[ "both" ];
|
|
|
|
return unload_groups;
|
|
}
|
|
|
|
set_attached_models()
|
|
{
|
|
array = [];
|
|
array[ "TAG_FastRope_LE" ] = spawnstruct();
|
|
array[ "TAG_FastRope_LE" ].model = "rope_test";
|
|
array[ "TAG_FastRope_LE" ].tag = "TAG_FastRope_LE";
|
|
array[ "TAG_FastRope_LE" ].idleanim = %nx_pr_chinese_vtol_rope_idle;
|
|
array[ "TAG_FastRope_LE" ].dropanim = %nx_pr_chinese_vtol_rope_getout;
|
|
|
|
array[ "TAG_FastRope_RI" ] = spawnstruct();
|
|
array[ "TAG_FastRope_RI" ].model = "rope_test_ri";
|
|
array[ "TAG_FastRope_RI" ].tag = "TAG_FastRope_RI";
|
|
array[ "TAG_FastRope_RI" ].idleanim = %nx_pr_chinese_vtol_rope_idle;
|
|
array[ "TAG_FastRope_RI" ].dropanim = %nx_pr_chinese_vtol_rope_getout;
|
|
|
|
strings = getarraykeys( array );
|
|
|
|
for ( i = 0;i < strings.size;i++ )
|
|
{
|
|
precachemodel( array[ strings[ i ] ].model );
|
|
}
|
|
|
|
return array;
|
|
}
|
|
|
|
/*
|
|
ec_vtol_get_vehicle_velocity()
|
|
{
|
|
org1 = self.origin;
|
|
wait 0.1;
|
|
vec = ( self.origin - org1 );
|
|
return vector_multiply( vec, 20 );
|
|
}
|
|
|
|
ec_vtol_am_i_hovering()
|
|
|
|
//vel = ec_vtol_get_vehicle_velocity();
|
|
vel = self.GetVelocity();
|
|
if ( vel = 0 )
|
|
continue;
|
|
|
|
iprintlnbold( "i am hovering" );
|
|
}
|
|
*/
|
|
|
|
playEngineEffects()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_engineeffects" );
|
|
|
|
self ent_flag_init( "engineeffects" );
|
|
self ent_flag_set( "engineeffects" );
|
|
engineeffects_large = getfx( "engineeffect_large" );
|
|
engineeffects_med = getfx( "engineeffect_med" );
|
|
engineeffects_small = getfx( "engineeffect_small" );
|
|
|
|
for ( ;; )
|
|
{
|
|
self ent_flag_wait( "engineeffects" );
|
|
wait 0.01;
|
|
playfxontag( engineeffects_small, self, "tag_fx_back_r_thruster_exhst" );
|
|
playfxontag( engineeffects_small, self, "tag_fx_back_l_thruster_exhst" );
|
|
wait 0.01;
|
|
playfxontag( engineeffects_small, self, "tag_fx_front_r_thruster_exhst" );
|
|
playfxontag( engineeffects_small, self, "tag_fx_front_l_thruster_exhst" );
|
|
|
|
self ent_flag_waitopen( "engineeffects" );
|
|
StopFXOnTag( engineeffects_small, self, "tag_fx_back_r_thruster_exhst" );
|
|
StopFXOnTag( engineeffects_small, self, "tag_fx_back_l_thruster_exhst" );
|
|
//wait 0.01;
|
|
Stopfxontag( engineeffects_small, self, "tag_fx_front_r_thruster_exhst" );
|
|
Stopfxontag( engineeffects_small, self, "tag_fx_front_l_thruster_exhst" );
|
|
|
|
}
|
|
}
|
|
|
|
////scripted_engine_transition_scripts
|
|
|
|
play_engine_hover()
|
|
{
|
|
iprintlnbold( "burn!" );
|
|
self endon( "death" );
|
|
self endon( "stop_engineeffects" );
|
|
engineeffects_large = getfx( "engineeffect_large" );
|
|
engineeffects_med = getfx( "engineeffect_med" );
|
|
engineeffects_small = getfx( "engineeffect_small" );
|
|
|
|
playfxontag( level._effect[ "engineeffects_small" ], self, "tag_fx_back_l_thruster_exhst" );
|
|
playfxontag( level._effect[ "engineeffects_small" ], self, "tag_fx_back_r_thruster_exhst" );
|
|
wait 0.01;
|
|
playfxontag( level._effect[ "engineeffects_small" ], self, "tag_fx_front_l_thruster_exhst" );
|
|
playfxontag( level._effect[ "engineeffects_small" ], self, "tag_fx_front_r_thruster_exhst" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
playAfterBurner()
|
|
{
|
|
//After Burners are pretty much like turbo boost. They don't use them all the time except when
|
|
//bursts of speed are needed. Needs a cool sound when they're triggered. Currently, they are set
|
|
//to be on all the time, but it would be cool to see them engauge as they fly away.
|
|
|
|
iprintlnbold( "burn!" );
|
|
playfxontag( level._effect[ "afterburner" ], self, "tag_fx_back_l_thruster_exhst" );
|
|
playfxontag( level._effect[ "afterburner" ], self, "tag_fx_back_r_thruster_exhst" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
vtol_thruster_unflare_fx () {
|
|
|
|
iprintlnbold( "disengading hover mode" );
|
|
playAfterBurner();
|
|
}
|
|
|
|
|
|
/*QUAKED script_vehicle_nx_ec_chinese_vtol (1 0 0) (-16 -16 -24) (16 16 32) USABLE SPAWNER
|
|
|
|
|
|
maps\_nx_chinese_vtol::main( "nx_vehicle_chinese_vtol", "ignored" );
|
|
|
|
|
|
include,nx_vehicle_chinese_vtol
|
|
|
|
defaultmdl="nx_vehicle_chinese_vtol"
|
|
default:"vehicletype" "nx_chinese_vtol"
|
|
default:"script_team" "axis"
|
|
*/
|
|
|
|
/*QUAKED script_vehicle_nx_ec_chinese_vtoltroopcabin_closed (1 0 0) (-16 -16 -24) (16 16 32) USABLE SPAWNER
|
|
|
|
|
|
maps\_nx_chinese_vtol::main( "nx_vehicle_chinese_vtol", "ignored", "nx_chinese_vtol_troop_cabin" );
|
|
|
|
|
|
include,nx_vehicle_chinese_vtol
|
|
|
|
defaultmdl="nx_vehicle_chinese_vtol"
|
|
default:"vehicletype" "nx_chinese_vtol_troop_cabin"
|
|
default:"script_team" "axis"
|
|
*/
|
|
|
|
/*QUAKED script_vehicle_nx_proto_arcade_vtol (1 0 0) (-16 -16 -24) (16 16 32) USABLE SPAWNER
|
|
|
|
|
|
maps\_nx_chinese_vtol::main( "nx_vehicle_chinese_vtol", "ignored", "nx_proto_arcade_vtol" );
|
|
|
|
|
|
include,nx_vehicle_chinese_vtol
|
|
|
|
defaultmdl="nx_vehicle_chinese_vtol"
|
|
default:"vehicletype" "nx_proto_arcade_vtol"
|
|
default:"script_team" "axis"
|
|
*/
|