641 lines
9.6 KiB
Plaintext
641 lines
9.6 KiB
Plaintext
[logics for room 57 -- lgcStreet
|
|
[ "Leisure Suit Larry in the Land of the Lounge Lizards"
|
|
[ by Al Lowe
|
|
|
|
%include "rm57.msg"
|
|
%include "gamedefs.h"
|
|
|
|
|
|
|
|
[ This dynamic controls:
|
|
[ the car that runs ego down whenever he tries to cross the street,
|
|
[ the random dog pissing on ego's leg,
|
|
[ and the taxi cab's arrival, wait, and departure.
|
|
|
|
|
|
|
|
%define BRING_OUT_DOG 222 [ # of cycles in same place
|
|
%define PISS_CYCLES 35 [ length of piss
|
|
|
|
%define AFTER_EGO 1
|
|
%define DOG_PISSING 2
|
|
%define LEAVING 3
|
|
%define DOG_GONE 4
|
|
|
|
|
|
[ #define TAXI_WAITING 4 [ from gamedefs.h
|
|
#define TAXI_WAIT_TIME 14 [ in real seconds
|
|
|
|
#define cNormal 0
|
|
#define cBraking 1
|
|
|
|
#define DEATH_CAR_STEP 10
|
|
|
|
|
|
|
|
%define dogAtEgo df0
|
|
%define egoErased df1
|
|
%define taxiDone df2
|
|
%define eraseCar df3
|
|
%define eraseEgo df4
|
|
%define dogOnscreen df6
|
|
|
|
|
|
%define dogStatus dv1
|
|
%define pissCycles dv2
|
|
%define taxiTimer dv3
|
|
%define taxiX dv4
|
|
%define taxiY dv5
|
|
|
|
|
|
|
|
if (initLog)
|
|
{
|
|
LoadView( vDeathCar);
|
|
LoadView( vEgoRoadKill);
|
|
LoadView( vDog);
|
|
LoadView( vDogPissing);
|
|
LoadView( vDogPissing2);
|
|
LoadView( vTaxi);
|
|
|
|
LoadSound( sTaxiTires);
|
|
LoadSound( sDeathCar);
|
|
LoadSound( mDog);
|
|
|
|
AnimateObj( aCar);
|
|
IgnoreObjs( aCar);
|
|
SetView( aCar, vDeathCar);
|
|
SetLoop( aCar, 0);
|
|
FixLoop( aCar);
|
|
SetPriority( aCar, 15);
|
|
|
|
AnimateObj( aDog);
|
|
SetView( aDog, vDog);
|
|
Position( aDog, 0, 166);
|
|
notMovedCycles = 0;
|
|
|
|
AnimateObj( aTaxi);
|
|
SetView( aTaxi, vTaxi);
|
|
SetCel( aTaxi, 0);
|
|
StopCycling( aTaxi);
|
|
if (currentRoom == 11)
|
|
{
|
|
taxiY = 166;
|
|
}
|
|
else
|
|
{
|
|
taxiY = 160;
|
|
}
|
|
|
|
if (previousRoom != rmInsideTaxi)
|
|
{
|
|
taxiScript = 0;
|
|
}
|
|
else
|
|
{
|
|
taxiX = 60;
|
|
PositionV( aTaxi, taxiX, taxiY);
|
|
Draw( aTaxi);
|
|
|
|
egoX = taxiX;
|
|
egoX += 4;
|
|
egoY = taxiY;
|
|
egoY -= 4;
|
|
RepositionToV( ego, egoX, egoY);
|
|
ForceUpdate( ego);
|
|
|
|
taxiTimer = 2;
|
|
|
|
if (currentStatus == STIFFED_CABBIE)
|
|
{
|
|
LoadView( vEgoGettingBeaten);
|
|
PreventInput();
|
|
StopMotion( ego);
|
|
Set( programControl);
|
|
taxiScript = 200; [ Pick a fight.
|
|
}
|
|
else
|
|
{
|
|
StartMotion( ego);
|
|
taxiScript = 101; [ We know he's clear.
|
|
}
|
|
}
|
|
|
|
Return( );
|
|
} [ end initLOG
|
|
|
|
|
|
|
|
Reset( nearTaxi);
|
|
if (taxiScript == TAXI_WAITING)
|
|
{
|
|
if (currentRoom == 11)
|
|
{
|
|
if (Posn( ego, 70, 155, 90, 167))
|
|
{
|
|
Set( nearTaxi);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Posn( ego, 70, 140, 90, 166))
|
|
{
|
|
Set( nearTaxi);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
[*****
|
|
:handleInput
|
|
[*****
|
|
|
|
if (!haveInput) {goto noInput;}
|
|
|
|
if (Said( look, street))
|
|
{
|
|
Print( 24);
|
|
}
|
|
|
|
if ((Said( look, sky) ||
|
|
Said( look, up)))
|
|
{
|
|
Print( 25);
|
|
}
|
|
|
|
if (Said( climb, anyword))
|
|
{
|
|
Print( 27);
|
|
}
|
|
|
|
|
|
|
|
[ First, we'll handle the DOG SHIT:
|
|
|
|
if (Said( look, dog))
|
|
{
|
|
if (!dogOnscreen)
|
|
{
|
|
Print( 30);
|
|
}
|
|
else
|
|
{
|
|
if (dogStatus == AFTER_EGO)
|
|
{
|
|
Print( 7);
|
|
}
|
|
|
|
if (dogStatus == DOG_PISSING)
|
|
{
|
|
Print( 8);
|
|
}
|
|
|
|
if (dogStatus == LEAVING)
|
|
{
|
|
Print( 9);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (dogOnscreen)
|
|
{
|
|
if ((Said( hump, dog, rol) ||
|
|
Said( anyword, lay, rol) ||
|
|
Said( pee, on, dog, rol) ||
|
|
Said( anyword, pee, on, dog, rol) ||
|
|
Said( butt, hump, dog, rol)))
|
|
{
|
|
Print( 14);
|
|
}
|
|
|
|
if ((Said( hurt, dog, rol) ||
|
|
Said( kick, dog, rol) ||
|
|
Said( kill, dog, rol)))
|
|
{
|
|
Print( 15);
|
|
}
|
|
|
|
if (Said( smell, dog, rol))
|
|
{
|
|
Print( 16);
|
|
}
|
|
|
|
if (Said( pet, dog))
|
|
{
|
|
Print( 26);
|
|
}
|
|
|
|
if (Said( get, dog))
|
|
{
|
|
Print( 28);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[ Next, take care of the cab stuff:
|
|
|
|
if (Said( look, pole))
|
|
{
|
|
Print( 31);
|
|
}
|
|
|
|
if ((Said( look, sign, pole) ||
|
|
Said( look, sign, on, pole) ||
|
|
Said( look, sign)))
|
|
{
|
|
Print( 17);
|
|
}
|
|
|
|
if (Said( look, street))
|
|
{
|
|
Print( 21);
|
|
}
|
|
|
|
if ((Said( hail, cab) ||
|
|
Said( cab) ||
|
|
Said( call, cab) ||
|
|
Said( yell, cab)))
|
|
{
|
|
if (!egoY < taxiY)
|
|
{
|
|
Print( 19);
|
|
}
|
|
else
|
|
{
|
|
Print( 2);
|
|
if (!taxiScript)
|
|
{
|
|
StopMotion( ego);
|
|
Set( programControl);
|
|
Random( 3, 7, taxiTimer);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (taxiScript == TAXI_WAITING)
|
|
{
|
|
if ((Said( look, cab) ||
|
|
Said( look$in, cab)))
|
|
{
|
|
Print( 4);
|
|
Print( 5);
|
|
Print( 6);
|
|
}
|
|
|
|
if (Said( smell, cab))
|
|
{
|
|
Print( 23);
|
|
}
|
|
|
|
if ((Said( enter, cab) ||
|
|
Said( enter) ||
|
|
Said( open, door, rol) ||
|
|
Said( open, cab, door, rol) ||
|
|
Said( open, door)))
|
|
{
|
|
if (!nearTaxi)
|
|
{
|
|
Set( notCloseEnough);
|
|
}
|
|
else
|
|
{
|
|
if (!rodeInCab)
|
|
{
|
|
Print( 3);
|
|
}
|
|
else
|
|
{
|
|
Set( OK);
|
|
}
|
|
|
|
Erase( ego);
|
|
Set( egoErased);
|
|
Set( programControl);
|
|
PreventInput();
|
|
|
|
Set( taxiDone);
|
|
taxiScript = 101;
|
|
taxiTimer = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (Said( look, alley))
|
|
{
|
|
Print( 18);
|
|
}
|
|
|
|
if (Said( look, car))
|
|
{
|
|
Print( 22);
|
|
}
|
|
|
|
|
|
[*****
|
|
:noInput
|
|
[*****
|
|
|
|
if (egoX == oldEgoX && [ hasn't moved
|
|
egoY == oldEgoY &&
|
|
!taxiScript &&
|
|
!script &&
|
|
currentStatus == NORMAL)
|
|
{
|
|
++notMovedCycles;
|
|
if (notMovedCycles == BRING_OUT_DOG)
|
|
{
|
|
Draw( aDog);
|
|
Sound( mDog, done);
|
|
Set( dogOnscreen);
|
|
FollowEgo( aDog, 5, dogAtEgo);
|
|
dogStatus = AFTER_EGO;
|
|
}
|
|
}
|
|
else [ he moved; start all over
|
|
{
|
|
notMovedCycles = 0;
|
|
if (dogStatus == AFTER_EGO)
|
|
{
|
|
Reset( dogAtEgo);
|
|
pissCycles = 2; [ make dog wander off
|
|
}
|
|
}
|
|
|
|
if (dogAtEgo && dogStatus == AFTER_EGO)
|
|
{
|
|
Reset( dogAtEgo);
|
|
Set( smellsLikeDogPiss);
|
|
dogStatus = DOG_PISSING;
|
|
pissCycles = PISS_CYCLES;
|
|
StopMotion( ego);
|
|
Set( programControl);
|
|
|
|
StopMotion( aDog);
|
|
GetPosn( aDog, work, y);
|
|
x = egoX;
|
|
if (egoX > 3)
|
|
{
|
|
x -= 4;
|
|
}
|
|
else
|
|
{
|
|
x = 0;
|
|
}
|
|
|
|
RepositionToV( aDog, x, y);
|
|
|
|
if (y > egoY)
|
|
{
|
|
SetView( aDog, vDogPissing);
|
|
}
|
|
else
|
|
{
|
|
SetView( aDog, vDogPissing2);
|
|
}
|
|
}
|
|
|
|
--pissCycles;
|
|
if (pissCycles == 1)
|
|
{
|
|
dogStatus = LEAVING;
|
|
StartMotion( ego);
|
|
Reset( programControl);
|
|
StartMotion( aDog);
|
|
SetView( aDog, vDog);
|
|
Wander( aDog);
|
|
}
|
|
|
|
if (edgeObjHit && objHitEdge == aDog && dogStatus == LEAVING)
|
|
{
|
|
Erase( aDog);
|
|
Reset( dogOnscreen);
|
|
dogStatus = DOG_GONE;
|
|
}
|
|
|
|
|
|
|
|
[ This does the car appearing out of nowhere, smashing ego to a pulp,
|
|
[and disappearing screenLeft.
|
|
|
|
Distance( ego, aTaxi, work);
|
|
if (edgeEgoHit == BOTTOM &&
|
|
work == ERROR && [ True, if no taxi on screen.
|
|
currentStatus != RUN_OVER) [ init the wreck sequence
|
|
{
|
|
StopMotion( ego);
|
|
Set( programControl);
|
|
PreventInput();
|
|
|
|
currentStatus = RUN_OVER;
|
|
Position( aCar, 119, 167);
|
|
Draw( aCar);
|
|
Sound( sDeathCar, done);
|
|
step = DEATH_CAR_STEP;
|
|
if (egoX > 116)
|
|
{
|
|
egoX = 116;
|
|
}
|
|
MoveObjV( aCar, egoX, egoY, step, eraseEgo);
|
|
}
|
|
|
|
|
|
if (currentStatus == RUN_OVER)
|
|
{
|
|
if (edgeEgoHit)
|
|
{
|
|
edgeEgoHit = 0;
|
|
}
|
|
|
|
if (eraseEgo)
|
|
{
|
|
Reset( eraseEgo);
|
|
Set( egoErased);
|
|
|
|
Erase( ego);
|
|
SetView( ego, vEgoRoadKill);
|
|
if (egoX > 33)
|
|
{
|
|
egoX -= 33;
|
|
}
|
|
else
|
|
{
|
|
egoX = 0;
|
|
}
|
|
PositionV( ego, egoX, egoY);
|
|
|
|
MoveObj( aCar, 0, 167, DEATH_CAR_STEP, eraseCar);
|
|
}
|
|
|
|
if (egoErased)
|
|
{
|
|
GetPosn( aCar, x, y);
|
|
if ((x < egoX || x < DEATH_CAR_STEP))
|
|
{
|
|
Reset( egoErased);
|
|
Draw( ego);
|
|
}
|
|
}
|
|
|
|
if (eraseCar)
|
|
{
|
|
Reset( eraseCar);
|
|
Erase( aCar);
|
|
Print( 1);
|
|
Set( certainDeath);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[ This section handles the taxi cab stopping after ego hails it.
|
|
[If he stands around without entering the cab, it leaves.
|
|
|
|
if (aSecondPassed)
|
|
{
|
|
--taxiTimer;
|
|
if (taxiTimer == 1)
|
|
{
|
|
Set( taxiDone);
|
|
}
|
|
}
|
|
|
|
if (taxiScript)
|
|
{
|
|
GetPosn( aTaxi, x, y);
|
|
if ((x == 103 || [ don't muck with these!
|
|
x == 88 ||
|
|
x == 36))
|
|
{
|
|
Set( taxiDone);
|
|
}
|
|
}
|
|
|
|
if (taxiDone)
|
|
{
|
|
Reset( taxiDone);
|
|
++taxiScript;
|
|
|
|
if (taxiScript == 1)
|
|
{
|
|
taxiX = 119;
|
|
PositionV( aTaxi, taxiX, taxiY);
|
|
Draw( aTaxi);
|
|
taxiX = 60;
|
|
step = 0;
|
|
MoveObjV( aTaxi, taxiX, taxiY, step, taxiDone);
|
|
StepSize( aTaxi, four);
|
|
}
|
|
|
|
if (taxiScript == 2)
|
|
{
|
|
StepSize( aTaxi, three);
|
|
}
|
|
|
|
if (taxiScript == 3)
|
|
{
|
|
StepSize( aTaxi, two);
|
|
SetCel( aTaxi, 1);
|
|
Sound( sTaxiTires, done);
|
|
}
|
|
|
|
if (taxiScript == TAXI_WAITING) [ 4; defined in gamedefs.h
|
|
{
|
|
SetCel( aTaxi, 0);
|
|
|
|
StartMotion( ego);
|
|
Reset( programControl);
|
|
|
|
taxiTimer = TAXI_WAIT_TIME;
|
|
}
|
|
|
|
if (taxiScript == 5)
|
|
{
|
|
Print( 10); [ "Can't wait all day"
|
|
taxiScript = 101;
|
|
}
|
|
|
|
|
|
if (taxiScript == 101) [ Try to leave
|
|
{
|
|
GetPosn( aTaxi, taxiX, taxiY);
|
|
if (egoX < taxiX &&
|
|
!egoY < taxiY)
|
|
{
|
|
Print( 20);
|
|
taxiTimer = 5;
|
|
--taxiScript;
|
|
}
|
|
else
|
|
{
|
|
taxiScript = 102; [ He's clear; so leave!
|
|
}
|
|
}
|
|
|
|
if (taxiScript == 102)
|
|
{
|
|
StepSize( aTaxi, two);
|
|
taxiX = 0;
|
|
step = 0;
|
|
MoveObjV( aTaxi, taxiX, taxiY, step, taxiDone);
|
|
}
|
|
|
|
if (taxiScript == 103)
|
|
{
|
|
StepSize( aTaxi, four);
|
|
if (currentStatus == STIFFED_CABBIE)
|
|
{
|
|
IgnoreObjs( ego);
|
|
SetView( ego, vEgoRoadKill);
|
|
GetPosn( aTaxi, egoX, egoY);
|
|
--egoY;
|
|
PositionV( ego, egoX, egoY);
|
|
Draw( ego);
|
|
}
|
|
}
|
|
|
|
if (taxiScript == 104)
|
|
{
|
|
taxiScript = 0;
|
|
Erase( aTaxi);
|
|
if (currentStatus == STIFFED_CABBIE)
|
|
{
|
|
Reset( egoErased);
|
|
Set( certainDeath);
|
|
}
|
|
|
|
if (egoErased)
|
|
{
|
|
newRoom = rmInsideTaxi;
|
|
}
|
|
}
|
|
|
|
|
|
if (taxiScript == 201)
|
|
{
|
|
SetView( ego, vEgoGettingBeaten);
|
|
Set( keepCycling);
|
|
taxiTimer = 5;
|
|
}
|
|
|
|
if (taxiScript == 202)
|
|
{
|
|
Erase( ego);
|
|
Print( 11);
|
|
taxiScript = 101; [ Leave without checking.
|
|
taxiTimer = 3;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[*****
|
|
:exit [ test for leaving the room
|
|
[*****
|
|
|
|
if ((egoErased || currentStatus == RUN_OVER))
|
|
{
|
|
StopMotion( ego);
|
|
Set( programControl);
|
|
}
|