nx1-gsc-dump/maps/nx_border_util.gsc

306 lines
8.8 KiB
Plaintext

//****************************************************************************
// **
// Confidential - (C) Activision Publishing, Inc. 2010 **
// **
//****************************************************************************
// **
// Module: Mission Utils **
// **
// Created: 11/11/11 - Travis Chen (trchen x 4143) **
// **
//****************************************************************************
#include maps\_utility;
#include maps\_nx_utility;
#include common_scripts\utility;
#include maps\_vehicle;
#include maps\_anim;
//*******************************************************************
// *
// *
//*******************************************************************
player_start( player_start_struct_name )
{
// Move player to start
player_start_struct = GetStruct( player_start_struct_name, "targetname" );
level._player setOrigin( player_start_struct.origin );
level._player setPlayerAngles( player_start_struct.angles );
}
//*******************************************************************
// *
// *
//*******************************************************************
// Removes all ai NOW (except bulletshielded)
delete_all_ai_immediately()
{
aAI = getaiarray();
array_thread( aAI, ::delete_ai_not_bullet_shielded );
}
//*******************************************************************
// *
// *
//*******************************************************************
actor_detection_movement_control( dist, angle )
{
self endon ( "terminate_actor_detection" );
self thread stop_when_actor_in_front( dist, angle );
while ( 1 )
{
level waittill ( "ally_convoy_stop_actor_in_front" );
self Vehicle_SetSpeed( 0, 10 );
level waittill ( "ally_convoy_go_no_actor_in_front" );
self ResumeSpeed( 3 );
wait ( 0.05 );
}
}
stop_when_actor_in_front( dist, angle )
{
self endon ( "terminate_actor_detection" );
self.stop_due_to_actors_in_front = false;
while ( 1 )
{
if ( self vehicle_actors_in_front( dist, angle ))
{
if ( isDefined ( self.stop_due_to_actors_in_front ) && self.stop_due_to_actors_in_front == false )
{
level notify ( "ally_convoy_stop_actor_in_front" );
self.stop_due_to_actors_in_front = true;
//iPrintlnBold ( "##### Vehicle stopping due to actors in front" );
}
}
else if (!( self vehicle_actors_in_front( dist, angle )))
{
if ( isDefined ( self.stop_due_to_actors_in_front ) && self.stop_due_to_actors_in_front == true )
{
level notify ( "ally_convoy_go_no_actor_in_front" );
self.stop_due_to_actors_in_front = false;
//iPrintlnBold ( "##### Vehicle moving. Actors clear." );
}
}
wait ( 0.5 );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
// Returns true if any actors (player, squad-mate or enemy) is standing in the way of the vehicle (within a specified angle and distance)
vehicle_actors_in_front( dist, angle )
{
actors_in_front = false;
if( vehicle_entity_in_front( level._player, dist, angle ) )
{
actors_in_front = true;
}
else
{
ai_array = GetAISpeciesArray( "all", "all" );
foreach( ai in ai_array )
{
if( vehicle_entity_in_front( ai, dist, angle ))
{
actors_in_front = true;
break;
}
}
}
return actors_in_front;
}
//*******************************************************************
// *
// *
//*******************************************************************
// Setting up badplace. This thread runs on the vehicle trigger
vehicle_path_disconnector()
{
zone = getent( self.target, "targetname" );
assert( isdefined( zone ) );
zone notsolid();
zone.origin -= ( 0, 0, 1024 );
badplaceName = "vehicle_bad_place_brush_" + zone getEntityNumber();
for ( ;; )
{
self waittill( "trigger", vehicle );
//println ( "##### Vehicle trigger activated" );
if ( !isalive( level.vehicle_convoy[ "vehicle_convoy_1" ] ) || !isalive( level.vehicle_convoy[ "vehicle_convoy_2" ] ))
{
return;
}
if ( !isdefined( vehicle ) )
{
continue;
}
if ( ( vehicle != level.vehicle_convoy[ "vehicle_convoy_1" ] ) && ( vehicle != level.vehicle_convoy[ "vehicle_convoy_2" ] ))
{
continue;
}
if ( vehicle vehicle_getspeed() == 0 )
{
continue;
}
if ( !isdefined( zone.pathsDisconnected ) )
{
zone solid();
badplace_brush( badplaceName, 0, zone, "allies", "axis" );
zone notsolid();
zone.pathsDisconnected = true;
println ( "##### Bad place brush created" );
}
self thread vehicle_reconnects_paths( zone, badplaceName );
}
}
vehicle_reconnects_paths( zone, badplaceName )
{
assert( isdefined( zone ) );
assert( isdefined( badplaceName ) );
zone notify( "waiting_for_path_reconnection" );
zone endon( "waiting_for_path_reconnection" );
level waittill ( "delete_bad_place_brush" );
zone solid();
badplace_delete( badplaceName );
zone notsolid();
zone.pathsDisconnected = undefined;
}
waitForVehicleToPass()
{
self waittillmatch( "trigger", level.vehicle_convoy[ "vehicle_convoy_2" ] );
level notify ( "delete_bad_place_brush" );
println ( "##### After delete the bad place brush" );
}
//*******************************************************************
// *
// *
//*******************************************************************
// Sets up leader spawner
leader_spawner_setup()
{
ally_spawners = GetEntArray( "actor_squad", "script_noteworthy" );
Assert( IsDefined( ally_spawners ));
found = false;
foreach( guy in ally_spawners )
{
if( IsDefined( guy.script_friendname ))
{
if( guy.script_friendname == "Baker" )
{
guy add_spawn_function( ::spawnfunc_leader );
found = true;
break;
}
}
}
if( !found )
AssertMsg( "Could not find the squad leader spawner!" );
}
// Leader spawnfunc
spawnfunc_leader()
{
self.animname = "passengerfront";
level.leader = self;
self thread magic_bullet_shield();
level.leader set_battlechatter_id( "bak" );
}
//*******************************************************************
// *
// *
//*******************************************************************
// Spawns allies based on initial spawners
spawn_allies( location_objects )
{
spawners = GetEntArray( "actor_squad", "script_noteworthy" );
Assert( IsDefined( spawners ));
// Expected ally number is two less than the spawners because of the drivers
ally_num = spawners.size - 2;
if( location_objects.size != ally_num )
AssertMsg( "Ally # is not equal to position #: (" + ally_num + " / " + location_objects.size );
level.allies = [];
position_counter = 0;
for( i = 0; i < spawners.size; i++ )
{
if( IsDefined( spawners[ i ].script_startingposition ))
{
if( spawners[ i ].script_startingposition > 0 )
{
guy = spawners[ i ] spawn_ai();
Assert( IsDefined( guy ));
guy ForceTeleport( location_objects[ position_counter ].origin, location_objects[ position_counter ].angles );
level.allies = array_add( level.allies, guy );
position_counter++;
}
}
}
}
ally_spawner_setup()
{
level.allies = [];
array_spawn_function_noteworthy( "actor_squad", ::spawnfunc_allies );
// Keep ally variable up to date with allies (as they die off)
thread ally_global_watcher();
}
// Keep ally level variable up to date
ally_global_watcher()
{
while( 1 )
{
level.allies = GetAIArray( "allies" );
wait 0.05;
}
}
spawnfunc_allies()
{
self thread replace_on_death();
}
//*******************************************************************
// *
// *
//*******************************************************************