[logics for room 35 -- rmElevators [ "Leisure Suit Larry in the Land of the Lounge Lizards" [ by Al Lowe %include "rm35.msg" %include "gamedefs.h" [ There is an ashtray near the planter. Look ash tray. "get passcard" [ script == 0 begins the raise elevator sequence; [ script == 100 lowers the elevator to the bottom and releases ego. [ #define L_EMPTY 0 [ #define L_FLOOR 1 [ #define L_DOORS 2 [ #define L_WITH_EGO 3 %define CEILING_Y 37 %define FLOOR_Y 118 %define inElevator lf0 %define nearAshTray lf1 %define elevatorMoving lf4 %define nearBrokenPhone lf5 %object aElevator 1 %object aDoor 2 %object aFloor 3 %object aNumber 4 %object aAshtray 5 if (initLog) { SetHorizon( 1); LoadPic( currentRoom); DrawPic( currentRoom); DiscardPic( currentRoom); LoadView( vElevator); LoadView( vElevatorNumbers); LoadView( vEgoPushingElevator); LoadView( vEgo); LoadView( vAshtray); [ LoadView( v); AnimateObj( aAshtray); IgnoreBlocks( aAshtray); SetView( aAshtray, vAshtray); if (ObjInRoom( iDiscoPass, currentRoom)) { SetCel( aAshtray, 0); } else { SetCel( aAshtray, 1); } Position( aAshtray, 77, 159); StopCycling( aAshtray); Draw( aAshtray); StopUpdate( aAshtray); AnimateObj( aNumber); IgnoreBlocks( aNumber); IgnoreObjs( aNumber); SetView( aNumber, vElevatorNumbers); SetPriority( aNumber, 5); Position( aNumber, 73, 91); SetCel( aNumber, 1); StopCycling( aNumber); AnimateObj( aDoor); IgnoreBlocks( aDoor); IgnoreObjs( aDoor); SetView( aDoor, vElevator); SetLoop( aDoor, L_DOORS); FixLoop( aDoor); SetPriority( aDoor, 4); Position( aDoor, 73, 108); work = DOOR_CYCLE_TIME; CycleTime( aDoor, work); AnimateObj( aFloor); IgnoreBlocks( aFloor); IgnoreObjs( aFloor); SetView( aFloor, vElevator); SetLoop( aFloor, L_FLOOR); FixLoop( aFloor); Position( aFloor, 73, 118); SetPriority( aFloor, 5); AnimateObj( aElevator); IgnoreBlocks( aElevator); IgnoreObjs( aElevator); SetView( aElevator, vElevator); SetPriority( aElevator, 11); FixLoop( aElevator); StepSize( aElevator, two); if (currentStatus == IN_ELEVATOR) { Set( elevatorMoving); currentStatus = IN_ELEVATOR; SetLoop( aElevator, L_WITH_EGO); LastCel( aElevator, work); SetCelV( aElevator, work); StopCycling( aElevator); Position( aElevator, 73, 36); Draw( aElevator); MoveObj( aElevator, 73, 118, 2, scriptDone); script = 100; Draw( aDoor); StopUpdate( aDoor); Draw( aNumber); SetView( ego, vEgo); SetLoop( ego, FACING_FRONT); SetPriority( ego, 12); egoX = 75; egoY = 119; [ Don't Draw ego! } else { Draw( aFloor); StopUpdate( aFloor); SetLoop( aElevator, L_EMPTY); SetCel( aElevator, 0); Position( aElevator, 73, 118); Draw( aElevator); StopUpdate( aElevator); if (previousRoom == rmLounge) { egoX = 128; egoY = 104; SetLoop( ego, FACING_LEFT); PositionV( ego, egoX, egoY); Draw( ego); StartMotion( ego); } else { if (!previousRoom) { egoX = 75; egoY = 115; } PositionV( ego, egoX, egoY); Draw( ego); } } IgnoreObjs( ego); ShowPic( ); Return( ); } [ end initLOG Reset( inElevator); if (Posn( ego, 70, 110, 83, 120)) { Set( inElevator); } Reset( nearBrokenPhone); if (Posn( ego, 96, 101, 111, 106)) { Set( nearBrokenPhone); } Reset( nearAshTray); if (Posn( ego, 62, 155, 87, 163)) { Set( nearAshTray); } if (egoY > 119 && egoY < 133) { SetPriority( ego, 12); } else { ReleasePriority( ego); } [***** :handleInput [***** if (!haveInput) {goto noInput;} if (elevatorMoving && !haveMatch) { if ((Said( listen) || Said( sing) || Said( sing, along))) { Print( 7); } else { Set( haveMatch); Print( 5); } } if ((Said( up) || Said( down))) { Print( 4); } if ((Said( look) || Said( look, room) || Said( look, wall) || Said( look, elevator))) { if (inElevator) { Print( 2); Print( 3); } else { Print( 1); } } if (Said( look$in, plants)) { if (inElevator) { Set( notCloseEnough); } else { Print( 10); } } if (Said( look, plants)) { if (inElevator) { Print( 6); Print( 8); } else { Print( 10); } } if (Said( close, door)) { if (inElevator) { Print( 15); } else { Print( 16); } } if ((Said( look, ashtray) || Said( look$in, ashtray))) { if (egoY < 150) { Print( 14); } else { if (ObjInRoom( iDiscoPass, currentRoom)) { Print( 12); } else { Print( 13); } } } if (Said( anyword, ashtray)) { if (egoY < 150) { Print( 14); } else { if (ObjInRoom( iDiscoPass, currentRoom)) { Print( 12); } else { Print( 18); } } } if ((Said( get, pass) || Said( get, card))) { if (!nearAshTray) { Set( notCloseEnough); } else { if (!ObjInRoom( iDiscoPass, currentRoom)) { Set( alreadyGotIt); } else { SetCel( aAshtray, 1); ForceUpdate( aAshtray); Get( iDiscoPass); currentScore += 1; Set( OK); } } } if ((Said( look, phone) || Said( use, phone) || Said( make, phone, call) || Said( dial, phone))) { if (!nearBrokenPhone) { Set( notCloseEnough); } else { Print( 21); } } if ((Said( get, gum) || Said( remove, gum))) { if (!nearBrokenPhone) { Set( notCloseEnough); } else { Print( 22); } } if ((Said( look, phone, book) || Said( look, book))) { if (!nearBrokenPhone) { Set( notCloseEnough); } else { Print( 20); } } if ((Said( answer, phone) || Said( get, phone) || Said( answer))) { if (!nearBrokenPhone) { Set( notCloseEnough); } else { Print( 19); } } if (!script && inElevator) { if ((Said( press, one) || Said( press, button, one) || Said( one))) { destinationFloor = 1; Set( scriptDone); } if ((Said( press, two) || Said( press, button, two) || Said( two))) { destinationFloor = 2; Set( scriptDone); } if ((Said( press, three) || Said( press, button, three) || Said( three))) { destinationFloor = 3; Set( scriptDone); } if ((Said( press, four) || Said( press, button, four) || Said( four))) { destinationFloor = 4; Set( scriptDone); } if ((Said( press, five) || Said( press, button, five) || Said( five))) { destinationFloor = 5; Set( scriptDone); } if ((Said( press, six) || Said( press, button, six) || Said( six))) { destinationFloor = 6; Set( scriptDone); } if ((Said( press, seven) || Said( press, button, seven) || Said( seven))) { destinationFloor = 7; Set( scriptDone); } if ((Said( press, eight) || Said( press, button, eight) || Said( eight))) { destinationFloor = 8; Set( scriptDone); } if ((Said( push, rol) || Said( push, button, rol))) { Print( 4); } } [***** :noInput [***** if (scriptDone) { Reset( scriptDone); ++script; if (script == 1) { Set( elevatorMoving); currentStatus = IN_ELEVATOR; StopMotion( ego); Set( programControl); SetView( ego, vEgoPushingElevator); SetCel( ego, 0); RepositionTo( ego, 76, 117); CycleTime( ego, three); Set( keepCycling); EndOfLoop( ego, scriptDone); } if (script == 2) { Erase( ego); SetView( ego, vEgo); SetLoop( aElevator, L_WITH_EGO); SetCel( aElevator, 0); CycleTime( aElevator, three); EndOfLoop( aElevator, scriptDone); } if (script == 3) { Erase( aFloor); Draw( aDoor); Draw( aNumber); StopCycling( aElevator); if (destinationFloor == 1) { Print( 9); script = 101; [ We'll catch it immediately. } else { MoveObj( aElevator, 73, 36, 2, scriptDone); } } if (script == 4) { newRoom = rmElevators; } if (script == 101) [ He's at bottom; let him out. { Erase( aDoor); Erase( aNumber); CycleTime( aElevator, two); StartCycling( aElevator); BeginningOfLoop( aElevator, scriptDone); } if (script == 102) { Reset( elevatorMoving); currentStatus = NORMAL; destinationFloor = 0; script = 0; SetLoop( aElevator, L_EMPTY); Draw( aFloor); SetView( ego, vEgo); SetLoop( ego, FACING_FRONT); SetCel( ego, 0); Position( ego, 76, 116); Draw( ego); StartMotion( ego); Reset( programControl); CycleTime( ego, one); Reset( keepCycling); } } [***** :exit [ test for leaving the room [***** if (edgeEgoHit == BOTTOM) {newRoom = rmInsideCasino;} if (Posn( ego, 131, 101, 132, 106)) {newRoom = rmLounge;}