nx1-gsc-dump/maps/nx_taser.gsc

125 lines
3.5 KiB
Plaintext

main()
{
SetDvar( "nx_taser_lockon_range", "1024" );
SetDvar( "nx_taser_lockon_pull", "100000" );
SetDvar( "nx_taser_lockon_cos_halfcone", "0.7" );// = cos(5 degrees)
//I think I can use notetracks to play the fx, and not a call, this will make it flexible.
animscripts\utility::add_note_track_effect( "taser_fx", "J_Knee_LE", "all", LoadFX( "nx/impacts/nx_taser_paralyze_sparks_runner" ) );
animscripts\utility::add_note_track_effect( "taser_fx", "J_CoatRear_LE", "all", LoadFX( "nx/impacts/nx_taser_paralyze_sparks_runner" ) );
animscripts\utility::add_note_track_effect( "taser_fx", "J_Elbow_LE", "all", LoadFX( "nx/impacts/nx_taser_paralyze_sparks_runner" ) );
animscripts\utility::add_note_track_effect( "taser_fx", "J_Shoulder_RI", "all", LoadFX( "nx/impacts/nx_taser_paralyze_sparks_runner" ) );
animscripts\utility::add_note_track_effect( "taser_fx", "J_CoatFront_RI", "all", LoadFX( "nx/impacts/nx_taser_paralyze_sparks_runner" ) );
animscripts\utility::add_note_track_effect( "taser_fx", "J_Spine4", "all", LoadFX( "nx/impacts/nx_taser_paralyze" ) );
// Dan: taser no longer locks on
//foreach ( player in level._players )
//{
// player nx_taser_clear_lock_on();
// player thread nx_taser_fired_notify();
//}
}
/* Dan: taser no longer locks on
nx_taser_fired_notify()
{
self endon( "death" );
assert( self.classname == "player" );
while ( true )
{
self waittill( "weapon_fired" );
weap = self GetCurrentWeapon();
if ( weap != "nx_taser" )
{
continue;
}
// self nx_taser_lock_on();
self notify( "taser_fired" );
}
}
//called on the player.
nx_taser_lock_on()
{
aim_dir = vectornormalize( AnglesToForward(self GetPlayerAngles()) );
target = self GetEnemyInCone( self.origin, aim_dir, GetDvarFloat( "nx_taser_lockon_cos_halfcone" ) , GetDvarFloat( "nx_taser_lockon_range" ) );
if ( IsDefined(target))
{
///#iprintln("Found target" );#/
//check for target change. Also pre-emptively check if no target has previously been set.
if ( !IsDefined(self.taser.target) || target != self.taser.target)
{
self.taser.target = target;
self notify( "taser_target_changed" );
target thread debug_draw_tag_bipod();
}
if ( self.taser.target_attractor != -1 )
{
///#iprintln("Removing attractor so it can be refreshed...." );#/
Missile_DeleteAttractor( self.taser.target_attractor );
}
///#iprintln("Setting attractor on target." );#/
offset = (target GetTagOrigin( "J_Spine4" )) - (target GetTagOrigin( "tag_origin" ));
self.taser.target_attractor = Missile_CreateAttractorEnt( target, GetDvarFloat( "nx_taser_lockon_pull" ), GetDvarFloat( "nx_taser_lockon_range" ), self, offset );
}
else
{
///#iprintln("No Farget Found, clearing taser targeting" );#/
nx_taser_clear_lock_on();
}
}
nx_taser_clear_lock_on()
{
if ( !isdefined( self.taser ) )
{
self.taser = spawnStruct();
}
if ( IsDefined(self.taser.target_attractor) && self.taser.target_attractor != -1 )
{
Missile_DeleteAttractor( self.taser.target_attractor );
}
self.taser.target = undefined;
self.taser.target_attractor = -1;
}
debug_draw_tag_bipod()
{
self endon("death");
self endon("taser_target_changed");
while ( true )
{
pos = self GetTagOrigin( "J_Spine4" );
debug_draw_origin(pos);
wait .05;
}
}
debug_draw_origin( origin )
{
line( origin + ( 16, 0, 0 ), origin + ( -16, 0, 0 ), ( 1, 0, 0 ), 1 );
line( origin + ( 0, 16, 0 ), origin + ( 0, -16, 0 ), ( 0, 1, 0 ), 1 );
line( origin + ( 0, 0, 16 ), origin + ( 0, 0, -16 ), ( 0, 0, 1 ), 1 );
}
*/