127 lines
2.8 KiB
Plaintext
127 lines
2.8 KiB
Plaintext
|
// Weapon configuration for anim scripts.
|
||
|
// Supplies information for all AI weapons.
|
||
|
#using_animtree( "generic_human" );
|
||
|
|
||
|
|
||
|
usingAutomaticWeapon()
|
||
|
{
|
||
|
return( WeaponIsAuto( self.weapon ) || WeaponBurstCount( self.weapon ) > 0 );
|
||
|
}
|
||
|
|
||
|
usingSemiAutoWeapon()
|
||
|
{
|
||
|
return( weaponIsSemiAuto( self.weapon ) );
|
||
|
}
|
||
|
|
||
|
autoShootAnimRate()
|
||
|
{
|
||
|
if ( usingAutomaticWeapon() )
|
||
|
{
|
||
|
// The auto fire animation fires 10 shots a second, so we divide the weapon's fire rate by
|
||
|
// 10 to get the correct anim playback rate.
|
||
|
// return weaponFireTime( self.weapon ) * 10;
|
||
|
return 0.1 / weaponFireTime( self.weapon );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// println ("weaponList::standAimShootAnims: No auto fire rate for "+self.weapon);
|
||
|
return 0.5;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
burstShootAnimRate()
|
||
|
{
|
||
|
if ( usingAutomaticWeapon() )
|
||
|
{
|
||
|
return 0.1 / weaponFireTime( self.weapon );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// println ("weaponList::standAimShootAnims: No auto fire rate for "+self.weapon);
|
||
|
return 0.2; // Equates to 2 shots a second, decent for a non - auto weapon.
|
||
|
}
|
||
|
}
|
||
|
|
||
|
waitAfterShot()
|
||
|
{
|
||
|
return 0.25;
|
||
|
}
|
||
|
|
||
|
shootAnimTime( semiAutoFire )
|
||
|
{
|
||
|
if ( !usingAutomaticWeapon() || ( isdefined( semiAutofire ) && ( semiAutofire == true ) ) )
|
||
|
{
|
||
|
// We randomize the result a little from the real time, just to make things more
|
||
|
// interesting. In reality, the 20Hz server is going to make this much less variable.
|
||
|
rand = 0.5 + randomfloat( 1 );// 0.8 + 0.4
|
||
|
return weaponFireTime( self.weapon ) * rand;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return weaponFireTime( self.weapon );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
RefillClip()
|
||
|
{
|
||
|
assertEX( isDefined( self.weapon ), "self.weapon is not defined for " + self.model );
|
||
|
|
||
|
if ( self.weapon == "none" )
|
||
|
{
|
||
|
self.bulletsInClip = 0;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if ( weaponClass( self.weapon ) == "rocketlauncher" )
|
||
|
{
|
||
|
if ( !self.a.rocketVisible )
|
||
|
self thread animscripts\combat_utility::showRocketWhenReloadIsDone();
|
||
|
/*
|
||
|
// TODO: proper rocket ammo tracking
|
||
|
if ( self.a.rockets < 1 )
|
||
|
self animscripts\shared::placeWeaponOn( self.secondaryweapon, "right" );
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
if ( !isDefined( self.bulletsInClip ) )
|
||
|
{
|
||
|
self.bulletsInClip = weaponClipSize( self.weapon );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
self.bulletsInClip = weaponClipSize( self.weapon );
|
||
|
}
|
||
|
|
||
|
assertEX( isDefined( self.bulletsInClip ), "RefillClip failed" );
|
||
|
|
||
|
if ( self.bulletsInClip <= 0 )
|
||
|
return false;
|
||
|
else
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
add_weapon( name, type, time, clipsize, anims )
|
||
|
{
|
||
|
assert( isdefined( name ) );
|
||
|
assert( isdefined( type ) );
|
||
|
if ( !isdefined( time ) )
|
||
|
time = 3.0;
|
||
|
if ( !isdefined( clipsize ) )
|
||
|
time = 1;
|
||
|
if ( !isdefined( anims ) )
|
||
|
anims = "rifle";
|
||
|
|
||
|
name = tolower( name );
|
||
|
anim.AIWeapon[ name ][ "type" ] = type;
|
||
|
anim.AIWeapon[ name ][ "time" ] = time;
|
||
|
anim.AIWeapon[ name ][ "clipsize" ] = clipsize;
|
||
|
anim.AIWeapon[ name ][ "anims" ] = anims;
|
||
|
}
|
||
|
|
||
|
addTurret( turret )
|
||
|
{
|
||
|
anim.AIWeapon[ tolower( turret ) ][ "type" ] = "turret";
|
||
|
}
|