leisuresuitlarry/RM23.CG

358 lines
5.3 KiB
Plaintext

[logics for room 23 -- rmOutsideDisco
[ "Leisure Suit Larry in the Land of the Lounge Lizards"
[ by Al Lowe
%include "rm23.msg"
%include "gamedefs.h"
%define nearBouncer lf0
%define readMessage lf1
%define preventBouncer lf2
%define stopBouncer lf3
%define bouncerWorking lf4
%object aSign1 1
%object aSign2 2
%object aSign3 3
%object aBouncer 4
if (initLog)
{
if (watchHours > 4 && [ Anything after 5 am.
watchHours < 10)
{
NewRoom( rmSunrise);
}
SetHorizon( 76);
LoadLogics( lgcStreet);
LoadPic( currentRoom);
DrawPic( currentRoom);
DiscardPic( currentRoom);
LoadView( vDiscoExterior);
LoadView( vDiscoBouncer);
if (slowProcessor)
{
AddToPic( vDiscoExterior, 0, 1, 64, 59, 15, 4);
[view, loop, cel, x, y, obj priority, box priority
}
else
{
AnimateObj( aSign1);
IgnoreHorizon( aSign1);
SetView( aSign1, vDiscoExterior);
SetLoop( aSign1, 0);
Position( aSign1, 64, 59);
SetPriority( aSign1, 15);
Draw( aSign1);
}
AnimateObj( aSign2);
IgnoreHorizon( aSign2);
SetView( aSign2, vDiscoExterior);
SetLoop( aSign2, 1);
SetCel( aSign2, 0);
Position( aSign2, 39, 66);
CycleTime( aSign2, two);
Draw( aSign2);
AnimateObj( aSign3);
IgnoreHorizon( aSign3);
SetView( aSign3, vDiscoExterior);
SetLoop( aSign3, 1);
SetCel( aSign3, 1);
Position( aSign3, 103, 66);
CycleTime( aSign3, two);
Draw( aSign3);
AnimateObj( aBouncer);
IgnoreBlocks( aBouncer);
SetView( aBouncer, vDiscoBouncer);
SetCel( aBouncer, 0);
if (previousRoom == rmInsideDisco)
{
IgnoreBlocks( ego);
Set( preventBouncer);
Position( aBouncer, 73, 120);
egoX = 77;
egoY = 83;
}
else
{
Position( aBouncer, 76, 120);
ObserveBlocks( ego);
if (previousRoom != rmOutside7_11 &&
previousRoom != rmDarkAlley)
{
egoX = 77;
egoY = 146;
}
}
PositionV( ego, egoX, egoY);
Draw( ego);
Draw( aBouncer);
StopUpdate( aBouncer);
Call( lgcStreet);
ShowPic( );
Return( );
} [ end initLOG
Reset( nearBouncer);
if (Posn( ego, 65, 120, 91, 127))
{
Set( nearBouncer);
Set( nearPerson);
}
[*****
:handleInput
[*****
if (!haveInput) {goto noInput;}
if ((Said( look) ||
Said( look, building) ||
Said( look, room) ||
Said( look, disco)))
{
Print( 1);
}
if (Said( look, light))
{
Print( 16);
}
if (Said( look, fireplug))
{
Print( 24);
}
if (Said( look, building))
{
Print( 14);
Print( 15);
}
[ Here's the bouncer's stuff:
if ((Said( talk, man) ||
Said( talk)))
{
if (!nearBouncer)
{
Set( notCloseEnough);
}
else
{
if (preventBouncer)
{
Print( 7);
}
else
{
Print( 2);
Print( 5);
}
}
}
if ((Said( look, man) ||
Said( look)))
{
if (preventBouncer)
{
Print( 10);
}
else
{
Print( 11);
}
}
if ((Said( move, man) ||
Said( push, man)))
{
if (!nearBouncer)
{
Set( notCloseEnough);
}
else
{
Print( 17);
}
}
if ((Said( hit, man) ||
Said( kill, man)))
{
Print( 12);
Print( 13);
}
if ((Said( offer, bouncer, money) ||
Said( offer, money, bouncer) ||
Said( bribe, bouncer)))
{
if (!nearBouncer)
{
Set( notCloseEnough);
}
else
{
Print( 22);
Print( 23);
}
}
if ((Said( buy, card, from, man) ||
Said( pay, man) ||
Said( ask, man, about, card) ||
Said( ask, man, card)))
{
if (!nearBouncer)
{
Set( notCloseEnough);
}
else
{
Print( 20);
Print( 21);
}
}
if ((Said( show, pass) ||
Said( give, pass, man) ||
Said( give, man, pass) ||
Said( give, pass) ||
Said( show, man, pass) ||
Said( show, pass, man)))
{
if (!Has( iDiscoPass))
{
Print( 6);
}
else
{
if (!nearBouncer)
{
Set( notCloseEnough);
}
else
{
if (preventBouncer)
{
Print( 8);
}
else
{
Print( 4);
Print( 3);
Set( preventBouncer);
StartUpdate( aBouncer);
SetCel( aBouncer, 0);
RepositionTo( aBouncer, 73, 120);
StopUpdate( aBouncer);
ForceUpdate( aBouncer);
IgnoreBlocks( ego);
if (!shownPassToBouncer)
{
Set( shownPassToBouncer);
currentScore += 5;
}
}
}
}
}
[ Errors, but still I'm gracious enough to handle them...
if ((Said( open, door) ||
Said( knock) ||
Said( knock, on, door) ||
Said( knock, door)))
{
if (nearTaxi)
{
Reset( haveMatch);
}
else
{
Print( 19);
}
}
[*****
:noInput
[*****
if (!preventBouncer)
{
if (nearBouncer && !bouncerWorking)
{
Set( bouncerWorking);
StartUpdate( aBouncer);
EndOfLoop( aBouncer, stopBouncer);
}
else
{
if (!nearBouncer && bouncerWorking)
{
Reset( bouncerWorking);
SetCel( aBouncer, 0);
ForceUpdate( aBouncer);
Set( stopBouncer);
}
}
if (stopBouncer)
{
Reset( stopBouncer);
StopUpdate( aBouncer);
if (!readMessage)
{
Set( readMessage);
Print( 9);
}
}
}
[*****
:exit [ test for leaving the room
[*****
Call( lgcStreet);
if (edgeEgoHit == LEFT) {newRoom = rmOutside7_11;}
if (edgeEgoHit == TOP) {newRoom = rmInsideDisco;}
if (edgeEgoHit == RIGHT) {newRoom = rmDarkAlley;}