checkpoint/global.zap

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