658 lines
16 KiB
Plaintext
658 lines
16 KiB
Plaintext
|
|
|
|
.FUNCT DO-INSTEAD-OF,OBJ1,OBJ2
|
|
EQUAL? PRSI,OBJ2 \?ELS5
|
|
CALL PERFORM,PRSA,PRSO,OBJ1
|
|
RTRUE
|
|
?ELS5: EQUAL? PRSO,OBJ2 \?ELS7
|
|
CALL PERFORM,PRSA,OBJ1,PRSI
|
|
RTRUE
|
|
?ELS7: CALL1 V-FOO
|
|
ZERO? STACK /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT TURN-F
|
|
EQUAL? PRSA,V?USE \FALSE
|
|
CALL PERFORM,V?WAIT-FOR,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT IT-F
|
|
EQUAL? PRSI,IT \?THN10
|
|
EQUAL? PRSA,V?TELL-ABOUT /?THN10
|
|
EQUAL? PRSA,V?SEARCH-FOR,V?ASK-FOR,V?ASK-ABOUT /?THN14
|
|
?THN10: EQUAL? PRSO,IT \FALSE
|
|
EQUAL? PRSA,V?WHAT /?THN14
|
|
EQUAL? PRSA,V?FIND,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT \FALSE
|
|
?THN14: CALL1 PRODUCE-GIBBERISH
|
|
RSTACK
|
|
|
|
|
|
.FUNCT FLOOR-F,OBJ
|
|
EQUAL? PRSA,V?PUT \?ELS5
|
|
EQUAL? PRSI,FLOOR \?ELS5
|
|
CALL PERFORM,V?DROP,PRSO
|
|
RTRUE
|
|
?ELS5: EQUAL? PRSA,V?LOOK-ON,V?SEARCH,V?EXAMINE \?ELS9
|
|
CALL FIND-FLAG,HERE,NDESCBIT,WINNER >OBJ
|
|
ZERO? OBJ /?ELS14
|
|
FCLEAR OBJ,NDESCBIT
|
|
CALL2 THIS-IS-IT,OBJ
|
|
PRINTI "Something catches your eye: it's "
|
|
CALL2 PRINTA,OBJ
|
|
PRINTR "."
|
|
?ELS14: PRINTR "You don't find anything new there."
|
|
?ELS9: EQUAL? PRSA,V?TAKE,V?BRUSH \FALSE
|
|
IN? BLOOD-SPOT,HERE \FALSE
|
|
CALL PERFORM,V?BRUSH,BLOOD-SPOT,PRSI
|
|
RTRUE
|
|
|
|
|
|
.FUNCT DOLLARS-F
|
|
EQUAL? PRSA,V?COUNT \?ELS5
|
|
CALL DO-INSTEAD-OF,GLOBAL-MONEY,DOLLARS
|
|
RTRUE
|
|
?ELS5: ZERO? P-DOLLAR-FLAG /?ELS10
|
|
ZERO? P-AMOUNT \?CND8
|
|
SET 'P-AMOUNT,1
|
|
JUMP ?CND8
|
|
?ELS10: SET 'P-DOLLAR-FLAG,TRUE-VALUE
|
|
ZERO? P-NUMBER \?CND8
|
|
SET 'P-AMOUNT,1
|
|
?CND8: CALL DO-INSTEAD-OF,INTNUM,DOLLARS
|
|
RTRUE
|
|
|
|
|
|
.FUNCT INTNUM-F
|
|
ZERO? P-DOLLAR-FLAG /FALSE
|
|
CALL2 DIVESTMENT?,PRSO
|
|
ZERO? STACK /?ELS11
|
|
CALL1 TELL-FLASHING-CASH
|
|
RTRUE
|
|
?ELS11: EQUAL? PRSA,V?ASK-FOR,V?TAKE /FALSE
|
|
EQUAL? WINNER,PLAYER \FALSE
|
|
GETP PLAYER,P?SOUTH
|
|
GRTR? P-AMOUNT,STACK \FALSE
|
|
PRINTR "You don't have that much."
|
|
|
|
|
|
.FUNCT YOU-F
|
|
EQUAL? WINNER,PLAYER /?ELS5
|
|
CALL DO-INSTEAD-OF,WINNER,YOU
|
|
RTRUE
|
|
?ELS5: EQUAL? PRSA,V?ASK-ABOUT \FALSE
|
|
EQUAL? PRSI,YOU \FALSE
|
|
CALL PERFORM,V?ASK-ABOUT,PRSO,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT CORRIDOR-GLOBAL-F,RM
|
|
EQUAL? PRSA,V?LOOK-UP,V?LOOK-DOWN /?THN6
|
|
EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE,V?ANALYZE \FALSE
|
|
?THN6: ZERO? ON-TRAIN /FALSE
|
|
CALL ZMEMQ,HERE,CAR-ROOMS-CORRID
|
|
ZERO? STACK /?ELS14
|
|
CALL2 PERFORM,V?LOOK
|
|
RTRUE
|
|
?ELS14: CALL NEXT-ROOM,HERE,P?OUT >RM
|
|
ZERO? RM /FALSE
|
|
CALL ROOM-PEEK,RM,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT GLOBAL-HERE-F,FLG=0,F,HR,TIM,VAL
|
|
EQUAL? PRSA,V?SIT,V?WALK-TO \?ELS5
|
|
CALL DO-INSTEAD-OF,HERE,GLOBAL-HERE
|
|
RTRUE
|
|
?ELS5: EQUAL? PRSA,V?KNOCK \?ELS7
|
|
PRINTR "Knocking on the walls reveals nothing unusual."
|
|
?ELS7: EQUAL? PRSA,V?TIE-TO,V?PUT-IN,V?PUT \?ELS11
|
|
CALL1 MORE-SPECIFIC
|
|
RSTACK
|
|
?ELS11: EQUAL? PRSA,V?EXAMINE,V?SEARCH \FALSE
|
|
GETP HERE,P?CORRIDOR
|
|
ZERO? STACK /?ELS16
|
|
SET 'TIM,3
|
|
JUMP ?CND14
|
|
?ELS16: GETP HERE,P?SIZE
|
|
ADD 2,STACK >TIM
|
|
?CND14: EQUAL? P-ADVERB,W?CAREFULLY \?CND19
|
|
MUL 2,TIM >TIM
|
|
?CND19: PRINTI "(It's better to examine or search one thing at a time. It would take a long time to search a whole room or area thoroughly. A "
|
|
EQUAL? P-ADVERB,W?CAREFULLY \?ELS26
|
|
PRINTI "careful"
|
|
JUMP ?CND24
|
|
?ELS26: PRINTI "brief"
|
|
?CND24: PRINTI " search would take "
|
|
PRINTN TIM
|
|
PRINTI " minutes, and it might not reveal much. Would you like to do it anyway?)"
|
|
CALL1 YES?
|
|
ZERO? STACK /?ELS39
|
|
CALL2 INT-WAIT,TIM >VAL
|
|
EQUAL? M-FATAL,VAL /TRUE
|
|
ZERO? VAL /?ELS46
|
|
PRINTI "Your "
|
|
EQUAL? P-ADVERB,W?CAREFULLY \?ELS52
|
|
PRINTI "careful"
|
|
JUMP ?CND50
|
|
?ELS52: PRINTI "brief"
|
|
?CND50: PRINTI " search reveals"
|
|
CALL2 FOUND?,HERE >VAL
|
|
ZERO? VAL /?ELS65
|
|
CALL2 PRINTT,VAL
|
|
PRINTR " under the seat."
|
|
?ELS65: PRINTR " nothing exciting."
|
|
?ELS46: PRINTR "You didn't finish looking over the place."
|
|
?ELS39: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "Okay."
|
|
|
|
|
|
.FUNCT FOUND?,RM,X
|
|
CALL ZMEMQ,RM,CAR-ROOMS-COMPS >X
|
|
ZERO? X /?ELS5
|
|
GET CAR-ROOMS-UNDER,X
|
|
FIRST? STACK >X \?ELS5
|
|
RETURN X
|
|
?ELS5: EQUAL? RM,BOOTH-1 \?ELS9
|
|
FIRST? UNDER-BOOTH-1 /TRUE
|
|
RFALSE
|
|
?ELS9: EQUAL? RM,BOOTH-2 \?ELS13
|
|
FIRST? UNDER-BOOTH-2 /TRUE
|
|
RFALSE
|
|
?ELS13: EQUAL? RM,BOOTH-3 \FALSE
|
|
FIRST? UNDER-BOOTH-3 /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT AIR-F
|
|
EQUAL? PRSA,V?EXAMINE \?ELS5
|
|
PRINTR "You can see through the air around you."
|
|
?ELS5: EQUAL? PRSA,V?WALK-TO \?ELS9
|
|
PRINTR "It's all around you!"
|
|
?ELS9: EQUAL? PRSA,V?SMELL \FALSE
|
|
CALL2 OUTSIDE?,HERE
|
|
ZERO? STACK /?ELS18
|
|
PRINTR "The air is clear and fresh."
|
|
?ELS18: CALL2 FRESH-AIR?,HERE
|
|
ZERO? STACK \TRUE
|
|
PRINTR "The air is rather musty."
|
|
|
|
|
|
.FUNCT SOMETHING-F
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(Type a real word instead of "
|
|
PRINTD SOMETHING
|
|
PRINTR ".)"
|
|
|
|
|
|
.FUNCT TOILET-F
|
|
EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS5
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?ELS5: EQUAL? PRSA,V?PUT-IN \?ELS7
|
|
EQUAL? PRSI,TOILET \FALSE
|
|
FSET PRSO,MUNGBIT
|
|
RFALSE
|
|
?ELS7: EQUAL? PRSA,V?FLUSH-DOWN,V?FLUSH \FALSE
|
|
ZERO? IN-STATION /?ELS19
|
|
ZERO? ON-TRAIN /?ELS19
|
|
PRINTR "An old refrain comes to mind:
|
|
""Passengers will please refrain
|
|
From flushing toilets while the train
|
|
Is standing in the station. (I love you!)"""
|
|
?ELS19: EQUAL? PRSA,V?FLUSH-DOWN \?CND26
|
|
CALL1 ITAKE
|
|
EQUAL? STACK,TRUE-VALUE \TRUE
|
|
MOVE PRSO,TOILET
|
|
?CND26: FIRST? TOILET \?CND32
|
|
PRINTI "Say goodbye to"
|
|
CALL ROB,TOILET,LIMBO-FWD,TRUE-VALUE
|
|
?CND32: PRINTR """Whhoooossshhhhh!"""
|
|
|
|
|
|
.FUNCT ROB,WHAT,THIEF,TELL?=0,N,X,TOLD?=0
|
|
FIRST? WHAT >X /?KLU29
|
|
?KLU29:
|
|
?PRG1: ZERO? X /TRUE
|
|
NEXT? X >N /?KLU30
|
|
?KLU30: ZERO? N \?CND6
|
|
ZERO? TOLD? /?CND6
|
|
ZERO? TELL? /?CND6
|
|
PRINTI " and"
|
|
?CND6: SET 'TOLD?,TRUE-VALUE
|
|
ZERO? TELL? /?CND13
|
|
CALL2 PRINTT,X
|
|
ZERO? N /?ELS21
|
|
PRINTI ","
|
|
JUMP ?CND13
|
|
?ELS21: PRINTI ". "
|
|
?CND13: MOVE X,THIEF
|
|
FCLEAR X,TAKEBIT
|
|
SET 'X,N
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT SINK-F
|
|
EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS5
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?ELS5: EQUAL? PRSA,V?LAMP-ON \FALSE
|
|
PRINTR "You push on the handle, and water runs until you let go. A silly idea comes into your head: what is the sound of one hand washing?"
|
|
|
|
|
|
.FUNCT TOWEL-LOOP-F
|
|
EQUAL? PRSA,V?CUT \?ELS5
|
|
EQUAL? PRSI,KNIFE \FALSE
|
|
MOVE SCARF,PLAYER
|
|
FSET SCARF,TAKEBIT
|
|
PUTP SCARF,P?CAR,CAR-HERE
|
|
MOVE TOWEL-FIXTURE-BROKEN,HERE
|
|
PUTP TOWEL-FIXTURE-BROKEN,P?CAR,CAR-HERE
|
|
MOVE TOWEL-LOOP-BROKEN,HERE
|
|
PUTP TOWEL-LOOP-BROKEN,P?CAR,CAR-HERE
|
|
CALL2 THIS-IS-IT,TOWEL-LOOP-BROKEN
|
|
PRINTI "Well done! You now have a government-issue "
|
|
PRINTD SCARF
|
|
PRINTR ", and the janitor has a mess to repair."
|
|
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS14
|
|
PRINTR "This cloth towel must be very long, but most of it is rolled up inside the dispenser. Only about a meter hangs below it in a ""U"" shape."
|
|
?ELS14: EQUAL? PRSA,V?TAKE /?THN19
|
|
EQUAL? PRSA,V?USE,V?MOVE-DIR,V?MOVE \FALSE
|
|
?THN19: PRINTR "As you pull on the towel, a fresh portion appears from a slot, and the used portion starts to disappear into the dispenser."
|
|
|
|
|
|
.FUNCT TOWEL-LOOP-BROKEN-F
|
|
EQUAL? PRSA,V?EXAMINE \?ELS5
|
|
PRINTR "This cloth towel must be very long, but most of it is rolled up inside the dispenser. The part that should hang below is cut away."
|
|
?ELS5: EQUAL? PRSA,V?TAKE,V?USE /?THN10
|
|
EQUAL? PRSA,V?MOVE-DIR,V?MOVE,V?CUT \FALSE
|
|
?THN10: PRINTR "There's not enough left!"
|
|
|
|
|
|
.FUNCT PAPER-FIXTURE-F
|
|
EQUAL? PRSA,V?LOOK-INSIDE \FALSE
|
|
FCLEAR PAPER-LOOP,NDESCBIT
|
|
RFALSE
|
|
|
|
|
|
.FUNCT PAPER-LOOP-F
|
|
EQUAL? PRSA,V?TAKE /?THN6
|
|
EQUAL? PRSA,V?USE,V?MOVE-DIR,V?MOVE \FALSE
|
|
?THN6: PRINTR "Whatever you have in mind, it'll never work!"
|
|
|
|
|
|
.FUNCT MIRROR-F
|
|
EQUAL? PRSA,V?MUNG \?ELS5
|
|
PRINTR "You don't need any bad luck!"
|
|
?ELS5: EQUAL? PRSA,V?EXAMINE,V?LOOK-INSIDE \FALSE
|
|
PRINTI "A harried and weary "
|
|
EQUAL? VARIATION,3,4 \?ELS16
|
|
PUSH STR?151
|
|
JUMP ?CND12
|
|
?ELS16: PUSH STR?152
|
|
?CND12: PRINT STACK
|
|
PRINTR " looks back at you, with a look that seems to say, ""I don't need this aggravation!"""
|
|
|
|
|
|
.FUNCT POCKET-F,X
|
|
CALL2 DIVESTMENT?,POCKET
|
|
ZERO? STACK /?ELS5
|
|
CALL1 HAR-HAR
|
|
RSTACK
|
|
?ELS5: EQUAL? PRSA,V?LOOK-THROUGH,V?LOOK-INSIDE \?ELS7
|
|
CALL2 PRINT-CONT,POCKET >X
|
|
EQUAL? WINNER,PLAYER \?ELS10
|
|
GETP PLAYER,P?SOUTH
|
|
GRTR? STACK,0 \?ELS10
|
|
CALL2 THIS-IS-IT,GLOBAL-MONEY
|
|
ZERO? X /?ELS15
|
|
PRINTR "And some money."
|
|
?ELS15: PRINTI "You have some money in your pocket."
|
|
IN? CUSTOMS-AGENT,HERE \?CND23
|
|
PRINTI " But"
|
|
CALL2 HE-SHE-IT,CUSTOMS-AGENT
|
|
PRINTI " won't mind."
|
|
?CND23: CRLF
|
|
RTRUE
|
|
?ELS10: ZERO? X \TRUE
|
|
PRINTR "Your pocket is empty."
|
|
?ELS7: EQUAL? PRSA,V?EMPTY \?ELS33
|
|
FIRST? POCKET \FALSE
|
|
PRINTI "You are now holding"
|
|
CALL ROB,POCKET,PLAYER,TRUE-VALUE
|
|
CRLF
|
|
RTRUE
|
|
?ELS33: EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS42
|
|
PRINTR "You don't need to do that."
|
|
?ELS42: EQUAL? PRSA,V?PUT-IN \FALSE
|
|
EQUAL? PRSI,POCKET \FALSE
|
|
EQUAL? PRSO,GLOBAL-MONEY /?THN54
|
|
EQUAL? PRSO,INTNUM \?ELS53
|
|
ZERO? P-DOLLAR-FLAG /?ELS53
|
|
?THN54: PRINTR "It's already there."
|
|
?ELS53: EQUAL? PRSO,CAMERA \FALSE
|
|
FSET? PRSO,OPENBIT \FALSE
|
|
FCLEAR PRSO,OPENBIT
|
|
PRINTI "(You close"
|
|
CALL2 HIM-HER-IT,PRSO
|
|
PRINTI " first.)"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT POCKET-C-F,X
|
|
CALL2 DIVESTMENT?,POCKET-C
|
|
ZERO? STACK /?ELS5
|
|
CALL1 HAR-HAR
|
|
RSTACK
|
|
?ELS5: EQUAL? PRSA,V?LOOK-THROUGH,V?LOOK-INSIDE \?ELS7
|
|
FSET? CONDUCTOR,MUNGBIT /?THN11
|
|
FSET? CONDUCTOR,PERSONBIT /?ELS10
|
|
?THN11: CALL2 PRINT-CONT,POCKET-C >X
|
|
RTRUE
|
|
?ELS10: CALL HE-SHE-IT,CONDUCTOR,TRUE-VALUE
|
|
PRINTR " brushes your hand away without even looking."
|
|
?ELS7: EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS18
|
|
PRINTR "You don't need to do that."
|
|
?ELS18: EQUAL? PRSA,V?PUT-IN \FALSE
|
|
EQUAL? PRSI,POCKET-C \FALSE
|
|
EQUAL? PRSO,CAMERA \FALSE
|
|
FSET? PRSO,OPENBIT \FALSE
|
|
FCLEAR PRSO,OPENBIT
|
|
PRINTI "(You close"
|
|
CALL2 HIM-HER-IT,PRSO
|
|
PRINTI " first.)"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT TELL-FLASHING-CASH
|
|
PRINTR "Flashing your bankroll is not a good idea."
|
|
|
|
|
|
.FUNCT GLOBAL-MONEY-F
|
|
EQUAL? PRSA,V?FIND \?ELS5
|
|
PRINTR "It's not that easy!"
|
|
?ELS5: CALL1 REMOTE-VERB?
|
|
ZERO? STACK \FALSE
|
|
EQUAL? PRSA,V?PUT-IN,V?PUT \?ELS11
|
|
EQUAL? PRSO,GLOBAL-MONEY \?ELS11
|
|
CALL1 MORE-SPECIFIC
|
|
RSTACK
|
|
?ELS11: GETP PLAYER,P?SOUTH
|
|
GRTR? STACK,0 \?ELS15
|
|
EQUAL? PRSA,V?EXAMINE,V?COUNT \?ELS20
|
|
PRINTI "You are carrying "
|
|
PRINTC CURRENCY-SYMBOL
|
|
GETP PLAYER,P?SOUTH
|
|
PRINTN STACK
|
|
PRINTR "."
|
|
?ELS20: EQUAL? PRSA,V?GIVE \?ELS26
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(You didn't say how much money to give.)"
|
|
?ELS26: EQUAL? PRSA,V?TAKE \?ELS30
|
|
ZERO? PRSI /?ELS30
|
|
PRINTI "You can't see any money on"
|
|
CALL2 HIM-HER-IT,PRSI
|
|
PRINTR "."
|
|
?ELS30: EQUAL? PRSA,V?SHOW /FALSE
|
|
CALL1 TELL-FLASHING-CASH
|
|
RSTACK
|
|
?ELS15: CALL2 NOT-HERE,GLOBAL-MONEY
|
|
RSTACK
|
|
|
|
|
|
.FUNCT MENU-F
|
|
EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE
|
|
GETP MENU,P?TEXT
|
|
PRINT STACK
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT ITEMS-F
|
|
EQUAL? PRSA,V?BUY,V?ASK-FOR \?ELS5
|
|
EQUAL? P-ADJ,W?FIRST \?ELS10
|
|
CALL DO-INSTEAD-OF,FOOD,ITEMS
|
|
RTRUE
|
|
?ELS10: CALL DO-INSTEAD-OF,FOOD-2,ITEMS
|
|
RTRUE
|
|
?ELS5: EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE
|
|
GETP MENU,P?TEXT
|
|
PRINT STACK
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT FOOD-GLOBAL-F
|
|
EQUAL? PRSA,V?SMELL,V?BUY,V?ASK-FOR \?ELS5
|
|
CALL DO-INSTEAD-OF,FOOD,FOOD-GLOBAL
|
|
RTRUE
|
|
?ELS5: CALL1 REMOTE-VERB?
|
|
ZERO? STACK \FALSE
|
|
CALL2 NOT-HERE,FOOD-GLOBAL
|
|
RSTACK
|
|
|
|
|
|
.FUNCT DRINK-F
|
|
CALL2 FOOD-F,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT DRINK-1-F
|
|
CALL DO-INSTEAD-OF,DRINK-GLOBAL,DRINK-1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT FOOD-F,DRINK?=0,PER,OBJ,X,?ORTMP
|
|
EQUAL? PRSA,V?DRINK,V?SMELL,V?EAT \?ELS5
|
|
EQUAL? PRSA,V?SMELL /?THN11
|
|
IN? PRSO,GLOBAL-OBJECTS /?ELS10
|
|
?THN11: PRINTI "It's pungent but not very flavorful."
|
|
EQUAL? PRSA,V?SMELL /?CND15
|
|
GETP PRSO,P?SIZE >X
|
|
PUTP PRSO,P?SIZE,X
|
|
EQUAL? X,FOOD-HALF-SIZE \?ELS20
|
|
PRINTI " And it's half gone."
|
|
JUMP ?CND15
|
|
?ELS20: ZERO? X \?CND15
|
|
MOVE PRSO,GLOBAL-OBJECTS
|
|
PRINTI " And it's gone."
|
|
?CND15: EQUAL? VARIATION,3,4 \?CND27
|
|
PRINTI " You've had better in some mighty dank corners of the world."
|
|
?CND27: CRLF
|
|
RTRUE
|
|
?ELS10: PRINTR "That wouldn't be very polite."
|
|
?ELS5: EQUAL? PRSA,V?MUNG /?THN38
|
|
EQUAL? PRSA,V?PUT-IN,V?PUT,V?POUR \?ELS37
|
|
?THN38: EQUAL? PRSI,TOILET /FALSE
|
|
EQUAL? PRSA,V?POUR /?ELS46
|
|
EQUAL? PRSI,TABLE-3,TABLE-2,TABLE-1 /FALSE
|
|
?ELS46: PRINTR "What a mess that would make!"
|
|
?ELS37: EQUAL? PRSA,V?BUY,V?ASK-FOR \FALSE
|
|
EQUAL? HERE,PANTRY \?CND55
|
|
CALL2 INVASION?,WAITER
|
|
ZERO? STACK \TRUE
|
|
?CND55: ZERO? ON-TRAIN /?ELS62
|
|
SET 'PER,WAITER
|
|
JUMP ?CND60
|
|
?ELS62: SET 'PER,WAITRESS
|
|
?CND60: ZERO? DRINK? /?ELS68
|
|
SET 'OBJ,WINE-RED
|
|
JUMP ?CND66
|
|
?ELS68: SET 'OBJ,FOOD
|
|
?CND66: ZERO? DRINK? /?ELS74
|
|
FSET? WINE-RED,TOUCHBIT /?THN79
|
|
FSET? WINE-WHITE,TOUCHBIT \?CND72
|
|
?THN79: PRINTR "You've bought enough to drink already."
|
|
?ELS74: FSET? FOOD,TOUCHBIT \?CND72
|
|
PRINTR "You've bought enough to eat already."
|
|
?CND72: GETP PLAYER,P?SOUTH
|
|
ZERO? STACK \?ELS91
|
|
PRINTR "You don't have enough money."
|
|
?ELS91: IN? PER,HERE /?ELS95
|
|
PRINTI "You'd better talk to "
|
|
CALL2 PRINTA,PER
|
|
PRINTR " first."
|
|
?ELS95: GETP PLAYER,P?SOUTH
|
|
SUB STACK,1
|
|
PUTP PLAYER,P?SOUTH,STACK
|
|
EQUAL? OBJ,WINE-RED,WINE-WHITE \?ELS102
|
|
CALL CALL-FOR-PROP,CUP-A,WAITER
|
|
POP '?ORTMP
|
|
ZERO? ?ORTMP /?ORP106
|
|
PUSH ?ORTMP
|
|
JUMP ?THN103
|
|
?ORP106: CALL CALL-FOR-PROP,CUP-B,WAITER
|
|
?THN103: POP 'X
|
|
MOVE OBJ,X
|
|
PUTP OBJ,P?CAR,CAR-HERE
|
|
PUTP OBJ,P?SIZE,FOOD-SIZE
|
|
FSET OBJ,TOUCHBIT
|
|
SET 'OBJ,X
|
|
JUMP ?CND100
|
|
?ELS102: PUTP OBJ,P?SIZE,FOOD-SIZE
|
|
?CND100: CALL2 TABLE?,HERE
|
|
POP '?ORTMP
|
|
ZERO? ?ORTMP /?ORP112
|
|
PUSH ?ORTMP
|
|
JUMP ?THN109
|
|
?ORP112: PUSH HERE
|
|
?THN109: MOVE OBJ,STACK
|
|
PUTP OBJ,P?CAR,CAR-HERE
|
|
FSET OBJ,TAKEBIT
|
|
FSET OBJ,TOUCHBIT
|
|
FCLEAR OBJ,NDESCBIT
|
|
FCLEAR PER,TOUCHBIT
|
|
PUTP PER,P?LDESC,29
|
|
CALL HE-SHE-IT,PER,TRUE-VALUE
|
|
PRINTI " returns in an instant with "
|
|
CALL2 PRINTA,OBJ
|
|
PRINTI " and takes "
|
|
PRINTC CURRENCY-SYMBOL
|
|
PRINTR "1 from you."
|
|
|
|
|
|
.FUNCT CUP-F
|
|
EQUAL? PRSA,V?EMPTY,V?THROW-THROUGH,V?THROW-AT \?ELS5
|
|
LOC WINE-RED
|
|
EQUAL? STACK,PRSO,PRSI \?CND6
|
|
MOVE WINE-RED,GLOBAL-OBJECTS
|
|
?CND6: LOC WINE-WHITE
|
|
EQUAL? STACK,PRSO,PRSI \?CND9
|
|
MOVE WINE-WHITE,GLOBAL-OBJECTS
|
|
?CND9: CALL ROB,PRSO,HERE
|
|
CALL ROB,PRSI,HERE
|
|
EQUAL? PRSA,V?EMPTY \FALSE
|
|
PRINTR "Okay."
|
|
?ELS5: EQUAL? PRSA,V?PUT-IN \FALSE
|
|
EQUAL? PRSO,TOWEL-WAITER,NAPKIN,SCARF \FALSE
|
|
EQUAL? PRSI,CUP-B,CUP-A \FALSE
|
|
IN? WINE-RED,PRSI \FALSE
|
|
CALL DO-INSTEAD-OF,WINE-RED,PRSI
|
|
RTRUE
|
|
|
|
|
|
.FUNCT WINE-PUT?
|
|
EQUAL? PRSA,V?PUT \?ELS5
|
|
EQUAL? PRSI,TOWEL-WAITER,NAPKIN,SCARF \FALSE
|
|
EQUAL? PRSO,WINE-RED \FALSE
|
|
RETURN PRSI
|
|
?ELS5: EQUAL? PRSA,V?PUT-IN \FALSE
|
|
EQUAL? PRSO,TOWEL-WAITER,NAPKIN,SCARF \FALSE
|
|
EQUAL? PRSI,WINE-RED \FALSE
|
|
RETURN PRSO
|
|
|
|
|
|
.FUNCT WINE-F,OBJ
|
|
EQUAL? PRSA,V?TAKE \?ELS5
|
|
LOC PRSO
|
|
EQUAL? STACK,CUP-A,CUP-B \?ELS5
|
|
LOC PRSO
|
|
CALL PERFORM,PRSA,STACK,PRSI
|
|
RTRUE
|
|
?ELS5: CALL1 WINE-PUT? >OBJ
|
|
ZERO? OBJ /?ELS9
|
|
LOC OBJ
|
|
MOVE HANKY,STACK
|
|
FSET HANKY,TAKEBIT
|
|
MOVE OBJ,LIMBO-FWD
|
|
FCLEAR OBJ,TAKEBIT
|
|
MOVE WINE-RED,GLOBAL-OBJECTS
|
|
PRINTI "The "
|
|
PRINTD OBJ
|
|
PRINTI " soaks up the wine, and the stain spreads to every nook and cranny. Within a minute, you have a decent imitation of a "
|
|
PRINTD HANKY
|
|
PRINTR "."
|
|
?ELS9: CALL2 FOOD-F,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NO-FOOD-F,PER
|
|
ZERO? ON-TRAIN /?ELS3
|
|
SET 'PER,WAITER
|
|
JUMP ?CND1
|
|
?ELS3: SET 'PER,WAITRESS
|
|
?CND1: EQUAL? PRSA,V?BUY,V?ASK-ABOUT \FALSE
|
|
CALL2 START-SENTENCE,PER
|
|
PRINTI " shakes"
|
|
CALL HIM-HER-IT,PER,FALSE-VALUE,TRUE-VALUE
|
|
CALL2 THIS-IS-IT,FOOD
|
|
CALL2 THIS-IS-IT,PER
|
|
PRINTR " head and points to the first item on the menu, which you find unreadable."
|
|
|
|
|
|
.FUNCT TABLE?,RM
|
|
EQUAL? RM,CAFE \?ELS5
|
|
RETURN COUNTER-CAFE
|
|
?ELS5: EQUAL? RM,BOOTH-1 \?ELS7
|
|
RETURN TABLE-1
|
|
?ELS7: EQUAL? RM,BOOTH-2 \?ELS9
|
|
RETURN TABLE-2
|
|
?ELS9: EQUAL? RM,BOOTH-3 \FALSE
|
|
RETURN TABLE-3
|
|
|
|
|
|
.FUNCT LANGUAGE-F
|
|
EQUAL? PRSA,V?LEARN,V?ANALYZE \FALSE
|
|
PRINTR "Maybe you should have taken your company's offer to pay for language lessons before you started this trip. After all, English isn't spoken everywhere."
|
|
|
|
|
|
.FUNCT GESTURE-F,P
|
|
EQUAL? PRSA,V?LEARN,V?ANALYZE \?ELS5
|
|
PRINTR "Maybe you should have taken your company's offer to pay for gesture lessons before you started this trip. After all, English gestures aren't used everywhere."
|
|
?ELS5: EQUAL? PRSA,V?MAKE \FALSE
|
|
ZERO? PRSI /?ELS12
|
|
FSET? PRSI,PERSONBIT \?ELS12
|
|
SET 'P,PRSI
|
|
JUMP ?CND10
|
|
?ELS12: CALL1 QCONTEXT-GOOD?
|
|
ZERO? STACK /?ELS16
|
|
SET 'P,QCONTEXT
|
|
JUMP ?CND10
|
|
?ELS16: CALL FIND-FLAG,HERE,PERSONBIT,WINNER >P
|
|
ZERO? P \?CND10
|
|
CALL2 NOT-CLEAR-WHOM,TRUE-VALUE
|
|
RTRUE
|
|
?CND10: CALL2 START-SENTENCE,P
|
|
CALL HE-SHE-IT,P,-1,STR?154
|
|
PRINTR " a gesture right back. Somehow it looks nastier than yours."
|
|
|
|
|
|
.FUNCT GAME-F
|
|
EQUAL? PRSA,V?READ,V?PLAY,V?EXAMINE \FALSE
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(You're doing it now!)"
|
|
|
|
|
|
.FUNCT HEAD-F
|
|
EQUAL? PRSA,V?NOD \?ELS5
|
|
CALL2 PERFORM,V?YES
|
|
RTRUE
|
|
?ELS5: EQUAL? PRSA,V?SHAKE \FALSE
|
|
CALL2 PERFORM,V?NO
|
|
RTRUE
|
|
|
|
.ENDI
|