473 lines
6.9 KiB
Plaintext
473 lines
6.9 KiB
Plaintext
[logics for room 32 -- rmOutsideCasino
|
|
[ "Leisure Suit Larry in the Land of the Lounge Lizards"
|
|
[ by Al Lowe
|
|
|
|
%include "rm32.msg"
|
|
%include "gamedefs.h"
|
|
|
|
|
|
|
|
%define L_SIGN 0
|
|
%define L_DOOR 1
|
|
%define L_DOOR_WITH_EGO 2
|
|
|
|
%define nearDoor lf0
|
|
%define doorsOpen lf1
|
|
%define manDone lf2
|
|
%define doorDone lf3
|
|
%define nearMan lf4
|
|
%define manOnScreen lf5
|
|
|
|
%define manScript lv0
|
|
%define manTimer lv1
|
|
|
|
%object aDoor1 1
|
|
%object aDoor2 2
|
|
%object aMan 3
|
|
%object aSign 4
|
|
|
|
|
|
|
|
if (initLog)
|
|
{
|
|
if (watchHours > 4 && [ Anything after 5 am.
|
|
watchHours < 10)
|
|
{
|
|
NewRoom( rmSunrise);
|
|
}
|
|
|
|
SetHorizon( 107);
|
|
|
|
LoadPic( currentRoom);
|
|
DrawPic( currentRoom);
|
|
DiscardPic( currentRoom);
|
|
|
|
LoadLogics( lgcStreet);
|
|
|
|
LoadView( vCasinoExterior);
|
|
|
|
Random( 1, 3, work);
|
|
|
|
[ Set( forceAtest);
|
|
if (forceAtest)
|
|
{
|
|
work = 1;
|
|
}
|
|
if (currentStatus == NORMAL &&
|
|
work == 1 &&
|
|
ObjInRoom( iApple, currentRoom))
|
|
{
|
|
LoadView( vCasinoManInBarrel);[ View.132
|
|
|
|
AnimateObj( aMan);
|
|
SetView( aMan, vCasinoManInBarrel);
|
|
Position( aMan, 120, 131);
|
|
Random( 4, 7, manTimer);
|
|
ObjectOnLand( aMan);
|
|
}
|
|
|
|
|
|
AnimateObj( aDoor1);
|
|
IgnoreBlocks( aDoor1);
|
|
IgnoreObjs( aDoor1);
|
|
SetView( aDoor1, vCasinoExterior);
|
|
SetLoop( aDoor1, L_DOOR);
|
|
FixLoop( aDoor1);
|
|
SetCel( aDoor1, 0);
|
|
StopCycling( aDoor1);
|
|
|
|
AnimateObj( aDoor2);
|
|
IgnoreBlocks( aDoor2);
|
|
IgnoreObjs( aDoor2);
|
|
SetView( aDoor2, vCasinoExterior);
|
|
SetLoop( aDoor2, L_DOOR);
|
|
FixLoop( aDoor2);
|
|
SetCel( aDoor2, 1);
|
|
StopCycling( aDoor2);
|
|
|
|
if (slowProcessor)
|
|
{
|
|
AddToPic( vCasinoExterior, L_SIGN, 1, 51, 61, 4, 4);
|
|
[view, loop, cel, x, y, obj priority, box priority
|
|
}
|
|
else
|
|
{
|
|
AnimateObj( aSign);
|
|
IgnoreHorizon( aSign);
|
|
IgnoreBlocks( aSign);
|
|
IgnoreObjs( aSign);
|
|
SetView( aSign, vCasinoExterior);
|
|
SetLoop( aSign, L_SIGN);
|
|
Position( aSign, 51, 61);
|
|
Draw( aSign);
|
|
}
|
|
|
|
|
|
if (previousRoom == rmInsideCasino)
|
|
{
|
|
egoX = 75;
|
|
egoY = 109;
|
|
SetLoop( ego, FACING_FRONT);
|
|
|
|
Position( aDoor1, 57, 108);
|
|
Position( aDoor2, 88, 108);
|
|
|
|
Draw( aDoor1);
|
|
Draw( aDoor2);
|
|
Set( doorsOpen);
|
|
}
|
|
else
|
|
{
|
|
Position( aDoor1, 67, 108);
|
|
Draw( aDoor1);
|
|
|
|
Position( aDoor2, 78, 108);
|
|
Draw( aDoor2);
|
|
|
|
if (previousRoom == rmDarkAlley)
|
|
{
|
|
egoX = 0;
|
|
egoY = 141;
|
|
}
|
|
else
|
|
{
|
|
if (previousRoom != rmOutsideChapel)
|
|
{
|
|
egoX = 77;
|
|
egoY = 155;
|
|
}
|
|
}
|
|
}
|
|
PositionV( ego, egoX, egoY);
|
|
Draw( ego);
|
|
ObjectOnAnything( ego);
|
|
|
|
Call( lgcStreet);
|
|
|
|
ShowPic( );
|
|
|
|
Return( );
|
|
|
|
} [ end initLOG
|
|
|
|
|
|
|
|
Reset( nearMan);
|
|
Distance( aMan, ego, work);
|
|
if (manOnScreen && work < 25)
|
|
{
|
|
Set( nearMan);
|
|
}
|
|
|
|
Reset( nearDoor);
|
|
if (Posn( ego, 63, 100, 86, 113))
|
|
{
|
|
Set( nearDoor);
|
|
}
|
|
|
|
if (manScript == 3) [ Waiting to buy apple.
|
|
{
|
|
Distance( aMan, ego, work);
|
|
if (work < ERROR &&
|
|
work > 20) [ Ego walked away from him.
|
|
{
|
|
Print( 10);
|
|
Set( manDone);
|
|
manScript = 1;
|
|
manTimer = 0;
|
|
}
|
|
}
|
|
|
|
|
|
[*****
|
|
:handleInput
|
|
[*****
|
|
|
|
if (!haveInput) {goto noInput;}
|
|
|
|
if ((Said( look) ||
|
|
Said( look, building) ||
|
|
Said( look, room) ||
|
|
Said( look, casino) ||
|
|
Said( look, hotel)))
|
|
{
|
|
Print( 1);
|
|
}
|
|
|
|
if ((Said( look, plant) ||
|
|
Said( look$in, plant) ||
|
|
Said( look$in, pot) ||
|
|
Said( look, pot)))
|
|
{
|
|
Print( 15);
|
|
}
|
|
|
|
if (Said( open, door))
|
|
{
|
|
if (nearTaxi)
|
|
{
|
|
Reset( haveMatch);
|
|
}
|
|
else
|
|
{
|
|
Print( 16);
|
|
}
|
|
}
|
|
|
|
if (Said( look, wall))
|
|
{
|
|
Print( 20);
|
|
}
|
|
|
|
if ((Said( look, window) ||
|
|
Said( look, glass) ||
|
|
Said( look, door) ||
|
|
Said( look, glass, door) ||
|
|
Said( look$in, glass)))
|
|
{
|
|
Print( 17);
|
|
}
|
|
|
|
if (manOnScreen)
|
|
{
|
|
if (Said( look, man))
|
|
{
|
|
Print( 5);
|
|
}
|
|
|
|
if (Said( talk, man))
|
|
{
|
|
if (!nearMan)
|
|
{
|
|
Set( notCloseEnough);
|
|
}
|
|
else
|
|
{
|
|
if (Has( iApple))
|
|
{
|
|
Print( 19);
|
|
}
|
|
else
|
|
{
|
|
if (manScript < 3)
|
|
{
|
|
Print( 18);
|
|
}
|
|
else
|
|
{
|
|
Print( 6);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((Said( ask, name) ||
|
|
Said( ask, man, his, name) ||
|
|
Said( get, name) ||
|
|
Said( ask, his, name) ||
|
|
Said( ask, man, name) ||
|
|
Said( name) ||
|
|
Said( name, man) ||
|
|
Said( man, name)))
|
|
{
|
|
if (!nearMan)
|
|
{
|
|
Set( notCloseEnough);
|
|
}
|
|
else
|
|
{
|
|
Print( 7);
|
|
}
|
|
}
|
|
|
|
if ((manScript == 2 ||
|
|
manScript == 3))
|
|
{
|
|
if ((Said( no) ||
|
|
Said( get, lost, rol) ||
|
|
Said( go, away, rol) ||
|
|
Said( hump, off, rol) ||
|
|
Said( no, thanks)))
|
|
{
|
|
Print( 12);
|
|
Set( manDone);
|
|
manScript = 3;
|
|
manTimer = 0;
|
|
}
|
|
}
|
|
|
|
if ((Said( ask, last, name) ||
|
|
Said( last, name) ||
|
|
Said( last, name, man) ||
|
|
Said( man, last, name)))
|
|
{
|
|
if (!nearMan)
|
|
{
|
|
Set( notCloseEnough);
|
|
}
|
|
else
|
|
{
|
|
Print( 8);
|
|
}
|
|
}
|
|
|
|
if (Said( take, barrel))
|
|
{
|
|
if (!nearMan)
|
|
{
|
|
Set( notCloseEnough);
|
|
}
|
|
else
|
|
{
|
|
Print( 13);
|
|
}
|
|
}
|
|
|
|
if (Said( look$in, barrel))
|
|
{
|
|
if (!nearMan)
|
|
{
|
|
Set( notCloseEnough);
|
|
}
|
|
else
|
|
{
|
|
Print( 14);
|
|
}
|
|
}
|
|
|
|
if ((Said( buy, rol) ||
|
|
Said( give, money, man) ||
|
|
Said( pay, rol)))
|
|
{
|
|
if (!nearMan)
|
|
{
|
|
Set( notCloseEnough);
|
|
}
|
|
else
|
|
{
|
|
if (!ObjInRoom( iApple, currentRoom))
|
|
{
|
|
Print( 11);
|
|
}
|
|
else
|
|
{
|
|
currentScore += 3;
|
|
Print( 9);
|
|
Get( iApple);
|
|
--dollars;
|
|
Set( manDone);
|
|
manTimer = 0;
|
|
manScript = 3;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
[*****
|
|
:noInput
|
|
[*****
|
|
|
|
if (aSecondPassed)
|
|
{
|
|
--manTimer;
|
|
if (manTimer == 1)
|
|
{
|
|
Set( manDone);
|
|
}
|
|
}
|
|
|
|
if (manScript == 3 && edgeEgoHit)
|
|
{
|
|
Print( 4);
|
|
}
|
|
|
|
if (manScript == 4 && objHitEdge == aMan)
|
|
{
|
|
Set( manDone);
|
|
}
|
|
|
|
|
|
if (manDone)
|
|
{
|
|
Reset( manDone);
|
|
++manScript;
|
|
|
|
if (manScript == 1)
|
|
{
|
|
Draw( aMan);
|
|
Set( manOnScreen);
|
|
manScript = 2; [ So we can make him chase ego again later.
|
|
}
|
|
|
|
if (manScript == 2)
|
|
{
|
|
StartCycling( aMan);
|
|
FollowEgo( aMan, 8, manDone);
|
|
}
|
|
|
|
if (manScript == 3)
|
|
{
|
|
manTimer = 11;
|
|
StopCycling( aMan);
|
|
Print( 2);
|
|
Print( 3);
|
|
Set( nearPerson);
|
|
}
|
|
|
|
if (manScript == 4)
|
|
{
|
|
StartCycling( aMan);
|
|
Wander( aMan);
|
|
}
|
|
|
|
if (manScript == 5)
|
|
{
|
|
Erase( aMan);
|
|
Reset( manOnScreen);
|
|
manScript = 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (nearDoor)
|
|
{
|
|
IgnoreBlocks( ego);
|
|
ObserveObjs( aDoor1);
|
|
ObserveObjs( aDoor2);
|
|
ObserveObjs( ego);
|
|
|
|
if (!doorsOpen)
|
|
{
|
|
Set( doorsOpen);
|
|
MoveObj( aDoor1, 57, 108, 1, done);
|
|
MoveObj( aDoor2, 88, 108, 1, done);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ObserveBlocks( ego);
|
|
if (doorsOpen)
|
|
{
|
|
Reset( doorsOpen);
|
|
IgnoreObjs( aDoor1);
|
|
IgnoreObjs( aDoor2);
|
|
MoveObj( aDoor1, 67, 108, 1, done);
|
|
MoveObj( aDoor2, 78, 108, 1, done);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[*****
|
|
:exit [ test for leaving the room
|
|
[*****
|
|
|
|
Call( lgcStreet);
|
|
|
|
if (edgeEgoHit == TOP) {newRoom = rmInsideCasino;}
|
|
if (edgeEgoHit == RIGHT) {newRoom = rmOutsideChapel;}
|
|
if (edgeEgoHit == LEFT) {newRoom = rmDarkAlley;}
|
|
|