# Jedi Knight Cog Script
#
# prl_elevmaster4.cog
# Adapted from prl_elevmaster3.cog
# Sylvicolus [PRL] 23 February 2002
# http://www.lactarius.com/sylvicolus/jk/
#
# This Cog controls one master elevator servicing 4 floors.
# Start floor is the frame that the elevator is at when the power is off.
# The master switch(es) turns on the elevator and calls it to that master floor frame.
# All floors have call button and up and down buttons, except
# the bottom floor has no down button and the top floor has no up button.
# Remember that the elevator's first frame / floor is 0.
# The elevator shaft light is changed between sectordark and sectorlight values,
# as well as signsectors (extra sign or switch sectors in elevator shaft).
#
# OfficerA, OfficerB, CameraB things when sighted (first time seeing their sector)
# will shut off elevator.
# (note sighted message is also sent by sectors so I made them "nolink")
#
# Not supported by LucasArts Entertainment Co.
symbols
message startup
message activated
message sighted
thing elevator nolink
int startfloor=3 //frame that elevator starts game at
int masterfloorA=0 //master floor frame
int masterfloorB=2 //master floor frame
surface masterswitchA //turns power on and off
thing officerA linkid=1 // controls masterswitchA
surface masterswitchB //turns power on and off
thing officerB linkid=2 // controls masterswitchB
thing cameraB linkid=3 // camera looking at elevator area
surface callbutton0 //calls elevator to level 0
surface upbutton0
surface callbutton1 //calls elevator to level 1
surface upbutton1
surface dnbutton1
surface callbutton2 //calls elevator to level 2
surface upbutton2
surface dnbutton2
surface callbutton3 //calls elevator to level 3
surface dnbutton3
sound callbutt=beep2.wav local
sound updnbutt=beep1.wav local
sound nopower=lgclick1.wav local
sound poweron=set_hi2.wav local
sound poweroff=set_vlo2.wav local
sound alarm=00alarmloop01.wav local // alarm sound for shutting elev on/off.
sound dialogue=kk60045.wav local // There's got to be a way to turn this on.
flex speed=5.0 local //speed of elevator
flex start_wait=0.4 local //pause before moving up
int switch local //check variable for cog internal use
int power=0 local
int active=0 local
int said_it=0 local
sector elevSector local nolink //elevator sector
sector signSector1 nolink //extra sector
sector signSector2 nolink //extra sector
sector signSector3 nolink //extra sector
sector signSector4 nolink //extra sector
flex sectorlight=1 //extra light for sector
flex sectordark=0 //low light for sector
int delay=1 local //light delay
end
# ========================================================
code
startup:
sleep(1.0);
MoveToFrame(elevator,startfloor,speed);
elevSector = GetThingSector(elevator);
SetSectorLight(elevSector,sectordark,delay);
if (signSector1) SetSectorLight(signSector1,sectordark,delay);
if (signSector2) SetSectorLight(signSector2,sectordark,delay);
if (signSector3) SetSectorLight(signSector3,sectordark,delay);
if (signSector4) SetSectorLight(signSector4,sectordark,delay);
return;
activated:
if ((active) || (GetSenderType()!=6)) return;
active=1;
switch = GetSenderRef();
sleep(0.2);
if (!power)
{
if ((switch != masterswitchA) && (switch != masterswitchB))
{
PlaySoundPos(nopower, SurfaceCenter(switch), 1, -1, -1, 0 );
if (!said_it) {
sleep(0.5);
playsoundlocal(dialogue, 1, 0, 132);
said_it=1;
}
active=0;
return;
}
else //switch == a masterswitch
{
call poweron;
return;
}
}
else //we have power
{
if ((switch == masterswitchA) || (switch == masterswitchB)) //turn off power
{
call poweroff;
return;
}
else if ((switch == callbutton0) && (GetCurFrame(elevator) != 0))
{
PlaySoundPos(callbutt, SurfaceCenter(callbutton0), 1, -1, -1, 0 );
SetWallCel(callbutton0,1);
MoveToFrame(elevator,0,speed);
WaitForStop(elevator);
SetWallCel(callbutton0,0);
}
else if ((switch == callbutton1) && (GetCurFrame(elevator) != 1))
{
PlaySoundPos(callbutt, SurfaceCenter(callbutton1), 1, -1, -1, 0 );
SetWallCel(callbutton1,1);
MoveToFrame(elevator,1,speed);
WaitForStop(elevator);
SetWallCel(callbutton1,0);
}
else if ((switch == callbutton2) && (GetCurFrame(elevator) != 2))
{
PlaySoundPos(callbutt, SurfaceCenter(callbutton2), 1, -1, -1, 0 );
SetWallCel(callbutton2,1);
MoveToFrame(elevator,2,speed);
WaitForStop(elevator);
SetWallCel(callbutton2,0);
}
else if ((switch == callbutton3) && (GetCurFrame(elevator) != 3))
{
PlaySoundPos(callbutt, SurfaceCenter(callbutton3), 1, -1, -1, 0 );
SetWallCel(callbutton3,1);
MoveToFrame(elevator,3,speed);
WaitForStop(elevator);
SetWallCel(callbutton3,0);
}
else if ((switch == upbutton0) && (GetCurFrame(elevator) == 0))
{
PlaySoundPos(updnbutt, SurfaceCenter(upbutton0), 1, -1, -1, 0 );
SetWallCel(upbutton0,1);
MoveToFrame(elevator,1,speed);
WaitForStop(elevator);
SetWallCel(upbutton0,0);
}
else if ((switch == upbutton1) && (GetCurFrame(elevator) == 1))
{
PlaySoundPos(updnbutt, SurfaceCenter(upbutton1), 1, -1, -1, 0 );
SetWallCel(upbutton1,1);
MoveToFrame(elevator,2,speed);
WaitForStop(elevator);
SetWallCel(upbutton1,0);
}
else if ((switch == upbutton2) && (GetCurFrame(elevator) == 2))
{
PlaySoundPos(updnbutt, SurfaceCenter(upbutton2), 1, -1, -1, 0 );
SetWallCel(upbutton2,1);
MoveToFrame(elevator,3,speed);
WaitForStop(elevator);
SetWallCel(upbutton2,0);
}
else if ((switch == dnbutton1) && (GetCurFrame(elevator) == 1))
{
PlaySoundPos(updnbutt, SurfaceCenter(dnbutton1), 1, -1, -1, 0 );
SetWallCel(dnbutton1,1);
MoveToFrame(elevator,0,speed);
WaitForStop(elevator);
SetWallCel(dnbutton1,0);
}
else if ((switch == dnbutton2) && (GetCurFrame(elevator) == 2))
{
PlaySoundPos(updnbutt, SurfaceCenter(dnbutton2), 1, -1, -1, 0 );
SetWallCel(dnbutton2,1);
MoveToFrame(elevator,1,speed);
WaitForStop(elevator);
SetWallCel(dnbutton2,0);
}
else if ((switch == dnbutton3) && (GetCurFrame(elevator) == 3))
{
PlaySoundPos(updnbutt, SurfaceCenter(dnbutton3), 1, -1, -1, 0 );
SetWallCel(dnbutton3,1);
MoveToFrame(elevator,2,speed);
WaitForStop(elevator);
SetWallCel(dnbutton3,0);
}
}
active=0;
return;
sighted:
if (!power) return;
sleep(1.0);
if (active) call wait;
active=1;
call poweroff;
active=0;
return;
wait:
sleep(1.0);
call sighted;
return;
poweron:
if (power) return;
power=1;
PlaySoundPos(poweron, SurfaceCenter(switch), 1, -1, -1, 0 );
SetWallCel(masterswitchA,1);
if (masterswitchB) SetWallCel(masterswitchB,1);
SetSectorLight(elevSector,sectorlight,delay);
if (signSector1) SetSectorLight(signSector1,sectorlight,delay);
if (signSector2) SetSectorLight(signSector2,sectorlight,delay);
if (signSector3) SetSectorLight(signSector3,sectorlight,delay);
if (signSector4) SetSectorLight(signSector4,sectorlight,delay);
sleep(0.5);
PlaySoundThing(alarm, elevator, 1.0, -1, -1, 0);
sleep(0.5);
if (switch == masterswitchA) {
MoveToFrame(elevator,masterfloorA,speed);
} else if (switch == masterswitchB) {
MoveToFrame(elevator,masterfloorB,speed);
}
WaitForStop(elevator);
active=0;
return;
poweroff:
if (!power) return;
power=0;
PlaySoundPos(poweroff, SurfaceCenter(switch), 1, -1, -1, 0 );
SetWallCel(masterswitchA,0);
if (masterswitchB) SetWallCel(masterswitchB,0);
SetSectorLight(elevSector,sectordark,delay);
if (signSector1) SetSectorLight(signSector1,sectordark,delay);
if (signSector2) SetSectorLight(signSector2,sectordark,delay);
if (signSector3) SetSectorLight(signSector3,sectordark,delay);
if (signSector4) SetSectorLight(signSector4,sectordark,delay);
sleep(0.2);
PlaySoundThing(alarm, elevator, 1.0, -1, -1, 0);
sleep(0.5);
MoveToFrame(elevator,startfloor,speed);
WaitForStop(elevator);
active=0;
return;
end
|