Elevator master, 4 frames -- prl_elevmaster4.cog
This cog is used for a master elevator that is turned off at start. You designate the start floor (doesn't need to be frame 0). Power is turned on with master switch. When officer or camera (sectors) first sighted then elevator turned off. Give elevator sector subdued lighting and then adjust sectorlight and sectordark values for power on or off. Change sounds in symbols section as needed. 23 February 2001

# 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