533 lines
16 KiB
Plaintext
533 lines
16 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
jump( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
maps\mp\agents\alien\_alien_anim_utils::turntowardsvector( var_2 - var_0 );
|
|
var_7 = self scragentgetmaxturnspeed();
|
|
thread jumpinternal( var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
|
|
self waittill( "jump_finished" );
|
|
jumpcleanup( var_7, var_3 );
|
|
}
|
|
|
|
jumpcleanup( var_0, var_1 )
|
|
{
|
|
self scragentsetanimscale( 1.0, 1.0 );
|
|
self scragentsetmaxturnspeed( var_0 );
|
|
|
|
if ( maps\mp\alien\_utility::is_normal_upright( anglestoup( var_1 ) ) )
|
|
{
|
|
self scragentsetphysicsmode( "gravity" );
|
|
self.oriented = 0;
|
|
self.ignoreme = 0;
|
|
}
|
|
else
|
|
{
|
|
self scragentsetphysicsmode( "noclip" );
|
|
self.oriented = 1;
|
|
self.ignoreme = 1;
|
|
}
|
|
}
|
|
|
|
jumpinternal( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "killanimscript" );
|
|
maps\mp\agents\alien\_alien_anim_utils::turntowardsvector( var_2 - var_0 );
|
|
|
|
if ( isdefined( var_6 ) )
|
|
maps\mp\agents\alien\_alien_anim_utils::resetscriptable( var_6, var_2 );
|
|
|
|
self.trajectoryactive = 0;
|
|
var_7 = spawnstruct();
|
|
var_8 = getjumpinfo( var_0, var_1, var_2, var_3, var_4 );
|
|
getjumpanimstates( var_8, var_7 );
|
|
|
|
if ( isdefined( var_5 ) && isdefined( var_5.fnsetanimstates ) )
|
|
self [[ var_5.fnsetanimstates ]]( var_8, var_7 );
|
|
|
|
var_9 = getjumpstartangles( var_0, var_1, var_2 );
|
|
self scragentsetphysicsmode( "noclip" );
|
|
self scragentsetorientmode( "face angle abs", var_9 );
|
|
var_10 = 0;
|
|
var_11 = self getanimentry( var_7.launchanimstate, var_7.launchanimentry );
|
|
var_12 = self getanimentry( var_7.landanimstate, var_7.landanimentry );
|
|
var_13 = getnotetracktimes( var_12, "finish" );
|
|
|
|
if ( var_13.size > 0 )
|
|
var_14 = var_13[0] * getanimlength( var_12 );
|
|
else
|
|
var_14 = getanimlength( var_12 );
|
|
|
|
var_15 = var_14 / var_7.playbackrate;
|
|
var_16 = floor( var_15 * 20.0 );
|
|
var_17 = var_16 / 20.0 / var_15;
|
|
var_18 = getnotetracktimes( var_12, "stop_teleport" );
|
|
|
|
if ( var_18.size > 0 )
|
|
{
|
|
var_19 = var_18[0] * var_15;
|
|
var_20 = ceil( var_19 * 20.0 );
|
|
var_21 = var_20 / 20.0 / var_15;
|
|
var_22 = getmovedelta( var_12, var_21, var_17 );
|
|
}
|
|
else
|
|
{
|
|
var_19 = 0.8 * var_15;
|
|
var_20 = ceil( var_19 * 20.0 );
|
|
var_21 = var_20 / 20.0 / var_15;
|
|
var_22 = getmovedelta( var_12, var_21, var_17 );
|
|
}
|
|
|
|
var_3 = getjumpendangles( var_0, var_2, var_3 );
|
|
var_23 = rotatevector( var_22, var_3 );
|
|
var_24 = var_2 - var_23;
|
|
self scragentsetanimmode( "anim deltas" );
|
|
self playsoundonmovingent( get_jump_sfx_alias() );
|
|
|
|
if ( animhasnotetrack( var_11, "start_teleport" ) )
|
|
maps\mp\agents\_scriptedagents::playanimnatrateuntilnotetrack( var_7.launchanimstate, var_7.launchanimentry, var_7.playbackrate, "jump_launch", "start_teleport" );
|
|
else
|
|
maps\mp\agents\_scriptedagents::playanimnatratefortime( var_7.launchanimstate, var_7.launchanimentry, var_7.playabackrate, 0.5 * getanimlength( var_11 ) / var_7.playbackrate );
|
|
|
|
var_25 = gettime();
|
|
var_10 = self scragentdotrajectory( self.origin, var_24, var_8.jumpspeed2d );
|
|
self.trajectoryactive = 1;
|
|
self endon( "jump_pain_interrupt" );
|
|
thread jumppain( var_10, var_2 );
|
|
self notify( "jump_launching" );
|
|
var_26 = self scragentgetmaxturnspeed();
|
|
thread jumporient( var_8, var_3, var_26, var_10 );
|
|
maps\mp\agents\_scriptedagents::waituntilnotetrack( "jump_launch", "end" );
|
|
var_27 = ( gettime() - var_25 ) / 1000;
|
|
var_28 = var_10 - var_27 - var_19;
|
|
|
|
if ( var_28 > 0 )
|
|
maps\mp\agents\_scriptedagents::playanimnatratefortime( var_7.inairanimstate, var_7.inairanimentry, var_7.playbackrate, var_28 );
|
|
|
|
if ( isdefined( var_5 ) && isdefined( var_5.fnlandanimstatechoice ) )
|
|
self [[ var_5.fnlandanimstatechoice ]]( var_8, var_7 );
|
|
|
|
self setanimstate( var_7.landanimstate, var_7.landanimentry, var_7.playbackrate );
|
|
self waittill( "traverse_complete" );
|
|
self.trajectoryactive = 0;
|
|
|
|
if ( isdefined( var_6 ) )
|
|
maps\mp\agents\alien\_alien_anim_utils::playanimonscriptable( var_6, var_2 );
|
|
|
|
self scragentsetanimscale( 1.0, 0.0 );
|
|
self scragentsetmaxturnspeed( 20.2832 );
|
|
self scragentsetanimmode( "anim deltas" );
|
|
self scragentsetorientmode( "face angle abs", var_3 );
|
|
thread waitforlandimpact( "jump_land" );
|
|
maps\mp\agents\_scriptedagents::waituntilnotetrack( "jump_land", "end" );
|
|
self scragentsetanimscale( 1.0, 1.0 );
|
|
self setorigin( var_2, 0 );
|
|
self notify( "jump_finished" );
|
|
}
|
|
|
|
waitforlandimpact( var_0 )
|
|
{
|
|
var_1 = maps\mp\alien\_utility::get_alien_type();
|
|
|
|
switch ( var_1 )
|
|
{
|
|
case "elite":
|
|
maps\mp\agents\_scriptedagents::waituntilnotetrack( var_0, "jump_land_impact" );
|
|
maps\mp\agents\alien\_alien_elite::on_jump_impact();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
jumporient( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "death" );
|
|
var_4 = ( 0, 0, 1 );
|
|
var_5 = 0.85;
|
|
var_6 = maps\mp\alien\_utility::is_normal_upright( var_0.startupvector );
|
|
var_7 = maps\mp\alien\_utility::is_normal_upright( var_0.endupvector );
|
|
|
|
if ( var_6 && !var_7 )
|
|
{
|
|
var_8 = 0.5;
|
|
var_9 = 1.0;
|
|
}
|
|
else if ( !var_6 && var_7 )
|
|
{
|
|
var_8 = 0.0;
|
|
var_9 = 0.5;
|
|
}
|
|
else
|
|
{
|
|
var_8 = 0.0;
|
|
var_9 = 1.0;
|
|
}
|
|
|
|
var_10 = var_9 - var_8;
|
|
|
|
if ( var_8 > 0 )
|
|
wait( var_3 * var_8 );
|
|
|
|
var_11 = 1.0;
|
|
|
|
if ( distancesquared( self.angles, var_1 ) > var_11 )
|
|
{
|
|
var_12 = anglesdelta( self.angles, var_1 );
|
|
var_13 = var_12 / ( var_3 * var_10 );
|
|
var_13 = var_13 * 3.14159 / 180.0;
|
|
var_13 = var_13 / 20;
|
|
self scragentsetmaxturnspeed( var_13 );
|
|
}
|
|
|
|
self scragentsetorientmode( "face angle abs", var_1 );
|
|
}
|
|
|
|
getjumpinfo( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = spawnstruct();
|
|
var_6 = var_2 - var_0;
|
|
var_7 = var_6 * ( 1, 1, 0 );
|
|
var_7 = vectornormalize( var_7 );
|
|
var_5.launchorigin = var_0 + var_7 * level.alienanimdata.jumplaunchgrounddelta;
|
|
var_5.landorigin = var_2;
|
|
var_5.jumpvector = var_5.landorigin - var_5.launchorigin;
|
|
var_5.jumpvector2d = var_5.jumpvector * ( 1, 1, 0 );
|
|
var_5.jumpdistance2d = length( var_5.jumpvector2d );
|
|
var_5.jumpdirection2d = var_5.jumpvector2d / var_5.jumpdistance2d;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_5.landvector = var_4 - var_2;
|
|
else if ( isdefined( self.enemy ) )
|
|
var_5.landvector = self.enemy.origin - var_2;
|
|
else
|
|
var_5.landvector = anglestoforward( self.angles );
|
|
|
|
var_5.startangles = getjumpangles( var_5.jumpvector, anglestoup( var_1 ) );
|
|
var_5.endangles = getjumpangles( var_5.jumpvector, anglestoup( var_3 ) );
|
|
var_5.startupvector = anglestoup( var_5.startangles );
|
|
var_5.endupvector = anglestoup( var_5.endangles );
|
|
getjumpvelocity( var_5 );
|
|
return var_5;
|
|
}
|
|
|
|
getjumpangles( var_0, var_1 )
|
|
{
|
|
var_2 = maps\mp\agents\alien\_alien_anim_utils::projectvectortoplane( var_0, var_1 );
|
|
var_3 = vectorcross( var_2, var_1 );
|
|
var_4 = axistoangles( var_2, var_3, var_1 );
|
|
return var_4;
|
|
}
|
|
|
|
getjumpvelocity( var_0 )
|
|
{
|
|
var_1 = var_0.jumpdistance2d;
|
|
var_2 = var_0.jumpvector[2];
|
|
var_3 = !maps\mp\alien\_utility::is_normal_upright( var_0.endupvector );
|
|
var_4 = getjumpgravity( var_3 );
|
|
var_5 = 1.01;
|
|
var_6 = trajectorycalculateminimumvelocity( var_0.launchorigin, var_0.landorigin, var_4 );
|
|
var_7 = getjumpspeedmultiplier( var_3 );
|
|
var_8 = var_6 * var_5 * var_7;
|
|
var_9 = trajectorycalculateexitangle( var_8, var_4, var_1, var_2 );
|
|
var_10 = cos( var_9 );
|
|
var_0.jumptime = var_0.jumpdistance2d / ( var_8 * var_10 );
|
|
var_11 = var_4 * ( 0, 0, -1 );
|
|
var_0.launchvelocity = trajectorycalculateinitialvelocity( var_0.launchorigin, var_0.landorigin, var_11, var_0.jumptime );
|
|
var_0.launchvelocity2d = var_0.launchvelocity * ( 1, 1, 0 );
|
|
var_0.jumpspeed2d = length( var_0.launchvelocity2d );
|
|
}
|
|
|
|
getjumpspeedmultiplier( var_0 )
|
|
{
|
|
if ( isdefined( self.melee_jumping ) && self.melee_jumping )
|
|
return level.alien_jump_melee_speed;
|
|
else if ( var_0 )
|
|
return getdvarfloat( "agent_jumpWallSpeed" );
|
|
else
|
|
return getdvarfloat( "agent_jumpSpeed" );
|
|
}
|
|
|
|
getjumpgravity( var_0 )
|
|
{
|
|
if ( isdefined( self.melee_jumping ) && self.melee_jumping )
|
|
return level.alien_jump_melee_gravity;
|
|
else if ( var_0 )
|
|
return getdvarfloat( "agent_jumpWallGravity" );
|
|
else
|
|
return getdvarfloat( "agent_jumpGravity" );
|
|
}
|
|
|
|
getjumpplaybackrate( var_0, var_1 )
|
|
{
|
|
var_2 = self getanimentry( var_1.launchanimstate, var_1.launchanimentry );
|
|
var_3 = self getanimentry( var_1.inairanimstate, var_1.inairanimentry );
|
|
var_4 = self getanimentry( var_1.landanimstate, var_1.landanimentry );
|
|
var_5 = getanimlength( var_2 );
|
|
var_6 = var_5 * 0.5;
|
|
var_7 = getnotetracktimes( var_2, "start_teleport" );
|
|
|
|
if ( isdefined( var_7 ) && var_7.size > 0 )
|
|
var_6 = var_5 - var_7[0] * var_5;
|
|
|
|
var_8 = getanimlength( var_4 );
|
|
var_9 = var_8 * 0.5;
|
|
var_10 = getnotetracktimes( var_4, "stop_teleport" );
|
|
|
|
if ( isdefined( var_10 ) && var_10.size > 0 )
|
|
var_9 = var_10[0] * var_8;
|
|
|
|
var_11 = getanimlength( var_3 );
|
|
var_12 = ceil( var_0.jumptime * 20.0 );
|
|
var_13 = var_12 / 20.0;
|
|
var_14 = var_11 + var_6 + var_9;
|
|
var_15 = var_14 / var_13;
|
|
var_16 = var_11 / var_15 + 0.1;
|
|
var_17 = var_11 / var_16;
|
|
return var_17;
|
|
}
|
|
|
|
getjumpanimstates( var_0, var_1 )
|
|
{
|
|
var_1.launchanimstate = getlaunchanimstate( var_0 );
|
|
var_1.launchanimentry = getlaunchanimentry( var_0, var_1.launchanimstate );
|
|
var_1.landanimstate = getlandanimstate( var_0 );
|
|
var_1.landanimentry = getlandanimentry( var_0, var_1.landanimstate );
|
|
var_1.inairanimstate = getinairanimstate( var_0, var_1.launchanimstate, var_1.landanimstate );
|
|
var_1.inairanimentry = getinairanimentry( var_0, var_1.launchanimstate, var_1.landanimstate );
|
|
var_1.playbackrate = getjumpplaybackrate( var_0, var_1 );
|
|
}
|
|
|
|
getjumpstartangles( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = anglestoup( var_1 );
|
|
var_4 = vectornormalize( var_2 - var_0 );
|
|
|
|
if ( vectordot( var_3, var_4 ) > 0.98 )
|
|
var_4 = ( 0, 0, 1 );
|
|
|
|
var_5 = vectorcross( var_3, var_4 );
|
|
var_4 = vectorcross( var_5, var_3 );
|
|
return axistoangles( var_4, -1 * var_5, var_3 );
|
|
}
|
|
|
|
getlaunchanimstate( var_0 )
|
|
{
|
|
var_1 = 20;
|
|
var_2 = cos( 90 - var_1 );
|
|
var_3 = vectornormalize( var_0.jumpvector );
|
|
var_4 = vectordot( var_3, var_0.startupvector );
|
|
|
|
if ( abs( var_4 ) <= var_2 )
|
|
return "jump_launch_level";
|
|
else if ( var_4 > 0 )
|
|
return "jump_launch_up";
|
|
else if ( var_4 < 0 )
|
|
return "jump_launch_down";
|
|
}
|
|
|
|
getlaunchanimentry( var_0, var_1 )
|
|
{
|
|
var_2 = vectornormalize( var_0.launchvelocity );
|
|
var_2 = rotatevector( var_2, var_0.startangles );
|
|
var_3 = self getanimentrycount( var_1 );
|
|
var_4 = 0;
|
|
var_5 = vectordot( level.alienanimdata.jumplaunchdirection[var_1][var_4], var_2 );
|
|
|
|
for ( var_6 = 1; var_6 < var_3; var_6++ )
|
|
{
|
|
var_7 = vectordot( level.alienanimdata.jumplaunchdirection[var_1][var_6], var_2 );
|
|
|
|
if ( var_7 > var_5 )
|
|
{
|
|
var_4 = var_6;
|
|
var_5 = var_7;
|
|
}
|
|
}
|
|
|
|
return var_4;
|
|
}
|
|
|
|
getinairanimstate( var_0, var_1, var_2 )
|
|
{
|
|
return "jump_in_air";
|
|
}
|
|
|
|
getinairanimentry( var_0, var_1, var_2 )
|
|
{
|
|
return level.alienanimdata.inairanimentry[var_1][var_2];
|
|
}
|
|
|
|
getjumpendangles( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = anglestoup( var_2 );
|
|
var_4 = vectornormalize( var_1 - var_0 );
|
|
|
|
if ( vectordot( var_3, var_4 ) > 0.98 )
|
|
var_4 = ( 0, 0, 1 );
|
|
|
|
var_5 = vectorcross( var_3, var_4 );
|
|
var_4 = vectorcross( var_5, var_3 );
|
|
return axistoangles( var_4, -1 * var_5, var_3 );
|
|
}
|
|
|
|
getlandanimstate( var_0 )
|
|
{
|
|
var_1 = length( var_0.jumpvector );
|
|
var_2 = 0.342;
|
|
|
|
if ( !maps\mp\alien\_utility::is_normal_upright( var_0.endupvector ) )
|
|
{
|
|
var_3 = ( 0, 0, 1 );
|
|
var_4 = vectordot( var_0.jumpvector, var_3 ) / var_1;
|
|
|
|
if ( var_4 > var_2 )
|
|
return "jump_land_sidewall_low";
|
|
else
|
|
return "jump_land_sidewall_high";
|
|
}
|
|
|
|
var_4 = vectordot( var_0.jumpvector, var_0.endupvector ) / var_1;
|
|
|
|
if ( var_4 > var_2 )
|
|
return "jump_land_down";
|
|
else if ( var_4 < var_2 * -1 )
|
|
return "jump_land_up";
|
|
else
|
|
return "jump_land_level";
|
|
}
|
|
|
|
getlandanimentry( var_0, var_1 )
|
|
{
|
|
var_2 = maps\mp\agents\alien\_alien_anim_utils::projectvectortoplane( var_0.jumpvector, var_0.endupvector );
|
|
var_3 = maps\mp\agents\alien\_alien_anim_utils::projectvectortoplane( var_0.landvector, var_0.endupvector );
|
|
var_4 = var_2 - var_3;
|
|
var_5 = vectorcross( var_3, var_0.endupvector );
|
|
var_6 = vectornormalize( maps\mp\agents\alien\_alien_anim_utils::projectvectortoplane( var_5, var_0.endupvector ) ) * 100;
|
|
var_7 = vectordot( var_2 * -1, var_6 );
|
|
var_8 = length( var_2 );
|
|
var_9 = length( var_3 );
|
|
var_10 = length( var_4 );
|
|
var_11 = 0.001;
|
|
|
|
if ( var_8 < var_11 || var_9 < var_11 )
|
|
return 1;
|
|
|
|
var_12 = ( var_8 * var_8 + var_9 * var_9 - var_10 * var_10 ) / ( 2 * var_8 * var_9 );
|
|
|
|
if ( var_12 <= -1 )
|
|
return 6;
|
|
else if ( var_12 >= 1 )
|
|
return 1;
|
|
else
|
|
{
|
|
var_13 = acos( var_12 );
|
|
|
|
if ( var_7 > 0 )
|
|
{
|
|
if ( 0 <= var_13 && var_13 < 22.5 )
|
|
return 1;
|
|
else if ( 22.5 <= var_13 && var_13 < 67.5 )
|
|
return 2;
|
|
else if ( 67.5 <= var_13 && var_13 < 112.5 )
|
|
return 4;
|
|
else if ( 112.5 <= var_13 && var_13 < 157.5 )
|
|
return 7;
|
|
else
|
|
return 6;
|
|
}
|
|
else if ( 0 <= var_13 && var_13 < 22.5 )
|
|
return 1;
|
|
else if ( 22.5 <= var_13 && var_13 < 67.5 )
|
|
return 0;
|
|
else if ( 67.5 <= var_13 && var_13 < 112.5 )
|
|
return 3;
|
|
else if ( 112.5 <= var_13 && var_13 < 157.5 )
|
|
return 5;
|
|
else
|
|
return 6;
|
|
}
|
|
}
|
|
|
|
jumppain( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "killanimscript" );
|
|
self endon( "jump_finished" );
|
|
var_2 = gettime();
|
|
var_3 = var_0 * 1000;
|
|
self waittill( "jump_pain", var_4, var_5, var_6, var_7 );
|
|
|
|
if ( !self.trajectoryactive )
|
|
return;
|
|
|
|
self notify( "jump_pain_interrupt" );
|
|
var_8 = maps\mp\agents\alien\_alien_anim_utils::getpainanimstate( "jump_pain", var_6, var_7 );
|
|
var_9 = maps\mp\agents\alien\_alien_anim_utils::getpainanimindex( "jump", var_4, var_5 );
|
|
var_10 = maps\mp\agents\alien\_alien_anim_utils::getdamagedegree( var_6, var_7 );
|
|
var_11 = var_2 * 0.001 + var_0;
|
|
playinairjumppainanims( var_8, var_9, var_11, var_10 );
|
|
self scragentsetanimscale( 1.0, 0.0 );
|
|
self scragentsetanimmode( "anim deltas" );
|
|
self scragentsetorientmode( "face angle abs", self.angles );
|
|
var_12 = getimpactpainanimstate( var_10 );
|
|
var_13 = maps\mp\agents\alien\_alien_anim_utils::getimpactpainanimindex( var_9 );
|
|
self setanimstate( var_12, var_13, 1.0 );
|
|
maps\mp\agents\_scriptedagents::waituntilnotetrack( var_12, "code_move" );
|
|
self notify( "jump_finished" );
|
|
}
|
|
|
|
playinairjumppainanims( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "killanimscript" );
|
|
self endon( "jump_finished" );
|
|
self setanimstate( var_0, var_1, 1.0 );
|
|
var_4 = common_scripts\utility::waittill_any_return( "jump_pain", "traverse_complete" );
|
|
|
|
if ( var_4 == "traverse_complete" )
|
|
return;
|
|
|
|
var_5 = var_2 - gettime() * 0.001;
|
|
|
|
if ( var_5 > 0 )
|
|
{
|
|
var_6 = 2.0;
|
|
var_7 = getjumppainidleanimstate( var_3 );
|
|
var_8 = self getanimentry( var_7, var_1 );
|
|
var_9 = getanimlength( var_8 );
|
|
var_10 = min( var_6, var_9 / var_5 );
|
|
self setanimstate( var_7, var_1, var_10 );
|
|
}
|
|
|
|
self waittill( "traverse_complete" );
|
|
}
|
|
|
|
getjumppainidleanimstate( var_0 )
|
|
{
|
|
return "jump_pain_idle_" + var_0;
|
|
}
|
|
|
|
getimpactpainanimstate( var_0 )
|
|
{
|
|
return "jump_impact_pain_" + var_0;
|
|
}
|
|
|
|
get_jump_sfx_alias()
|
|
{
|
|
switch ( maps\mp\alien\_utility::get_alien_type() )
|
|
{
|
|
case "elite":
|
|
return "null";
|
|
case "spitter":
|
|
return "spitter_jump";
|
|
case "seeder":
|
|
return "seed_jump";
|
|
case "gargoyle":
|
|
return "gg_jump";
|
|
default:
|
|
return "alien_jump";
|
|
}
|
|
}
|