Files
DoomRTX/base/maps/game/mp/d3dm3.script
T
2026-05-22 23:51:43 -07:00

658 lines
17 KiB
Plaintext

// =================================================
// Map: D3DM3 ( FragChamber )
// =================================================
//--------------------------------------------------
// Script definitions and global variables
//--------------------------------------------------
float powerupExists = 0;
float powerupTimerFinished = 0;
float soundKlaxon = 0;
//--------------------------------------------------
// Sound Functions
//--------------------------------------------------
void sound_berserk_spawn()
{
float soundBerserkSpawn;
//sys.wait( 5 );
soundBerserkSpawn = $mrdr_speaker_berserk.startSound( "snd_berserkSpawn", SND_CHANNEL_ANY, true );
sys.wait( 3 );
$mrdr_speaker_berserk.startSound( "snd_berserkLoop", SND_CHANNEL_ANY, true );
}
// function for klaxon sounds
void sound_klaxon( entity mrdr_klaxon )
{
float soundKlaxonLength;
while ( soundKlaxon ) {
soundKlaxonLength = mrdr_klaxon.startSound( "snd_klaxon", SND_CHANNEL_ANY, true );
sys.wait( soundKlaxonLength + 1.2 );
}
}
// function for flickering lights sounds
void sound_lights_flicker( entity mrdr_lights_flicker )
{
mrdr_lights_flicker.stopSound( SND_CHANNEL_ANY, true );
mrdr_lights_flicker.startSound( "snd_lightsFlicker", SND_CHANNEL_ANY, true );
}
void sound_lights_steady( entity mrdr_lights_hum )
{
mrdr_lights_hum.stopSound( SND_CHANNEL_ANY, true );
mrdr_lights_hum.startSound( "snd_lightsHum", SND_CHANNEL_ANY, true );
}
void sound_lights_flickering()
{
thread sound_lights_flicker( $mrdr_speaker_lights_01 );
thread sound_lights_flicker( $mrdr_speaker_lights_02 );
thread sound_lights_flicker( $mrdr_speaker_lights_03 );
thread sound_lights_flicker( $mrdr_speaker_lights_04 );
sys.wait( 12 );
thread sound_lights_steady( $mrdr_speaker_lights_01 );
thread sound_lights_steady( $mrdr_speaker_lights_02 );
thread sound_lights_steady( $mrdr_speaker_lights_03 );
thread sound_lights_steady( $mrdr_speaker_lights_04 );
}
void sound_lights()
{
thread sound_lights_steady( $mrdr_speaker_lights_01 );
thread sound_lights_steady( $mrdr_speaker_lights_02 );
thread sound_lights_steady( $mrdr_speaker_lights_03 );
thread sound_lights_steady( $mrdr_speaker_lights_04 );
}
//--------------------------------------------------
// Power Light flick0r
//--------------------------------------------------
void setup_powerlights ()
{
sys.setShaderParm(0,1); // Default value ON
sys.setShaderParm(1,1);
sys.setShaderParm(2,1);
}
//--------------------------------------------------
void light_ramp( float rgb_start, float rgb_end, float time_val )
{
float i, t, v;
t = time_val * 60;
for ( i = 0; i < t; i++ ) {
v = rgb_start + ( rgb_end - rgb_start ) * ( i / t ); // Base light value
sys.setShaderParm( 0, v );
sys.setShaderParm( 1, v );
sys.setShaderParm( 2, v );
sys.wait( 1 / 60 );
}
sys.setShaderParm( 0, rgb_end ); // Final light value
sys.setShaderParm( 1, rgb_end );
sys.setShaderParm( 2, rgb_end );
}
//--------------------------------------------------
void power_flux(float total_time)
{
float i, pfstart, pfend, pftime;
pfstart = 1; // Initial value
while (total_time>0) {
pfend = sys.random(1); // Brightest point
pftime = sys.random(1); // Flicker interval
light_ramp( pfstart, pfend, pftime);
pfstart = pfend;
total_time = total_time - pftime;
}
light_ramp( pfend, 1, 0.3 ); // Move back to default
setup_powerlights (); // Reset lights to intial values
}
//--------------------------------------------------
// Setup klax lights
//--------------------------------------------------
void setup_klaxlights ()
{
float i,j;
entity klit, klit_base;
for ( i = 1; i<5; i++ ) {
klit_base = sys.getEntity("rotlight"+i+"_base");
for ( j = 1; j<3; j++ ) {
klit = sys.getEntity("rotlight"+i+"_light"+j);
klit.bind(klit_base);
}
}
}
//--------------------------------------------------
// Switch klax lights ON/OFF
//--------------------------------------------------
void switchrgb_klaxlights (vector rgb_val)
{
float i,j;
entity klit;
for ( i = 1; i<5; i++ ) {
for ( j = 1; j<3; j++ ) {
klit = sys.getEntity("rotlight"+i+"_light"+j);
klit.setColor(rgb_val_x,rgb_val_y,rgb_val_z);
}
}
}
//--------------------------------------------------
// Spin UP/DOWN klax lights
//--------------------------------------------------
void spin_klaxlights ( entity klit, float final_speed, float total_time, float total_step, float direction )
{
float i, s, t, spinpause;
vector klitvec;
t = total_time / total_step ; // Loop step value
s = final_speed / total_step ; // Rotation loop steps
klitvec_x=0; // Start value
klitvec_z=0;
if (direction==0) {
klitvec_y=0;
for ( i = 0; i < total_time; i=i+t ) {
klitvec_y=klitvec_y+s; // Increase spin up speed
klit.rotate (klitvec); // Set new speed
sys.wait(t); // Spin up pause
}
klitvec_y=final_speed;
}
else {
klitvec_y=final_speed;
for ( i = total_time; i > 0; i=i-t ) {
klitvec_y=klitvec_y-s; // Increase spin up speed
klit.rotate (klitvec); // Set new speed
sys.wait(t); // Spin up pause
}
klitvec_y=0;
}
klit.rotate (klitvec); // Final speed
}
//--------------------------------------------------
// Start klax lights
//--------------------------------------------------
void start_klaxlights ()
{
float thread1;
// klaxon sound on
soundKlaxon = 1;
thread sound_klaxon( $mrdr_speaker_klaxon_01 );
thread sound_klaxon( $mrdr_speaker_klaxon_02 );
thread sound_klaxon( $mrdr_speaker_klaxon_03 );
thread sound_klaxon( $mrdr_speaker_klaxon_04 );
$klaxlight_1_particle.show();
$klaxlight_2_particle.show();
$klaxlight_3_particle.show();
$klaxlight_4_particle.show();
sys.trigger ($klaxlight_1_particle);
sys.trigger ($klaxlight_2_particle);
sys.trigger ($klaxlight_3_particle);
sys.trigger ($klaxlight_4_particle);
$rotlight1_base.setColor( 0.6, 0, 0 );
$rotlight2_base.setColor( 0.6, 0, 0 );
$rotlight3_base.setColor( 0.6, 0, 0 );
$rotlight4_base.setColor( 0.6, 0, 0 );
thread switchrgb_klaxlights ('2 0 0');
thread spin_klaxlights ($rotlight1_base, 180, 2, 32, 0);
thread spin_klaxlights ($rotlight2_base, 180, 2, 32, 0);
thread spin_klaxlights ($rotlight3_base, 180, 2, 32, 0);
thread1= thread spin_klaxlights ($rotlight4_base, 180, 2, 32, 0);
sys.waitForThread(thread1);
$rotlight1_base.rotate ( '0 180 0' );
$rotlight2_base.rotate ( '0 180 0' );
$rotlight3_base.rotate ( '0 180 0' );
$rotlight4_base.rotate ( '0 180 0' );
}
//--------------------------------------------------
// Stop klax lights
//--------------------------------------------------
void stop_klaxlights ()
{
float thread1;
// klaxon sound off
soundKlaxon = 0;
thread spin_klaxlights ($rotlight1_base, 180, 2, 32, 1);
thread spin_klaxlights ($rotlight2_base, 180, 2, 32, 1);
thread spin_klaxlights ($rotlight3_base, 180, 2, 32, 1);
thread1 = thread spin_klaxlights ($rotlight4_base, 180, 2, 32, 1);
sys.waitForThread(thread1);
$klaxlight_1_particle.hide();
$klaxlight_2_particle.hide();
$klaxlight_3_particle.hide();
$klaxlight_4_particle.hide();
sys.trigger ($klaxlight_1_particle);
sys.trigger ($klaxlight_2_particle);
sys.trigger ($klaxlight_3_particle);
sys.trigger ($klaxlight_4_particle);
$rotlight1_base.setColor( 0, 0, 0 );
$rotlight2_base.setColor( 0, 0, 0 );
$rotlight3_base.setColor( 0, 0, 0 );
$rotlight4_base.setColor( 0, 0, 0 );
thread switchrgb_klaxlights ('0 0 0');
$rotlight1_base.rotate ( '0 0 0' );
$rotlight2_base.rotate ( '0 0 0' );
$rotlight3_base.rotate ( '0 0 0' );
$rotlight4_base.rotate ( '0 0 0' );
}
//--------------------------------------------------
// Chamber's GUI controls
//--------------------------------------------------
void chamber_guicontrol(float gui_status)
{
// Chamber can be activated
if (gui_status == 1) {
$chamber_gui_console.setGuiParm ( "gui_parm2" , 1);
}
// Chamber is full of gas/creating power up
else if (gui_status == 2) {
$chamber_gui_console.setGuiParm ( "gui_parm2" , 2);
}
// The PowerUp is waiting in the chamber
else if (gui_status == 3) {
$chamber_gui_console.setGuiParm ( "gui_parm2" , 3);
}
}
// -------------------------------------------------
// Thread that gets called by the trigger relay
// -------------------------------------------------
void chamber_guiblocked_trigger()
{
powerupExists = 0;
if( powerupTimerFinished ) {
thread chamber_guicontrol(1);
}
sys.wait(0.1);
}
// -------------------------------------------------
// Run a timer
// -------------------------------------------------
void powerup_timer()
{
powerupTimerFinished = 0;
sys.wait( 60 );
powerupTimerFinished = 1;
if( powerupExists == 0 ) {
thread chamber_guicontrol(1);
}
}
// -------------------------------------------------
// Spawn the PowerUP
// -------------------------------------------------
void spawn_powerup()
{
powerupExists = 1;
thread powerup_timer();
$powerup_berserk_triggered.respawn();
}
// -------------------------------------------------
// Shaking machines
// -------------------------------------------------
void llm_shaker1_move()
{
$llm_shaker1.time (.075);
while(1){
$llm_shaker1.rotateOnce ( '.8 1.1 1' );
sys.waitFor ($llm_shaker1);
$llm_shaker1.rotateOnce ( '-.8 -1.1 -1' );
sys.waitFor ($llm_shaker1);
}
}
/*--------------------------------------------------------------------
F r a g c h a m b e r scripting START
--------------------------------------------------------------------*/
// -------------------------------------------------
// Chamber Core DOWN
// -------------------------------------------------
void chamber_core_down()
{
$chamber_core.time(5);
$chamber_core.accelTime(1);
$chamber_core.decelTime(1.5);
$chamber_core.moveTo($chamber_core_down);
sys.trigger ($chamber_core_down_speaker);
sys.waitFor ($chamber_core);
sys.trigger ($chamber_core_shaker_speaker);
}
// -------------------------------------------------
// Chamber Core UP
// -------------------------------------------------
void chamber_core_up()
{
$chamber_core.time(3);
$chamber_core.accelTime(2.5);
$chamber_core.decelTime(.5);
$chamber_core.moveTo($chamber_core_up);
sys.trigger ($chamber_core_down_speaker);
sys.waitFor ($chamber_core);
}
// -------------------------------------------------
// Chamber Rods DOWN
// -------------------------------------------------
void chamber_rods_down()
{
$chamber_rods.time(4);
$chamber_rods.accelTime(1);
$chamber_rods.decelTime(.5);
$chamber_rods.moveTo($chamber_rod_down);
sys.trigger ($chamber_rods_down_speaker);
sys.waitFor ($chamber_rods);
}
// -------------------------------------------------
// Chamber Rods UP
// -------------------------------------------------
void chamber_rods_up()
{
$chamber_rods.time(3);
$chamber_rods.accelTime(1);
$chamber_rods.decelTime(.5);
$chamber_rods.moveTo($chamber_rod_up);
sys.trigger ($chamber_rods_up_speaker);
sys.waitFor ($chamber_rods);
}
// -------------------------------------------------
// Chamber Sockets OUT
// -------------------------------------------------
void chamber_sockets_out()
{
$chamber_socket1.time(2);
$chamber_socket1.moveTo($chamber_socket1_out);
$chamber_socket2.time(2);
$chamber_socket2.moveTo($chamber_socket2_out);
$chamber_socket3.time(2);
$chamber_socket3.moveTo($chamber_socket3_out);
$chamber_socket4.time(2);
$chamber_socket4.moveTo($chamber_socket4_out);
sys.trigger ($chamber_sockets_out_speaker);
sys.waitFor ($chamber_socket4);
}
// -------------------------------------------------
// Chamber Sockets IN
// -------------------------------------------------
void chamber_sockets_in()
{
$chamber_socket1.time(2);
$chamber_socket1.moveTo($chamber_socket1_in);
$chamber_socket2.time(2);
$chamber_socket2.moveTo($chamber_socket2_in);
$chamber_socket3.time(2);
$chamber_socket3.moveTo($chamber_socket3_in);
$chamber_socket4.time(2);
$chamber_socket4.moveTo($chamber_socket4_in);
sys.trigger ($chamber_sockets_in_speaker);
sys.waitFor ($chamber_socket4);
}
// -------------------------------------------------
// fog up
// -------------------------------------------------
void fog_up()
{
$chamber_foglight_mover.time(12);
$chamber_foglight_mover.moveTo($chamber_foglight_up);
}
// -------------------------------------------------
// fog down
// -------------------------------------------------
void fog_down()
{
$chamber_foglight_mover.time(12);
$chamber_foglight_mover.moveTo($chamber_foglight_down);
}
// -------------------------------------------------
// Trigger the Chamber into action!
// -------------------------------------------------
void chamber_trigger()
{
float moverthread;
// Switches gui to non-interactive mode
chamber_guicontrol(2);
sys.wait(0.1);
// doors CLOSE
$chamber_door1a.close();
$chamber_door1b.close();
$chamber_door2a.close();
$chamber_door2b.close();
$chamber_door3a.close();
$chamber_door3b.close();
$chamber_door4a.close();
$chamber_door4b.close();
sys.waitFor($chamber_door1a);
sys.waitFor($chamber_door2a);
sys.waitFor($chamber_door3a);
sys.waitFor($chamber_door4a);
//trigger the hurt on
sys.trigger ( $chamber_hurt );
// Klax lights START
thread start_klaxlights();
// flicker lights
thread power_flux(14);
// secret steam sounds
//thread sound_secret_steam_on();
//sys.trigger ($greensteam01);
//sys.trigger ($greensteam02);
//sys.trigger ($greensteam03);
//$secretsteam.moveTo ($secretsteam_pos2);
// fog & trigger_hurt move UP
//thread fog_up();
//bridges up
sys.trigger ($bridge_up_speaker);
$chamber_bridge1.rotateOnce( '0 0 -61' );
$chamber_bridge2.rotateOnce( '107.5 0 0' );
$chamber_bridge3.rotateOnce( '0 0 61' );
$chamber_bridge4.rotateOnce( '-107.5 0 0' );
//core DOWN
thread chamber_core_down();
//sockets OUT
sys.waitFor($chamber_bridge1);
moverthread = thread chamber_sockets_out();
sys.waitForThread ( moverthread );
//rods DOWN
moverthread = thread chamber_rods_down();
sys.waitForThread ( moverthread );
sys.wait(1);
// powerup goodness ...
thread spawn_powerup();
thread sound_berserk_spawn();
// ... Dramatic pause ...
sys.wait(3);
//rods up and sockets in
thread chamber_rods_up();
sys.wait (1);
moverthread = thread chamber_sockets_in();
sys.waitForThread ( moverthread );
//bridges DOWN
sys.trigger ($bridge_down_speaker);
$chamber_bridge1.rotateOnce( '0 0 61' );
$chamber_bridge2.rotateOnce( '-107.5 0 0' );
$chamber_bridge3.rotateOnce( '0 0 -61' );
$chamber_bridge4.rotateOnce( '107.5 0 0' );
//core up
moverthread = thread chamber_core_up();
sys.waitForThread ( moverthread );
// secret steam sounds
//thread sound_secret_steam_off();
//sys.trigger ($greensteam01);
//sys.trigger ($greensteam02);
//sys.trigger ($greensteam03);
//$secretsteam.moveTo ($secretsteam_pos1);
// Klax lights STOP
thread stop_klaxlights();
// fog & trigger_hurt go DOWN
sys.wait(1.5);
//thread fog_down();
// turn off flickering lights sound
thread sound_lights_steady( $mrdr_speaker_lights_01 );
thread sound_lights_steady( $mrdr_speaker_lights_02 );
// doors OPEN
sys.wait(1);
// set gui to standby mode
chamber_guicontrol(3);
sys.wait(0.1);
$chamber_door1a.open();
$chamber_door1b.open();
$chamber_door2a.open();
$chamber_door2b.open();
$chamber_door3a.open();
$chamber_door3b.open();
$chamber_door4a.open();
$chamber_door4b.open();
sys.waitFor($chamber_door1a);
sys.waitFor($chamber_door2a);
sys.waitFor($chamber_door3a);
sys.waitFor($chamber_door4a);
//trigger the hurt on
sys.trigger ( $chamber_hurt );
}
/*--------------------------------------------------------------------
F r a g c h a m b e r scripting END
--------------------------------------------------------------------*/
//--------------------------------------------------
// Set initial states
//--------------------------------------------------
void setup_objects()
{
setup_powerlights (); // Reset lights to intial values
thread setup_klaxlights(); // Red klaxons that spin when chamber is active
thread switchrgb_klaxlights ('0 0 0');
thread llm_shaker1_move();
// fog mover
$chamber_foglight_mover.time(0.1);
$chamber_foglight_mover.moveTo($chamber_foglight_down);
// Chamber bridges
$chamber_bridge1.setAngles( '0 0 -24' );
$chamber_bridge2.setAngles( '-22.5 0 0' );
$chamber_bridge3.setAngles( '0 0 24' );
$chamber_bridge4.setAngles( '22.5 0 0' );
// Switches gui to interactive mode
chamber_guicontrol(1);
sys.wait(0.1);
// Central Chamber doors
$chamber_door1a.disable();
$chamber_door1a.open();
$chamber_door1b.disable();
$chamber_door1b.open();
$chamber_door2a.disable();
$chamber_door2a.open();
$chamber_door2b.disable();
$chamber_door2b.open();
$chamber_door3a.disable();
$chamber_door3a.open();
$chamber_door3b.disable();
$chamber_door3b.open();
$chamber_door4a.disable();
$chamber_door4a.open();
$chamber_door4b.disable();
$chamber_door4b.open();
}
// -------------------------------------------------
// Main
// -------------------------------------------------
void main()
{
sys.wait(1);
setup_objects();
thread sound_lights();
}