Files
DoomRTX/base/script/map_mc_underground.script
T
2026-05-23 14:19:48 -07:00

2693 lines
66 KiB
Plaintext

namespace map_mc_underground {
// global state variables
float saftey_bridge_state = 1;
float underarm_work_state = 1;
float underarm_fingers_state = -64;
// variable to track crane movement state
float crane_main_state = 0;
float crane_dir = 0;
// Start Xian Stuff
void cache_sounds() {
sys.cacheSoundShader ("mset1_movement");
sys.cacheSoundShader ("mset1_stop");
sys.cacheSoundShader ("mset2_movement");
sys.cacheSoundShader ("mset2_stop");
sys.cacheSoundShader ("m1_start");
sys.cacheSoundShader ("m1_loop");
sys.cacheSoundShader ("m1_stop");
sys.cacheSoundShader ("mcu_support_2s");
sys.cacheSoundShader ("mcu_safteybridge_02");
sys.cacheSoundShader ("mcu_safteybridge_01");
sys.cacheSoundShader ("msmall_pounder");
sys.cacheSoundShader ("servo_1s_01");
sys.cacheSoundShader ("servo_1s_02");
sys.cacheSoundShader ("mech_fingers_1_5s");
sys.cacheSoundShader ("airwhomp");
sys.cacheSoundShader ("something_interesting");
sys.cacheSoundShader ("something_interesting_2");
sys.cacheSoundShader ("metalbounce_1");
sys.cacheSoundShader ("metalbounce_2");
sys.cacheSoundShader ("guisounds_pingup");
sys.cacheSoundShader ("steelswing_01");
sys.cacheSoundShader ("steelswing_02");
sys.cacheSoundShader ("steelswing_03");
sys.cacheSoundShader ("steelswing_04");
sys.cacheSoundShader ("steelswing_05");
sys.cacheSoundShader ("wiresnap");
sys.cacheSoundShader ("mc_hellblast_explosion");
sys.cacheSoundShader ("mc_leatherface");
sys.cacheSoundShader ("mc_invasion_stuff");
sys.cacheSoundShader ("mc_substing_01");
sys.cacheSoundShader ("mc_substing_02");
}
// This function triggers sounds to alter the soundscape after the invasion
void post_invasion_sounds() {
sys.trigger ($hspeaker_1);
sys.trigger ($hspeaker_2);
sys.trigger ($hspeaker_3);
sys.trigger ($hspeaker_4);
sys.trigger ($hspeaker_5);
sys.trigger ($hspeaker_6);
sys.trigger ($hspeaker_7);
sys.trigger ($hspeaker_8);
}
void mover_startsound (entity ent) {
ent.startSoundShader ("m1_start", SND_CHANNEL_VOICE);
sys.wait (0.75);
ent.startSoundShader ("m1_loop", SND_CHANNEL_VOICE2);
}
void mover_stopsound (entity ent) {
ent.startSoundShader ("m1_stop", SND_CHANNEL_VOICE2);
}
// End Xian Stuff
////////////////////////////////////////////////////
//
// Setup binds and times etc...
//
////////////////////////////////////////////////////
void setup_objects()
{
//rotate crane initially
$crane_main.rotateOnce('0 80 0');
//set initial crane times
$crane_main.time (6);
$crane_main.accelTime (3);
$crane_main.decelTime (2);
$crane_carrier.bind ($crane_main);
$crane_carrier_load.bind ($crane_carrier);
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_remote_panel.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
//rotate the two klaxon lights
$emrredlight1_mover.rotateOnce('0 0 45');
$emrredlight2_mover.rotateOnce('0 0 45');
//set airlock door guis initial states to 1
$airlock1_door1_gui.setGuiParm ( "gui_parm1" , 1);
$airlock1_door2_gui.setGuiParm ( "gui_parm1" , 1);
$airlock2_door1_gui.setGuiParm ( "gui_parm1" , 1);
$airlock2_door2_gui.setGuiParm ( "gui_parm1" , 1);
//underarm setup
$underarm_top.bind ($underarm_carrier);
$underarm_upper.bind ($underarm_top);
$underarm_lower.bind ($underarm_upper);
$underarm_fingers.bind ($underarm_lower);
$underarm_tube.bind ($underarm_lower);
$underarm_tube_light.bind ($underarm_tube);
$underarm_upper.accelTime (.2);
$underarm_lower.accelTime (.2);
$underarm_upper.decelTime (.2);
$underarm_lower.decelTime (.2);
$underarm_carrier.speed (150);
$underarm_carrier.accelTime (.25);
$underarm_carrier.decelTime (.25);
$underarm_fingers.time (.01);
$underarm_tube.setColor ( 1, 0, 0 );
$underarm_tube_light.setColor ( 1, 0, 0 );
$underarm_can_1.setColor ( 1, 0, 0 );
$underarm_can_1_light.setColor ( 1, 0, 0 );
$underarm_can_2.setColor ( 1, 0, 0 );
$underarm_can_2_light.setColor ( 1, 0, 0 );
//fingers to up pose
while ( underarm_fingers_state < 0 ){
$underarm_fingers.move ( UP, 1 );
sys.waitFor ($underarm_fingers);
underarm_fingers_state += 1;
}
//arm to storage pose
$underarm_upper.rotateOnce ( '0 0 90' );
$underarm_lower.rotateOnce ( '0 0 -90' );
sys.waitFor ($underarm_lower);
//howitzer setup
$how1_barrel.bind ($how1_base);
$how1_recep.bind ($how1_base);
$how1_catcher.bind ($how1_base);
$how1_base.rotateOnce ( '0 0 45' );
$how2_barrel.bind ($how2_base);
$how2_recep.bind ($how2_base);
$how2_catcher.bind ($how2_base);
$how2_base.rotateOnce ( '0 0 45' );
$how3_barrel.bind ($how3_base);
$how3_recep.bind ($how3_base);
$how3_catcher.bind ($how3_base);
$how3_base.rotateOnce ( '0 0 45' );
sys.waitFor($how1_base);
//crankshaft initial bind and rotate
$mc_pistrod1.bind ($mc_assembly_midpoint);
$mc_pistrod2.bind ($mc_assembly_midpoint);
$mc_pistrod3.bind ($mc_assembly_midpoint);
$mc_piston1.bind ($mc_assembly_midpoint);
$mc_piston2.bind ($mc_assembly_midpoint);
$mc_piston3.bind ($mc_assembly_midpoint);
$mc_crankshaft.bind ($mc_assembly_midpoint);
$mc_assembly_midpoint.rotateOnce ( '-135 0 0' );
sys.waitFor ($mc_assembly_midpoint);
//crankshaft binds and times
$mc_pistrod1.bind ($mc_piston1);
$mc_pistrod2.bind ($mc_piston2);
$mc_pistrod3.bind ($mc_piston3);
$mc_piston1.time (.125);
$mc_pistrod1.time (.125);
$mc_piston2.time (.125);
$mc_pistrod2.time (.125);
$mc_piston3.time (.125);
$mc_pistrod3.time (.125);
$mc_crankshaft.time (.125);
//little piston machine binds and times
$pistrod1.bind ($piston1);
$pistrod2.bind ($piston2);
$pistrod3.bind ($piston3);
$piston1.time (.125);
$pistrod1.time (.125);
$piston2.time (.125);
$pistrod2.time (.125);
$piston3.time (.125);
$pistrod3.time (.125);
$crankshaft.time (.125);
}
void safety_rails_down ()
{
//set rail 1 times
$safety_rail_1.time( 1 );
$safety_rail_1.accelTime( .25 );
$safety_rail_1.decelTime( .25 );
//rails down
$safety_rail_1.move( DOWN, 40 );
}
void safety_rails_up ()
{
//set rail 1 times
$safety_rail_1.time( 1 );
$safety_rail_1.accelTime( .25 );
$safety_rail_1.decelTime( .25 );
//rails up
$safety_rail_1.move( UP, 40 );
}
////////////////////////////////////////////////////
//
// Saftey Bridge AWAY PAIR
// this will put the bridge piece and it's partner
// in the away position
//
////////////////////////////////////////////////////
void saftey_bridge_away_pair(float bridge_number)
{
entity bh1, bh2, bf1, bf2;
bh1=sys.getEntity ("saftey_bridge_holder_" + bridge_number );
bh2=sys.getEntity ("saftey_bridge_holder_" + (bridge_number+1) );
bf1=sys.getEntity ("saftey_bridge_floorpiece_" + bridge_number );
bf2=sys.getEntity ("saftey_bridge_floorpiece_" + (bridge_number+1) );
bf1.bind (bh1);
bf2.bind (bh2);
bh1.startSoundShader ("mcu_support_2s", SND_CHANNEL_VOICE2);
bh1.rotateOnce ( '45 0 0' );
bh2.rotateOnce ( '-45 0 0' );
sys.waitFor (bh1);
bf1.unbind ();
bf2.unbind ();
bf1.startSoundShader ("mcu_safteybridge_02", SND_CHANNEL_VOICE2 );
bf1.move ( REL_FORWARD, 256 );
bf2.move ( REL_BACK, 256 );
sys.waitFor (bf1);
bh1.startSoundShader ("mcu_safteybridge_01", SND_CHANNEL_VOICE );
bh1.rotateOnce ( '-135 0 0' );
bh2.rotateOnce ( '135 0 0' );
sys.waitFor (bh1);
if (bridge_number==7){
//sys.print( "\nlast bridge is done\n" );
saftey_bridge_state = 0;
$saftey_bridge_gui.setGuiParm ( "gui_parm1" , 1);
//sys.print( "setting bridge gui parm \n" );
$underarm_centralight2.fadeInLight (1);
$underarm_centralight1.fadeInLight (1);
}
}
////////////////////////////////////////////////////
//
// Saftey Bridge FORTH_PAIR
// this will put the bridge piece and it's partner
// in the traversable position
//
////////////////////////////////////////////////////
void saftey_bridge_forth_pair(float bridge_number)
{
entity bh1, bh2, bf1, bf2;
bh1=sys.getEntity ("saftey_bridge_holder_" + bridge_number );
bh2=sys.getEntity ("saftey_bridge_holder_" + (bridge_number+1) );
bf1=sys.getEntity ("saftey_bridge_floorpiece_" + bridge_number );
bf2=sys.getEntity ("saftey_bridge_floorpiece_" + (bridge_number+1) );
bh1.startSoundShader ("mcu_safteybridge_01", SND_CHANNEL_VOICE );
bh1.rotateOnce ( '135 0 0' );
bh2.rotateOnce ( '-135 0 0' );
sys.waitFor (bh1);
bf1.unbind ();
bf2.unbind ();
bf1.startSoundShader ("mcu_safteybridge_02", SND_CHANNEL_VOICE2 );
bf1.move ( REL_BACK, 256 );
bf2.move ( REL_FORWARD, 256 );
sys.waitFor (bf1);
bf1.bind (bh1);
bf2.bind (bh2);
bh1.time ( 2 );
bh2.time ( 2 );
bh1.accelTime ( 1 );
bh2.accelTime ( 1 );
bh1.decelTime ( 0 );
bh2.decelTime ( 0 );
bh1.startSoundShader ("mcu_support_2s", SND_CHANNEL_VOICE2);
bh1.rotateOnce ( '-45 0 0' );
bh2.rotateOnce ( '45 0 0' );
sys.waitFor (bh1);
//bounce it
bh1.time( .15 );
bh2.time( .15 );
bh1.accelTime( 0 );
bh2.accelTime( 0 );
bh1.decelTime( .15 );
bh2.decelTime( .15 );
bh1.startSoundShader ("metalbounce_1", SND_CHANNEL_VOICE );
bh1.rotateOnce( '.75 0 0' );
bh2.rotateOnce( '-.75 0 0' );
sys.waitFor (bh1);
bh1.time( .15 );
bh2.time( .15 );
bh1.accelTime( .15 );
bh2.accelTime( .15 );
bh1.decelTime( 0 );
bh2.decelTime( 0 );
//bh1.startSoundShader ("metalbounce_2", SND_CHANNEL_VOICE2 );
bh1.rotateOnce( '-.75 0 0' );
bh2.rotateOnce( '.75 0 0' );
sys.waitFor (bh1);
bh1.time ( 2 );
bh2.time ( 2 );
bh1.accelTime ( .5 );
bh2.accelTime ( .5 );
bh1.decelTime ( .5 );
bh2.decelTime ( .5 );
bf1.unbind ();
bf2.unbind ();
if (bridge_number==1){
saftey_bridge_state = 1;
$saftey_bridge_gui.setGuiParm ( "gui_parm1" , 2);
$underarm_centralight2.fadeOutLight (1);
$underarm_centralight1.fadeOutLight (1);
}
}
////////////////////////////////////////////////////
//
// Saftey Bridge AWAY
// this will put the bridge in the away position
//
////////////////////////////////////////////////////
void saftey_bridge_away()
{
float thread1;
if (saftey_bridge_state == 1){
//set the bridge state to prevent reuse
$saftey_bridge_gui.setGuiParm ( "gui_parm1" , 0);
saftey_bridge_state = 9;
thread saftey_bridge_away_pair(1);
sys.wait (1);
thread saftey_bridge_away_pair(3);
sys.wait (1);
thread saftey_bridge_away_pair(5);
sys.wait (1);
thread1 = thread saftey_bridge_away_pair(7);
sys.waitForThread( thread1);
//trigger the aas
sys.trigger ($bridge_aas);
//rails up
safety_rails_up ();
} else {
//sys.print ("bridge already away\n");
;
}
}
////////////////////////////////////////////////////
//
// Saftey Bridge FORTH
// this will put the bridge in the traversalbe position
//
////////////////////////////////////////////////////
void saftey_bridge_forth()
{
float thread1;
//sys.print( "saftey_bridge_state = " + saftey_bridge_state + "\n" );
if (saftey_bridge_state == 0){
//rails down
safety_rails_down ();
//set the bridge state to prevent reuse
$saftey_bridge_gui.setGuiParm ( "gui_parm1" , 0);
saftey_bridge_state = 9;
thread saftey_bridge_forth_pair(7);
sys.wait (1);
thread saftey_bridge_forth_pair(5);
sys.wait (1);
thread saftey_bridge_forth_pair(3);
sys.wait (1);
thread1 = thread saftey_bridge_forth_pair(1);
sys.waitForThread( thread1);
//trigger the aas
sys.trigger ($bridge_aas);
//sys.print ("bridge aas should be on\n");
} else {
//sys.print ("bridge already out\n");
;
}
}
////////////////////////////////////////////////////
//
// Rotary movement - the two big rotating
// light chambers
//
////////////////////////////////////////////////////
void rotary()
{
$fly_around_light.bind ($fly_around_main);
$fly_around_speaker.bind ($fly_around_main);
$fly_around_end.bind ($fly_around_main);
$fly_around_main.rotate ( '0 100 0' );
$fly_around_middle.rotate ( '0 100 0' );
$fly_around2_light.bind ($fly_around2_main);
$fly_around2_speaker.bind ($fly_around2_main);
$fly_around2_end.bind ($fly_around2_main);
$fly_around2_main.rotate ( '0 -100 0' );
$fly_around2_middle.rotate ( '0 -100 0' );
}
////////////////////////////////////////////////////
//
// howitzer #1 movement ... this is the 1st of
// the big piston like rods
//
////////////////////////////////////////////////////
void howitzer_1()
{
//random numbers to keep howitzers unsynced
float ran1,ran2;
ran1=sys.random(1);
ran2=sys.random(1);
while (1){
//move the catcher up 8 for the recoil action
$how1_catcher.time (.4);
$how1_catcher.accelTime (.2);
$how1_catcher.decelTime (.2);
$how1_barrel.time (.4);
$how1_barrel.accelTime (.2);
$how1_barrel.decelTime (.2);
$how1_barrel.move ( UP, 10 );
$how1_catcher.move ( UP, 10 );
sys.waitFor ($how1_barrel);
sys.wait (ran1+1);
//move the barrel upwards slowly
$how1_barrel.time (3+ran2);
$how1_barrel.accelTime (0);
$how1_barrel.decelTime (2);
$how1_barrel.startSoundShader ("mset2_movement", SND_CHANNEL_VOICE);
$how1_barrel.move ( UP, 128 );
sys.waitFor ($how1_barrel);
$how1_barrel.stopSound ( SND_CHANNEL_VOICE, false );
$how1_barrel.startSoundShader ("mset2_stop", SND_CHANNEL_VOICE2);
//fire the barrel backwards quickly
$how1_barrel.time (.25);
$how1_barrel.accelTime (.2);
$how1_barrel.decelTime (0);
$how1_barrel.move ( DOWN, 128 );
sys.waitFor ($how1_barrel);
$how1_barrel.startSoundShader ("msmall_pounder", SND_CHANNEL_ANY);
//catch the barrel in the catcher... down 8
$how1_catcher.time (.1);
$how1_catcher.accelTime (0);
$how1_catcher.decelTime (.1);
$how1_barrel.time (.1);
$how1_barrel.accelTime (0);
$how1_barrel.decelTime (.1);
$how1_barrel.move ( DOWN, 10 );
$how1_catcher.move ( DOWN, 10 );
//sys.trigger ($how1_steam_1);
sys.waitFor ($how1_barrel);
}
}
////////////////////////////////////////////////////
//
// howitzer #2 movement ... this is the 2nd of
// the big piston like rods
//
////////////////////////////////////////////////////
void howitzer_2()
{
//random numbers to keep howitzers unsynced
float ran1,ran2;
ran1=sys.random(1);
ran2=sys.random(1);
while (1){
//move the catcher up 8 for the recoil action
$how2_catcher.time (.4);
$how2_catcher.accelTime (.2);
$how2_catcher.decelTime (.2);
$how2_barrel.time (.4);
$how2_barrel.accelTime (.2);
$how2_barrel.decelTime (.2);
$how2_barrel.move ( UP, 10 );
$how2_catcher.move ( UP, 10 );
sys.waitFor ($how2_barrel);
sys.wait (ran1+1);
//move the barrel upwards slowly
$how2_barrel.time (3+ran2);
$how2_barrel.accelTime (0);
$how2_barrel.decelTime (2);
$how2_barrel.startSoundShader ("mset1_movement", SND_CHANNEL_VOICE);
$how2_barrel.move ( UP, 128 );
sys.waitFor ($how2_barrel);
$how2_barrel.stopSound ( SND_CHANNEL_VOICE, false );
$how2_barrel.startSoundShader ("mset1_stop", SND_CHANNEL_VOICE2);
//fire the barrel backwards quickly
$how2_barrel.time (.25);
$how2_barrel.accelTime (.2);
$how2_barrel.decelTime (0);
$how2_barrel.startSoundShader ("msmall_pounder", SND_CHANNEL_ANY);
$how2_barrel.move ( DOWN, 128 );
sys.waitFor ($how2_barrel);
//catch the barrel in the catcher... down 8
$how2_catcher.time (.1);
$how2_catcher.accelTime (0);
$how2_catcher.decelTime (.1);
$how2_barrel.time (.1);
$how2_barrel.accelTime (0);
$how2_barrel.decelTime (.1);
$how2_barrel.move ( DOWN, 10 );
$how2_catcher.move ( DOWN, 10 );
//sys.trigger ($how2_steam_1);
sys.waitFor ($how2_barrel);
}
}
////////////////////////////////////////////////////
//
// howitzer #3 movement ... this is the 3rd of
// the big piston like rods
//
////////////////////////////////////////////////////
void howitzer_3()
{
//random numbers to keep howitzers unsynced
float ran1,ran2;
ran1=sys.random(.5);
ran2=sys.random(.35);
while (1){
//move the catcher up 8 for the recoil action
$how3_catcher.time (.4);
$how3_catcher.accelTime (.2);
$how3_catcher.decelTime (.2);
$how3_barrel.time (.4);
$how3_barrel.accelTime (.2);
$how3_barrel.decelTime (.2);
$how3_barrel.move ( UP, 10 );
$how3_catcher.move ( UP, 10 );
sys.waitFor ($how3_barrel);
sys.wait (ran1+1);
//move the barrel upwards slowly
$how3_barrel.time (3+ran2);
$how3_barrel.accelTime (0);
$how3_barrel.decelTime (2);
$how3_barrel.startSoundShader ("mset2_movement", SND_CHANNEL_VOICE);
$how3_barrel.move ( UP, 128 );
sys.waitFor ($how3_barrel);
$how3_barrel.stopSound ( SND_CHANNEL_VOICE, false );
$how3_barrel.startSoundShader ("mset2_stop", SND_CHANNEL_VOICE2);
//fire the barrel backwards quickly
$how3_barrel.time (.25);
$how3_barrel.accelTime (.2);
$how3_barrel.decelTime (0);
$how3_barrel.startSoundShader ("msmall_pounder", SND_CHANNEL_ANY);
$how3_barrel.move ( DOWN, 128 );
sys.waitFor ($how3_barrel);
//catch the barrel in the catcher... down 8
$how3_catcher.time (.1);
$how3_catcher.accelTime (0);
$how3_catcher.decelTime (.1);
$how3_barrel.time (.1);
$how3_barrel.accelTime (0);
$how3_barrel.decelTime (.1);
$how3_barrel.move ( DOWN, 10 );
$how3_catcher.move ( DOWN, 10 );
//sys.trigger ($how3_steam_1);
sys.waitFor ($how3_barrel);
}
}
////////////////////////////////////////////////////
//
// point to point pipe piston movement
//
////////////////////////////////////////////////////
void pipe_piston_move()
{
//setup
$pipe_piston_p2p.time (.4);
$pipe_piston_p2p.accelTime (.1);
$pipe_piston_p2p.decelTime (.15);
$pipe_piston_p1p.time (.7);
$pipe_piston_p1p.accelTime (.1);
$pipe_piston_p1p.decelTime (.15);
$pipe_piston_p3p.time (.35);
$pipe_piston_p3p.accelTime (.1);
$pipe_piston_p3p.decelTime (.15);
while (1){
$pipe_piston_p1p.moveTo ( $p1p1 );
$pipe_piston_p2p.moveTo ( $p2p2 );
$pipe_piston_p3p.moveTo ( $p3p1 );
sys.waitFor($pipe_piston_p2p);
$pipe_piston_p1p.moveTo ( $p1p2 );
$pipe_piston_p2p.moveTo ( $p2p1 );
$pipe_piston_p3p.moveTo ( $p3p2 );
sys.waitFor($pipe_piston_p2p);
}
}
////////////////////////////////////////////////////
//
// piston movement
//
////////////////////////////////////////////////////
void crankshaft_move ()
{
while (1) //begin while
{
$mc_piston1.move ( REL_UP, 30 );
$mc_pistrod1.rotateOnce ( '26.56 0 0' );
$mc_piston2.move ( REL_DOWN, 30 );
$mc_pistrod2.rotateOnce ( '-26.56 0 0' );
$mc_piston3.move ( REL_UP, 30 );
$mc_pistrod3.rotateOnce ( '26.56 0 0' );
$mc_crankshaft.rotateOnce ( '90 0 0' );
sys.waitFor ($mc_piston1);
$mc_piston1.move ( REL_UP, 30 );
$mc_pistrod1.rotateOnce ( '-26.56 0 0' );
$mc_piston2.move ( REL_DOWN, 30 );
$mc_pistrod2.rotateOnce ( '26.56 0 0' );
$mc_piston3.move ( REL_UP, 30 );
$mc_pistrod3.rotateOnce ( '-26.56 0 0' );
$mc_crankshaft.rotateOnce ( '90 0 0' );
sys.waitFor ($mc_piston1);
$mc_piston1.move ( REL_DOWN, 30 );
$mc_pistrod1.rotateOnce ( '-26.56 0 0' );
$mc_piston2.move ( REL_UP, 30 );
$mc_pistrod2.rotateOnce ( '26.56 0 0' );
$mc_piston3.move ( REL_DOWN, 30 );
$mc_pistrod3.rotateOnce ( '-26.56 0 0' );
$mc_crankshaft.rotateOnce ( '90 0 0' );
sys.waitFor ($mc_piston1);
$mc_piston1.move ( REL_DOWN, 30 );
$mc_pistrod1.rotateOnce ( '26.56 0 0' );
$mc_piston2.move ( REL_UP, 30 );
$mc_pistrod2.rotateOnce ( '-26.56 0 0' );
$mc_piston3.move ( REL_DOWN, 30 );
$mc_pistrod3.rotateOnce ( '26.56 0 0' );
$mc_crankshaft.rotateOnce ( '90 0 0' );
sys.waitFor ($mc_pistrod1);
} //end while
}
////////////////////////////////////////////////////
//
// little first room machine
//
////////////////////////////////////////////////////
void lilfrm_move ()
{
$lilfrm_part1.time (.25);
$lilfrm_part2.time (.4);
$lilfrm_part3.time (.3);
$lilfrm_part4.time (.35);
$lilfrm_part5.time (.4);
while (1) //begin main while
{
$lilfrm_part1.rotateOnce ( '0 0 2' );
$lilfrm_part2.rotateOnce ( '0 0 2' );
$lilfrm_part3.rotateOnce ( '0 0 -2' );
$lilfrm_part4.rotateOnce ( '0 0 -2' );
$lilfrm_part5.rotateOnce ( '0 0 -2' );
sys.waitFor ($lilfrm_part1);
$lilfrm_part1.rotateOnce ( '0 0 -2' );
$lilfrm_part2.rotateOnce ( '0 0 -2' );
$lilfrm_part3.rotateOnce ( '0 0 2' );
$lilfrm_part4.rotateOnce ( '0 0 2' );
$lilfrm_part5.rotateOnce ( '0 0 2' );
sys.waitFor ($lilfrm_part1);
} //end main while
}
////////////////////////////////////////////////////
//
// red light thing
//
////////////////////////////////////////////////////
void redthing_move ()
{
$redthing_mover.time ( 1 );
$redthing_mover.accelTime ( .25 );
$redthing_mover.decelTime ( .25 );
float ran1;
while (1) //begin main while
{
ran1=sys.random(3);
if (ran1<1){
$redthing_mover.moveTo ($redlightpoint_1);
sys.waitFor ($redthing_mover);
} else if (ran1<2) {
$redthing_mover.moveTo ($redlightpoint_2);
sys.waitFor ($redthing_mover);
} else {
$redthing_mover.moveTo ($redlightpoint_3);
sys.waitFor ($redthing_mover);
}
} //end main while
}
////////////////////////////////////////////////////
//
// underarm_can_1_manip
//
////////////////////////////////////////////////////
void underarm_can_1_manip()
{
if (underarm_work_state == 0){
return;
}
//move to sopt can 1
thread mover_startsound ($underarm_carrier);
$underarm_carrier.moveTo ($underarm_spot_can1);
sys.waitFor ($underarm_carrier);
mover_stopsound ($underarm_carrier);
if (underarm_work_state == 0){
return;
}
//arm down
$underarm_upper.startSoundShader ("servo_1s_01", SND_CHANNEL_VOICE );
$underarm_upper.rotateOnce ( '0 0 -90' );
$underarm_lower.startSoundShader ("servo_1s_02", SND_CHANNEL_VOICE );
$underarm_lower.rotateOnce ( '0 0 90' );
sys.waitFor ($underarm_lower);
//fingers to down pose
$underarm_fingers.startSoundShader ("mech_fingers_1_5s", SND_CHANNEL_VOICE );
while ( underarm_fingers_state > -64 ){
$underarm_fingers.move ( DOWN, 1 );
sys.waitFor ($underarm_fingers);
underarm_fingers_state -= 1;
}
//bind can 1 to fingers
$underarm_can_1.bind ($underarm_fingers);
//fingers to up pose
$underarm_tube.startSoundShader ("airwhomp", SND_CHANNEL_VOICE2 );
$underarm_fingers.startSoundShader ("mech_fingers_1_5s", SND_CHANNEL_VOICE );
while ( underarm_fingers_state < 0 ){
$underarm_fingers.move ( UP, 1 );
sys.waitFor ($underarm_fingers);
underarm_fingers_state += 1;
}
//do something interesting
$underarm_tube.startSoundShader ("something_interesting", SND_CHANNEL_VOICE );
thread crossFadeEnt ($underarm_tube, '1 0 0', '.5 1 1', 1.75);
thread crossFadeEnt ($underarm_tube_light, '1 0 0', '.5 1 1', 1.75);
thread crossFadeEnt ($underarm_can_1, '1 0 0', '.5 1 1', 1.75);
thread crossFadeEnt ($underarm_can_1_light, '1 0 0', '.5 1 1', 1.75);
sys.wait (2);
//fingers to down pose
$underarm_fingers.startSoundShader ("mech_fingers_1_5s", SND_CHANNEL_VOICE );
$underarm_tube.startSoundShader ("something_interesting_2", SND_CHANNEL_VOICE );
while ( underarm_fingers_state > -64 ){
$underarm_fingers.move ( DOWN, 1 );
sys.waitFor ($underarm_fingers);
underarm_fingers_state -= 1;
}
//unbind can 1 from fingers
$underarm_can_1.unbind ();
//fingers to up pose
$underarm_fingers.startSoundShader ("mech_fingers_1_5s", SND_CHANNEL_VOICE );
while ( underarm_fingers_state < 0 ){
$underarm_fingers.move ( UP, 1 );
sys.waitFor ($underarm_fingers);
underarm_fingers_state += 1;
}
//turn tube back to red
thread crossFadeEnt ($underarm_tube, '.5 1 1', '1 0 0', 1.75);
thread crossFadeEnt ($underarm_tube_light, '.5 1 1', '1 0 0', 1.75);
thread crossFadeEnt ($underarm_can_1, '.5 1 1', '1 0 0', 2);
thread crossFadeEnt ($underarm_can_1_light, '.5 1 1', '1 0 0', 2);
//arm up
$underarm_upper.startSoundShader ("servo_1s_01", SND_CHANNEL_VOICE );
$underarm_upper.rotateOnce ( '0 0 90' );
$underarm_lower.startSoundShader ("servo_1s_02", SND_CHANNEL_VOICE );
$underarm_lower.rotateOnce ( '0 0 -90' );
sys.waitFor ($underarm_lower);
}
////////////////////////////////////////////////////
//
// underarm_can_2_manip
//
////////////////////////////////////////////////////
void underarm_can_2_manip()
{
if (underarm_work_state == 0){
return;
}
//move to sopt can 2
thread mover_startsound ($underarm_carrier);
$underarm_carrier.moveTo ($underarm_spot_can2);
sys.waitFor ($underarm_carrier);
mover_stopsound ($underarm_carrier);
if (underarm_work_state == 0){
return;
}
//arm down
$underarm_upper.startSoundShader ("servo_1s_01", SND_CHANNEL_VOICE );
$underarm_upper.rotateOnce ( '0 0 -90' );
$underarm_lower.startSoundShader ("servo_1s_02", SND_CHANNEL_VOICE );
$underarm_lower.rotateOnce ( '0 0 90' );
sys.waitFor ($underarm_lower);
//fingers to down pose
while ( underarm_fingers_state > -64 ){
$underarm_fingers.move ( DOWN, 1 );
sys.waitFor ($underarm_fingers);
underarm_fingers_state -= 1;
}
//bind can 2 to fingers
$underarm_can_2.bind ($underarm_fingers);
//fingers to up pose
$underarm_tube.startSoundShader ("airwhomp", SND_CHANNEL_VOICE2 );
$underarm_fingers.startSoundShader ("mech_fingers_1_5s", SND_CHANNEL_VOICE );
while ( underarm_fingers_state < 0 ){
$underarm_fingers.move ( UP, 1 );
sys.waitFor ($underarm_fingers);
underarm_fingers_state += 1;
}
//do something interesting
$underarm_tube.startSoundShader ("something_interesting", SND_CHANNEL_VOICE );
thread crossFadeEnt ($underarm_tube, '1 0 0', '.5 1 1', 1.75);
thread crossFadeEnt ($underarm_tube_light, '1 0 0', '.5 1 1', 1.75);
thread crossFadeEnt ($underarm_can_2, '1 0 0', '.5 1 1', 1.75);
thread crossFadeEnt ($underarm_can_2_light, '1 0 0', '.5 1 1', 1.75);
sys.wait (2);
//fingers to down pose
$underarm_fingers.startSoundShader ( "mech_fingers_1_5s", SND_CHANNEL_VOICE );
$underarm_tube.startSoundShader ( "something_interesting_2", SND_CHANNEL_VOICE );
while ( underarm_fingers_state > -64 ){
$underarm_fingers.move ( DOWN, 1 );
sys.waitFor ($underarm_fingers);
underarm_fingers_state -= 1;
}
//unbind can 2 from fingers
$underarm_can_2.unbind ();
//fingers to up pose
$underarm_fingers.startSoundShader ("mech_fingers_1_5s", SND_CHANNEL_VOICE );
while ( underarm_fingers_state < 0 ){
$underarm_fingers.move ( UP, 1 );
sys.waitFor ($underarm_fingers);
underarm_fingers_state += 1;
}
//turn tube back to red
thread crossFadeEnt ($underarm_tube, '.5 1 1', '1 0 0', 1.75);
thread crossFadeEnt ($underarm_tube_light, '.5 1 1', '1 0 0', 1.75);
thread crossFadeEnt ($underarm_can_2, '.5 1 1', '1 0 0', 2);
thread crossFadeEnt ($underarm_can_2_light, '.5 1 1', '1 0 0', 2);
//arm up
$underarm_upper.startSoundShader ("servo_1s_01", SND_CHANNEL_VOICE );
$underarm_upper.rotateOnce ( '0 0 90' );
$underarm_lower.startSoundShader ("servo_1s_02", SND_CHANNEL_VOICE );
$underarm_lower.rotateOnce ( '0 0 -90' );
sys.waitFor ($underarm_lower);
}
////////////////////////////////////////////////////
//
// underarm_store
// stops underarm from doing it's thing and
// then moves it away to it's store spot
//
////////////////////////////////////////////////////
void underarm_store ()
{
//move to corner spot
$underarm_carrier.moveTo ($underarm_spot_corner);
sys.waitFor ($underarm_carrier);
//rotate around corner
$underarm_carrier.rotateOnce ( '0 90 0' );
sys.waitFor ($underarm_carrier);
//move to storage spot
$underarm_carrier.moveTo ($underarm_spot_store);
sys.waitFor ($underarm_carrier);
}
////////////////////////////////////////////////////
//
// underarm_work
// arm moves from spot to spot and does it's thing
//
////////////////////////////////////////////////////
void underarm_work ()
{
while ( underarm_work_state == 1 ){
map_mc_underground::underarm_can_1_manip();
sys.wait(.1);
map_mc_underground::underarm_can_2_manip();
sys.wait(.1);
}
//sys.print ("Underarm finishing it's work before storage...\n");
map_mc_underground::underarm_store ();
map_mc_underground::saftey_bridge_forth();
}
////////////////////////////////////////////////////
//
// underarm_work_state_off
// state that tells underarm to stop working
//
////////////////////////////////////////////////////
void underarm_work_state_off ()
{
sys.wait( 1 );
underarm_work_state = 0;
sys.wait( 2 );
sys.trigger( $computer_bridgeext7sec_speaker );
}
////////////////////////////////////////////////////
//
// underarm_work_state_on
// state that tells underarm to stop working
//
////////////////////////////////////////////////////
void underarm_work_state_on ()
{
//bridge away
map_mc_underground::saftey_bridge_away ();
//bring arm back around the bend
//move to corner spot
$underarm_carrier.moveTo ($underarm_spot_corner);
sys.waitFor ($underarm_carrier);
//rotate around corner
$underarm_carrier.rotateOnce ( '0 -90 0' );
sys.waitFor ($underarm_carrier);
//underarm back to work
underarm_work_state = 1;
map_mc_underground::underarm_work();
}
////////////////////////////////////////////////////
//
// Crane load damage off
//
////////////////////////////////////////////////////
void crane_load_damage_off ()
{
//turn the damage off the movers
$crane_box1.enableDamage( 0 );
$crane_box2.enableDamage( 0 );
$crane_box3.enableDamage( 0 );
$crane_box4.enableDamage( 0 );
$crane_beam1.enableDamage( 0 );
$crane_beam2.enableDamage( 0 );
$crane_beam3.enableDamage( 0 );
$crane_beam4.enableDamage( 0 );
$crane_beam5.enableDamage( 0 );
}
////////////////////////////////////////////////////
//
// Crane drop the load
//
////////////////////////////////////////////////////
void crane_drop ()
{
$platform.startSoundShader ("wiresnap", SND_CHANNEL_BODY );
$breaking_wires.remove();
sys.trigger ($speaker_crane_fall);
$platform.time( 1.0 );
$platform.accelTime( 0.1 );
$platform.decelTime( 0.5 );
$platform.startSoundShader ("steelswing_01", SND_CHANNEL_VOICE );
$platform.rotateOnce( '-150 0 0' ); // Swing Sound
sys.waitFor( $platform );
//trigger the rail to break
sys.trigger($pi_cave_rail);
$wires.time( 1.5 );
$wires.accelTime( 0.25 );
$wires.decelTime( 0.25 );
$platform.time( 1.5 );
$platform.accelTime( 0.25 );
$platform.decelTime( 0.25 );
$wires.rotateOnce( '50 0 0' );
$platform.startSoundShader ("steelswing_02", SND_CHANNEL_VOICE2 );
$platform.rotateOnce( '105 0 0' ); // Swing Sound
sys.waitFor( $platform );
$wires.time( 1.1 );
$wires.accelTime( 0.2 );
$wires.decelTime( 0.2 );
$platform.time( 1.1 );
$platform.accelTime( 0.2 );
$platform.decelTime( 0.2 );
$wires.rotateOnce( '-30 0 0' );
$platform.startSoundShader ("steelswing_03", SND_CHANNEL_BODY2 );
$platform.rotateOnce( '-75 0 0' ); // Swing sound
sys.waitFor( $platform );
$wires.time( 0.8 );
$wires.accelTime( 0.15 );
$wires.decelTime( 0.15 );
$platform.time( 0.6 );
$platform.accelTime( 0.1 );
$platform.decelTime( 0.1 );
$wires.rotateOnce( '10 0 0' );
$platform.startSoundShader ("steelswing_04", SND_CHANNEL_VOICE );
$platform.rotateOnce( '30 0 0' ); // Swing sound
sys.waitFor( $platform );
//turn the damage off the movers
thread map_mc_underground::crane_load_damage_off();
$platform.time( 1.0 );
$platform.accelTime( 0.2 );
$platform.decelTime( 0.2 );
$platform.startSoundShader ("steelswing_05", SND_CHANNEL_VOICE );
$platform.rotateOnce( '-30 0 0' ); // Swing sound
sys.waitFor( $platform );
}
////////////////////////////////////////////////////
//
// Open airlock door
//
////////////////////////////////////////////////////
void airlock_door_open( float airlock, float doornum )
{
entity ent;
entity entdoorr, entdoorl;
entity speaker;
string door1;
string door2;
float portalstate;
float movedist;
if ( doornum == 2 ) {
door1 = "airlock" + airlock + "_door2";
door2 = "airlock" + airlock + "_door1";
portalstate = 2;
movedist = -16;
} else {
door1 = "airlock" + airlock + "_door1";
door2 = "airlock" + airlock + "_door2";
portalstate = 1;
movedist = 16;
}
//turn door1 light on and door2 light off
ent=sys.getEntity( door2 + "_light" );
thread crossFadeEnt( ent, '.84 .84 .9', '0.37 0.05 0.01', 1 );
sys.wait(1);
ent=sys.getEntity( door1 + "_light" );
thread crossFadeEnt( ent, '0.37 0.05 0.01', '.84 .84 .9', 1 );
//move the 4 locks to unlock position
ent=sys.getEntity( door1 + "_top_lock" );
ent.time( 0.25 );
ent.move( UP, 15 );
speaker=sys.getEntity( "speaker_" + door1 + "_bottom_lock" );
sys.trigger( speaker );
ent=sys.getEntity( door1 + "_bottom_lock" );
ent.time( 0.25 );
ent.move( DOWN, 15 );
sys.waitFor( ent );
speaker=sys.getEntity( "speaker_" + door1 + "_left_lock" );
sys.trigger( speaker );
ent=sys.getEntity( door1 + "_left_lock" );
ent.time( 0.75 );
ent.move( SOUTH, movedist );
speaker=sys.getEntity( "speaker_" + door1 + "_right_lock" );
sys.trigger( speaker );
ent=sys.getEntity( door1 + "_right_lock" );
ent.time( 0.75 );
ent.move( SOUTH, movedist );
sys.waitFor( ent );
//open doors
speaker=sys.getEntity( "speaker_" + door1 + "_open" );
sys.trigger( speaker );
entdoorl=sys.getEntity( door1 + "_left" );
entdoorl.time( 1.2 );
entdoorl.rotateOnce( '0 45 0' );
entdoorr=sys.getEntity( door1 + "_right" );
entdoorr.time( 1.2 );
entdoorr.rotateOnce( '0 -45 0' );
//trigger the portal
ent=sys.getEntity( door1 + "_portal" );
sys.trigger( ent );
sys.waitFor( entdoorr );
sys.waitFor( entdoorl );
//set airlock state
ent=sys.getEntity( "airlock" + airlock + "_door1_portal" );
ent.setKey( "state", portalstate );
}
////////////////////////////////////////////////////
//
// Close airlock door
//
////////////////////////////////////////////////////
void airlock_door_close(float airlock, float doornum )
{
entity ent;
entity entdoorr, entdoorl;
entity speaker;
string door;
float movedist;
if ( doornum == 2 ) {
door = "airlock" + airlock + "_door2";
movedist = 16;
} else {
door = "airlock" + airlock + "_door1";
movedist = -16;
}
//close doors
speaker= sys.getEntity( "speaker_" + door + "_close" );
sys.trigger (speaker);
entdoorl=sys.getEntity ( door + "_left" );
entdoorl.time (1.2);
entdoorl.rotateOnce ( '0 -45 0' );
entdoorr=sys.getEntity ( door + "_right" );
entdoorr.time (1.2);
entdoorr.rotateOnce ( '0 45 0' );
sys.waitFor (entdoorr);
sys.waitFor (entdoorl);
//trigger the portal
ent=sys.getEntity ( door + "_portal" );
sys.trigger (ent);
//move the 4 locks to unlock position
ent=sys.getEntity ( door + "_top_lock" );
ent.time (0.25);
ent.move ( DOWN, 15 );
speaker=sys.getEntity ("speaker_" + door + "_bottom_lock");
sys.trigger (speaker);
ent=sys.getEntity ( door + "_bottom_lock" );
ent.time (0.25);
ent.move ( UP, 15 );
speaker=sys.getEntity ("speaker_" + door + "_left_lock" );
sys.trigger (speaker);
ent=sys.getEntity ( door + "_left_lock" );
ent.time (0.75);
ent.move ( SOUTH, movedist );
speaker=sys.getEntity ("speaker_" + door + "_right_lock" );
sys.trigger (speaker);
ent=sys.getEntity ( door + "_right_lock" );
ent.time (0.75);
ent.move ( SOUTH, movedist );
sys.waitFor (ent);
}
////////////////////////////////////////////////////
//
// Main Activate airlock
// conditionally chooses based on entrance
//
////////////////////////////////////////////////////
void airlock_main_activate(float airlock)
{
entity ent;
//check to see which way the palyer entered by checking the airlock_state
//if 1 then close 1 and open 2
ent=sys.getEntity ("airlock" + airlock + "_door1_portal" );
if (ent.getFloatKey ("state")==1) {
airlock_door_close( airlock, 1 );
airlock_door_open( airlock, 2 );
} else { //else close 2 and open 1
airlock_door_close( airlock, 2 );
airlock_door_open( airlock, 1 );
}
}
////////////////////////////////////////////////////
//
// AIRLOCK main activation
//
////////////////////////////////////////////////////
void airlock1_activate()
{
//disable the guis on the doors
$airlock1_door1_gui.setGuiParm ( "gui_parm1" , 0);
$airlock1_door2_gui.setGuiParm ( "gui_parm1" , 0);
$airlock1_innerguiholder.setGuiParm ( "gui_parm11" , 0);
airlock_main_activate(1);
//check the airlock state and enable the guis on the closed door
if ($airlock1_door1_portal.getFloatKey ("state")==1) {
$airlock1_door2_gui.setGuiParm ( "gui_parm1" , 1);
} else { //else close 2 and open 1
$airlock1_door1_gui.setGuiParm ( "gui_parm1" , 1);
}
$airlock1_innerguiholder.setGuiParm ( "gui_parm11" , 1);
}
void airlock2_activate()
{
//disable the guis on the doors
$airlock2_door1_gui.setGuiParm ( "gui_parm1" , 0);
$airlock2_door2_gui.setGuiParm ( "gui_parm1" , 0);
$airlock2_innerguiholder.setGuiParm ( "gui_parm11" , 0);
airlock_main_activate(2);
//check the airlock state and enable the guis on the closed door
if ($airlock2_door1_portal.getFloatKey ("state")==1) {
$airlock2_door2_gui.setGuiParm ( "gui_parm1" , 1);
} else { //else close 2 and open 1
$airlock2_door1_gui.setGuiParm ( "gui_parm1" , 1);
}
$airlock2_innerguiholder.setGuiParm ( "gui_parm11" , 1);
}
////////////////////////////////////////////////////
//
// AIRLOCK doors opening
//
////////////////////////////////////////////////////
void airlock1_door1_open()
{
airlock_door_open(1, 1);
}
void airlock1_door2_open()
{
airlock_door_open(1, 2);
}
void airlock2_door1_open()
{
airlock_door_open(2, 1);
}
void airlock2_door2_open()
{
airlock_door_open(2, 2);
}
////////////////////////////////////////////////////
//
// Break Zombie airlock door
//
////////////////////////////////////////////////////
void airlock1_break()
{
//unhide the clip that will prevent the player from getting outside
//once the gui is pressed
sys.trigger( $airlock_break_clip );
airlock_door_close( 1, 2 );
//disable the gui on door1
$airlock1_door1_gui.setGuiParm ( "gui_parm1" , 0);
//turn door1 light on and door2 light off
thread crossFadeEnt ($airlock1_door2_light, '.84 .84 .9', '0.37 0.05 0.01', 1);
sys.wait(1);
thread crossFadeEnt ($airlock1_door1_light, '0.37 0.05 0.01', '.84 .84 .9', 1);
//move the 4 locks to unlock position
$airlock1_door1_top_lock.time (0.25);
$airlock1_door1_top_lock.move ( UP, 15 );
$airlock1_door1_bottom_lock.time (0.25);
sys.trigger ($speaker_airlock1_door1_bottom_lock);
$airlock1_door1_bottom_lock.move ( DOWN, 15 );
sys.waitFor ($airlock1_door1_bottom_lock);
$airlock1_door1_left_lock.time (0.75);
sys.trigger ($speaker_airlock1_door1_left_lock);
$airlock1_door1_left_lock.move ( SOUTH, 16 );
$airlock1_door1_right_lock.time (0.75);
sys.trigger ($speaker_airlock1_door1_right_lock);
$airlock1_door1_right_lock.move ( SOUTH, 16 );
sys.waitFor ($airlock1_door1_right_lock);
//trigger the portal
sys.trigger ($airlock1_door1_portal);
//lightswitch to sound flicker light
sys.trigger ($airlock1_door1_light);
//sys.trigger ($airlockzombielight);
//trigger anim shit
sys.trigger ($airlockzombietrigger);
//spark
sys.trigger ($airlockzombiespark1);
//doors open a bit then stutter a bit leaving the crack in the door
$airlock1_door1_left.time(.4);
$airlock1_door1_right.time(.4);
sys.trigger ($speaker_malfunction_1);
$airlock1_door1_left.rotateOnce ( '0 4 0' );
$airlock1_door1_right.rotateOnce ( '0 -4 0' );
sys.waitFor ($airlock1_door1_right);
$airlock1_door1_left.time(.3);
$airlock1_door1_right.time(.3);
sys.trigger ($speaker_malfunction_2);
$airlock1_door1_left.rotateOnce ( '0 -3 0' );
$airlock1_door1_right.rotateOnce ( '0 3 0' );
sys.waitFor ($airlock1_door1_right);
$airlock1_door1_left.time(.3);
$airlock1_door1_right.time(.3);
sys.trigger ($speaker_malfunction_2a);
$airlock1_door1_left.rotateOnce ( '0 10 0' );
$airlock1_door1_right.rotateOnce ( '0 -3 0' );
sys.waitFor ($airlock1_door1_right);
$airlock1_door1_left.time(.25);
$airlock1_door1_right.time(.25);
sys.trigger ($speaker_malfunction_3);
$airlock1_door1_left.rotateOnce ( '0 -5 0' );
$airlock1_door1_right.rotateOnce ( '0 -3 0' );
sys.waitFor ($airlock1_door1_right);
//spark
sys.trigger ($airlockzombiespark2);
sys.trigger ($airlockzombiespark1);
//trigger light to go off completely
//sys.trigger ($airlockzombielight);
sys.wait( 2 );
//trigger garage skull fly through
sys.trigger( $garagelight_break_relay );
sys.trigger( $garageskulltrigger );
//wait
sys.wait( 4 );
//spark
sys.trigger( $airlockzombiespark2 );
sys.trigger( $airlockzombiespark1 );
//wait
sys.wait(1);
//open one door fully to allow the player to exit the airlock
$airlock1_door1_right.time(1.2);
sys.trigger ($speaker_airlock1_door1_open);
$airlock1_door1_right.rotateOnce ( '0 -38 0' );
}
////////////////////////////////////////////////////
//
// piston movement
//
////////////////////////////////////////////////////
void piston_move ()
{
while (1) //begin while
{
$piston1.move ( DOWN, 6 );
$pistrod1.rotateOnce ( '0 0 -26.56' );
$piston2.move ( UP, 6 );
$pistrod2.rotateOnce ( '0 0 26.56' );
$piston3.move ( DOWN, 6 );
$pistrod3.rotateOnce ( '0 0 -26.56' );
$crankshaft.rotateOnce ( '0 0 90' );
sys.waitFor ($piston1);
$piston1.move ( DOWN, 6 );
$pistrod1.rotateOnce ( '0 0 26.56' );
$piston2.move ( UP, 6 );
$pistrod2.rotateOnce ( '0 0 -26.56' );
$piston3.move ( DOWN, 6 );
$pistrod3.rotateOnce ( '0 0 26.56' );
$crankshaft.rotateOnce ( '0 0 90' );
sys.waitFor ($piston1);
$piston1.move ( UP, 6 );
$pistrod1.rotateOnce ( '0 0 26.56' );
$piston2.move ( DOWN, 6 );
$pistrod2.rotateOnce ( '0 0 -26.56' );
$piston3.move ( UP, 6 );
$pistrod3.rotateOnce ( '0 0 26.56' );
$crankshaft.rotateOnce ( '0 0 90' );
sys.waitFor ($piston1);
$piston1.move ( UP, 6 );
$pistrod1.rotateOnce ( '0 0 -26.56' );
$piston2.move ( DOWN, 6 );
$pistrod2.rotateOnce ( '0 0 26.56' );
$piston3.move ( UP, 6 );
$pistrod3.rotateOnce ( '0 0 -26.56' );
$crankshaft.rotateOnce ( '0 0 90' );
sys.waitFor ($piston1);
} //end while
}
////////////////////////////////////////////////////
//
// canister mover
//
////////////////////////////////////////////////////
void canister_mover ()
{
sys.wait (2);
$canismover_rdoor.time (1);
$canismover_ldoor.time (1);
while (1) //begin while
{
//back into recess 192
sys.trigger ($speaker_can1_move); // SOUND
$canismover_anchor.time (2);
$canismover_anchor.accelTime (2);
$canismover_anchor.decelTime (0);
$canismover_anchor.move ( WEST, 192 );
sys.waitFor ($canismover_anchor);
//close doors (move 24)
sys.trigger ($speaker_candoor1_close); // SOUND
$canismover_rdoor.move (NORTH, -24);
$canismover_ldoor.move (NORTH, 24);
sys.waitFor ($canismover_ldoor);
//hide it all
$canismover.hide ();
$func_static_5240.hide ();
$func_static_5239.hide ();
$light_5120.Off ();
$func_static_5252.hide ();
$light_5121.Off ();
$func_static_5233.hide ();
$light_5118.Off ();
$light_5116.Off ();
$func_static_5248.hide ();
//wait after it goes behind the closed doors
sys.wait (3);
//bring it forward 192
$canismover_anchor.time (.1);
$canismover_anchor.accelTime (0);
$canismover_anchor.decelTime (0);
$canismover_anchor.move ( WEST, -192 );
sys.waitFor ($canismover_anchor);
//rotate it quickly 90 degs to down position
$canismover_anchor.time (.1);
$canismover_anchor.accelTime (0);
$canismover_anchor.decelTime (0);
$canismover_anchor.rotateOnce ( '90 0 0' );
sys.waitFor ($canismover_anchor);
//unhide it all
$canismover.show ();
$func_static_5240.show ();
$func_static_5239.show ();
$light_5120.On ();
$func_static_5252.show ();
$light_5121.On ();
$func_static_5233.show ();
$light_5118.On ();
$light_5116.On ();
$func_static_5248.show ();
//open doors (move 24)
sys.trigger ($speaker_candoor2_open); // SOUND
$canismover_rdoor.move (NORTH, 24);
$canismover_ldoor.move (NORTH, -24);
sys.waitFor ($canismover_ldoor);
//rotate it up -90 degs
$canismover_anchor.time (2);
$canismover_anchor.accelTime (2);
$canismover_anchor.decelTime (0);
sys.trigger ($speaker_can1_updown); // SOUND
$canismover_anchor.rotateOnce ( '-90 0 0' );
sys.waitFor ($canismover_anchor);
//bounce
$canismover_anchor.time (.15);
$canismover_anchor.accelTime (.15);
$canismover_anchor.decelTime (0);
$canismover_anchor.rotateOnce ( '1.5 0 0' );
sys.waitFor ($canismover_anchor);
$canismover_anchor.time (.15);
$canismover_anchor.accelTime (0);
$canismover_anchor.decelTime (.15);
$canismover_anchor.rotateOnce ( '-1.5 0 0' );
sys.waitFor ($canismover_anchor);
$canismover_anchor.time (.10);
$canismover_anchor.accelTime (.10);
$canismover_anchor.decelTime (0);
$canismover_anchor.rotateOnce ( '.5 0 0' );
sys.waitFor ($canismover_anchor);
$canismover_anchor.time (.10);
$canismover_anchor.accelTime (0);
$canismover_anchor.decelTime (.10);
$canismover_anchor.rotateOnce ( '-.5 0 0' );
sys.waitFor ($canismover_anchor);
//twist it up
$canismover_anchor.time (4.5);
$canismover_anchor.accelTime (1.5);
$canismover_anchor.decelTime (1);
sys.trigger ($speaker_can1_rot); // SOUND
$canismover_anchor.rotateOnce ( '0 0 540' );
sys.waitFor ($canismover_anchor);
sys.wait (0.5);
sys.trigger ($speaker_can1_rot); // SOUND
$canismover_anchor.rotateOnce ( '0 0 -540' );
sys.waitFor ($canismover_anchor);
} //end while
}
////////////////////////////////////////////////////
//
// canister2 mover
//
////////////////////////////////////////////////////
void canister2_mover ()
{
sys.wait (6);
$canismover2_rdoor.time (1);
$canismover2_ldoor.time (1);
while (1) //begin while
{
//back into recess 192
$canismover2_anchor.time (2);
$canismover2_anchor.accelTime (2);
$canismover2_anchor.decelTime (0);
sys.trigger ($speaker_can2_move); // SOUND
$canismover2_anchor.move ( WEST, 192 );
sys.waitFor ($canismover2_anchor);
//close doors (move 24)
sys.trigger ($speaker_candoor2_close); // SOUND
$canismover2_rdoor.move (NORTH, -24);
$canismover2_ldoor.move (NORTH, 24);
sys.waitFor ($canismover2_ldoor);
//hide it all
$canismover2.hide ();
$func_static_52402.hide ();
$func_static_52392.hide ();
$light_51202.Off ();
$func_static_52522.hide ();
$light_51212.Off ();
$func_static_52332.hide ();
$light_51182.Off ();
$light_51162.Off ();
$func_static_52482.hide ();
//wait after it goes behind the closed doors
sys.wait (3);
//bring it forward 192
$canismover2_anchor.time (.1);
$canismover2_anchor.accelTime (0);
$canismover2_anchor.decelTime (0);
$canismover2_anchor.move ( WEST, -192 );
sys.waitFor ($canismover2_anchor);
//rotate it quickly 90 degs to down position
$canismover2_anchor.time (.1);
$canismover2_anchor.accelTime (0);
$canismover2_anchor.decelTime (0);
$canismover2_anchor.rotateOnce ( '90 0 0' );
sys.waitFor ($canismover2_anchor);
//unhide it all
$canismover2.show ();
$func_static_52402.show ();
$func_static_52392.show ();
$light_51202.On ();
$func_static_52522.show ();
$light_51212.On ();
$func_static_52332.show ();
$light_51182.On ();
$light_51162.On ();
$func_static_52482.show ();
//open doors (move 24)
$canismover2_rdoor.move (NORTH, 24);
$canismover2_ldoor.move (NORTH, -24);
sys.trigger ($speaker_candoor2_open); // SOUND
sys.waitFor ($canismover2_ldoor);
//rotate it up -90 degs
$canismover2_anchor.time (2);
$canismover2_anchor.accelTime (2);
$canismover2_anchor.decelTime (0);
sys.trigger ($speaker_can2_updown); // SOUND
$canismover2_anchor.rotateOnce ( '-90 0 0' );
sys.waitFor ($canismover2_anchor);
//bounce
$canismover2_anchor.time (.15);
$canismover2_anchor.accelTime (.15);
$canismover2_anchor.decelTime (0);
$canismover2_anchor.rotateOnce ( '1.5 0 0' );
sys.waitFor ($canismover2_anchor);
$canismover2_anchor.time (.15);
$canismover2_anchor.accelTime (0);
$canismover2_anchor.decelTime (.15);
$canismover2_anchor.rotateOnce ( '-1.5 0 0' );
sys.waitFor ($canismover2_anchor);
$canismover2_anchor.time (.10);
$canismover2_anchor.accelTime (.10);
$canismover2_anchor.decelTime (0);
$canismover2_anchor.rotateOnce ( '.5 0 0' );
sys.waitFor ($canismover2_anchor);
$canismover2_anchor.time (.10);
$canismover2_anchor.accelTime (0);
$canismover2_anchor.decelTime (.10);
$canismover2_anchor.rotateOnce ( '-.5 0 0' );
sys.waitFor ($canismover2_anchor);
//twist it up
$canismover2_anchor.time (4.5);
$canismover2_anchor.accelTime (1.5);
$canismover2_anchor.decelTime (.3);
sys.trigger ($speaker_can2_rot);
$canismover2_anchor.rotateOnce ( '0 0 540' );
sys.waitFor ($canismover2_anchor);
sys.wait (0.5);
sys.trigger ($speaker_can2_rot);
$canismover2_anchor.rotateOnce ( '0 0 -540' );
sys.waitFor ($canismover2_anchor);
} //end while
}
////////////////////////////////////////////////////
//
// After invasion
// Things that are triggered after the invasion
//
////////////////////////////////////////////////////
void after_invasion ()
{
//unhide the exit elevator
$light_51518.show();
//steps busted by steam
$preinvasion_steps.hide();
$postinvasion_steps.show();
$pi_steps_steamlight1.On();
$pi_steps_steamlight2.On();
sys.trigger ($pi_steps_steam1);
sys.trigger ($pi_steps_steam2);
sys.trigger($pi_stepsteamsound);
//turn on the hazard lights
$pi_hazlight_proj1.On();
$pi_hazlight_proj2.On();
$pi_hazlight_sml1.On();
$pi_hazlight_sml2.On();
$func_rotating_5.show();
$func_rotating_6.show();
sys.trigger($pi_hazspeaker);
//impclawdoors
$impclawdoor1.open();
$impclawdoor2.open();
$impclawdoor1.remove();
$impclawdoor2.remove();
$underground_impcrawl_door_3.show();
$impclawdoorclip.show();
//restore position of crane
$crane_main.restorePosition();
//crane load unbind so it can fall
$crane_box1.unbind();
$crane_box2.unbind();
$crane_box3.unbind();
$crane_box4.unbind();
$crane_beam1.unbind();
$crane_beam2.unbind();
$crane_beam3.unbind();
$crane_beam4.unbind();
$crane_beam5.unbind();
//unhide the cave railing
$pi_cave_rail.show();
//enable the bridge gui
$saftey_bridge_gui.setGuiParm ( "gui_parm1" , 1);
}
////////////////////////////////////////////////////
//
// Fred stuff
//
////////////////////////////////////////////////////
void guard_switch_head_to_zombie( entity self ) {
self.setModel( "underground_invasion_zsechead" );
//sys.print( "Swapping Head\n");
}
void sci_switch_head_to_stump( entity self ) {
self.setModel( "underground_crazy_stump" );
//sys.print( "Swapping Head\n");
}
void killzombie()
{
$monster_zombie_maint_1.kill();
}
////////////////////////////////////////////////////
//
// swing the swinglight
//
////////////////////////////////////////////////////
void swinglight_move ()
{
$swinglight_mover.sway( 120, 0, '0 0 60' );
}
////////////////////////////////////////////////////
//
// drop_floor
//
////////////////////////////////////////////////////
void drop_floor_down ()
{
//trigger the initial speaker
sys.trigger ($speaker_drop_floor);
$drop_floor.time(1);
$drop_floor.accelTime(1);
$drop_floor.decelTime(.2);
//move drop_floor down
$drop_floor.move (DOWN, 176);
//trigger the weird sound
sys.trigger($drop_floor_weird_speaker);
}
////////////////////////////////////////////////////
//
// close security door
//
////////////////////////////////////////////////////
void close_secdoor ()
{
$func_door_46.close ();
}
////////////////////////////////////////////////////
//
// spooky_postinvasion1
//
// Scenario that happens immediately after invasion
// cinematic.
//
////////////////////////////////////////////////////
void postinvasion_spooky01_speakers_off ()
{
float j;
entity ent;
for (j=1; j<=11; j++)
{
ent = sys.getEntity ( "comm_speaker_" + j );
ent.fadeSound ( SND_CHANNEL_ANY, -60, 2.5 );
}
}
void postinvasion_spooky01_speakers_on ()
{
float j;
entity ent;
for (j=1; j<=11; j++)
{
ent = sys.getEntity ( "comm_speaker_" + j );
ent.fadeSound ( SND_CHANNEL_ANY, 0, 2.5 );
}
}
void postinvasion_spooky01_lights_off ()
{
float j;
entity ent;
for (j=1; j<=7; j++)
{
ent = sys.getEntity ( "comm_light_" + j );
ent.fadeOutLight ( 2.5 );
}
}
void postinvasion_spooky01_lights_on ()
{
float j;
entity ent;
for (j=1; j<=7; j++)
{
ent = sys.getEntity ( "comm_light_" + j );
ent.fadeInLight ( 2.5 );
}
}
void postinvasion_spooky01 ()
{
/* stuff I gotta trigger
invasion_spectrum_relay
invasion_floorskull_relay
underground_crazy_zombie
*/
// XIAN: Inserted speaker function here...
thread post_invasion_sounds();
//close and lock the door
$func_door_74.close ();
sys.trigger ($invasion_door_lock_relay);
//power out
sys.trigger ($comm_speaker_powerout);
thread postinvasion_spooky01_speakers_off();
thread postinvasion_spooky01_lights_off();
//wait for fades
sys.wait (2.5);
//trigger the suspense trigger
sys.trigger ($comm_speaker_suspense);
sys.wait (1);
sys.trigger ($speaker_airush2);
sys.wait (0.5);
sys.trigger ($speaker_substing1);
sys.trigger ($speaker_seq_invasion); // comm chatter stuff from other people
// on the base
sys.wait (1);
sys.trigger ($speaker_invasion_buildup); // Trigger the 5 second buildup speaker
sys.wait (4.8);
// 5 second buildup here
//trigger the skull from the floor
sys.trigger ($invasion_floorskull_relay);
sys.trigger ($speaker_appear); // White column appearing in middle of room stinger
sys.trigger ($speaker_hellblast_stinger);
sys.wait (0.5);
$speaker_appear.startSoundShader ("mc_hellblast_explosion", SND_CHANNEL_VOICE2);
sys.wait (0.5);
sys.trigger ($speaker_hellwind);
//trigger spectrum bang
sys.trigger ($invasion_spectrum_relay);
sys.wait (2); // Was 18 -Xian
sys.trigger ($speaker_spookything);
sys.wait (3);
sys.trigger ($speaker_betruger_laugh);
sys.wait (5);
//trigger transformation
//skull from wall transforms asian guy into zombie
sys.trigger ($crazysci_relay_nextthing);
sys.trigger ($speaker_leatherface);
sys.wait (2);
sys.trigger ($speaker_substing2);
sys.wait (1);
sys.trigger ($speaker_stereothing);
sys.wait (1);
//trigger the spooky looping sound that remains in the room after the invasion
sys.trigger ($invasionspookyremain_speaker);
//power back on
sys.trigger ($comm_speaker_poweron);
sys.wait (1);
thread postinvasion_spooky01_lights_on();
thread postinvasion_spooky01_speakers_on();
//trigger the gui that can be triggered on the middle desk
sys.trigger ($func_static_4730);
//trigger zombie security banging
sys.trigger ($zsec_bang);
//trigger first radio chatter
sys.trigger ($rchat_1);
sys.wait (2);
$speaker_spookything.startSoundShader ("mc_substing_02", SND_CHANNEL_VOICE2 );
sys.wait(2);
sys.trigger ($rchat_7);
sys.wait(3);
//unlock and open door
sys.trigger ($invasion_door_unlock_relay);
//trigger zombie to come on in
sys.trigger ($comm_zombie);
//break light near guis
sys.wait(3);
sys.trigger ($comm_light_6);
}
void init_howitzer() {
//howitzer setup
$how1_barrel.bind ($how1_base);
$how1_recep.bind ($how1_base);
$how1_catcher.bind ($how1_base);
$how1_base.rotateOnce ( '0 0 45' );
$how2_barrel.bind ($how2_base);
$how2_recep.bind ($how2_base);
$how2_catcher.bind ($how2_base);
$how2_base.rotateOnce ( '0 0 45' );
$how3_barrel.bind ($how3_base);
$how3_recep.bind ($how3_base);
$how3_catcher.bind ($how3_base);
$how3_base.rotateOnce ( '0 0 45' );
sys.waitFor($how1_base);
thread howitzer_1 ();
thread howitzer_2 ();
thread howitzer_3 ();
}
////////////////////////////////////////////////////
//
// brooks gui triggers
//
////////////////////////////////////////////////////
void brooks_guitouch ()
{
sys.trigger ($secpanel1);
}
void brooks_guiopen ()
{
$secpanel1.setGuiParm ( "gui_parm1" , 2);
}
////////////////////////////////////////////////////
//
// Crane start sound
//
////////////////////////////////////////////////////
void crane_start_thread() {
sys.trigger ($crane_start_speaker);
sys.wait (1);
$crane_main_speaker.On();
}
////////////////////////////////////////////////////
//
// Crane Main Move Right
//
////////////////////////////////////////////////////
void crane_main_right()
{
vector delta,deltatest;
vector deltadif;
sys.killthread ( "map_mc_underground::crane_main_left" );
//set the dir state for correct stopping
crane_dir = 1;
//set crane times back to normal
$crane_main.time (6);
$crane_main.accelTime (3);
$crane_main.decelTime (2);
if ( crane_main_state < 90 ) {
//start sound
thread crane_start_thread();
//start movement
$crane_main.rotateOnce ( '0 -90 0' );
while ( 1 ) {
delta = anglemod360( $crane_main.getAngles() );
deltatest = $crane_main.getAngles();
crane_main_state = (270 - (int( delta_y )));
//sys.print ("crane_main_state = " + crane_main_state + " " + deltatest +" \n");
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_remote_panel.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
if (crane_main_state >= 89) {
break;
}
sys.waitFrame();
}
//*****
//stop movement
//*****
//stop sound
$crane_main_speaker.Off();
sys.trigger ($crane_end_speaker);
//set crane times to accomodate stopping
$crane_main.time (.5);
$crane_main.accelTime (0);
$crane_main.decelTime (.5);
//the final move
$crane_main.rotateOnce ( '0 -1 0' );
sys.waitFor ($crane_main);
//set crane times back to normal
$crane_main.time (6);
$crane_main.accelTime (3);
$crane_main.decelTime (2);
//set crane status and update guis
crane_main_state = 90;
//sys.print ("crane_main_state = " + crane_main_state + " \n");
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_remote_panel.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
}
}
////////////////////////////////////////////////////
//
// Crane Main Move Left
// this should be redone for smoother movement
// especially since the player can remotely opperate
// the crane and see the jerky movement easily
//
////////////////////////////////////////////////////
void crane_main_left()
{
vector delta;
vector deltadif;
sys.killthread ( "map_mc_underground::crane_main_right" );
//set the dir state for correct stopping
crane_dir = -1;
//set crane times back to normal
$crane_main.time (6);
$crane_main.accelTime (3);
$crane_main.decelTime (2);
if ( crane_main_state > 0 ) {
//start sound
thread crane_start_thread();
//start movement
$crane_main.rotateOnce ( '0 90 0' );
while ( 1 ) {
delta = anglemod360( $crane_main.getAngles() );
crane_main_state = (270 - (int( delta_y )));
//sys.print ("crane_main_state = " + crane_main_state + " \n");
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_remote_panel.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
if (crane_main_state <= 1) {
break;
}
sys.waitFrame();
}
//*****
//stop movement
//*****
//stop sound
$crane_main_speaker.Off();
sys.trigger ($crane_end_speaker);
//set crane times to accomodate stopping
$crane_main.time (.5);
$crane_main.accelTime (0);
$crane_main.decelTime (.5);
//the final move
$crane_main.rotateOnce ( '0 1 0' );
sys.waitFor ($crane_main);
//set crane times back to normal
$crane_main.time (6);
$crane_main.accelTime (3);
$crane_main.decelTime (2);
//update guis
crane_main_state = 0;
//sys.print ("crane_main_state = " + crane_main_state + " \n");
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_remote_panel.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
}
}
////////////////////////////////////////////////////
//
// Crane stop
//
////////////////////////////////////////////////////
void crane_main_stop()
{
//sys.print ("enter crane_main_stop \n");
vector delta;
sys.killthread ( "map_caves2::crane_main_left" );
sys.killthread ( "map_caves2::crane_main_right" );
//set crane times to accomodate stopping
$crane_main.time (.3);
$crane_main.accelTime (0);
$crane_main.decelTime (.3);
//stop movement
if ( (crane_dir < 0) && (crane_main_state > 0) && (crane_main_state < 90) ) {
$crane_main.rotateOnce ( '0 1 0' );
sys.waitFor ($crane_main);
delta = anglemod360( $crane_main.getAngles() );
crane_main_state = (270 - (int( delta_y )));
//sys.print ("crane_main_state = " + crane_main_state + " \n");
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_remote_panel.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
} else if ( (crane_main_state > 0) && (crane_main_state < 90) ){
$crane_main.rotateOnce ( '0 -1 0' );
sys.waitFor ($crane_main);
delta = anglemod360( $crane_main.getAngles() );
crane_main_state = (270 - (int( delta_y )));
//sys.print ("crane_main_state = " + crane_main_state + " \n");
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_remote_panel.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
}
//stop sound
$crane_main_speaker.Off();
sys.trigger ($crane_end_speaker);
//set crane times back to normal
$crane_main.time (6);
$crane_main.accelTime (3);
$crane_main.decelTime (2);
}
////////////////////////////////////////////////////
//
// return radio chatter 1
//
////////////////////////////////////////////////////
void radio_chat_1()
{
float ran1;
ran1 = (3 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_8);
ran1 = (3 + sys.random(5));
sys.wait (ran1);
sys.trigger ($rchat_2);
ran1 = (8 + sys.random(6));
sys.wait (ran1);
sys.trigger ($rchat_3);
ran1 = (15 + sys.random(6));
sys.wait (ran1);
sys.trigger ($rchat_4);
ran1 = (8 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_5);
ran1 = (12 + sys.random(6));
sys.wait (ran1);
sys.trigger ($rchat_6);
ran1 = (8 + sys.random(8));
sys.wait (ran1);
sys.trigger ($rchat_7);
ran1 = (15 + sys.random(3));
sys.wait (ran1);
}
void radio_chat_2()
{
float ran1;
ran1 = (8 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_9);
ran1 = (8 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_10);
ran1 = (8 + sys.random(6));
sys.wait (ran1);
sys.trigger ($rchat_11);
ran1 = (8 + sys.random(8));
sys.wait (ran1);
sys.trigger ($rchat_12);
ran1 = (8 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_13);
ran1 = (8 + sys.random(5));
sys.wait (ran1);
}
void radio_chat_3()
{
float ran1;
ran1 = (0 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_14);
ran1 = (8 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_15);
ran1 = (8 + sys.random(5));
sys.wait (ran1);
sys.trigger ($rchat_2);
ran1 = (8 + sys.random(8));
sys.wait (ran1);
}
void radio_chat_4()
{
float ran1;
ran1 = (4 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_1);
ran1 = (8 + sys.random(9));
sys.wait (ran1);
sys.trigger ($rchat_3);
ran1 = (8 + sys.random(9));
sys.wait (ran1);
sys.trigger ($rchat_4);
ran1 = (12 + sys.random(9));
sys.wait (ran1);
sys.trigger ($rchat_5);
ran1 = (15 + sys.random(9));
sys.wait (ran1);
sys.trigger ($rchat_6);
ran1 = (8 + sys.random(9));
sys.wait (ran1);
}
void radio_chat_5()
{
float ran1;
ran1 = (4 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_7);
ran1 = (4 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_8);
ran1 = (4 + sys.random(4));
sys.wait (ran1);
sys.trigger ($rchat_9);
ran1 = (8 + sys.random(5));
sys.wait (ran1);
sys.trigger ($rchat_10);
ran1 = (3 + sys.random(9));
sys.wait (ran1);
sys.trigger ($rchat_11);
ran1 = (8 + sys.random(3));
sys.wait (ran1);
sys.trigger ($rchat_12);
ran1 = (12 + sys.random(5));
sys.wait (ran1);
sys.trigger ($rchat_13);
ran1 = (8 + sys.random(9));
sys.wait (ran1);
sys.trigger ($rchat_14);
ran1 = (2 + sys.random(9));
sys.wait (ran1);
sys.trigger ($rchat_15);
ran1 = (12 + sys.random(5));
sys.wait (ran1);
sys.trigger ($rchat_1);
ran1 = (4 + sys.random(9));
sys.wait (ran1);
sys.trigger ($rchat_3);
ran1 = (8 + sys.random(4));
sys.wait (ran1);
sys.trigger ($rchat_4);
ran1 = (4 + sys.random(9));
sys.wait (ran1);
}
void radio_chat_stop()
{
sys.killthread ("map_mc_underground::radio_chat_1");
sys.killthread ("map_mc_underground::radio_chat_2");
sys.killthread ("map_mc_underground::radio_chat_3");
sys.killthread ("map_mc_underground::radio_chat_4");
sys.killthread ("map_mc_underground::radio_chat_5");
}
void fade_blinkypre_sound ()
{
$speaker_101.fadeSound ( SND_CHANNEL_ANY, -60, 3 );
}
void fade_scotty_sound ()
{
$scotty1.fadeSound ( SND_CHANNEL_ANY, -60, .1 );
}
void crazy_sci_becomeZombie( entity self ) {
self.setTalkState( TALK_NEVER );
self.setHealth( self.getFloatKey( "normal_health" ) );
self.setKey( "snd_chatter_combat", self.getKey( "snd_chatter_combat_precache" ) );
// causes the monster to reset his chatter sound. hacky, but it does the job.
self.show();
}
////////////////////////////////////////////////////
//
// MAIN
//
////////////////////////////////////////////////////
void main ()
{
thread cache_sounds();
thread canister_mover ();
thread canister2_mover ();
setup_objects ();
thread saftey_bridge_away ();
thread lilfrm_move ();
thread rotary ();
thread howitzer_1 ();
thread howitzer_2 ();
thread howitzer_3 ();
thread pipe_piston_move ();
thread crankshaft_move ();
thread redthing_move ();
thread underarm_work ();
thread piston_move ();
thread swinglight_move();
//setup the airlocks in the correct states
thread airlock1_door2_open();
thread airlock2_door2_open();
sys.wait(20);
//disable the bridge gui
$saftey_bridge_gui.setGuiParm ( "gui_parm1" , 0);
}
}// namespace