mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-22 09:05:45 +00:00
431 lines
11 KiB
Plaintext
431 lines
11 KiB
Plaintext
//****************************************************************************
|
|
// **
|
|
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
|
// **
|
|
//****************************************************************************
|
|
// **
|
|
// Module: Skyscraper Exfil Utils **
|
|
// **
|
|
// Created: 11/10/2011 - John Webb **
|
|
// **
|
|
//****************************************************************************
|
|
|
|
#include maps\_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\_anim;
|
|
#include maps\_vehicle;
|
|
#include maps\_nx_utility;
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
exfil_setup_allies( start_name )
|
|
{
|
|
level.baker = setup_ally( start_name, "ally1" );
|
|
//setup_ally( start_name, "ally2" );
|
|
level.baker.countryID = "us";
|
|
level.baker set_battlechatter_id( "bar" );
|
|
}
|
|
|
|
setup_ally( start_name, ally_name )
|
|
{
|
|
ally_start = getStruct( start_name + "_" + ally_name, "targetname" );
|
|
assert( isDefined( ally_start ) );
|
|
|
|
ally_spawner = GetEnt( ally_name, "targetname" );
|
|
ally_spawner add_spawn_function( ::ally_common );
|
|
level.allies[ ally_name ] = ally_spawner spawn_ai();
|
|
assert( isDefined( level.allies[ ally_name ] ) );
|
|
|
|
|
|
level.allies[ ally_name ] ForceTeleport( ally_start.origin, ally_start.angles );
|
|
if ( isDefined( ally_start.target ) )
|
|
{
|
|
node = GetNode( ally_start.target, "targetname" );
|
|
assert( isDefined( node ) );
|
|
level.allies[ ally_name ] follow_path( node );
|
|
}
|
|
return level.allies[ ally_name ];
|
|
}
|
|
|
|
ally_common()
|
|
{
|
|
self thread magic_bullet_shield();
|
|
self.threatbias = 200;
|
|
}
|
|
|
|
player_start( player_start_origin_name )
|
|
{
|
|
// Move player to start
|
|
player_start_origin = GetEnt( player_start_origin_name, "targetname" );
|
|
level._player setOrigin( player_start_origin.origin );
|
|
level._player setPlayerAngles( player_start_origin.angles );
|
|
}
|
|
|
|
ignore_everything()
|
|
{
|
|
self.ignoreall = true;
|
|
self.grenadeawareness = 0;
|
|
self.ignoreexplosionevents = true;
|
|
self.ignorerandombulletdamage = true;
|
|
self.ignoresuppression = true;
|
|
self.disableBulletWhizbyReaction = true;
|
|
self disable_pain();
|
|
|
|
self.og_newEnemyReactionDistSq = self.newEnemyReactionDistSq;
|
|
self.newEnemyReactionDistSq = 0;
|
|
}
|
|
|
|
clear_ignore_everything()
|
|
{
|
|
self.ignoreall = false;
|
|
self.grenadeawareness = 1;
|
|
self.ignoreexplosionevents = false;
|
|
self.ignorerandombulletdamage = false;
|
|
self.ignoresuppression = false;
|
|
self.disableBulletWhizbyReaction = false;
|
|
self enable_pain();
|
|
|
|
if( IsDefined( self.og_newEnemyReactionDistSq ) )
|
|
{
|
|
self.newEnemyReactionDistSq = self.og_newEnemyReactionDistSq;
|
|
}
|
|
}
|
|
|
|
stumble_walk( move_speed, decay_time, blur_intensity, stumble_intensity, skip_stumble, speed_no_decay )
|
|
{
|
|
//tricky shit to make just one run at a time.
|
|
level notify( "start_stumble_walk" );
|
|
level endon( "start_stumble_walk");
|
|
|
|
time = 1;
|
|
|
|
if( IsDefined(speed_no_decay) && speed_no_decay )
|
|
{
|
|
player_stumble_movement_speed_do_not_decay( move_speed );
|
|
}
|
|
else
|
|
{
|
|
level thread player_stumble_movement_speed( move_speed, decay_time );
|
|
}
|
|
|
|
level._player thread player_random_blur( decay_time, blur_intensity );
|
|
|
|
|
|
if ( !IsDefined( skip_stumble ) || !skip_stumble )
|
|
{
|
|
//if we've interupted an existing one, use the existing ground plane and bring it back towards neutral before
|
|
//letting the second one come into effect.
|
|
if( !IsDefined( level._ground_ref_ent ) )
|
|
{
|
|
level._ground_ref_ent = spawn( "script_model", ( 0, 0, 0 ) );
|
|
level._player PlayerSetGroundReferenceEnt( level._ground_ref_ent );
|
|
}
|
|
else
|
|
{
|
|
level._ground_ref_ent RotateTo( (0,0,0), time, time * 0.5, time * 0.5 );
|
|
wait time;
|
|
}
|
|
|
|
self stumble_walk_internal( decay_time, stumble_intensity );
|
|
|
|
if( IsDefined( level._ground_ref_ent ) )
|
|
{
|
|
level._ground_ref_ent RotateTo( (0,0,0), time, time * 0.5, time * 0.5 );
|
|
wait time;
|
|
level._ground_ref_ent delete();
|
|
}
|
|
level._player PlayerSetGroundReferenceEnt( undefined );
|
|
}
|
|
else
|
|
{
|
|
if( IsDefined( level._ground_ref_ent ))
|
|
{
|
|
time = 1.0;
|
|
level._ground_ref_ent RotateTo(( 0, 0, 0 ), time, time * 0.5, time * 0.5 );
|
|
wait time;
|
|
level._ground_ref_ent delete();
|
|
}
|
|
level._player PlayerSetGroundReferenceEnt( undefined );
|
|
wait decay_time - time;
|
|
}
|
|
|
|
if( !( IsDefined(speed_no_decay) && speed_no_decay ) )
|
|
{
|
|
player_stumble_restore_movement_speed();
|
|
}
|
|
|
|
setblur( 0, time );
|
|
}
|
|
|
|
player_stumble_movement_speed( speed, decay_time )
|
|
{
|
|
level._player AllowJump( false );
|
|
level._player AllowSprint( false );
|
|
|
|
// Turn off the stance HUD indicator while the player cannot crouch
|
|
SetSavedDvar( "ammoCounterHide", "1" );
|
|
SetSavedDvar ( "weapon_view_bob_speed_modifier", 0.7);
|
|
|
|
level._player blend_movespeedscale( speed, 0.05 );
|
|
//level._player delayThread( 1, ::blend_movespeedscale, speed, 5 );
|
|
|
|
wait 0.05;
|
|
|
|
level._player blend_movespeedscale( 1.0, decay_time );
|
|
}
|
|
|
|
player_stumble_movement_speed_do_not_decay( speed )
|
|
{
|
|
level._player AllowCrouch( false );
|
|
level._player AllowProne( false );
|
|
level._player AllowJump( false );
|
|
level._player AllowSprint( false );
|
|
|
|
// Turn off the stance HUD indicator while the player cannot crouch
|
|
SetSavedDvar( "ammoCounterHide", "1" );
|
|
SetSavedDvar ( "weapon_view_bob_speed_modifier", 0.7);
|
|
|
|
level._player maps\_utility_code::movespeed_set_func( speed );
|
|
}
|
|
|
|
player_stumble_restore_movement_speed()
|
|
{
|
|
level._player AllowCrouch( true );
|
|
level._player AllowProne( true );
|
|
level._player AllowJump( true );
|
|
level._player AllowSprint( true );
|
|
|
|
SetSavedDvar( "ammoCounterHide", "0" );
|
|
|
|
SetSavedDvar ( "weapon_view_bob_speed_modifier", 1);
|
|
|
|
level._player blend_movespeedscale( 1.0, 0.1 );
|
|
}
|
|
|
|
|
|
|
|
player_random_blur( decay_length, blur_intensity )
|
|
{
|
|
level._player endon( "death" );
|
|
level endon( "stop_stumble_walk" );
|
|
|
|
decay_length_ms = decay_length * 1000;
|
|
|
|
start_time = GetTime();
|
|
|
|
while ( true )
|
|
{
|
|
wait 0.05;
|
|
if ( randomint( 100 ) > 10 )
|
|
continue;
|
|
|
|
time = GetTime();
|
|
if( time > start_time + decay_length_ms )
|
|
return;
|
|
|
|
blur = randomint( 3 ) + 2;
|
|
blur = blur * ( 1 - ( ( time - start_time ) / decay_length_ms ) );
|
|
blur_time = randomfloatrange( 0.3, 0.7 );
|
|
recovery_time = randomfloatrange( 0.3, 1 );
|
|
setblur( blur * blur_intensity, blur_time );
|
|
wait blur_time;
|
|
setblur( 0, recovery_time );
|
|
|
|
//blur_wait_time = randomfloatrange( 0.5, 1.5 );
|
|
//wait blur_wait_time;
|
|
}
|
|
}
|
|
|
|
stumble_walk_internal( decay_length, stumble_intensity )
|
|
{
|
|
level._player endon( "death" );
|
|
level endon( "stop_stumble_walk" );
|
|
|
|
start_time = GetTime();
|
|
|
|
wait_length = decay_length;
|
|
|
|
while ( true )
|
|
{
|
|
velocity = level._player GetVelocity();
|
|
player_speed = abs( velocity [ 0 ] ) + abs( velocity[ 1 ] );
|
|
|
|
if ( player_speed < 10 )
|
|
{
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
time = GetTime();
|
|
if( time > start_time + ( decay_length * 1000 ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
speed_multiplier = player_speed * stumble_intensity * ( 1 - ( ( time - start_time ) / ( decay_length * 1000 ) ) );
|
|
|
|
p = randomfloatrange( 3, 5 );
|
|
if ( randomint( 100 ) < 20 )
|
|
p *= 3;
|
|
r = randomfloatrange( 3, 7 );
|
|
y = randomfloatrange( -8, -2 );
|
|
|
|
stumble_angles = ( p, y, r );
|
|
stumble_angles = vector_multiply( stumble_angles, speed_multiplier );
|
|
|
|
stumble_time = randomfloatrange( .35, .45 );
|
|
recover_time = randomfloatrange( .65, .8 );
|
|
|
|
stumble( stumble_angles, stumble_time, recover_time );
|
|
}
|
|
}
|
|
|
|
stumble( stumble_angles, stumble_time, recover_time )
|
|
{
|
|
level endon( "stop_stumble_walk" );
|
|
|
|
stumble_angles = adjust_angles_to_player( stumble_angles );
|
|
|
|
level._ground_ref_ent rotateto( stumble_angles, stumble_time, ( stumble_time / 4 * 3 ), ( stumble_time / 4 ) );
|
|
level._ground_ref_ent waittill( "rotatedone" );
|
|
|
|
base_angles = ( randomfloat( 4 ) - 4, randomfloat( 5 ), 0 );
|
|
base_angles = adjust_angles_to_player( base_angles );
|
|
|
|
level._ground_ref_ent rotateto( base_angles, recover_time, 0, recover_time / 2 );
|
|
level._ground_ref_ent waittill( "rotatedone" );
|
|
}
|
|
|
|
adjust_angles_to_player( stumble_angles )
|
|
{
|
|
pa = stumble_angles[ 0 ];
|
|
ra = stumble_angles[ 2 ];
|
|
|
|
rv = anglestoright( level._player.angles );
|
|
fv = anglestoforward( level._player.angles );
|
|
|
|
rva = ( rv[ 0 ], 0, rv[ 1 ] * - 1 );
|
|
fva = ( fv[ 0 ], 0, fv[ 1 ] * - 1 );
|
|
angles = vector_multiply( rva, pa );
|
|
angles = angles + vector_multiply( fva, ra );
|
|
return angles + ( 0, stumble_angles[ 1 ], 0 );
|
|
}
|
|
|
|
enemy_lasers()
|
|
{
|
|
//self.has_no_ir = undefined;
|
|
self LaserForceOn();
|
|
|
|
//we have to create a new entity for the laser flash because if an actor gets deleted we
|
|
//need to be able to kill the fx.
|
|
tag_flash = spawn_tag_origin();
|
|
tag_flash.origin = self GetTagOrigin( "tag_flash");
|
|
//tag_flash.angles = self GetTagAngles( "tag_flash" );
|
|
|
|
tag_flash LinkTo( self, "tag_flash" );
|
|
|
|
if ( IsDefined( level._effect[ "laser_aim" ] ) )
|
|
{
|
|
StopFXOnTag( level._effect[ "laser_aim" ], tag_flash, "tag_origin" );
|
|
PlayFxOnTag( level._effect[ "laser_aim" ], tag_flash, "tag_origin" );
|
|
}
|
|
|
|
self waittill_any( "death", "deleting", "deathanim" );
|
|
|
|
if ( IsDefined( level._effect[ "laser_aim" ] ) )
|
|
{
|
|
StopFXOnTag( level._effect[ "laser_aim" ], tag_flash, "tag_origin", true );
|
|
}
|
|
|
|
//only try to turn off lasers if the ent hasnt been removed.
|
|
if ( isDefined( self ) )
|
|
{
|
|
self LaserForceOff();
|
|
}
|
|
}
|
|
|
|
cop_init()
|
|
{
|
|
self thread no_cover();
|
|
self.no_pistol_switch = true;
|
|
self.dontevershoot = 1;
|
|
|
|
flag_wait( "cops_engaged" );
|
|
//self SetGoalNode( GetNode( self.target, "targetname" ) );
|
|
//self.goalradius = 32;
|
|
self.dontevershoot = undefined;
|
|
}
|
|
|
|
no_cover()
|
|
{
|
|
self endon( "death" );
|
|
self.combatmode = "no_cover";
|
|
//self.fixednode = true;
|
|
flag_wait( "swat_encounter_start" );
|
|
self.combatmode = "cover";
|
|
//self.goalradius = 128;
|
|
//self SetGoalNode( GetNode( self.target, "targetname" ) );
|
|
//side_street_volume = GetEnt( "side_street_volume", "script_noteworthy" );
|
|
//self SetGoalVolumeAuto( side_street_volume );
|
|
}
|
|
|
|
ignore_on_jumpedout()
|
|
{
|
|
self endon( "death" );
|
|
maps\nx_exfil_util::ignore_everything();
|
|
// Swat van guys need to ignore everything for a few seconds after jumping out
|
|
// So they can get out of the way of the van
|
|
self waittill( "jumpedout" );
|
|
wait 3.5;
|
|
maps\nx_exfil_util::clear_ignore_everything();
|
|
}
|
|
|
|
// If from_flag has been set
|
|
// And enemy_noteworthy enemies are under enemy_count
|
|
// And to_flag has not been hit, move up and lead the player
|
|
ally_lead_player( from_flag, to_flag, enemy_aigroup, enemy_count, color_order )
|
|
{
|
|
|
|
if ( flag( to_flag ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
level endon( to_flag );
|
|
flag_wait( from_flag );
|
|
|
|
while ( 1 )
|
|
{
|
|
wait 0.5;
|
|
if ( get_ai_group_sentient_count( enemy_aigroup ) < enemy_count )
|
|
{
|
|
issue_color_orders( color_order, "allies" );
|
|
}
|
|
}
|
|
}
|
|
|
|
smoke_throw( aSmokeOrgs, sFlagToStop )
|
|
{
|
|
level endon( sFlagToStop );
|
|
exploder ( "smoke_screen" );
|
|
while ( true )
|
|
{
|
|
smokeTarget = undefined;
|
|
foreach ( org in aSmokeOrgs )
|
|
{
|
|
//MagicGrenade( "smoke_grenade_american_no_visblock", org.origin, org.origin + ( 0, 0, 1), RandomFloat( 1.1 ) );
|
|
PlayFX( getfx( "smokescreen" ), org.origin );
|
|
//org thread play_sound_in_space( "smokegrenade_explode_default" );
|
|
wait( RandomFloatRange( .1, .3 ) );
|
|
}
|
|
wait( 28 );
|
|
if ( flag( sFlagToStop ) )
|
|
break;
|
|
}
|
|
|
|
}
|
|
|