iw6-scripts/animscripts/cover_prone.gsc
2024-02-13 13:20:49 +01:00

294 lines
8.6 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
init_animset_cover_prone()
{
var_0 = [];
var_0["straight_level"] = %prone_aim_5;
var_0["legs_up"] = %prone_aim_feet_45up;
var_0["legs_down"] = %prone_aim_feet_45down;
var_0["fire"] = %prone_fire_1;
var_0["semi2"] = %prone_fire_burst;
var_0["semi3"] = %prone_fire_burst;
var_0["semi4"] = %prone_fire_burst;
var_0["semi5"] = %prone_fire_burst;
var_0["single"] = [ %prone_fire_1 ];
var_0["burst2"] = %prone_fire_burst;
var_0["burst3"] = %prone_fire_burst;
var_0["burst4"] = %prone_fire_burst;
var_0["burst5"] = %prone_fire_burst;
var_0["burst6"] = %prone_fire_burst;
var_0["reload"] = %prone_reload;
var_0["look"] = [ %prone_twitch_look, %prone_twitch_lookfast, %prone_twitch_lookup ];
var_0["grenade_safe"] = [ %prone_grenade_a, %prone_grenade_a ];
var_0["grenade_exposed"] = [ %prone_grenade_a, %prone_grenade_a ];
var_0["exposed_idle"] = [ %prone_idle ];
var_0["twitch"] = [ %prone_twitch_ammocheck, %prone_twitch_look, %prone_twitch_scan, %prone_twitch_lookfast, %prone_twitch_lookup ];
var_0["hide_to_look"] = %coverstand_look_moveup;
var_0["look_idle"] = %coverstand_look_idle;
var_0["look_to_hide"] = %coverstand_look_movedown;
var_0["look_to_hide_fast"] = %coverstand_look_movedown_fast;
var_0["stand_2_prone"] = %stand_2_prone_nodelta;
var_0["crouch_2_prone"] = %crouch_2_prone;
var_0["prone_2_stand"] = %prone_2_stand_nodelta;
var_0["prone_2_crouch"] = %prone_2_crouch;
var_0["stand_2_prone_firing"] = %stand_2_prone_firing;
var_0["crouch_2_prone_firing"] = %crouch_2_prone_firing;
var_0["prone_2_stand_firing"] = %prone_2_stand_firing;
var_0["prone_2_crouch_firing"] = %prone_2_crouch_firing;
anim.archetypes["soldier"]["cover_prone"] = var_0;
}
main()
{
self endon( "killanimscript" );
animscripts\utility::initialize( "cover_prone" );
if ( weaponclass( self.weapon ) == "rocketlauncher" )
{
animscripts\combat::main();
return;
}
if ( isdefined( self.a.arrivaltype ) && self.a.arrivaltype == "prone_saw" )
animscripts\cover_wall::useselfplacedturret( "saw_bipod_prone", "weapon_saw_MG_Setup" );
else if ( isdefined( self.node.turret ) )
animscripts\cover_wall::usestationaryturret();
if ( isdefined( self.enemy ) && lengthsquared( self.origin - self.enemy.origin ) < squared( 512 ) )
{
thread animscripts\combat::main();
return;
}
setup_cover_prone();
self.covernode = self.node;
self orientmode( "face angle", self.covernode.angles[1] );
self.a.goingtoproneaim = 1;
self setproneanimnodes( -45, 45, %prone_legs_down, %exposed_modern, %prone_legs_up );
if ( self.a.pose != "prone" )
prone_transitionto( "prone" );
else
animscripts\utility::enterpronewrapper( 0 );
thread animscripts\combat_utility::aimidlethread();
setupproneaim( 0.2 );
self setanim( %prone_aim_5, 1, 0.1 );
self orientmode( "face angle", self.covernode.angles[1] );
self animmode( "zonly_physics" );
pronecombatmainloop();
self notify( "stop_deciding_how_to_shoot" );
}
end_script()
{
self.a.goingtoproneaim = undefined;
}
idlethread()
{
self endon( "killanimscript" );
self endon( "kill_idle_thread" );
for (;;)
{
var_0 = animscripts\utility::animarraypickrandom( "prone_idle" );
self setflaggedanimlimited( "idle", var_0 );
self waittillmatch( "idle", "end" );
self clearanim( var_0, 0.2 );
}
}
updatepronewrapper( var_0 )
{
self updateprone( animscripts\utility::lookupanim( "cover_prone", "legs_up" ), animscripts\utility::lookupanim( "cover_prone", "legs_down" ), 1, var_0, 1 );
self setanim( %exposed_aiming, 1, 0.2 );
}
pronecombatmainloop()
{
self endon( "killanimscript" );
thread animscripts\track::trackshootentorpos();
thread animscripts\shoot_behavior::decidewhatandhowtoshoot( "normal" );
var_0 = gettime() > 2500;
for (;;)
{
animscripts\utility::updateisincombattimer();
updatepronewrapper( 0.05 );
if ( !var_0 )
{
wait( 0.05 + randomfloat( 1.5 ) );
var_0 = 1;
continue;
}
if ( !isdefined( self.shootpos ) )
{
if ( considerthrowgrenade() )
continue;
wait 0.05;
continue;
}
var_1 = lengthsquared( self.origin - self.shootpos );
if ( self.a.pose != "crouch" && self isstanceallowed( "crouch" ) && var_1 < squared( 400 ) )
{
if ( var_1 < squared( 285 ) )
{
prone_transitionto( "crouch" );
thread animscripts\combat::main();
return;
}
}
if ( considerthrowgrenade() )
continue;
if ( pronereload( 0 ) )
continue;
if ( animscripts\combat_utility::aimedatshootentorpos() )
{
animscripts\combat_utility::shootuntilshootbehaviorchange();
self clearanim( %add_fire, 0.2 );
continue;
}
wait 0.05;
}
}
pronereload( var_0 )
{
return animscripts\combat_utility::reload( var_0, animscripts\utility::animarray( "reload" ) );
}
setup_cover_prone()
{
self setdefaultaimlimits( self.node );
self.a.array = animscripts\utility::lookupanimarray( "cover_prone" );
}
trythrowinggrenade( var_0, var_1 )
{
var_2 = undefined;
if ( isdefined( var_1 ) && var_1 )
var_2 = animscripts\utility::animarraypickrandom( "grenade_safe" );
else
var_2 = animscripts\utility::animarraypickrandom( "grenade_exposed" );
self animmode( "zonly_physics" );
self.keepclaimednodeifvalid = 1;
var_3 = ( 32, 20, 64 );
var_4 = animscripts\combat_utility::trygrenade( var_0, var_2 );
self.keepclaimednodeifvalid = 0;
return var_4;
}
considerthrowgrenade()
{
if ( isdefined( anim.throwgrenadeatplayerasap ) && isalive( level.player ) )
{
if ( trythrowinggrenade( level.player, 200 ) )
return 1;
}
if ( isdefined( self.enemy ) )
return trythrowinggrenade( self.enemy, 850 );
return 0;
}
shouldfirewhilechangingpose()
{
if ( !isdefined( self.weapon ) || !weaponisauto( self.weapon ) )
return 0;
if ( isdefined( self.node ) && distancesquared( self.origin, self.node.origin ) < 256 )
return 0;
if ( isdefined( self.enemy ) && self cansee( self.enemy ) && !isdefined( self.grenade ) && animscripts\shared::getaimyawtoshootentorpos() < 20 )
return animscripts\move::mayshootwhilemoving();
return 0;
}
prone_transitionto( var_0 )
{
if ( var_0 == self.a.pose )
return;
self clearanim( %root, 0.3 );
animscripts\combat_utility::endfireandanimidlethread();
if ( shouldfirewhilechangingpose() )
var_1 = animscripts\utility::animarray( self.a.pose + "_2_" + var_0 + "_firing" );
else
var_1 = animscripts\utility::animarray( self.a.pose + "_2_" + var_0 );
if ( var_0 == "prone" )
{
}
self setflaggedanimknoballrestart( "trans", var_1, %body, 1, 0.2, 1.0 );
animscripts\shared::donotetracks( "trans" );
self setanimknoballrestart( animscripts\utility::animarray( "straight_level" ), %body, 1, 0.25 );
setupproneaim( 0.25 );
}
finishnotetracks( var_0 )
{
self endon( "killanimscript" );
animscripts\shared::donotetracks( var_0 );
}
setupproneaim( var_0 )
{
self setanimknoball( %prone_aim_5, %body, 1, var_0 );
self setanimlimited( %prone_aim_2_add, 1, var_0 );
self setanimlimited( %prone_aim_4_add, 1, var_0 );
self setanimlimited( %prone_aim_6_add, 1, var_0 );
self setanimlimited( %prone_aim_8_add, 1, var_0 );
}
proneto( var_0, var_1 )
{
self clearanim( %root, 0.3 );
var_2 = undefined;
if ( shouldfirewhilechangingpose() )
{
if ( var_0 == "crouch" )
var_2 = %prone_2_crouch_firing;
else if ( var_0 == "stand" )
var_2 = %prone_2_stand_firing;
}
else if ( var_0 == "crouch" )
var_2 = %prone_2_crouch;
else if ( var_0 == "stand" )
var_2 = %prone_2_stand_nodelta;
if ( isdefined( self.prone_anim_override ) )
var_2 = self.prone_anim_override;
if ( isdefined( self.prone_rate_override ) )
var_1 = self.prone_rate_override;
if ( !isdefined( var_1 ) )
var_1 = 1;
animscripts\utility::exitpronewrapper( getanimlength( var_2 ) / 2 );
self setflaggedanimknoballrestart( "trans", var_2, %body, 1, 0.2, var_1 );
animscripts\shared::donotetracks( "trans" );
self clearanim( var_2, 0.1 );
}