344 lines
8.5 KiB
Plaintext
344 lines
8.5 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
if ( !isdefined( self.cover ) )
|
|
self.cover = spawnstruct();
|
|
|
|
self.cover.state = "none";
|
|
self.cover.laststatechangetime = 0;
|
|
self.cover.istatechange = 0;
|
|
self.cover.hidestate = covermulti_choosehidestate();
|
|
self.cover.fnoverlord = ::covermulti_think;
|
|
self.covernode = self.node;
|
|
covermulti_think();
|
|
}
|
|
|
|
end_script()
|
|
{
|
|
covermulti_exitstate( self.cover.state );
|
|
self.cover.fnoverlord = undefined;
|
|
self.cover.laststatechangetime = undefined;
|
|
self.cover.istatechange = undefined;
|
|
animscripts\corner::end_script_corner();
|
|
animscripts\cover_behavior::end_script( "multi" );
|
|
}
|
|
|
|
covermulti_think()
|
|
{
|
|
if ( !isdefined( self.covernode ) )
|
|
return;
|
|
|
|
var_0 = self.covernode getvalidcoverpeekouts();
|
|
|
|
if ( isdefined( self.cover.arrivalnodetype ) )
|
|
{
|
|
if ( covermulti_isvaliddir( self.cover.arrivalnodetype, var_0 ) )
|
|
{
|
|
var_1 = covermulti_setdir( self.cover.arrivalnodetype );
|
|
self.cover.arrivalnodetype = undefined;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( self.enemy ) )
|
|
{
|
|
covermulti_setdir( covermulti_getrandomvaliddir( var_0 ) );
|
|
return;
|
|
}
|
|
|
|
var_2 = self.covernode.origin;
|
|
var_3 = self.enemy.origin;
|
|
var_4 = var_3 - var_2;
|
|
var_5 = vectortoangles( var_4 );
|
|
var_6 = angleclamp180( var_5[1] - self.covernode.angles[1] );
|
|
var_7 = undefined;
|
|
|
|
if ( var_6 > 12 )
|
|
var_8 = [ "left", "over", "right" ];
|
|
else if ( var_6 < -12 )
|
|
var_8 = [ "right", "over", "left" ];
|
|
else if ( var_6 > 5 )
|
|
{
|
|
var_8 = [ [ "left", "over" ], "right" ];
|
|
var_7 = 15000;
|
|
}
|
|
else if ( var_6 < -5 )
|
|
{
|
|
var_8 = [ [ "right", "over" ], "left" ];
|
|
var_7 = 15000;
|
|
}
|
|
else
|
|
{
|
|
var_8 = [ "over", [ "right", "left" ] ];
|
|
var_7 = 15000;
|
|
}
|
|
|
|
var_9 = covermulti_getbestvaliddir( var_8, var_0 );
|
|
var_1 = covermulti_setdir( var_9, var_7 );
|
|
}
|
|
|
|
covermulti_isvaliddir( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = self.node getvalidcoverpeekouts();
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
if ( var_1[var_2] == var_0 )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
covermulti_getbestvaliddir( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = self.node getvalidcoverpeekouts();
|
|
|
|
var_2 = [];
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
var_4 = var_0[var_3];
|
|
|
|
if ( !isarray( var_4 ) )
|
|
{
|
|
var_2[var_2.size] = var_4;
|
|
continue;
|
|
}
|
|
|
|
var_4 = common_scripts\utility::array_randomize( var_4 );
|
|
|
|
for ( var_5 = 0; var_5 < var_4.size; var_5++ )
|
|
var_2[var_2.size] = var_4[var_5];
|
|
}
|
|
|
|
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
|
|
{
|
|
if ( covermulti_isvaliddir( var_2[var_3], var_1 ) )
|
|
return var_2[var_3];
|
|
}
|
|
}
|
|
|
|
covermulti_getrandomvaliddir( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = self.node getvalidcoverpeekouts();
|
|
|
|
var_1 = randomint( var_0.size );
|
|
return var_0[var_1];
|
|
}
|
|
|
|
covermulti_getnonrandomvaliddir( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = self getvalidcoverpeekouts();
|
|
|
|
if ( var_0[0] == "over" )
|
|
{
|
|
if ( self doesnodeallowstance( "stand" ) )
|
|
return "stand";
|
|
else
|
|
return "crouch";
|
|
}
|
|
|
|
return var_0[0];
|
|
}
|
|
|
|
covermulti_setdir( var_0, var_1 )
|
|
{
|
|
if ( var_0 == "over" )
|
|
{
|
|
var_2 = self.node doesnodeallowstance( "stand" );
|
|
var_3 = self.node doesnodeallowstance( "crouch" );
|
|
|
|
if ( var_2 )
|
|
{
|
|
if ( self.cover.state != "crouch" || !var_3 )
|
|
covermulti_setstate( "stand", var_1 );
|
|
|
|
return 1;
|
|
}
|
|
else if ( var_3 )
|
|
{
|
|
if ( self.cover.state != "stand" || !var_2 )
|
|
covermulti_setstate( "crouch", var_1 );
|
|
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
covermulti_setstate( var_0, var_1 );
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
covermulti_setstate( var_0, var_1 )
|
|
{
|
|
if ( self.cover.state == var_0 )
|
|
return 0;
|
|
|
|
if ( !isdefined( var_1 ) || var_1 < 0 )
|
|
var_1 = 5000;
|
|
|
|
var_2 = gettime();
|
|
|
|
if ( self.cover.laststatechangetime > 0 && var_2 - self.cover.laststatechangetime < var_1 )
|
|
return 0;
|
|
|
|
self.cover.laststatechangetime = var_2;
|
|
thread covermulti_setstateinternal( var_0 );
|
|
return 1;
|
|
}
|
|
|
|
covermulti_setstateinternal( var_0 )
|
|
{
|
|
self notify( "killanimscript" );
|
|
var_1 = covermulti_choosehidestate();
|
|
covermulti_dotransition( self.cover.state, self.a.pose, self.cover.hidestate, var_0, self.a.pose, var_1 );
|
|
covermulti_exitstate( self.cover.state );
|
|
self.cover.state = var_0;
|
|
self.cover.hidestate = var_1;
|
|
covermulti_enterstate( self.cover.state );
|
|
}
|
|
|
|
covermulti_enterstate( var_0 )
|
|
{
|
|
if ( var_0 == "left" )
|
|
animscripts\cover_left::main();
|
|
else if ( var_0 == "right" )
|
|
animscripts\cover_right::main();
|
|
else if ( var_0 == "stand" )
|
|
animscripts\cover_stand::main();
|
|
else if ( var_0 == "crouch" )
|
|
animscripts\cover_crouch::main();
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
covermulti_exitstate( var_0 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "left":
|
|
animscripts\cover_left::end_script();
|
|
break;
|
|
case "right":
|
|
animscripts\cover_right::end_script();
|
|
break;
|
|
case "stand":
|
|
animscripts\cover_stand::end_script();
|
|
break;
|
|
case "crouch":
|
|
animscripts\cover_crouch::end_script();
|
|
break;
|
|
}
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
covermulti_dotransition( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
self endon( "killanimscript" );
|
|
|
|
if ( var_0 == "none" || var_3 == "none" )
|
|
return;
|
|
|
|
var_6 = covermulti_getanimtransition( var_0, var_1, var_2, var_3, var_4, var_5 );
|
|
|
|
if ( !isdefined( var_6 ) )
|
|
return;
|
|
|
|
self setflaggedanimknoball( "cover_multi_trans", var_6, %body, 1, 0.2, 1 );
|
|
animscripts\shared::donotetracks( "cover_multi_trans" );
|
|
}
|
|
|
|
covermulti_choosehidestate()
|
|
{
|
|
if ( !isdefined( self.a.array ) || !isdefined( self.a.array["alert_idle_back"] ) )
|
|
return "forward";
|
|
|
|
if ( common_scripts\utility::cointoss() )
|
|
return "forward";
|
|
else
|
|
return "back";
|
|
}
|
|
|
|
covermulti_getstatefromdir( var_0, var_1 )
|
|
{
|
|
if ( var_1 == "left" || var_1 == "right" )
|
|
return var_1;
|
|
|
|
if ( var_0 doesnodeallowstance( "stand" ) )
|
|
return "stand";
|
|
|
|
return "crouch";
|
|
}
|
|
|
|
covermulti_getanimtransition( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
if ( var_2 == "back" )
|
|
var_6 = var_1 + "_back";
|
|
else if ( var_0 == "stand" || var_0 == "crouch" )
|
|
var_6 = var_0 + "_forward";
|
|
else
|
|
var_6 = var_0 + "_" + var_1;
|
|
|
|
var_6 = var_6 + "_to_";
|
|
|
|
if ( var_5 == "back" )
|
|
var_6 = var_6 + ( var_4 + "_back" );
|
|
else if ( var_3 == "stand" || var_3 == "crouch" )
|
|
var_6 = var_6 + ( var_3 + "_forward" );
|
|
else
|
|
var_6 = var_6 + ( var_3 + "_" + var_4 );
|
|
|
|
var_7 = self.animarchetype;
|
|
|
|
if ( !isdefined( var_7 ) || !isdefined( anim.archetypes[var_7]["cover_multi"] ) )
|
|
var_7 = "soldier";
|
|
|
|
return anim.archetypes[var_7]["cover_multi"][var_6];
|
|
}
|
|
|
|
init_animset_cover_multi()
|
|
{
|
|
var_0 = [];
|
|
var_0["stand"] = [];
|
|
var_0["stand"]["trans"] = [];
|
|
var_0["stand"]["trans"]["left_stand"] = [];
|
|
var_0["stand"]["trans"]["left_crouch"] = [];
|
|
var_0["stand"]["trans"]["right_stand"] = [];
|
|
var_0["stand"]["trans"]["right_crouch"] = [];
|
|
var_0["stand"]["trans"]["front_stand"] = [];
|
|
var_0["stand"]["trans"]["front_crouch"] = [];
|
|
var_0["stand"]["trans"]["back_stand"] = [];
|
|
var_0["stand"]["trans"]["back_crouch"] = [];
|
|
var_0["left_stand_to_right_stand"] = undefined;
|
|
var_0["left_stand_to_right_crouch"] = undefined;
|
|
var_0["left_stand_to_stand_back"] = undefined;
|
|
var_0["left_stand_to_stand_forward"] = undefined;
|
|
var_0["left_stand_to_crouch_back"] = undefined;
|
|
var_0["left_stand_to_crouch_forward"] = undefined;
|
|
var_0["left_crouch_to_right_stand"] = undefined;
|
|
var_0["left_crouch_to_right_crouch"] = undefined;
|
|
var_0["left_crouch_to_stand_back"] = undefined;
|
|
var_0["left_crouch_to_stand_forward"] = undefined;
|
|
var_0["left_crouch_to_crouch_back"] = undefined;
|
|
var_0["left_crouch_to_crouch_forward"] = undefined;
|
|
var_0["crouch"] = [];
|
|
anim.archetypes["soldier"]["cover_multi"] = var_0;
|
|
}
|