leisuresuitlarry/RM40.CG

635 lines
9.8 KiB
Plaintext

[logics for room 40 -- rmElevators
[ "Leisure Suit Larry in the Land of the Lounge Lizards"
[ by Al Lowe
%include "rm40.msg"
%include "gamedefs.h"
[ Vertical elevator maze. One floor has the honeymoon suite entrance,
#define L_HALL_DOOR 0
#define HONEYMOON_FLOOR 4
%define nearTHEDoor lf0
%define doorDone lf2
%define elevatorMoving lf4
%define inElevator lf5
%define goingDown lf6
%define currentFloor lv0
%object aElevator 1
%object aDoors 2
%object aFloor 3
%object aDoor 4
%object aNumber 6
if (initLog)
{
SetHorizon( 1);
LoadPic( currentRoom);
DrawPic( currentRoom);
DiscardPic( currentRoom);
LoadView( vElevator);
LoadView( vElevatorNumbers);
LoadView( vHoneymoonHallwayDoor);
LoadView( vEgoPushingElevator);
LoadView( vEgo);
IgnoreObjs( ego);
AnimateObj( aDoor);
IgnoreBlocks( aDoor);
IgnoreObjs( aDoor);
SetView( aDoor, vHoneymoonHallwayDoor);
SetCel( aDoor, 0);
SetPriority( aDoor, 10);
Position( aDoor, 6, 134);
work = DOOR_CYCLE_TIME;
CycleTime( aDoor, work);
AnimateObj( aNumber);
IgnoreBlocks( aNumber);
IgnoreObjs( aNumber);
SetView( aNumber, vElevatorNumbers);
SetPriority( aNumber, 5);
Position( aNumber, 73, 100);
StopCycling( aNumber);
AnimateObj( aDoors);
IgnoreBlocks( aDoors);
IgnoreObjs( aDoors);
SetView( aDoors, vElevator);
SetLoop( aDoors, L_DOORS);
FixLoop( aDoors);
SetPriority( aDoors, 4);
Position( aDoors, 73, 120);
work = DOOR_CYCLE_TIME;
CycleTime( aDoors, work);
AnimateObj( aFloor);
IgnoreBlocks( aFloor);
IgnoreObjs( aFloor);
SetView( aFloor, vElevator);
SetLoop( aFloor, L_FLOOR);
FixLoop( aFloor);
Position( aFloor, 73, 128);
SetPriority( aFloor, 5);
AnimateObj( aElevator);
IgnoreBlocks( aElevator);
IgnoreObjs( aElevator);
SetView( aElevator, vElevator);
SetPriority( aElevator, 12);
FixLoop( aElevator);
StepSize( aElevator, two);
if (currentStatus == IN_ELEVATOR)
{
if (previousRoom == rmSecurityDesk)
{
Set( goingDown);
currentFloor = 7;
Position( aElevator, 73, 36);
}
else
{
currentFloor = 2;
Position( aElevator, 73, 167);
}
Set( elevatorMoving);
currentStatus = IN_ELEVATOR;
SetLoop( aElevator, L_WITH_EGO);
LastCel( aElevator, work);
SetCelV( aElevator, work);
StopCycling( aElevator);
if (destinationFloor > currentFloor)
{
MoveObj( aElevator, 73, 36, 2, scriptDone);
script = 200;
}
else
{
if (destinationFloor < currentFloor)
{
MoveObj( aElevator, 73, 167, 2, scriptDone);
script = 200;
}
else
{
MoveObj( aElevator, 73, 128, 2, scriptDone);
script = 100;
}
}
Draw( aElevator);
Draw( aDoors);
StopUpdate( aDoors);
SetCelV( aNumber, currentFloor);
Draw( aNumber);
SetView( ego, vEgo);
SetLoop( ego, FACING_FRONT);
SetPriority( ego, 12);
egoX = 76;
egoY = 126;
PositionV( ego, egoX, egoY);
[ Don't Draw ego!
}
else [ NOT in elevator.
{
Draw( aFloor);
StopUpdate( aFloor);
SetLoop( aElevator, L_EMPTY);
SetCel( aElevator, 0);
Position( aElevator, 73, 128);
Draw( aElevator);
StopUpdate( aElevator);
currentFloor = HONEYMOON_FLOOR;
Draw( aDoor);
StopUpdate( aDoor);
SetLoop( ego, FACING_RIGHT);
egoX = 9;
egoY = 132;
PositionV( ego, egoX, egoY);
Draw( ego);
StartMotion( ego);
}
ShowPic( );
if (previousRoom == rmHoneymoonSuite)
{
Print( 18);
}
Return( );
} [ end initLOG
Reset( inElevator);
if (Posn( ego, 73, 119, 83, 127))
{
Set( inElevator);
}
if (inElevator)
{
SetPriority( ego, 11);
}
else
{
ReleasePriority( ego);
}
Reset( nearTHEDoor);
if (currentFloor == HONEYMOON_FLOOR &&
Posn( ego, 6, 126, 15, 135))
{
Set( nearTHEDoor);
}
[*****
:handleInput
[*****
if (!haveInput) {goto noInput;}
if (elevatorMoving && !haveMatch)
{
if ((Said( listen) ||
Said( listen, elevator) ||
Said( listen, music) ||
Said( sing, music) ||
Said( sing) ||
Said( sing, along)))
{
Print( 7);
}
else
{
Set( haveMatch);
Print( 5);
}
}
if ((Said( look) ||
Said( look, room) ||
Said( look, floor) ||
Said( look, hotel)))
{
Print( 1);
if (currentFloor == HONEYMOON_FLOOR)
{
Print( 2);
}
if (inElevator)
{
Print( 20);
}
}
if (Said( look, elevator))
{
if (inElevator)
{
Print( 20);
}
else
{
Print( 22);
}
}
if (Said( look, plants))
{
Print( 16);
}
if (Said( look, door))
{
if (nearTHEDoor)
{
Print( 11);
}
else
{
Print( 12);
}
}
if (Said( anyword, heart, rol))
{
if (nearTHEDoor)
{
Print( 23);
}
else
{
Print( 24);
}
}
if ((Said( knock) ||
Said( knock, on, door) ||
Said( knock, door)))
{
if (!nearTHEDoor)
{
Print( 32);
Random( 34, 50, message);
PrintV( message);
Print( 33);
}
else
{
if (!fawnInRoom)
{
Print( 4);
}
else
{
if (orderedWine && !seenDeliveryBoyGag)
{
Print( 25);
Print( 26);
}
else
{
Print( 6);
Print( 8);
}
Print( 10);
StartUpdate( aDoor);
EndOfLoop( aDoor, doorDone);
StopMotion( ego);
Set( programControl);
}
}
}
if (Said( open, door))
{
if (!nearTHEDoor)
{
Print( 17);
}
else
{
Print( 9);
}
}
if ((Said( open, door, use, rol) ||
Said( break, door, rol)))
{
Print( 27);
}
if ((Said( unlock, door, rol) ||
Said( use, key, rol)))
{
if (!nearTHEDoor)
{
Set( notCloseEnough);
}
else
{
Print( 21);
}
}
if (Said( jump, rol))
{
Print( 31);
}
if ((Said( look, down) ||
Said( spit)))
{
Print( 28);
Print( 29);
Print( 30);
}
if (!script && inElevator)
{
if ((Said( press, one) ||
Said( press, button, one) ||
Said( one)))
{
destinationFloor = 1;
Set( scriptDone);
}
if ((Said( press, two) ||
Said( press, button, two) ||
Said( two)))
{
destinationFloor = 2;
Set( scriptDone);
}
if ((Said( press, three) ||
Said( press, button, three) ||
Said( three)))
{
destinationFloor = 3;
Set( scriptDone);
}
if ((Said( press, four) ||
Said( press, button, four) ||
Said( four)))
{
destinationFloor = 4;
Set( scriptDone);
}
if ((Said( press, five) ||
Said( press, button, five) ||
Said( five)))
{
destinationFloor = 5;
Set( scriptDone);
}
if ((Said( press, six) ||
Said( press, button, six) ||
Said( six)))
{
destinationFloor = 6;
Set( scriptDone);
}
if ((Said( press, seven) ||
Said( press, button, seven) ||
Said( seven)))
{
destinationFloor = 7;
Set( scriptDone);
}
if ((Said( press, eight) ||
Said( press, button, eight) ||
Said( eight)))
{
destinationFloor = 8;
Set( scriptDone);
}
if ((Said( push, rol) ||
Said( push, button, rol)))
{
Print( 19);
}
}
[*****
:noInput
[*****
if (doorDone)
{
Reset( programControl);
newRoom = rmHoneymoonSuite;
}
if (scriptDone)
{
Reset( scriptDone);
++script;
if (script == 1)
{
Set( elevatorMoving);
currentStatus = IN_ELEVATOR;
StopMotion( ego);
Set( programControl);
SetView( ego, vEgoPushingElevator);
SetCel( ego, 0);
RepositionTo( ego, 76, 126);
CycleTime( ego, three);
Set( keepCycling);
EndOfLoop( ego, scriptDone);
}
if (script == 2)
{
Erase( ego);
SetView( ego, vEgo);
SetLoop( aElevator, L_WITH_EGO);
SetCel( aElevator, 0);
CycleTime( aElevator, three);
EndOfLoop( aElevator, scriptDone);
}
if (script == 3)
{
Erase( aFloor);
Draw( aDoors);
SetCelV( aNumber, currentFloor);
Draw( aNumber);
script = 200;
StopCycling( aElevator);
if (destinationFloor > currentFloor)
{
Reset( goingDown);
MoveObj( aElevator, 73, 36, 2, scriptDone);
script = 200;
}
else
{
if (destinationFloor < currentFloor)
{
Set( goingDown);
MoveObj( aElevator, 73, 167, 2, scriptDone);
script = 200;
}
else
{
Print( 3);
script = 101; [ We'll catch it immediately.
}
}
}
if (script == 101) [ He's at the floor he wants.
{
Erase( aDoors);
Erase( aNumber);
CycleTime( aElevator, two);
StartCycling( aElevator);
BeginningOfLoop( aElevator, scriptDone);
}
if (script == 102) [ Let him out.
{
Reset( elevatorMoving);
currentStatus = NORMAL;
destinationFloor = 0;
script = 0;
SetLoop( aElevator, L_EMPTY);
Draw( aFloor);
SetView( ego, vEgo);
SetLoop( ego, FACING_FRONT);
SetCel( ego, 0);
Position( ego, 76, 126);
Draw( ego);
StartMotion( ego);
CycleTime( ego, one);
Reset( keepCycling);
Reset( programControl);
}
if (script == 201)
{
if (goingDown)
{
--currentFloor;
if (currentFloor == 1)
{
newRoom = rmElevatorBottom;
Return();
}
}
else
{
++currentFloor;
if (currentFloor == 8)
{
newRoom = rmSecurityDesk;
Return();
}
}
if (goingDown)
{
RepositionTo( aElevator, 73, 36);
}
else
{
RepositionTo( aElevator, 73, 167);
}
if (currentFloor != HONEYMOON_FLOOR)
{
Erase( aDoor);
}
else
{
Draw( aDoor);
StopUpdate( aDoor);
}
SetCelV( aNumber, currentFloor);
if (destinationFloor > currentFloor)
{
MoveObj( aElevator, 73, 36, 2, scriptDone);
script = 200;
}
else
{
if (destinationFloor < currentFloor)
{
MoveObj( aElevator, 73, 167, 2, scriptDone);
script = 200;
}
else
{
MoveObj( aElevator, 73, 128, 2, scriptDone);
script = 100;
}
}
}
}
[*****
:exit [ test for leaving the room
[*****