mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-04-25 11:01:30 +00:00
593 lines
14 KiB
Text
593 lines
14 KiB
Text
namespace map_cpuboss {
|
|
#define PUMP_DISTANCE 90
|
|
#define EXTEND_MID 64
|
|
#define EXTEND_NUT 64
|
|
#define FLOOR_SPEED 2 // Seconds
|
|
|
|
float bridge_down = 0;
|
|
float bridge_dir = 0;
|
|
float bridge_moving = 0;
|
|
float PLAYMUSIC = TRUE;
|
|
float monsterstatus = 1;
|
|
float started_music = 0;
|
|
float bridge_rot_time = 6; // How long will it take the bridge to rotate to it's place ?
|
|
|
|
float stop_pumps = FALSE;
|
|
float stop_floors = FALSE;
|
|
float stop_lights = FALSE;
|
|
|
|
float mach1_loc = 2; // Which rung is it on ? starts in middle rung
|
|
// 1 == bottom, 2 == middle, 3== top
|
|
float mach1_loc_last = 0; // Where were we last ?
|
|
|
|
|
|
void mover_startsound3 (entity ent) {
|
|
ent.startSoundShader ("cpu_m3_start", SND_CHANNEL_VOICE);
|
|
sys.wait (1);
|
|
ent.startSoundShader ("cpu_m3_loop", SND_CHANNEL_VOICE2);
|
|
}
|
|
|
|
void mover_stopsound3 (entity ent) {
|
|
ent.startSoundShader ("cpu_m3_stop", SND_CHANNEL_VOICE2);
|
|
}
|
|
|
|
void mover_startsound4 (entity ent) {
|
|
ent.startSoundShader ("cpu_m4_start", SND_CHANNEL_VOICE);
|
|
sys.wait (1);
|
|
ent.startSoundShader ("cpu_m4_loop", SND_CHANNEL_VOICE2);
|
|
}
|
|
|
|
void mover_stopsound4 (entity ent) {
|
|
ent.startSoundShader ("cpu_m4_stop", SND_CHANNEL_VOICE2);
|
|
}
|
|
|
|
//Sab room -open and close the pillar shields
|
|
|
|
void cpillar1_open()
|
|
{
|
|
$cpillar1_shield1.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar1_shield1.moveTo ($cpillar1_shield_s1);
|
|
$cpillar1_shield2.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar1_shield2.moveTo ($cpillar1_shield_s2);
|
|
}
|
|
|
|
void cpillar2_open()
|
|
{
|
|
$cpillar2_shield1.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar2_shield1.moveTo ($cpillar2_shield_s1);
|
|
$cpillar2_shield2.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar2_shield2.moveTo ($cpillar2_shield_s2);
|
|
}
|
|
|
|
void cpillar3_open()
|
|
{
|
|
$cpillar3_shield1.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar3_shield1.moveTo ($cpillar3_shield_s1);
|
|
$cpillar3_shield2.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar3_shield2.moveTo ($cpillar3_shield_s2);
|
|
}
|
|
|
|
void cpillar4_open()
|
|
{
|
|
$cpillar4_shield1.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar4_shield1.moveTo ($cpillar4_shield_s1);
|
|
$cpillar4_shield2.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar4_shield2.moveTo ($cpillar4_shield_s2);
|
|
}
|
|
|
|
void cpillar1_close()
|
|
{
|
|
$cpillar1_shield1.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar1_shield1.moveTo ($cpillar1_shield_s0);
|
|
$cpillar1_shield2.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar1_shield2.moveTo ($cpillar1_shield_s0);
|
|
}
|
|
|
|
void cpillar2_close()
|
|
{
|
|
$cpillar2_shield1.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar2_shield1.moveTo ($cpillar2_shield_s0);
|
|
$cpillar2_shield2.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar2_shield2.moveTo ($cpillar2_shield_s0);
|
|
}
|
|
|
|
void cpillar3_close()
|
|
{
|
|
$cpillar3_shield1.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar3_shield1.moveTo ($cpillar3_shield_s0);
|
|
$cpillar3_shield2.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar3_shield2.moveTo ($cpillar3_shield_s0);
|
|
}
|
|
|
|
void cpillar4_close()
|
|
{
|
|
$cpillar4_shield1.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar4_shield1.moveTo ($cpillar4_shield_s0);
|
|
$cpillar4_shield1.startSoundShader ("cpu_shields", SND_CHANNEL_VOICE2 );
|
|
$cpillar4_shield2.moveTo ($cpillar4_shield_s0);
|
|
}
|
|
|
|
|
|
//
|
|
|
|
// ---
|
|
// Init base-state of world entities here
|
|
// ---
|
|
|
|
void init_world() {
|
|
|
|
// Sabaoth room electrical pillar shield times
|
|
|
|
$cpillar1_shield1.accelTime (.2);
|
|
$cpillar1_shield2.accelTime (.2);
|
|
$cpillar2_shield1.accelTime (.2);
|
|
$cpillar2_shield2.accelTime (.2);
|
|
$cpillar3_shield1.accelTime (.2);
|
|
$cpillar3_shield2.accelTime (.2);
|
|
$cpillar4_shield1.accelTime (.2);
|
|
$cpillar4_shield2.accelTime (.2);
|
|
$cpillar1_shield1.time (.5);
|
|
$cpillar1_shield2.time (.5);
|
|
$cpillar2_shield1.time (.5);
|
|
$cpillar2_shield2.time (.5);
|
|
$cpillar3_shield1.time (.5);
|
|
$cpillar3_shield2.time (.5);
|
|
$cpillar4_shield1.time (.5);
|
|
$cpillar4_shield2.time (.5);
|
|
|
|
// old boss room
|
|
|
|
$tooth_1.sway (8, 0.2, '0 5 -4');
|
|
$tooth_2.sway (7, 0.4, '0 -4 4');
|
|
$tooth_3.sway (8, 0.6, '0 6 2');
|
|
$tooth_4.sway (6, 0.32, '0 5 3');
|
|
$tooth_5.sway (7, 0.9, '0 -3 2');
|
|
$tooth_6.sway (7, 0.78, '0 2 5');
|
|
$tooth_7.sway (5, 0.5, '0 4 -5');
|
|
$tooth_8.sway (6, 0.6, '0 3 -2');
|
|
|
|
$bm_arm1_anchor.time (3);
|
|
$bm_arm1_anchor.accelTime (0.5);
|
|
$bm_arm1_anchor.decelTime (1.5);
|
|
|
|
$bm_mach1_wheel1_anchor.bind ($bm_mach1_support);
|
|
$bm_mach1_wheel2_anchor.bind ($bm_mach1_support);
|
|
$bm_mach1_wheel3_anchor.bind ($bm_mach1_support);
|
|
$bm_mach1_wheel4_anchor.bind ($bm_mach1_support);
|
|
|
|
$mach1_support_anchor.time (3);
|
|
|
|
float i;
|
|
entity ent, ent2, ent3;
|
|
|
|
$pentagram.rotate ('0 20 0');
|
|
|
|
for (i=1; i<=4; i++) {
|
|
|
|
// Top pumps
|
|
ent = sys.getEntity ("bm_pump" + i + "a");
|
|
ent.time (5);
|
|
ent.accelTime (0.75);
|
|
ent.decelTime (1.5);
|
|
|
|
ent = sys.getEntity ("bm_pump" + i + "a_anchor");
|
|
ent.time (5);
|
|
ent.accelTime (0.75);
|
|
ent.decelTime (1.5);
|
|
|
|
// Bottom pump
|
|
|
|
ent = sys.getEntity ("bm_pump" + i + "b");
|
|
ent.time (5);
|
|
ent.accelTime (0.75);
|
|
ent.decelTime (1.5);
|
|
|
|
ent = sys.getEntity ("bm_pump" + i + "b_anchor");
|
|
ent.time (5);
|
|
ent.accelTime (0.75);
|
|
ent.decelTime (1.5);
|
|
}
|
|
|
|
// bind sector 1
|
|
for ( i = 1; i <= 3; i++ ) {
|
|
ent=sys.getEntity ("s1_" + i);
|
|
ent2=sys.getEntity ("s1_" + i + "_anchor");
|
|
ent.time (FLOOR_SPEED);
|
|
ent2.time (FLOOR_SPEED);
|
|
ent.bind (ent2);
|
|
ent2.bind ($sector_1);
|
|
}
|
|
|
|
// bind sector 2
|
|
for ( i = 1; i <= 3; i++ ) {
|
|
ent=sys.getEntity ("s2_" + i);
|
|
ent2=sys.getEntity ("s2_" + i + "_anchor");
|
|
ent.time (FLOOR_SPEED);
|
|
ent2.time (FLOOR_SPEED);
|
|
ent.bind (ent2);
|
|
ent2.bind ($sector_2);
|
|
}
|
|
|
|
// bind sector 3
|
|
for ( i = 1; i <= 9; i++ ) {
|
|
ent=sys.getEntity ("s3_" + i);
|
|
ent2=sys.getEntity ("s3_" + i + "_anchor");
|
|
ent.time (FLOOR_SPEED);
|
|
ent2.time (FLOOR_SPEED);
|
|
ent.bind (ent2);
|
|
ent2.bind ($sector_3);
|
|
}
|
|
|
|
$bm_arm1_bolt.time (2);
|
|
$bm_arm1_bolt.accelTime (0.25);
|
|
$bm_arm1_bolt.decelTime (0.75);
|
|
|
|
$bm_arm1_mid.move (RIGHT, 40);
|
|
$bm_arm1_nut.move (RIGHT, 40);
|
|
|
|
sys.wait (1);
|
|
|
|
}
|
|
|
|
// ---
|
|
// Init base position for the central bridge
|
|
// ---
|
|
|
|
void init_bridge() {
|
|
$bridge_support.time (6);
|
|
$bridge_support.accelTime (0.75);
|
|
$bridge_support.decelTime (1);
|
|
|
|
$cpubridge_anchor.time (6);
|
|
$cpubridge_anchor.accelTime (2);
|
|
$cpubridge_anchor.decelTime (3);
|
|
|
|
$bridge_ramp_right.time (2);
|
|
$bridge_ramp_left.time (2);
|
|
|
|
$bridge_arm_anchor.time (2);
|
|
|
|
$bridge_base.bind ($bridge_support);
|
|
$bridge_arm_anchor.bind ($bridge_base);
|
|
|
|
$bridge_rail_right.bind ($bridge_ramp_right);
|
|
$bridge_rail_left.bind ($bridge_ramp_left);
|
|
|
|
$bridge_ramp_right.bind ($bridge_arm_anchor);
|
|
$bridge_ramp_left.bind ($bridge_arm_anchor);
|
|
$bridge_gui.bind ($bridge_arm_anchor);
|
|
|
|
$bridge_ramp_right.time (1);
|
|
$bridge_ramp_left.time (1);
|
|
|
|
$bridge_ramp_right.rotateOnce ('0 0 -90');
|
|
$bridge_ramp_left.rotateOnce ('0 0 90');
|
|
$bridge_arm_anchor.rotateOnce ('-90 0 0');
|
|
|
|
$bridge_support.move (UP, 1024);
|
|
|
|
}
|
|
|
|
void test_bridge() {
|
|
float i;
|
|
|
|
if (bridge_down == 0) {
|
|
sys.trigger ($bridge_vo_1);
|
|
// Sound of bridge coming down
|
|
$speaker_bridge_1.startSoundShader ("cpu_bridge_down_6s", SND_CHANNEL_BODY );
|
|
|
|
$bridge_support.move (DOWN, 1024);
|
|
$bridge_support.rotateOnce ('0 -450 0');
|
|
sys.waitFor ($bridge_support);
|
|
|
|
|
|
|
|
$bridge_arm_anchor.time (5);
|
|
// Sound of Arm rotating down
|
|
$speaker_bridge_3.startSoundShader ("cpu_arm_down_5s", SND_CHANNEL_ITEM );
|
|
$bridge_arm_anchor.rotateOnce ('90 0 0'); // Down
|
|
sys.waitFor ($bridge_arm_anchor);
|
|
|
|
$bridge_arm_anchor.time (2);
|
|
|
|
// Bounce the bridge as it comes down
|
|
|
|
$bridge_arm_anchor.time (0.3);
|
|
$bridge_arm_anchor.rotateOnce ('-2 0 0'); // Up
|
|
sys.waitFor ($bridge_arm_anchor);
|
|
|
|
$bridge_arm_anchor.time (0.2);
|
|
$bridge_arm_anchor.rotateOnce ('2 0 0'); // Down
|
|
sys.waitFor ($bridge_arm_anchor);
|
|
|
|
$bridge_ramp_right.startSoundShader ("cpu_bridge_rails", SND_CHANNEL_VOICE );
|
|
$bridge_ramp_right.rotateOnce ('0 0 90');
|
|
|
|
$bridge_ramp_left.startSoundShader ("cpu_bridge_rails", SND_CHANNEL_VOICE );
|
|
$bridge_ramp_left.rotateOnce ('0 0 -90');
|
|
sys.waitFor ($bridge_ramp_left);
|
|
|
|
// $bridge_support.rotateOnce ('0 -90 0');
|
|
//$bridge_ramp_right.rotateOnce ('-90 0 0');
|
|
//$bridge_ramp_left.rotateOnce ('90 0 0');
|
|
|
|
bridge_down = 1;
|
|
bridge_dir = 3;
|
|
}
|
|
}
|
|
|
|
vector bridge_getRotationAngles (float target_dir)
|
|
{
|
|
vector vec;
|
|
|
|
if ( (bridge_dir != 1) && (target_dir == 1) ) {
|
|
$cpubridge_anchor.move (DOWN, 256);
|
|
}
|
|
|
|
else if ( (bridge_dir == 1) && (target_dir != 1) ) {
|
|
$cpubridge_anchor.move (UP, 256);
|
|
}
|
|
|
|
//else {
|
|
// sys.print ("not moving up or down\n");
|
|
//}
|
|
|
|
if ( (bridge_dir - target_dir) == -3 )
|
|
return '0 90 0';
|
|
if ( (bridge_dir - target_dir) == 3 )
|
|
return '0 -90 0';
|
|
|
|
vec_x = 0;
|
|
vec_z = 0;
|
|
vec_y = (bridge_dir - target_dir) * 90;
|
|
|
|
|
|
if ( ( vec_y == 90 ) || ( vec_y == -90 ) ) {
|
|
$bridge_support.time (6);
|
|
$cpubridge_anchor.time (6);
|
|
bridge_rot_time = 6;
|
|
}
|
|
if ( ( vec_y == 180 ) || (vec_y == -180) ) {
|
|
$bridge_support.time (10);
|
|
$cpubridge_anchor.time (10);
|
|
bridge_rot_time = 10;
|
|
}
|
|
if ( ( vec_y == 270 ) || (vec_y == -270) ) {
|
|
$bridge_support.time (10);
|
|
$cpubridge_anchor.time (10);
|
|
bridge_rot_time = 10;
|
|
}
|
|
return vec;
|
|
}
|
|
|
|
void bridge_rotation_sound() {
|
|
|
|
if (bridge_rot_time == 6) {
|
|
$speaker_bridge_2.startSoundShader ("bridge_rotation_6s", SND_CHANNEL_BODY );
|
|
return;
|
|
}
|
|
else {
|
|
$speaker_bridge_2.startSoundShader ("bridge_rotation_10s", SND_CHANNEL_BODY );
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
void bridge_rotate_south()
|
|
{
|
|
|
|
vector vec;
|
|
|
|
if ( bridge_dir == 3 )
|
|
return; // Bridge is already at this location
|
|
|
|
if (bridge_moving == 0) {
|
|
bridge_moving = 1;
|
|
$bridge_gui.disable();
|
|
|
|
if (bridge_down == 0)
|
|
test_bridge();
|
|
else
|
|
{
|
|
vec = bridge_getRotationAngles (3);
|
|
|
|
thread bridge_rotation_sound();
|
|
|
|
$bridge_support.rotateOnce (vec);
|
|
sys.waitFor ($bridge_support);
|
|
|
|
bridge_dir = 3;
|
|
}
|
|
$bridge_gui.enable();
|
|
bridge_moving = 0;
|
|
}
|
|
}
|
|
|
|
void bridge_rotate_east()
|
|
{
|
|
vector vec;
|
|
|
|
if (bridge_dir == 2)
|
|
return; // Bridge is already at this location
|
|
|
|
if (bridge_moving == 0) {
|
|
bridge_moving = 1;
|
|
$bridge_gui.disable();
|
|
vec = bridge_getRotationAngles (2);
|
|
|
|
thread bridge_rotation_sound();
|
|
|
|
sys.print ("rot time ==" + bridge_rot_time + "\n");
|
|
$bridge_support.rotateOnce (vec);
|
|
sys.waitFor ($bridge_support);
|
|
|
|
bridge_dir = 2;
|
|
$bridge_gui.enable();
|
|
bridge_moving = 0;
|
|
}
|
|
}
|
|
|
|
void bridge_rotate_west()
|
|
{
|
|
vector vec;
|
|
|
|
if (bridge_dir == 4)
|
|
return; // Bridge is already at this location
|
|
|
|
if (bridge_moving == 0) {
|
|
bridge_moving = 1;
|
|
$bridge_gui.disable();
|
|
vec = bridge_getRotationAngles (4);
|
|
|
|
thread bridge_rotation_sound();
|
|
|
|
sys.print ("rot time ==" + bridge_rot_time + "\n");
|
|
$bridge_support.rotateOnce (vec);
|
|
sys.waitFor ($bridge_support);
|
|
|
|
bridge_dir = 4;
|
|
$bridge_gui.enable();
|
|
bridge_moving = 0;
|
|
}
|
|
}
|
|
|
|
void bridge_rotate_north()
|
|
{
|
|
vector vec;
|
|
|
|
if (bridge_dir == 1)
|
|
return; // Bridge is already at this location
|
|
|
|
if (bridge_moving == 0) {
|
|
bridge_moving = 1;
|
|
$bridge_gui.disable();
|
|
vec = bridge_getRotationAngles (1);
|
|
|
|
thread bridge_rotation_sound();
|
|
|
|
sys.trigger ($trigger_objectivecomplete);
|
|
|
|
sys.print ("rot time ==" + bridge_rot_time + "\n");
|
|
$bridge_support.rotateOnce (vec);
|
|
sys.waitFor ($bridge_support);
|
|
|
|
|
|
|
|
bridge_dir = 1;
|
|
$bridge_gui.enable();
|
|
bridge_moving = 0;
|
|
}
|
|
}
|
|
|
|
void init_running_lights() {
|
|
entity l1, l2, l3, l4;
|
|
float i;
|
|
|
|
for ( i=1; i<=13; i++ ) {
|
|
l1 = sys.getEntity ("rrun_" + i);
|
|
l2 = sys.getEntity ("lrun_" + i);
|
|
l3 = sys.getEntity ("trrun_" + i);
|
|
l4 = sys.getEntity ("tlrun_" + i);
|
|
|
|
l1.Off();
|
|
l2.Off();
|
|
l3.Off();
|
|
l4.Off();
|
|
}
|
|
}
|
|
|
|
void running_lights() {
|
|
entity l1, l2, l3, l4;
|
|
float i;
|
|
|
|
for ( i=1; i<=13; i++ ) {
|
|
l1 = sys.getEntity ("rrun_" + i);
|
|
l2 = sys.getEntity ("lrun_" + i);
|
|
l3 = sys.getEntity ("trrun_" + i);
|
|
l4 = sys.getEntity ("tlrun_" + i);
|
|
|
|
l1.On();
|
|
l1.startSoundShader ("cpu_light_sounds", SND_CHANNEL_VOICE );
|
|
l2.On();
|
|
l2.startSoundShader ("cpu_light_sounds", SND_CHANNEL_VOICE );
|
|
l3.On();
|
|
l3.startSoundShader ("cpu_light_sounds", SND_CHANNEL_VOICE );
|
|
l4.On();
|
|
l4.startSoundShader ("cpu_light_sounds", SND_CHANNEL_VOICE );
|
|
|
|
sys.wait (0.15);
|
|
|
|
l1.Off();
|
|
l2.Off();
|
|
l3.Off();
|
|
l4.Off();
|
|
|
|
sys.wait (0.15);
|
|
}
|
|
|
|
}
|
|
|
|
void running_lights_thread() {
|
|
while (1) {
|
|
thread running_lights();
|
|
sys.wait (2);
|
|
}
|
|
}
|
|
|
|
void cache_sounds() {
|
|
sys.cacheSoundShader ("cpu_bridge_down_6s");
|
|
sys.cacheSoundShader ("cpu_arm_down_5s");
|
|
sys.cacheSoundShader ("cpu_bridge_rails");
|
|
sys.cacheSoundShader ("bridge_rotation_6s");
|
|
sys.cacheSoundShader ("bridge_rotation_10s");
|
|
sys.cacheSoundShader ("cpu_light_sounds");
|
|
sys.cacheSoundShader ("cpu_shields");
|
|
sys.cacheSoundShader ("cpu_m3_start");
|
|
sys.cacheSoundShader ("cpu_m3_stop");
|
|
sys.cacheSoundShader ("cpu_m3_loop");
|
|
sys.cacheSoundShader ("cpu_m4_start");
|
|
sys.cacheSoundShader ("cpu_m4_stop");
|
|
sys.cacheSoundShader ("cpu_m4_loop");
|
|
|
|
}
|
|
|
|
void fadeout_endroom() {
|
|
|
|
$cspeaker_1.remove();
|
|
$cspeaker_2.remove();
|
|
$cspeaker_3.remove();
|
|
$cspeaker_4.remove();
|
|
|
|
$trigger_multiple_1.remove();
|
|
$trigger_multiple_2.remove();
|
|
$trigger_multiple_3.remove();
|
|
$trigger_multiple_4.remove();
|
|
|
|
$ctrigger_hurt_1.remove();
|
|
$ctrigger_hurt_2.remove();
|
|
$ctrigger_hurt_3.remove();
|
|
$ctrigger_hurt_4.remove();
|
|
|
|
//$cspeaker_1.fadeSound ( SND_CHANNEL_ANY, -60, 1 );
|
|
//$cspeaker_2.fadeSound ( SND_CHANNEL_ANY, -60, 1 );
|
|
//$cspeaker_3.fadeSound ( SND_CHANNEL_ANY, -60, 1 );
|
|
//$cspeaker_4.fadeSound ( SND_CHANNEL_ANY, -60, 1 );
|
|
}
|
|
|
|
void main()
|
|
{
|
|
cache_sounds();
|
|
init_world();
|
|
|
|
// Exec all other required threads here
|
|
|
|
// thread move_pumps();
|
|
// thread move_arm1();
|
|
|
|
init_bridge();
|
|
init_running_lights();
|
|
thread running_lights_thread();
|
|
}
|
|
}
|
|
|
|
|