0
0
Fork 0
mirror of https://github.com/id-Software/DOOM-3-BFG.git synced 2025-03-15 23:21:35 +00:00
doom3-bfg/base/script/map_caves2.script
2022-08-27 13:19:00 +02:00

743 lines
19 KiB
Text

namespace map_caves2 {
// variable to track the open close state of caves2_shutters
float cave2_shutter_state = 0;
float cave2_ladder_state = 0;
// variables to track crane movement states
float crane_main_state = 15;
float crane_carrier_state = 210;
float crane_carrier_load_state = 0;
float generator_on = FALSE;
////////////////////////////////////////////////////
//
// Setup objects
//
////////////////////////////////////////////////////
void setup_objects()
{
//move super_ladder down for keycard puzzle
$super_ladder.time(1);
$super_ladder.move ( DOWN, 632 );
$crane_carrier.bind ($crane_main);
$crane_carrier_load.bind ($crane_carrier);
$crane_main.setGuiParm ( "gui_parm3" , (crane_carrier_state / 4));
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_main.time (.05);
$crane_carrier.time (.01);
$crane_carrier_load.time (.02);
}
// Sound stuff for generator startup
void toggle_generator() {
if (generator_on) {
sys.trigger ($speaker_generator_stop); // Play Stop Sound
sys.trigger ($speaker_generator_loop); // Turn the loop off
generator_on = FALSE;
}
else {
sys.trigger ($speaker_generator_start);
sys.wait (1);
sys.trigger ($speaker_generator_loop);
generator_on = TRUE;
}
}
// This is so that we don't need one long 40 second looping sound for the ride down
void lift_sound_thread() {
sys.trigger ($lift_speaker_start);
sys.wait (4.75);
sys.trigger ($lift_speaker_loop); // Turn on the loop
sys.wait (35);
sys.trigger ($lift_speaker_end);
sys.wait (0.2);
sys.trigger ($lift_speaker_loop); // Turn off the loop
}
////////////////////////////////////////////////////
//
// Cave2 Small ladder at the lift
//
////////////////////////////////////////////////////
void lower_smallcave_ladder()
{
sys.wait( .5 );
sys.trigger( $snd_ladder_move );
$smallcave_ladder.move( DOWN, 120 );
}
void raise_smallcave_ladder()
{
sys.wait( .5 );
sys.trigger( $snd_ladder_move );
$smallcave_ladder.move( UP, 120 );
}
////////////////////////////////////////////////////
//
// Cave2 1st Elevator
//
////////////////////////////////////////////////////
void big_broke_start()
{
// times for big_broke mover
$big_broke.time (40);
$big_broke.accelTime (5);
$big_broke.decelTime (.5);
$big_broke.setKey ("snd_accel", "cav1_lift_start");
$big_broke.setKey ("snd_move", "cav1_lift_loop");
$big_broke.setKey ("snd_decel", "cav1_lift_stop");
// move the big_broke
//thread lift_sound_thread();
$big_broke.moveTo ($big_broke_start);
sys.waitFor ($big_broke);
sys.trigger ($big_broke);
sys.trigger ($func_aas_obstacle_1);
}
void big_broke_end()
{
// times for big_broke mover
$big_broke.setKey ("snd_accel", "cav1_lift_start");
$big_broke.setKey ("snd_move", "cav1_lift_loop");
$big_broke.setKey ("snd_decel", "cav1_lift_stop");
$big_broke.time (40);
$big_broke.accelTime (5);
$big_broke.decelTime (.2);
// move the big_broke
// thread lift_sound_thread();
$big_broke.moveTo ($big_broke_end);
sys.trigger ($func_aas_obstacle_1);
}
////////////////////////////////////////////////////
// Cave2 key card objective call
////////////////////////////////////////////////////
void callcavekey1()
{
sys.trigger ($caverns2_obj1);
}
////////////////////////////////////////////////////
// Caverns2 Piston machine1 sream
////////////////////////////////////////////////////
void piston1steam()
{
sys.trigger ($piston_1_steamspeaker);
sys.trigger ($pm1_steam1);
sys.wait (1);
sys.trigger ($pm1_steam1);
}
////////////////////////////////////////////////////
// Caverns2 Piston machine2 sream
////////////////////////////////////////////////////
void piston2steam()
{
sys.trigger ($piston_2_steamspeaker);
sys.trigger ($pm2_steam1);
sys.wait (1);
sys.trigger ($pm2_steam1);
}
////////////////////////////////////////////////////
// Caverns2 Piston machine1
////////////////////////////////////////////////////
void cavepiston1()
{
while(1){
$cave_piston1.accelTime (.2);
$cave_piston1.decelTime (.2);
$cave_piston1.time (6);
sys.trigger ($cave_piston_1_speaker_start);
sys.trigger ($cave_piston_1_speaker_loop); // Turn loop on
$cave_piston1.move (SOUTH,64);
sys.waitFor ($cave_piston1);
sys.trigger ($cave_piston_1_speaker_loop); // Turn loop off
sys.trigger ($cave_piston_1_speaker_endclack);
thread piston1steam();
sys.wait (0.75);
$cave_piston1.time (.5);
sys.trigger ($cave_piston_1_speaker_back);
$cave_piston1.move (NORTH,64);
sys.wait (1.5);
}
}
////////////////////////////////////////////////////
// Caverns2 Piston machine2
////////////////////////////////////////////////////
void cavepiston2()
{
while(1){
$cave_piston2.accelTime (.2);
$cave_piston2.decelTime (.2);
$cave_piston2.time (5.5);
sys.trigger ($cave_piston_2_speaker_start);
sys.trigger ($cave_piston_2_speaker_loop); // Turn loop on
$cave_piston2.move (SOUTH,64);
sys.waitFor ($cave_piston2);
sys.trigger ($cave_piston_2_speaker_loop); // Turn loop off
sys.trigger ($cave_piston_2_speaker_endclack);
thread piston2steam();
sys.wait (1);
$cave_piston2.time (.5);
sys.trigger ($cave_piston_2_speaker_back);
$cave_piston2.move (NORTH,64);
sys.wait (1.5);
}
}
////////////////////////////////////////////////////
//
// Cave2 v81 rumble
//
////////////////////////////////////////////////////
void cave2_v81_rumble()
{
$c2_v81.time (.1);
while(1){
$c2_v81.rotateOnce ( '2 0 0' );
sys.waitFor ($c2_v81);
$c2_v81.rotateOnce ( '-2 0 0' );
sys.waitFor ($c2_v81);
}
}
////////////////////////////////////////////////////
//
// Cave2 v82 rumble
//
////////////////////////////////////////////////////
void cave2_v82_rumble()
{
$c2_v82.time (.1);
while(1){
$c2_v82.rotateOnce ( '2 0 0' );
sys.waitFor ($c2_v82);
$c2_v82.rotateOnce ( '-2 0 0' );
sys.waitFor ($c2_v82);
}
}
////////////////////////////////////////////////////
//
// Cave2 cave eggs
//
////////////////////////////////////////////////////
// void cave_egg1_bob()
// {
// $cave_egg1.rotate ( '0 15 0' );
//
// $cave_egg1.time (.5);
// $cave_egg1.accelTime (.25);
// $cave_egg1.decelTime (.25);
//
// while(1){
// $cave_egg1.move ( DOWN, 2 );
// sys.waitFor ($cave_egg1);
// $cave_egg1.move ( UP, 2 );
// sys.waitFor ($cave_egg1);
//
// }
// }
//
// void cave_egg2_bob()
// {
// $cave_egg2.rotate ( '0 16 0' );
//
// $cave_egg2.time (.8);
// $cave_egg2.accelTime (.25);
// $cave_egg2.decelTime (.25);
//
// while(1){
// $cave_egg2.move ( DOWN, 2 );
// sys.waitFor ($cave_egg2);
// $cave_egg2.move ( UP, 2 );
// sys.waitFor ($cave_egg2);
//
// }
// }
//
//
// void cave_egg3_bob()
// {
// $cave_egg3.rotate ( '0 15 0' );
//
// $cave_egg3.time (.6);
// $cave_egg3.accelTime (.25);
// $cave_egg3.decelTime (.25);
//
// while(1){
// $cave_egg3.move ( DOWN, 2 );
// sys.waitFor ($cave_egg3);
// $cave_egg3.move ( UP, 2 );
// sys.waitFor ($cave_egg3);
//
// }
// }
////////////////////////////////////////////////////
//
// Cave2 shutter open close
//
////////////////////////////////////////////////////
void cave2_shutter_openclose()
{
if (cave2_shutter_state==0){
sys.trigger ($shutter_speaker);
sys.trigger ($cave2_shutter_door);
$cave2_shutter1.rotateOnce ( '0 0 -75' );
$cave2_shutter2.rotateOnce ( '0 0 -75' );
$cave2_shutter3.rotateOnce ( '0 0 -75' );
sys.waitFor ($cave2_shutter1);
cave2_shutter_state = 1;
} else {
sys.trigger ($shutter_speaker);
sys.trigger ($cave2_shutter_door);
$cave2_shutter1.rotateOnce ( '0 0 75' );
$cave2_shutter2.rotateOnce ( '0 0 75' );
$cave2_shutter3.rotateOnce ( '0 0 75' );
sys.waitFor ($cave2_shutter1);
cave2_shutter_state = 0;
}
}
////////////////////////////////////////////////////
//
// Cave2 ladder open close
//
////////////////////////////////////////////////////
void cave2_ladder_openclose()
{
if (cave2_ladder_state==0){
$cave2_dropladder.time (0.5);
sys.trigger ($cave2_ladder_door);
sys.trigger ($ladder_hinge_speaker);
$cave2_dropladder.rotateOnce ( '0 0 -90' );
sys.waitFor ($cave2_dropladder);
$ladder_rotate_gui.setShaderParm ( 7 , 1 );
cave2_ladder_state = 1;
} else {
sys.trigger ($cave2_ladder_door);
sys.trigger ($ladder_hinge_speaker);
$cave2_dropladder.time (0.5);
$cave2_dropladder.rotateOnce ( '0 0 90' );
sys.waitFor ($cave2_dropladder);
$ladder_rotate_gui.setShaderParm ( 7 , 0 );
cave2_ladder_state = 0;
}
}
void crane_start_thread() {
sys.trigger ($crane_start_speaker);
sys.wait (1);
$crane_main_speaker.On();
}
////////////////////////////////////////////////////
//
// Crane Main Move Right
//
////////////////////////////////////////////////////
void crane_main_right()
{
sys.killthread ( "map_caves2::crane_main_left" );
sys.killthread ( "map_caves2::crane_carrier_forward" );
sys.killthread ( "map_caves2::crane_carrier_back" );
//start the sound
// sys.trigger ($crane_start_speaker);
// $crane_main_speaker.On();
thread crane_start_thread();
while ( crane_main_state < 105 ) {
$crane_main.rotateOnce ( '0 -1 0' );
sys.waitFor ($crane_main);
crane_main_state = crane_main_state + 1;
sys.print ("crane_main_state = " + crane_main_state + " \n");
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
sys.wait (.01);
}
sys.trigger ($crane_end_speaker);
//stop the sound
$crane_main_speaker.Off();
}
////////////////////////////////////////////////////
//
// Crane Main Move Left
//
////////////////////////////////////////////////////
void crane_main_left()
{
sys.killthread ( "map_caves2::crane_main_right" );
sys.killthread ( "map_caves2::crane_carrier_forward" );
sys.killthread ( "map_caves2::crane_carrier_back" );
//start the sound
//sys.trigger ($crane_start_speaker);
//$crane_main_speaker.On();
thread crane_start_thread();
while ( crane_main_state > 15 ) {
$crane_main.rotateOnce ( '0 1 0' );
sys.waitFor ($crane_main);
crane_main_state = crane_main_state - 1;
sys.print ("crane_main_state = " + crane_main_state + " \n");
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
sys.wait (.01);
}
//stop the sound
$crane_main_speaker.Off();
sys.trigger ($crane_end_speaker);
}
////////////////////////////////////////////////////
//
// Crane Reset
//
////////////////////////////////////////////////////
void crane_main_reset()
{
sys.killthread ( "map_caves2::crane_main_left" );
sys.killthread ( "map_caves2::crane_main_right" );
sys.killthread ( "map_caves2::crane_carrier_forward" );
sys.killthread ( "map_caves2::crane_carrier_back" );
//start the sound
$crane_main_speaker.On();
if (crane_main_state > 15) {
while ( crane_main_state > 15 ) {
$crane_main.rotateOnce ( '0 1 0' );
sys.waitFor ($crane_main);
crane_main_state = crane_main_state - 1;
sys.print ("crane_main_state = " + crane_main_state + " \n");
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
sys.wait (.01);
}
} else if (crane_main_state < 15) {
while ( crane_main_state < 15 ) {
$crane_main.rotateOnce ( '0 -1 0' );
sys.waitFor ($crane_main);
crane_main_state = crane_main_state + 1;
sys.print ("crane_main_state = " + crane_main_state + " \n");
$crane_main.setGuiParm ( "gui_parm2" , crane_main_state);
$crane_reset_button.setGuiParm ( "gui_parm2" , crane_main_state);
sys.wait (.01);
}
}
//stop the sound
$crane_main_speaker.Off();
}
////////////////////////////////////////////////////
//
// Crane Carrier Move Forward
//
////////////////////////////////////////////////////
void crane_carrier_forward()
{
sys.killthread ( "map_caves2::crane_main_left" );
sys.killthread ( "map_caves2::crane_main_right" );
sys.killthread ( "map_caves2::crane_carrier_back" );
//start the sound
$crane_carrier_speaker.On();
while ( crane_carrier_state > 0 ) {
$crane_carrier.move ( FORWARD, -1 );
sys.waitFor ($crane_carrier);
crane_carrier_state = crane_carrier_state - 1;
sys.print ("crane_carrier_state = " + (crane_carrier_state / 4) + " \n");
$crane_main.setGuiParm ( "gui_parm3" , (crane_carrier_state / 4));
sys.wait (.01);
}
//stop the sound
$crane_carrier_speaker.Off();
}
////////////////////////////////////////////////////
//
// Crane Carrier Move Back
//
////////////////////////////////////////////////////
void crane_carrier_back()
{
sys.killthread ( "map_caves2::crane_main_left" );
sys.killthread ( "map_caves2::crane_main_right" );
sys.killthread ( "map_caves2::crane_carrier_foward" );
//start the sound
$crane_carrier_speaker.On();
while ( crane_carrier_state < 360 ) {
$crane_carrier.move ( FORWARD, 1 );
sys.waitFor ($crane_carrier);
crane_carrier_state = crane_carrier_state + 1;
sys.print ("crane_carrier_state = " + (crane_carrier_state / 4) + " \n");
$crane_main.setGuiParm ( "gui_parm3" , (crane_carrier_state / 4));
sys.wait (.01);
}
//stop the sound
$crane_carrier_speaker.Off();
}
////////////////////////////////////////////////////
//
// Crane Carrier Load Move UP
//
////////////////////////////////////////////////////
void crane_carrier_load_up()
{
sys.killthread ( "map_caves2::crane_main_left" );
sys.killthread ( "map_caves2::crane_main_right" );
sys.killthread ( "map_caves2::crane_carrier_foward" );
sys.killthread ( "map_caves2::crane_carrier_back" );
sys.killthread ( "map_caves2::crane_carrier_load_down" );
while ( crane_carrier_load_state < 72 ) {
$crane_carrier_load.move ( UP, 1 );
sys.waitFor ($crane_carrier_load);
crane_carrier_load_state = crane_carrier_load_state + 1;
sys.print ("crane_carrier_load_state = " + crane_carrier_load_state + " \n");
sys.wait (.01);
}
}
////////////////////////////////////////////////////
//
// Crane Carrier Load Move DOWN
//
////////////////////////////////////////////////////
void crane_carrier_load_down()
{
sys.killthread ( "map_caves2::crane_main_left" );
sys.killthread ( "map_caves2::crane_main_right" );
sys.killthread ( "map_caves2::crane_carrier_foward" );
sys.killthread ( "map_caves2::crane_carrier_back" );
sys.killthread ( "map_caves2::crane_carrier_load_up" );
while ( crane_carrier_load_state > -176 ) {
$crane_carrier_load.move ( DOWN, 1 );
sys.waitFor ($crane_carrier_load);
crane_carrier_load_state = crane_carrier_load_state - 1;
sys.print ("crane_carrier_load_state = " + crane_carrier_load_state + " \n");
sys.wait (.01);
}
}
////////////////////////////////////////////////////
//
// stops all crane movement threads
//
////////////////////////////////////////////////////
void crane_stop()
{
//turn off speakers
$crane_carrier_speaker.Off();
$crane_main_speaker.Off();
sys.killthread ( "map_caves2::crane_main_right" );
sys.killthread ( "map_caves2::crane_main_left" );
sys.killthread ( "map_caves2::crane_carrier_forward" );
sys.killthread ( "map_caves2::crane_carrier_back" );
sys.killthread ( "map_caves2::crane_carrier_load_up" );
sys.killthread ( "map_caves2::crane_carrier_load_down" );
}
////////////////////////////////////////////////////
//
// show crane_carrier_load
//
////////////////////////////////////////////////////
void crane_load_show()
{
//show crane_load
$crane_carrier_load.show();
}
////////////////////////////////////////////////////
//
// move super_ladder up
//
////////////////////////////////////////////////////
void super_ladder_move()
{
//move super_ladder up for keycard puzzle
sys.trigger ($super_ladder_speaker);
$super_ladder.time(6);
$super_ladder.move(UP,632);
}
void stone_movement (entity ent, float fdirection, float fdistance, float ftime) {
ent.time (ftime);
ent.startSoundShader ("stone_movement_loop", SND_CHANNEL_VOICE);
ent.move (fdirection, fdistance);
sys.wait (ftime - 0.25);
ent.startSoundShader ( "stone_movement_end", SND_CHANNEL_VOICE2 );
ent.stopSound ( SND_CHANNEL_VOICE, false );
}
////////////////////////////////////////////////////
//
// Vag Stairs
//
////////////////////////////////////////////////////
void raise_vag_stairs()
{
//raises stairs after vag fight
/* float i;
entity ent;
for (i=8; i<=128; i+=8) {
ent=sys.getEntity ("step" + i);
thread stone_movement ( ent, UP, i, (i / 8) );
}
*/
thread stone_movement ($step1, UP, 8, 1);
thread stone_movement ($step2, UP, 16, 2);
thread stone_movement ($step3, UP, 24, 3);
thread stone_movement ($step4, UP, 32, 4);
thread stone_movement ($step5, UP, 40, 5);
thread stone_movement ($step6, UP, 48, 6);
thread stone_movement ($step7, UP, 56, 7);
thread stone_movement ($step8, UP, 64, 8);
thread stone_movement ($step9, UP, 72, 9);
thread stone_movement ($step10, UP, 80, 10);
thread stone_movement ($step11, UP, 88, 11);
thread stone_movement ($step12, UP, 96, 12);
thread stone_movement ($step13, UP, 104, 13);
thread stone_movement ($step14, UP, 112, 14);
thread stone_movement ($step15, UP, 120, 15);
thread stone_movement ($step16, UP, 128, 16);
/*
$step1.time(1);
$step1.move(UP,8);
$step2.time(2);
$step2.move(UP,16);
$step3.time(3);
$step3.move(UP,24);
$step4.time(4);
$step4.move(UP,32);
$step5.time(5);
$step5.move(UP,40);
$step6.time(6);
$step6.move(UP,48);
$step7.time(7);
$step7.move(UP,56);
$step8.time(8);
$step8.move(UP,64);
$step9.time(9);
$step9.move(UP,72);
$step10.time(10);
$step10.move(UP,80);
$step11.time(11);
$step11.move(UP,88);
$step12.time(12);
$step12.move(UP,96);
$step13.time(13);
$step13.move(UP,104);
$step14.time(14);
$step14.move(UP,112);
$step15.time(15);
$step15.move(UP,120);
$step16.time(16);
$step16.move(UP,128);
*/
}
void cache_sounds() {
sys.cacheSoundShader ( "cav1_lift_start" );
sys.cacheSoundShader ( "cav1_lift_loop" );
sys.cacheSoundShader ( "cav1_lift_stop" );
sys.cacheSoundShader ( "stone_movement_loop" );
sys.cacheSoundShader ( "stone_movement_end" );
}
////////////////////////////////////////////////////
//
// Caverns 2 Main
//
////////////////////////////////////////////////////
void main()
{
cache_sounds();
setup_objects();
//starts swinging lamp swinging
$swingding.sway( 28, 0, '20 0 0' );
// thread big_broke();
thread cavepiston1();
thread cavepiston2();
thread cave2_v81_rumble();
thread cave2_v82_rumble();
// thread cave_egg1_bob();
// thread cave_egg2_bob();
// thread cave_egg3_bob();
}
}// namespace
//Fred's Bridge thing
//
//void hk_fireball( entity self ) {
// self.launchMissiles( "projectile_fireball_hellknight", "snd_fire", "rmissile", "target", 1, 0 );
//}