mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-23 09:35:45 +00:00
672 lines
19 KiB
Plaintext
672 lines
19 KiB
Plaintext
|
|
//****************************************************************************
|
|
// **
|
|
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
|
// **
|
|
//****************************************************************************
|
|
// **
|
|
// Module: nx_hithard_b_monorail_station.gsc **
|
|
// NOTE: called from nx_hithard_b.gsc **
|
|
// **
|
|
// Created: 4/4/2011 - TJ Stamm **
|
|
// **
|
|
//****************************************************************************
|
|
|
|
#include maps\_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\_anim;
|
|
#include maps\_vehicle;
|
|
#include maps\nx_hithard_b_util;
|
|
//#include maps\_hud_util;
|
|
|
|
|
|
//***********************************************************************
|
|
// *
|
|
// INITIALIZATION: The following are called from nx_hithard_b.gsc *
|
|
// *
|
|
//***********************************************************************
|
|
|
|
// Objective specific flag_init() calls
|
|
flag_inits()
|
|
{
|
|
flag_init( "monorail_wave_1_clear" );
|
|
|
|
flag_init( "monorail_wave_2_spawned" );
|
|
flag_init( "monorail_wave_2_clear" );
|
|
}
|
|
|
|
// Objective specific add_hint_string() calls
|
|
hint_string_inits()
|
|
{
|
|
//add_hint_string( "hint_parachute_smoke", &"NX_HITHARD_PARACHUTE_HINT_SMOKE", ::hint_parachute_smoke );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// Monorail Station Encounter *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
monorail_station_main()
|
|
{
|
|
// Create the station entrance doors
|
|
//left_door = monorail_make_sliding_door( "monorail_auto_door_left" );
|
|
//right_door = monorail_make_sliding_door( "monorail_auto_door_right" );
|
|
|
|
//left_door thread monorail_automatic_door();
|
|
//right_door thread monorail_automatic_door();
|
|
|
|
// JR - I hooked this up to do a looping open/close anim
|
|
// as if the door was jammed, but it just doesnt look cool. Disabled.
|
|
//left_door thread monorail_door_stuck_loop( 18.75, -18.75, 19, -0.25 );
|
|
//right_door thread monorail_door_stuck_loop( -18.75, 18.75, -19, 0.25 );
|
|
|
|
|
|
flag_set( "plaza_enc_complete" );
|
|
|
|
objective_number = 23;
|
|
obj_position = GetEnt( "on_ramp_lapse", "targetname" );
|
|
Objective_Add( objective_number, "current", "Clear the monorail station." );
|
|
Objective_Position( objective_number, GetStruct( "on_ramp_lapse", "targetname" ).origin );
|
|
autosave_by_name( "plaza_enc_complete" );
|
|
|
|
playerstart_monorail_start();
|
|
}
|
|
|
|
playerstart_monorail_start()
|
|
{
|
|
level._start_point = "monorail";
|
|
|
|
monorail_station_enc();
|
|
|
|
flag_wait( "monorail_station_enc_complete" );
|
|
|
|
autosave_now();
|
|
}
|
|
|
|
monorail_station_enc()
|
|
{
|
|
// Kick off dialogue
|
|
level thread monorail_dialogue();
|
|
level thread threat_id_logic();
|
|
level thread vp_movement();
|
|
|
|
// Handles extra logic for taking the upstairs route
|
|
//level thread monorail_upstairs_logic();
|
|
|
|
// Makes sure the player doesnt cheese by running ahead
|
|
level thread monorail_sprint_watcher();
|
|
|
|
level thread monorail_trigger_logic();
|
|
|
|
// Change baker and duke to CQB
|
|
//level.squad[0] enable_cqbwalk();
|
|
//level.squad[1] enable_cqbwalk();
|
|
|
|
// Spawn the behavior script on the 1st wave
|
|
monorail_wave_1 = GetEntArray( "monorail_wave_1_guys", "script_noteworthy" );
|
|
array_spawn_function( monorail_wave_1, ::monorail_wave_1_logic );
|
|
|
|
// Spawn the behavior script on the 2nd wave
|
|
monorail_wave_2 = GetEntArray( "monorail_wave_2_guys", "script_noteworthy" );
|
|
array_spawn_function( monorail_wave_2, ::monorail_wave_2_logic );
|
|
|
|
flag_wait( "magicgrenade_monorail_start" );
|
|
|
|
// Triggers events when groups of enemies die
|
|
thread monorail_enemy_wave_watcher();
|
|
|
|
//MagicGrenade( "smoke_grenade_american", GetStruct( "teargas_monorail_start_01_origin", "targetname" ).origin, GetStruct( "teargas_monorail_start_01_target", "targetname" ).origin, 1.0 );
|
|
//MagicGrenade( "smoke_grenade_american", GetStruct( "teargas_monorail_start_02_origin", "targetname" ).origin, GetStruct( "teargas_monorail_start_02_target", "targetname" ).origin, 4.0 );
|
|
|
|
thread magic_pain_grenade( "smoke_grenade_american", GetStruct( "teargas_monorail_start_01_origin", "targetname" ).origin, GetStruct( "teargas_monorail_start_01_target", "targetname" ).origin, 0.0 );
|
|
thread magic_pain_grenade( "smoke_grenade_american", GetStruct( "teargas_monorail_start_02_origin", "targetname" ).origin, GetStruct( "teargas_monorail_start_02_target", "targetname" ).origin, 3.0 );
|
|
thread magic_pain_grenade( "smoke_grenade_american", GetStruct( "teargas_monorail_start_03_origin", "targetname" ).origin, GetStruct( "teargas_monorail_start_03_target", "targetname" ).origin, 0.0 );
|
|
thread magic_pain_grenade( "smoke_grenade_american", GetStruct( "teargas_monorail_start_04_origin", "targetname" ).origin, GetStruct( "teargas_monorail_start_04_target", "targetname" ).origin, 3.0 );
|
|
//thread magic_pain_grenade( "smoke_grenade_american", GetStruct( "teargas_monorail_start_05_origin", "targetname" ).origin, GetStruct( "teargas_monorail_start_05_target", "targetname" ).origin, 0.0 );
|
|
|
|
flag_wait( "monorail_station_enc_complete" );
|
|
|
|
// Turn off CQB walk
|
|
//level.squad[0] disable_cqbwalk();
|
|
//level.squad[1] disable_cqbwalk();
|
|
|
|
// Cleanup any remaining enemies
|
|
monorail_enemy_cleanup();
|
|
|
|
post_monorail_regroup();
|
|
}
|
|
|
|
|
|
// Watching for the waves to be cleared
|
|
monorail_enemy_wave_watcher()
|
|
{
|
|
// This will check num enemies alive
|
|
// and trigger wave 2 early, so the waves overlap
|
|
while( !flag( "monorail_wave_1_clear" ) && !flag( "monorail_spawn_wave_2" ) )
|
|
{
|
|
num_alive = get_ai_group_sentient_count( "monorail_station_enemies" );
|
|
if( num_alive < 3 )
|
|
{
|
|
flag_set( "monorail_wave_1_clear" );
|
|
|
|
// Remaining wave 1 guys should fall back
|
|
alive_guys = get_ai_group_ai( "monorail_station_enemies" );
|
|
foreach( guy in alive_guys )
|
|
{
|
|
retreat_vol = GetEnt( "monorail_retreat_volume", "targetname" );
|
|
if( isDefined( retreat_vol ))
|
|
{
|
|
guy SetGoalVolumeAuto( retreat_vol );
|
|
}
|
|
else
|
|
{
|
|
AssertMsg( "Script monorail_enemy_wave_watcher couldn't find monorail_retreat_volume" );
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
wait( 0.25 );
|
|
}
|
|
|
|
// Move allies up
|
|
if( !flag( "monorail_spawn_wave_2" ))
|
|
{
|
|
wait( RandomFloatRange( 1.5, 2.5 ));
|
|
|
|
issue_color_orders( "b144", "allies" );
|
|
|
|
// "Clear forward!"
|
|
wait_play_dialogue_wait( 0.0, "hithard_gyp_move_06" );
|
|
}
|
|
|
|
// Short delay for the player to move up
|
|
wait( RandomFloatRange( 1.5, 2.5 ));
|
|
|
|
// Spawn second wave of enemies
|
|
monorail_wave_2 = GetEntArray( "monorail_wave_2_guys", "script_noteworthy" );
|
|
array_thread( monorail_wave_2, ::spawn_ai );
|
|
flag_set( "monorail_wave_2_spawned" );
|
|
|
|
// More smoke for the second wave
|
|
//thread magic_pain_grenade( "smoke_grenade_american", GetStruct( "teargas_monorail_start_02_origin", "targetname" ).origin, GetStruct( "teargas_monorail_start_02_target", "targetname" ).origin, 4.0 );
|
|
|
|
flag_wait( "monorail_wave_2_clear" );
|
|
|
|
// Cleared the whole room
|
|
flag_set( "monorail_station_enc_complete" );
|
|
}
|
|
|
|
|
|
// AI behavior for wave 1
|
|
monorail_wave_1_logic()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( !isalive( self ) )
|
|
return;
|
|
|
|
self.aggressivemode = true;
|
|
}
|
|
|
|
// AI behavior for wave 2
|
|
monorail_wave_2_logic()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( !isalive( self ) )
|
|
return;
|
|
|
|
self ai_actorseek( level._player ); //level.squad[2] );
|
|
self.aggressivemode = true;
|
|
}
|
|
|
|
// Makes the AI chase down a specific actor
|
|
ai_actorseek( actor )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( self.target ) )
|
|
self waittill( "goal" );
|
|
|
|
self setgoalentity( actor );
|
|
self.goalradius = 2000;
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
monorail_dialogue()
|
|
{
|
|
self endon( "monorail_station_enc_complete" );
|
|
|
|
flag_wait( "monorail_station_start" );
|
|
|
|
// Captain Baker: "We're on point, stay on our 6"
|
|
wait_play_dialogue_wait( 0.5, "hithard_bak_plaza2_08" );
|
|
|
|
// Secret Service Leader: "Right behind you"
|
|
wait_play_dialogue_wait( 0.0, "hithard_sslead_plaza2_01" );
|
|
|
|
|
|
// DT# 4507 - These VO lines need to be triggered when the enemies appear
|
|
// not when this trigger is hit
|
|
flag_wait( "magicgrenade_monorail_start" );
|
|
wait( 2.0 );
|
|
|
|
// Duke: "Fuck me - tangos in the open!"
|
|
wait_play_dialogue_wait( 0.0, "hithard_gyp_mono_02" );
|
|
|
|
// Baker: "They're popping smoke. Use threat ID"
|
|
wait_play_dialogue_wait( 1.5, "hithard_bak_mono_01", 1.0 );
|
|
|
|
level notify( "turned_on_threatID" );
|
|
|
|
// Baker: "Specter, get the angle on them!"
|
|
wait_play_dialogue_wait( 9.0, "hithard_bak_mono_02" );
|
|
|
|
|
|
// Trigger this VO when most of the room is cleared
|
|
flag_wait( "monorail_wave_2_spawned" );
|
|
|
|
while( !flag( "monorail_wave_2_clear" ))
|
|
{
|
|
num_alive = get_ai_group_sentient_count( "monorail_station_enemies" );
|
|
|
|
if( flag( "monorail_wave_1_clear" ) && num_alive < 2 )
|
|
{
|
|
wait( RandomFloatRange( 1.5, 2.5 ));
|
|
|
|
// Bravo Team Leader: "Convoy2 this is Bravo actual - just a few mikes out from rally point"
|
|
wait_play_dialogue_wait( 0.0, "hithard_btl_mono_01" );
|
|
break;
|
|
}
|
|
wait( 0.25 );
|
|
}
|
|
|
|
}
|
|
|
|
|
|
// Helper script for timing dialogue
|
|
wait_play_dialogue_wait( wait_in, dialogue1, wait_out )
|
|
{
|
|
wait( wait_in );
|
|
|
|
radio_dialogue( dialogue1 );
|
|
|
|
if( isDefined( wait_out ))
|
|
{
|
|
wait( wait_out );
|
|
}
|
|
}
|
|
|
|
// JR - Moves the VP through the area
|
|
vp_movement()
|
|
{
|
|
//level.squad[2].animname = "vp";
|
|
//level.squad[3].animname = "ss";
|
|
|
|
level.squad[2] disable_pain();
|
|
level.squad[3] disable_pain();
|
|
|
|
// Initial position in the monorail station
|
|
flag_wait( "monorail_station_start" );
|
|
wait( 3.0 );
|
|
thread ss_vignette_move( GetNode( "monorail_vp_move_node_1", "script_noteworthy" ), level.squad[2], level.squad[3], false );
|
|
issue_color_orders( "r14 p14", "allies" );
|
|
|
|
// Wave 1 down - Move up
|
|
flag_wait_any( "monorail_wave_1_clear", "monorail_wave_2_clear" );
|
|
|
|
wait( RandomFloatRange( 2.6, 3.0 ));
|
|
|
|
thread ss_vignette_move( GetNode( "monorail_vp_move_node_2", "script_noteworthy" ), level.squad[2], level.squad[3], false );
|
|
issue_color_orders( "r150 p150", "allies" );
|
|
|
|
// Secret Service Leader: "Moving Patriot under the platform"
|
|
wait_play_dialogue_wait( 0.0, "hithard_sslead_monorail_01" );
|
|
|
|
// Wave 2 down - Move to exit
|
|
flag_wait( "monorail_wave_2_clear" );
|
|
thread ss_vignette_move( GetNode( "monorail_vp_move_node_5", "script_noteworthy" ), level.squad[2], level.squad[3], false );
|
|
issue_color_orders( "r155 p155", "allies" );
|
|
|
|
// Transition into on-ramp section
|
|
trigger_wait( "trigger_encounter_00", "script_noteworthy" );
|
|
level.squad[2] notify( "stop_vignette" );
|
|
}
|
|
|
|
|
|
// Turns on Threat ID at the right time
|
|
threat_id_logic()
|
|
{
|
|
level._player endon( "death" );
|
|
|
|
level waittill( "turned_on_threatID" );
|
|
|
|
thread maps\_threatid::threatid_bootup_and_enable();
|
|
|
|
// Count number of enemies for threatID
|
|
level thread threat_id_counter();
|
|
|
|
// Wait to allow ThreatID to boot up
|
|
wait( 4.0 );
|
|
|
|
flag_wait( "monorail_station_enc_complete" );
|
|
thread maps\_threatid::threatid_disable_overlay_and_effect();
|
|
}
|
|
|
|
// Updates the ThreatID counter based on number of enemies alive
|
|
threat_id_counter()
|
|
{
|
|
level endon( "monorail_station_enc_complete" );
|
|
num_alive = get_ai_group_sentient_count( "monorail_station_enemies" );
|
|
while( num_alive > 0 )
|
|
{
|
|
num_alive = get_ai_group_sentient_count( "monorail_station_enemies" );
|
|
level._player SetActiveThreatCount( num_alive );
|
|
|
|
wait( 0.25 );
|
|
}
|
|
}
|
|
|
|
post_monorail_regroup()
|
|
{
|
|
//IPrintLnBold( "regroup" );
|
|
Objective_State( 23, "done" );
|
|
|
|
gypsy_node = GetNode( "gypsy_survey_homestretch", "script_noteworthy" );
|
|
baker_node = GetNode( "baker_homestretch", "script_noteworthy" );
|
|
|
|
level.squad[0].goalradius = 8;
|
|
level.squad[1].goalradius = 8;
|
|
|
|
level.squad[0] SetGoalNode( baker_node );
|
|
level.squad[1] SetGoalNode( gypsy_node );
|
|
|
|
// Short wait for the dialogue line
|
|
wait( RandomFloatRange( 2.2, 2.8 ));
|
|
|
|
// Bravo Team Leader: "Convoy2 this is Bravo actual - just a few mikes out from rally point"
|
|
//wait_play_dialogue_wait( 0.0, "hithard_btl_mono_01" );
|
|
|
|
// "Keep moving!"
|
|
wait_play_dialogue_wait( 0.0, "hithard_bak_move_02" );
|
|
|
|
level.squad[1] waittill( "goal" );
|
|
level.squad[0] waittill( "goal" );
|
|
|
|
wait_play_dialogue_wait( 1.8, "hithard_bak_mono_03" );
|
|
|
|
// Duke: Home stretch, fellas. I can see the highway...100 meters
|
|
//wait_play_dialogue_wait( 0.0, "hithard_gyp_highway_01" );
|
|
|
|
// Captain Baker: "Move quick."
|
|
//wait_play_dialogue_wait( 1.0, "hithard_bak_highway_01" );
|
|
|
|
// Secret Service Leader: "We're right behind you"
|
|
//wait_play_dialogue_wait( 0.5, "hithard_sslead_highway_01" );
|
|
|
|
// Captain Baker: "Let's punch it."
|
|
//wait_play_dialogue_wait( 1.2, "hithard_bak_highway_02" );
|
|
|
|
|
|
// Duke: Home stretch, fellas. I can see the highway...100 meters
|
|
//radio_dialogue( "hithard_gyp_highway_01" );
|
|
// Baker: Let's punch it
|
|
//radio_dialogue( "hithard_bak_highway_02" );
|
|
// SSLead: We're right behind you
|
|
//radio_dialogue( "hithard_sslead_highway_01" );
|
|
|
|
level.squad[0] enable_ai_color();
|
|
level.squad[1] enable_ai_color();
|
|
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
monorail_upstairs_logic()
|
|
{
|
|
level endon( "monorail_station_enc_complete" );
|
|
|
|
// Setup for the upstairs path
|
|
monorail_upstairs_guys = GetEntArray( "monorail_upstairs_guys", "script_noteworthy" );
|
|
array_spawn_function( monorail_upstairs_guys, ::monorail_upstairs_guys_logic );
|
|
|
|
flag_wait( "went upstairs" );
|
|
|
|
//change bakers color to green
|
|
level.squad[1] set_force_color( "g" ); // Actor is now green
|
|
issue_color_orders( "g143" ,"allies" );
|
|
|
|
// Hit spawn triggers
|
|
// ...
|
|
// Combat
|
|
// ...
|
|
|
|
flag_wait( "monorail_upstairs_clear" );
|
|
|
|
// Move baker back down and reset his color
|
|
level.squad[1] set_force_color( "b" );
|
|
issue_color_orders( "g143" ,"allies" );
|
|
|
|
}
|
|
|
|
monorail_upstairs_guys_logic()
|
|
{
|
|
// ?
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
// This script is meant to detect when the player sprints ahead of the area
|
|
monorail_sprint_watcher()
|
|
{
|
|
flag_wait( "monorail_station_enc_complete" );
|
|
|
|
num_alive = get_ai_group_sentient_count( "monorail_station_enemies" );
|
|
|
|
// Player trying to bypass section
|
|
if( num_alive > 3 )
|
|
{
|
|
wait( 0.5 );
|
|
//level._player.health = 1;
|
|
//level._player kill();
|
|
SetDvar( "ui_deadquote", "@NX_HITHARD_B_FAILED_ABANDON" );
|
|
level notify( "mission_failed" );
|
|
maps\_utility::missionFailedWrapper();
|
|
}
|
|
// If the player runs through and only a few guys left, make sure they die
|
|
else if( num_alive > 0 )
|
|
{
|
|
monorail_enemy_cleanup();
|
|
}
|
|
}
|
|
|
|
// Kills any remaining actors
|
|
monorail_enemy_cleanup()
|
|
{
|
|
// Downstairs guys
|
|
alive_guys = get_ai_group_ai( "monorail_station_enemies" );
|
|
foreach( guy in alive_guys )
|
|
{
|
|
guy.health = 1;
|
|
guy thread monorail_wait_and_kill();
|
|
}
|
|
}
|
|
|
|
// Kills straggling enemies if the player is finished with
|
|
// this section and leaves the area
|
|
monorail_wait_and_kill()
|
|
{
|
|
self endon( "death" );
|
|
wait( RandomFloatRange( 2.5, 3.5 ));
|
|
self kill();
|
|
}
|
|
|
|
|
|
// Turns off triggers as the player moves through
|
|
// This is done to prevent allies from backtracking if
|
|
// the player hits old triggers
|
|
monorail_trigger_logic()
|
|
{
|
|
flag_wait( "monorail_wave_1_clear" );
|
|
thread maps\nx_hithard_b_util::all_triggers_off( "monorail_triggers_wave_1" );
|
|
|
|
flag_wait( "monorail_wave_2_clear" );
|
|
thread maps\nx_hithard_b_util::all_triggers_off( "monorail_triggers_wave_2" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
// Makes a movable door object out of any prefab that has a script_origin
|
|
monorail_make_sliding_door( sTargetname )
|
|
{
|
|
// Get all the entities inside sTargetname prefab object
|
|
ents = getentarray( sTargetname, "targetname" );
|
|
|
|
if( !ents.size )
|
|
{
|
|
AssertMsg( "No door ents found in monorail_make_sliding_door" );
|
|
return;
|
|
}
|
|
|
|
door_org = undefined; // Door origin, the hinge
|
|
door_models = [];
|
|
door_brushes = [];
|
|
foreach( ent in ents )
|
|
{
|
|
// If the entity is a brushmodel
|
|
if ( ent.code_classname == "script_brushmodel" )
|
|
{
|
|
door_brushes[ door_brushes.size ] = ent; // Add it to the list of brushes
|
|
continue;
|
|
}
|
|
// If the entity is a script_origin
|
|
if ( ent.code_classname == "script_origin" )
|
|
{
|
|
door_org = ent; // Save it as the hinge
|
|
continue;
|
|
}
|
|
// If the entity is a script_model
|
|
if ( ent.code_classname == "script_model" )
|
|
{
|
|
door_models[ door_models.size ] = ent; // Add it to the list of models
|
|
continue;
|
|
}
|
|
}
|
|
|
|
// Link everything to the origin so it moves together as one object
|
|
foreach( model in door_models )
|
|
model linkto( door_org );
|
|
foreach( brush in door_brushes )
|
|
brush linkto( door_org );
|
|
|
|
door = door_org;
|
|
|
|
return door;
|
|
}
|
|
|
|
// closed: -62
|
|
// JR - Unused
|
|
monorail_right_door_open()
|
|
{
|
|
// Door should be closed when the level starts
|
|
self monorail_door_slide( -20, 0.25 );
|
|
}
|
|
|
|
|
|
// Continually opens and closes the door to make it look stuck
|
|
// Closed: 65
|
|
monorail_door_stuck_loop( v1, v2, v3, v4 )
|
|
{
|
|
level endon( "monorail_station_enc_complete" );
|
|
|
|
// Door should be closed when the level starts
|
|
self monorail_door_slide( v1, 0.25 );
|
|
|
|
while( !flag( "monorail_station_enc_complete" ))
|
|
{
|
|
// Close
|
|
self monorail_door_slide( v2, 1.0 );
|
|
|
|
wait( 6.0 );
|
|
|
|
// Open
|
|
self monorail_door_slide( v3, 1.0 );
|
|
|
|
// Open
|
|
self monorail_door_slide( v4, 0.2 );
|
|
|
|
wait( 1 );
|
|
}
|
|
}
|
|
|
|
|
|
// Open a door opject that was made with make_door_from_prefab()
|
|
monorail_door_slide( x_movement, time )
|
|
{
|
|
// Wait untill current move command is finished before starting a new one
|
|
if ( isdefined( self.moving ) )
|
|
{
|
|
while( isdefined( self.moving ) )
|
|
wait( 0.05 );
|
|
}
|
|
|
|
self.moving = true;
|
|
//angles = distance;
|
|
//if ( isdefined( self.openangles ) )
|
|
// angles = self.openangles;
|
|
|
|
//iTime = 4;
|
|
//self thread play_sound_on_entity( "nx_scn_training_fence_open" );
|
|
self moveto( self.origin + ( x_movement, 0, 0 ), time, 0.1, 0.1 );
|
|
|
|
//self thread play_sound_on_entity( "scn_training_fence_open" );
|
|
//array_call( self.brushes,::notsolid );
|
|
wait( time ); // Wait for the door to open
|
|
self.moving = undefined; // No longer moving
|
|
}
|
|
|
|
monorail_automatic_door()
|
|
{
|
|
/*
|
|
while()
|
|
{
|
|
//door_trig =
|
|
if( level._player IsTouching( door_trig ))
|
|
{
|
|
if( self.open == false )
|
|
{
|
|
self.open = true;
|
|
self monorail_door_open();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self.open = false;
|
|
self monorail_door_close();
|
|
}
|
|
|
|
if( flag( "monorail_station_end_complete" ))
|
|
{
|
|
// Close the door for good
|
|
self monorail_door_close();
|
|
return;
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
|