leisuresuitlarry/RM16.CG

700 lines
11 KiB
Plaintext

[logics for room 16 -- rmBackroom
[ "Leisure Suit Larry in the Land of the Lounge Lizards"
[ by Al Lowe
%include "rm16.msg"
%include "gamedefs.h"
[ There is a pimp here, watching TV. Player has to get
[past pimp by paying him, or making him watch TV until he
[doesn't notice him sneak past, and up stairs. "use remote
[control". "pay pimp" "turn tv on/off" "change channels"
[channels give various messages.
#define L_PIMP_SITTING 2
%define PIMP_START_X 42 [ Pimpie co-ordinates
%define PIMP_BLOCK_X 116
%define PIMP_TV_X 70
%define PIMP_WAITING_X 100
%define PIMP_Y 135
%define PIMP_SITTING_Y 132
%define sitPimpDown lf0
%define pimpAtStairs lf1
%define nearTV lf2
%define doorOpenDone lf3
%define doorCloseDone lf4
%define nearDoor lf5
%define pimpBlockingStairs lf6
%define nearStairs lf7
%define gaveWarning lf8
%define nearPimp lf9
%define waitingToBlockStairs lf10
%define pimpClear lf11
%define blockingTV lf12
%define TVMessageCycles lv0
%define moveTimer lv1
%define TVCycles lv2
%object aPimp 1
%object aDoor 2
%object aTV 3
if (initLog)
{
SetHorizon( 39);
LoadPic( currentRoom);
DrawPic( currentRoom);
DiscardPic( currentRoom);
LoadView( vRm16Door);
LoadView( vPimp);
LoadView( vPimpBlockingStairs);
LoadView( vTVOn);
AnimateObj( aDoor);
IgnoreBlocks( aDoor);
IgnoreObjs( aDoor);
Position( aDoor, 24, 132);
SetView( aDoor, vRm16Door);
SetPriority( aDoor, 10);
work = DOOR_CYCLE_TIME;
CycleTime( aDoor, work);
AnimateObj( aTV);
IgnoreBlocks( aTV);
IgnoreObjs( aTV);
Position( aTV, 70, 136);
SetView( aTV, vTVOn);
if (TVOn)
{
Draw( aTV);
Random( 3, 9, TVCycles);
}
AnimateObj( aPimp);
if (pimpWatchingTV)
{
SetView( aPimp, vPimp);
SetLoop( aPimp, L_PIMP_SITTING);
Position( aPimp, PIMP_TV_X, PIMP_SITTING_Y);
}
else
{
if (previousRoom == rmHooker)
{
SetView( aPimp, vPimpBlockingStairs);
Position( aPimp, PIMP_WAITING_X, PIMP_Y);
Set( waitingToBlockStairs);
}
else
{
SetView( aPimp, vPimp);
SetLoop( aPimp, FACING_RIGHT);
Position( aPimp, PIMP_START_X, PIMP_Y);
MoveObj( aPimp, PIMP_BLOCK_X, PIMP_Y, 1, pimpAtStairs);
}
}
Draw( aPimp);
SetLoop( ego, FACING_RIGHT);
if (previousRoom == rmHooker)
{
SetCel( aDoor, 0);
Draw( aDoor);
StopUpdate( aDoor);
egoX = 71;
egoY = 55;
}
else
{
LastCel( aDoor, work);
SetCelV( aDoor, work);
Draw( aDoor);
BeginningOfLoop( aDoor, doorCloseDone);
egoX = 26;
egoY = 136;
StopMotion( ego);
Set( programControl);
}
PositionV( ego, egoX, egoY);
Draw( ego);
ShowPic( );
Return( );
} [ end initLOG
Reset( nearPimp);
Distance( ego, aPimp, work);
if (work < 13)
{
Set( nearPimp);
Set( nearPerson);
}
Reset( nearDoor);
if (Posn( ego, 22, 123, 33, 137))
{
Set( nearDoor);
}
Reset( nearTV);
if (Posn( ego, 65, 137, 80, 143))
{
Set( nearTV);
}
Reset( blockingTV);
if (Posn( ego, 65, 133, 76, 143))
{
Set( blockingTV);
}
Reset( nearStairs);
if (Posn( ego, 105, 131, 133, 139))
{
Set( nearStairs);
}
[*****
:handleInput
[*****
if (!haveInput) {goto noInput;}
if ((Said( look) ||
Said( look, room)))
{
Print( 1);
}
if ((Said( look, boxes) ||
Said( open, boxes) ||
Said( look$in, boxes)))
{
Print( 27);
}
if ((Said( get, box) ||
Said( move, box) ||
Said( climb, box) ||
Said( climb, on, box) ||
Said( use, box)))
{
Print( 48);
}
if (Said( look, door))
{
Print( 7);
}
if ((Said( look, stairs, rol) ||
Said( look, up, rol)))
{
Print( 55);
}
if (Said( look, man))
{
Print( 44);
}
if ((Said( aim, control, man) ||
Said( use, control, on, man)))
{
Print( 59);
}
if (Said( look, tv))
{
if (!TVOn)
{
Print( 45);
}
else
{
if (!pimpWatchingTV)
{
Print( 46);
}
else
{
Print( 47);
}
}
}
if ((Said( pay, rol) ||
Said( buy, girl) ||
Said( buy, ass) ||
Said( buy, hump) ||
Said( buy, pussy) ||
Said( give, one, money) ||
Said( give, one, money, man) ||
Said( give, man, one, money) ||
Said( give, man, money) ||
Said( give, money, man) ||
Said( give, money)))
{
if (pimpWatchingTV)
{
Print( 54);
}
else
{
if (!nearPimp)
{
Set( notCloseEnough);
}
else
{
if (dollars < 100)
{
Print( 8);
}
else
{
Set( gaveWarning); [ To prevent message later.
Reset( pimpBlockingStairs);
dollars -= 100;
Print( 5);
SetView( aPimp, vPimp);
MoveObj( aPimp, PIMP_WAITING_X, PIMP_Y, 1, pimpClear);
if (scoredHooker)
{
Print( 9);
}
}
}
}
}
if ((Said( knock, anyword, door) ||
Said( knock, door, anyword) ||
Said( knock, door) ||
Said( knock)))
{
if (!nearDoor)
{
Set( notCloseEnough);
}
else
{
Print( 6);
}
}
if (Said( open, door))
{
if (!nearDoor)
{
Set( notCloseEnough);
}
else
{
Set( OK);
StopMotion( ego);
Set( programControl);
StartUpdate( aDoor);
EndOfLoop( aDoor, doorOpenDone);
}
}
if ((Said( turn, on, tv) ||
Said( turn, tv, on) ||
Said( tv, on)))
{
if (!nearTV)
{
Set( notCloseEnough);
}
else
{
if (TVOn)
{
Print( 23);
}
else
{
Print( 22);
}
}
}
if ((Said( turn, off, tv) ||
Said( turn, tv, off) ||
Said( tv, off)))
{
if (!nearTV)
{
Set( notCloseEnough);
}
else
{
if (!TVOn)
{
Print( 23);
}
else
{
Print( 22);
}
}
}
if ((Said( use, remote) ||
Said( use, remote, off) ||
Said( use, remote, on) ||
Said( use, remote, turn, tv, on) ||
Said( use, remote, turn, tv, off) ||
Said( use, remote, rol) ||
Said( press, button, remote, rol) ||
Said( press, button, on, remote, rol) ||
Said( press, remote, rol) ||
Said( press, remote, on) ||
Said( press, remote, off) ||
Said( press, remote, tv, on) ||
Said( press, remote, tv, off) ||
Said( press, remote, turn, tv, on) ||
Said( press, remote, turn, tv, off) ||
Said( press, remote, turn, on, tv) ||
Said( press, remote, turn, off, tv) ||
Said( turn, on, tv, use, remote) ||
Said( turn, off, tv, use, remote) ||
Said( turn, tv, on, use, remote) ||
Said( turn, tv, off, use, remote)))
{
if (!Has( iRemoteControl))
{
Set( dontHaveIt);
}
else
{
if (egoY > 144)
{
Print( 28);
}
else
{
if (TVOn)
{
Print( 57);
}
else
{
currentScore += 3;
Draw( aTV);
Print( 24);
Set( TVOn);
TVCycles = 5;
TVChannel = 14;
Random( 33, 77, TVMessageCycles);
}
}
}
}
if ((Said( tie, man, with, rope) ||
Said( tie, up, man)))
{
if (!Has( iRope))
{
Set( dontHaveIt);
}
else
{
Print( 60);
}
}
if ((Said( talk, man) ||
Said( deal, rol) ||
Said( say, hello)))
{
if (pimpWatchingTV)
{
Print( 13);
}
else
{
Print( 2);
Print( 3);
Print( 4);
}
}
if ((Said( beat, up, man, rol) ||
Said( hit, man, rol) ||
Said( use, hammer, rol) ||
Said( tie, pimp) ||
Said( tie, up, pimp) ||
Said( tie, up, pimp, use, rope) ||
Said( use, rope, tie, up, pimp) ||
Said( use, rope, tie, pimp) ||
Said( tie, up, pimp, rope) ||
Said( tie, pimp, rope) ||
Said( kill, man, rol)))
{
Print( 52);
}
if ((Said( move) ||
Said( move, out, way) ||
Said( move, away) ||
Said( get, away) ||
Said( move, man)))
{
Print( 2);
Print( 3);
Print( 4);
}
if ((Said( give, man, remote, rol) ||
Said( give, remote, man, rol)))
{
Print( 58);
}
if ((Said( turn, channel) ||
Said( use, remote, turn, channel) ||
Said( turn, tv, channel) ||
Said( turn, channel, tv) ||
Said( turn, tv, channel, use, remote) ||
Said( turn, channel, tv, use, remote) ||
Said( turn, channel, use, remote) ||
Said( turn, tv, channel, remote) ||
Said( turn, channel, remote) ||
Said( use, remote, turn, tv, channel) ||
Said( change, channel) ||
Said( use, remote, change, channel) ||
Said( change, tv, channel) ||
Said( change, channel, tv) ||
Said( change, tv, channel, use, remote) ||
Said( change, channel, tv, use, remote) ||
Said( change, channel, use, remote) ||
Said( change, tv, channel, remote) ||
Said( change, channel, remote) ||
Said( use, remote, change, tv, channel)))
{
if (!Has( iRemoteControl))
{
Print( 22);
}
else
{
if (!TVOn)
{
Print( 29);
}
else
{
if (egoY > 144)
{
Print( 28);
}
else
{
if (TVChannel == 21)
{
Print( 26);
}
else
{
if (TVMessageCycles)
{
Print( 42);
}
else
{
Print( 25);
++TVChannel;
Random( 23, 39, TVMessageCycles);
}
}
}
}
}
}
if (Said( look, walls))
{
Print( 49);
}
if (Said( look, light))
{
Print( 50);
}
if (Said( look, crack))
{
Print( 51);
}
[*****
:noInput
[*****
if ((!blockingTV || !pimpWatchingTV))
{
moveTimer = 0;
}
else
{
if (!moveTimer)
{
moveTimer = 2;
}
--moveTimer;
if (moveTimer == 1)
{
Print( 53);
moveTimer = 22;
}
}
--TVMessageCycles;
if (TVMessageCycles == 20)
{
PrintV( TVChannel);
}
if (TVMessageCycles == 10)
{
if (TVChannel != 21)
{
work = TVChannel;
work += 20;
PrintV( work);
}
else
{
Reset( pimpBlockingStairs);
Set( pimpWatchingTV);
SetView( aPimp, vPimp);
MoveObj( aPimp, PIMP_TV_X, PIMP_Y, 1, sitPimpDown);
}
}
if (TVMessageCycles == 1)
{
if (TVChannel != 21)
{
Print( 10);
}
}
if (pimpClear)
{
Reset( pimpClear);
SetView( aPimp, vPimpBlockingStairs);
Print( 43);
}
if (sitPimpDown)
{
Reset( sitPimpDown);
SetLoop( aPimp, L_PIMP_SITTING);
RepositionTo( aPimp, PIMP_TV_X, PIMP_SITTING_Y);
ForceUpdate( aPimp);
if (!gotPimpToWatchTV)
{
Set( gotPimpToWatchTV);
currentScore += 8;
}
Print( 12);
}
if (waitingToBlockStairs)
{
if (egoX < 90 && egoY > 110)
{
Reset( waitingToBlockStairs);
Print( 30);
SetView( aPimp, vPimp);
SetLoop( aPimp, FACING_RIGHT);
MoveObj( aPimp, PIMP_BLOCK_X, PIMP_Y, 1, pimpAtStairs);
}
}
if (pimpAtStairs)
{
Reset( pimpAtStairs);
Set( pimpBlockingStairs);
SetView( aPimp, vPimpBlockingStairs);
}
if (!gaveWarning &&
pimpBlockingStairs &&
nearStairs)
{
Set( gaveWarning);
Print( 11);
}
--TVCycles;
if (TVOn && TVCycles == 1)
{
Random( 4, 16, TVCycles);
Random( 1, 4, work);
CycleTime( aTV, work);
}
if (doorCloseDone)
{
Reset( doorCloseDone);
StopUpdate( aDoor);
StartMotion( ego);
Reset( programControl);
}
[*****
:exit [ test for leaving the room
[*****
if (doorOpenDone)
{
Reset( programControl);
newRoom = rmInsideBar;
}
if ((egoY < 42 ||
edgeEgoHit == TOP)) {newRoom = rmHooker;}