426 lines
6.1 KiB
Plaintext
426 lines
6.1 KiB
Plaintext
[logics for room 44 -- rmLivingRoom
|
|
[ "Leisure Suit Larry in the Land of the Lounge Lizards"
|
|
[ by Al Lowe
|
|
|
|
%include "rm44.msg"
|
|
%include "gamedefs.h"
|
|
|
|
|
|
|
|
%define FIRST_QUESTION 1
|
|
%define LAST_QUESTION 43
|
|
|
|
%define nearElevator lf0
|
|
%define insideElevator lf1
|
|
%define inWayOfDoors lf2
|
|
%define doorsOpen lf3
|
|
%define dollDone lf4
|
|
%define egoDone lf5
|
|
%define dollSoundDone lf6
|
|
%define dollOnScreen lf9
|
|
|
|
%define dollScript lv0
|
|
|
|
|
|
%object aDoor 1
|
|
%object aEve 2
|
|
%object aDoll 3
|
|
|
|
|
|
|
|
if (initLog)
|
|
{
|
|
LoadPic( currentRoom);
|
|
DrawPic( currentRoom);
|
|
DiscardPic( currentRoom);
|
|
|
|
LoadView( vRm44ElevatorDoors);
|
|
[ LoadView( v);
|
|
|
|
|
|
AnimateObj( aDoor);
|
|
IgnoreBlocks( aDoor);
|
|
IgnoreObjs( aDoor);
|
|
SetView( aDoor, vRm44ElevatorDoors);
|
|
SetCel( aDoor, 0);
|
|
SetPriority( aDoor, 10);
|
|
Position( aDoor, 130, 129);
|
|
work = DOOR_CYCLE_TIME;
|
|
CycleTime( aDoor, work);
|
|
Draw( aDoor);
|
|
StopUpdate( aDoor);
|
|
|
|
|
|
if (currentStatus == CHASING_DOLL)
|
|
{
|
|
PreventInput();
|
|
Set( handsOff);
|
|
Set( programControl);
|
|
|
|
LoadView( vDollDeflating);
|
|
LoadSound( sDollDeflating);
|
|
|
|
AnimateObj( aDoll);
|
|
IgnoreHorizon( aDoll);
|
|
IgnoreBlocks( aDoll);
|
|
IgnoreObjs( aDoll);
|
|
SetView( aDoll, vDollDeflating);
|
|
Position( aDoll, 55, 95);
|
|
Draw( aDoll);
|
|
MoveObj( aDoll, 27, 123, 2, dollDone);
|
|
Set( dollOnScreen);
|
|
Set( dollSoundDone);
|
|
}
|
|
|
|
if (currentStatus == FOLLOWING_EVE)
|
|
{
|
|
Set( programControl); [ Even though still set!
|
|
script = 250;
|
|
Set( scriptDone);
|
|
|
|
LoadView( vEve);
|
|
LoadView( vEgoWearingTowel);
|
|
|
|
[ SetView( ego, vEve); [ Done automatically by rm0.
|
|
|
|
AnimateObj( aEve);
|
|
SetView( aEve, vEgoWearingTowel);
|
|
Position( aEve, 0, 125);
|
|
Draw( aEve);
|
|
}
|
|
|
|
|
|
if (previousRoom == rmHotTub)
|
|
{
|
|
egoX = 8;
|
|
egoY = 125;
|
|
}
|
|
else
|
|
{
|
|
if (previousRoom == rmBedroom)
|
|
{
|
|
egoX = 98;
|
|
egoY = 100;
|
|
}
|
|
else
|
|
{
|
|
egoX = 138; [ in elevator
|
|
egoY = 127;
|
|
SetLoop( ego, FACING_LEFT);
|
|
StopUpdate( ego);
|
|
StartMotion( ego);
|
|
|
|
script = 0;
|
|
Set( scriptDone); [ Let's open up the doors.
|
|
}
|
|
}
|
|
PositionV( ego, egoX, egoY);
|
|
Draw( ego);
|
|
|
|
ShowPic( );
|
|
|
|
if (currentStatus == CHASING_DOLL)
|
|
{
|
|
script = 150;
|
|
MoveObj( ego, 60, 100, 1, scriptDone);
|
|
}
|
|
|
|
Return( );
|
|
|
|
} [ end initLOG
|
|
|
|
|
|
|
|
if (doorsOpen)
|
|
{
|
|
IgnoreBlocks( ego);
|
|
}
|
|
else
|
|
{
|
|
ObserveBlocks( ego);
|
|
}
|
|
|
|
|
|
Reset( nearElevator);
|
|
if (Posn( ego, 120, 113, 135, 143))
|
|
{
|
|
Set( nearElevator);
|
|
}
|
|
|
|
Reset( inWayOfDoors);
|
|
if (Posn( ego, 123, 119, 138, 131))
|
|
{
|
|
Set( inWayOfDoors);
|
|
}
|
|
|
|
Reset( insideElevator);
|
|
if (Posn( ego, 139, 119, 155, 131))
|
|
{
|
|
Set( insideElevator);
|
|
}
|
|
|
|
if (doorsOpen &&
|
|
!insideElevator &&
|
|
!inWayOfDoors)
|
|
{
|
|
Set( scriptDone);
|
|
}
|
|
|
|
if (doorsOpen && insideElevator)
|
|
{
|
|
script = 100;
|
|
Set( scriptDone); [ Let's go downstairs.
|
|
}
|
|
|
|
|
|
[*****
|
|
:handleInput
|
|
[*****
|
|
|
|
if (!haveInput) {goto noInput;}
|
|
|
|
if ((Said( look) ||
|
|
Said( look, penthouse) ||
|
|
Said( look, room))) [ To catch "look living room"
|
|
{
|
|
Print( 1);
|
|
}
|
|
|
|
if ((Said( look, elevator) ||
|
|
Said( look, door) ||
|
|
Said( look, button) ||
|
|
Said( look, wall)))
|
|
{
|
|
Print( 3);
|
|
}
|
|
|
|
if (Said( look, fireplace))
|
|
{
|
|
Print( 2);
|
|
}
|
|
|
|
if ((Said( look, floor) ||
|
|
Said( look, rug)))
|
|
{
|
|
Print( 4);
|
|
}
|
|
|
|
if ((Said( lift, rug) ||
|
|
Said( move, rug) ||
|
|
Said( pull, rug) ||
|
|
Said( look, under, rug)))
|
|
{
|
|
Print( 12);
|
|
}
|
|
|
|
if (Said( look, painting))
|
|
{
|
|
Print( 5);
|
|
}
|
|
|
|
if (Said( look, behind, painting))
|
|
{
|
|
Print( 14);
|
|
}
|
|
|
|
if (Said( look, sofa))
|
|
{
|
|
Print( 6);
|
|
}
|
|
|
|
if ((Said( sit) ||
|
|
Said( sit, down) ||
|
|
Said( use, sofa)))
|
|
{
|
|
Print( 9);
|
|
}
|
|
|
|
if ((Said( lie, down) ||
|
|
Said( sleep)))
|
|
{
|
|
Print( 13);
|
|
}
|
|
|
|
if (Said( listen, rol))
|
|
{
|
|
Print( 10);
|
|
}
|
|
|
|
if (Said( open, door))
|
|
{
|
|
Print( 11);
|
|
}
|
|
|
|
if ((Said( look, outside) ||
|
|
Said( look, terrace) ||
|
|
Said( look, window) ||
|
|
Said( look, out, window)))
|
|
{
|
|
Print( 7);
|
|
}
|
|
|
|
if ((Said( open, elevator) ||
|
|
Said( push, button)))
|
|
{
|
|
if (!nearElevator)
|
|
{
|
|
Set( notCloseEnough);
|
|
}
|
|
else
|
|
{
|
|
if (doorsOpen)
|
|
{
|
|
Print( 8);
|
|
}
|
|
else
|
|
{
|
|
Set( OK);
|
|
script = 0;
|
|
Set( scriptDone); [ Let's open up the doors.
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
[*****
|
|
:noInput
|
|
[*****
|
|
|
|
if (scriptDone)
|
|
{
|
|
Reset( scriptDone);
|
|
++script;
|
|
|
|
if (script == 1) [ open doors
|
|
{
|
|
StartUpdate( aDoor);
|
|
EndOfLoop( aDoor, scriptDone);
|
|
}
|
|
|
|
if (script == 2)
|
|
{
|
|
StopUpdate( aDoor);
|
|
Set( doorsOpen);
|
|
}
|
|
|
|
if (script == 3) [ He's clear; close the doors.
|
|
{
|
|
Reset( doorsOpen);
|
|
StartUpdate( aDoor);
|
|
BeginningOfLoop( aDoor, scriptDone);
|
|
}
|
|
|
|
if (script == 4)
|
|
{
|
|
script = 0;
|
|
}
|
|
|
|
|
|
|
|
if (script == 101) [ Close the doors. Go downstairs.
|
|
{
|
|
Reset( doorsOpen);
|
|
StopUpdate( ego);
|
|
StartUpdate( aDoor);
|
|
BeginningOfLoop( aDoor, scriptDone);
|
|
}
|
|
|
|
if (script == 102)
|
|
{
|
|
newRoom = rmSecurityDesk;
|
|
}
|
|
|
|
|
|
|
|
[ Chasing the elusive latex muff...
|
|
|
|
if (script == 151)
|
|
{
|
|
MoveObj( ego, 40, 120, 1, scriptDone);
|
|
}
|
|
|
|
if (script == 152)
|
|
{
|
|
MoveObj( ego, 1, 120, 1, scriptDone);
|
|
}
|
|
|
|
if (script == 153)
|
|
{
|
|
Reset( handsOff);
|
|
newRoom = rmHotTub;
|
|
}
|
|
|
|
|
|
|
|
if (script == 251) [ Walking egoTransvestite to bed.
|
|
{
|
|
MoveObj( ego, 35, 125, 1, scriptDone);
|
|
}
|
|
|
|
if (script == 252)
|
|
{
|
|
MoveObj( ego, 60, 103, 1, scriptDone);
|
|
}
|
|
|
|
if (script == 253)
|
|
{
|
|
MoveObj( ego, 114, 103, 1, scriptDone);
|
|
}
|
|
|
|
if (script == 254)
|
|
{
|
|
}
|
|
|
|
|
|
if (!script)
|
|
{
|
|
StopUpdate( aDoor);
|
|
}
|
|
}
|
|
|
|
|
|
if (script > 250)
|
|
{
|
|
Distance( ego, aEve, work);
|
|
if (work > 10)
|
|
{
|
|
FollowEgo( aEve, 2, done);
|
|
}
|
|
}
|
|
|
|
|
|
if (dollDone)
|
|
{
|
|
Reset( dollDone);
|
|
++dollScript;
|
|
|
|
if (dollScript == 1)
|
|
{
|
|
MoveObj( aDoll, 0, 123, 2, dollDone);
|
|
}
|
|
|
|
if (dollScript == 2)
|
|
{
|
|
MoveObj( aDoll, 0, 97, 2, dollDone);
|
|
}
|
|
|
|
if (dollScript == 3)
|
|
{
|
|
Erase( aDoll);
|
|
}
|
|
}
|
|
|
|
if (dollSoundDone && dollOnScreen)
|
|
{
|
|
Sound( sDollDeflating, dollSoundDone);
|
|
}
|
|
|
|
|
|
[*****
|
|
:exit [ test for leaving the room
|
|
[*****
|
|
|
|
if (edgeEgoHit == LEFT) {newRoom = rmHotTub;}
|
|
if (Posn( ego, 113, 93, 114, 106)) {newRoom = rmBedroom;}
|
|
|