Files
IL-GSC/BO1/PC/ZM/maps/_grenade_toss.gsc
2024-02-18 17:32:07 -05:00

91 lines
2.7 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#using_animtree( "generic_human" );
force_grenade_toss( pos, grenade_weapon, explode_time, anime, throw_tag )
{
self endon( "death" );
og_grenadeweapon = undefined;
if( IsDefined( grenade_weapon ) )
{
og_grenadeweapon = self.grenadeWeapon;
self.grenadeWeapon = grenade_weapon;
}
self.grenadeammo++;
if( !IsDefined( explode_time ) )
{
explode_time = 4;
}
if( !IsDefined( throw_tag ) )
{
throw_tag = "tag_inhand";
}
angles = VectorToAngles( pos - self.origin );
self OrientMode( "face angle", angles[1] );
if( DistanceSquared( self.origin, pos ) < 200 * 200 )
{
return false;
}
self.force_grenade_throw_tag = throw_tag;
self.force_grenade_pos = pos;
self.force_grenade_explod_time = explode_time;
if( !IsDefined( anime ) )
{
anime = "force_grenade_throw";
if( !IsDefined( self.animname ) )
{
self.animname = "force_grenader";
}
if( !IsDefined( level.scr_anim[self.animname] ) || !IsDefined( level.scr_anim[self.animname][anime] ) )
{
switch( self.a.special )
{
case "cover_crouch":
case "none":
if (self.a.pose == "stand")
{
throw_anim = %stand_grenade_throw;
}
else
{
throw_anim = %crouch_grenade_throw;
}
gun_hand = "left";
break;
default:
throw_anim = %stand_grenade_throw;
gun_hand = "left";
break;
}
level.scr_anim[self.animname][anime] = throw_anim;
maps\_anim::addNotetrack_attach( self.animname, "grenade_right", GetWeaponModel( self.grenadeweapon ), self.force_grenade_throw_tag, anime );
maps\_anim::addNotetrack_detach( self.animname, "fire", GetWeaponModel( self.grenadeweapon ), self.force_grenade_throw_tag, anime );
}
}
function = ::force_grenade_toss_internal;
if( !maps\_anim::notetrack_customfunction_exists( self.animname, "fire", function, anime ) )
{
maps\_anim::addNotetrack_customFunction( self.animname, "fire", function, anime );
}
if( !IsDefined( level.scr_sound[self.animname] ) || !IsDefined( level.scr_sound[self.animname][anime] ) )
{
self animscripts\battleChatter_ai::evaluateAttackEvent("grenade");
}
self maps\_anim::anim_single( self, anime );
if( self.animname == "force_grenader" )
{
self.animname = undefined;
}
if( IsDefined( og_grenadeweapon ) )
{
self.grenadeWeapon = og_grenadeweapon;
}
self notify( "forced_grenade_thrown" );
return true;
}
force_grenade_toss_internal( guy )
{
guy MagicGrenade( guy GetTagOrigin( guy.force_grenade_throw_tag ), guy.force_grenade_pos, guy.force_grenade_explod_time );
guy.grenadeammo--;
guy.force_grenade_pos = undefined;
guy.force_grenade_explod_time = undefined;
guy.force_grenade_throw_tag = undefined;
}