hollywoodhijinx/verbs.zap
2019-04-14 02:06:26 -04:00

2791 lines
51 KiB
Plaintext

.FUNCT DESCRIBE-ROOM,VERB-IS-LOOK=0,FIRST-VISIT=0
ZERO? LIT \?CND1
EQUAL? HERE,ON-POOL-2 /?CND1
CALL NOW-BLACK
CRLF
RFALSE
?CND1: FSET? HERE,TOUCHBIT /?CND6
FSET HERE,TOUCHBIT
SET 'FIRST-VISIT,TRUE-VALUE
?CND6: CALL DPRINT,HERE
LOC PLAYER
FSET? STACK,VEHBIT \?CND9
PRINTI ", on"
LOC PLAYER
CALL TPRINT,STACK
?CND9: CRLF
ZERO? VERB-IS-LOOK \?THN15
EQUAL? VERBOSITY,2 /?THN15
ZERO? FIRST-VISIT /TRUE
EQUAL? VERBOSITY,1 \TRUE
?THN15: GETP HERE,P?ACTION
CALL STACK,M-LOOK
ZERO? STACK \?CND19
GETP HERE,P?LDESC
PRINT STACK
?CND19: CRLF
RTRUE
.FUNCT DESCRIBE-OBJECTS,O,STR,1ST?=1,AV
LOC WINNER >AV
FIRST? HERE >O /?KLU48
?KLU48: ZERO? O /FALSE
?PRG4: ZERO? O /?REP5
CALL DESCRIBABLE?,O
ZERO? STACK /?CND6
FSET? O,TOUCHBIT /?CND6
GETP O,P?FDESC >STR
ZERO? STR /?CND6
CRLF
PRINT STR
FSET? O,CONTBIT \?CND13
ADD D-ALL?,D-PARA?
CALL DESCRIBE-CONTENTS,O,TRUE-VALUE,STACK
?CND13: CRLF
?CND6: NEXT? O >O /?PRG4
JUMP ?PRG4
?REP5: FIRST? HERE >O /?KLU50
?KLU50: SET '1ST?,TRUE-VALUE
?PRG16: ZERO? O /?REP17
CALL DESCRIBABLE?,O
ZERO? STACK /?CND18
GETP O,P?FDESC
ZERO? STACK /?ELS22
FSET? O,TOUCHBIT \?CND18
?ELS22: GETP O,P?DESCFCN >STR
ZERO? STR /?ELS28
CALL STR,M-OBJDESC >STR
ZERO? STR /?ELS28
FSET? O,CONTBIT \?CND31
EQUAL? STR,M-FATAL /?CND31
ADD D-ALL?,D-PARA?
CALL DESCRIBE-CONTENTS,O,TRUE-VALUE,STACK
?CND31: CRLF
JUMP ?CND18
?ELS28: GETP O,P?LDESC >STR
ZERO? STR /?CND18
PRINT STR
FSET? O,CONTBIT \?CND38
ADD D-ALL?,D-PARA?
CALL DESCRIBE-CONTENTS,O,TRUE-VALUE,STACK
?CND38: CRLF
?CND18: NEXT? O >O /?PRG16
JUMP ?PRG16
?REP17: CALL DESCRIBE-CONTENTS,HERE,FALSE-VALUE,0
ZERO? AV /FALSE
EQUAL? HERE,AV /FALSE
CALL DESCRIBE-CONTENTS,AV,FALSE-VALUE,0
RSTACK
.FUNCT DESCRIBE-CONTENTS,OBJ,LEVEL=-1,ALL?=D-ALL?,F=0,N,1ST?=1,IT?=0,START?=0,TWO?=0,PARA?=0
EQUAL? LEVEL,2 \?ELS3
SET 'LEVEL,TRUE-VALUE
SET 'PARA?,TRUE-VALUE
SET 'START?,TRUE-VALUE
JUMP ?CND1
?ELS3: BTST ALL?,D-PARA? \?CND1
SET 'PARA?,TRUE-VALUE
?CND1: FIRST? OBJ >N /?KLU145
?KLU145: ZERO? START? \?THN11
IN? OBJ,ROOMS /?THN11
FSET? OBJ,ACTORBIT /?THN11
FSET? OBJ,CONTBIT \FALSE
FSET? OBJ,OPENBIT /?THN15
FSET? OBJ,TRANSBIT \FALSE
?THN15: FSET? OBJ,SEARCHBIT \FALSE
ZERO? N /FALSE
?THN11:
?PRG17: ZERO? N /?THN26
CALL DESCRIBABLE?,N
ZERO? STACK /?CND19
BTST ALL?,D-ALL? /?THN26
CALL SIMPLE-DESC?,N
ZERO? STACK /?CND19
?THN26: ZERO? F /?CND28
ZERO? 1ST? /?ELS34
SET '1ST?,FALSE-VALUE
EQUAL? LEVEL,FALSE-VALUE,TRUE-VALUE \?ELS38
ZERO? START? \?CND32
ZERO? PARA? \?ELS44
EQUAL? OBJ,PLAYER /?CND45
CRLF
?CND45: SET 'PARA?,TRUE-VALUE
JUMP ?CND42
?ELS44: EQUAL? LEVEL,TRUE-VALUE \?CND42
PRINTC 32
?CND42: EQUAL? OBJ,HERE \?ELS52
PRINT YOU-SEE
JUMP ?CND32
?ELS52: EQUAL? OBJ,PLAYER \?ELS54
PRINTI "You have"
JUMP ?CND32
?ELS54: FSET? OBJ,SURFACEBIT \?ELS56
PRINTI "Sitting on"
CALL TPRINT,OBJ
PRINTI " is"
JUMP ?CND32
?ELS56: PRINTI "It looks as if"
CALL TPRINT,OBJ
FSET? OBJ,ACTORBIT \?ELS61
PRINTI " has"
JUMP ?CND32
?ELS61: PRINTI " contains"
JUMP ?CND32
?ELS38: EQUAL? LEVEL,-1 /?CND32
PRINT LEVEL
JUMP ?CND32
?ELS34: ZERO? N /?ELS70
PRINTC 44
JUMP ?CND32
?ELS70: PRINTI " and"
?CND32: CALL APRINT,F
FSET? F,WORNBIT \?ELS76
PRINTI " (being worn)"
JUMP ?CND74
?ELS76: FSET? F,ONBIT \?CND74
PRINTI " (providing light)"
?CND74: ZERO? IT? \?ELS84
ZERO? TWO? \?ELS84
SET 'IT?,F
JUMP ?CND28
?ELS84: SET 'TWO?,TRUE-VALUE
SET 'IT?,FALSE-VALUE
?CND28: SET 'F,N
?CND19: ZERO? N /?CND89
NEXT? N >N /?CND89
?CND89: ZERO? F \?PRG17
ZERO? N \?PRG17
ZERO? IT? /?CND98
ZERO? TWO? \?CND98
CALL THIS-IS-IT,IT?
?CND98: ZERO? 1ST? /?CND103
ZERO? START? /?CND103
PRINTI " nothing"
RFALSE
?CND103: ZERO? 1ST? \?REP18
EQUAL? LEVEL,FALSE-VALUE,TRUE-VALUE \?REP18
EQUAL? OBJ,HERE \?CND113
PRINTI " here"
?CND113: PRINTC 46
?REP18: FIRST? OBJ >F /?KLU147
?KLU147:
?PRG116: ZERO? F /?REP117
FSET? F,CONTBIT \?CND118
CALL DESCRIBABLE?,F,TRUE-VALUE
ZERO? STACK /?CND118
BTST ALL?,D-ALL? /?THN125
CALL SIMPLE-DESC?,F
ZERO? STACK /?CND118
?THN125: ZERO? PARA? /?ELS134
PUSH 3
JUMP ?CND130
?ELS134: PUSH D-ALL?
?CND130: CALL DESCRIBE-CONTENTS,F,TRUE-VALUE,STACK
ZERO? STACK /?CND118
SET '1ST?,FALSE-VALUE
SET 'PARA?,TRUE-VALUE
?CND118: NEXT? F >F /?PRG116
JUMP ?PRG116
?REP117: ZERO? 1ST? \?CND138
EQUAL? LEVEL,FALSE-VALUE,TRUE-VALUE \?CND138
LOC WINNER
EQUAL? OBJ,HERE,STACK \?CND138
CRLF
?CND138: ZERO? 1ST? \FALSE
RTRUE
.FUNCT DESCRIBABLE?,OBJ,CONT?=0
FSET? OBJ,INVISIBLE /FALSE
EQUAL? OBJ,WINNER /FALSE
LOC WINNER
EQUAL? OBJ,STACK \?ELS9
LOC WINNER
EQUAL? HERE,STACK \FALSE
?ELS9: ZERO? CONT? \TRUE
FSET? OBJ,NDESCBIT \TRUE
RFALSE
.FUNCT SIMPLE-DESC?,OBJ,STR
GETP OBJ,P?FDESC
ZERO? STACK /?ELS5
FSET? OBJ,TOUCHBIT \FALSE
?ELS5: GETP OBJ,P?DESCFCN >STR
ZERO? STR /?ELS9
CALL STR,M-OBJDESC?
ZERO? STACK \FALSE
?ELS9: GETP OBJ,P?LDESC
ZERO? STACK /TRUE
RFALSE
.FUNCT DESCRIBE-NOTHING
CALL DESCRIBE-CONTENTS,PRSO,2
ZERO? STACK /FALSE
IN? PLAYER,PRSO /TRUE
CRLF
RTRUE
.FUNCT V-ALARM
EQUAL? PRSO,ME,ROOMS \?ELS3
PRINTI "But you're "
JUMP ?CND1
?ELS3: FSET? PRSO,ACTORBIT \?ELS5
CALL BUT-THE,PRSO
PRINTI "is "
JUMP ?CND1
?ELS5: CALL WHAT-A-CONCEPT
RTRUE
?CND1: PRINTR "already wide awake!"
.FUNCT ALREADY-OPEN
CALL ITS-ALREADY,STR?23
RSTACK
.FUNCT ALREADY-CLOSED
CALL ITS-ALREADY,STR?24
RSTACK
.FUNCT V-ASK-ABOUT
FSET? PRSO,ACTORBIT \?ELS5
SET 'WINNER,PRSO
CALL PERFORM,V?TELL,PRSO
SET 'WINNER,PLAYER
RTRUE
?ELS5: CALL V-ASK-FOR
RSTACK
.FUNCT V-ASK-FOR
EQUAL? PRSO,ME,ROOMS \?ELS3
CALL PERFORM,V?TELL,ME
JUMP ?CND1
?ELS3: CALL NOT-LIKELY,PRSO,STR?25
?CND1: CALL PCLEAR
RETURN 2
.FUNCT V-BITE
CALL HACK-HACK,STR?26
RSTACK
.FUNCT V-BLOW-INTO
FSET? PRSO,ACTORBIT \?ELS5
CALL PERFORM,V?USE,PRSO
RTRUE
?ELS5: CALL HACK-HACK,STR?27
RSTACK
.FUNCT PRE-BOARD
LOC PLAYER
EQUAL? PRSO,STACK \?ELS5
PRINTR "Look around you."
?ELS5: CALL ULTIMATELY-IN?,PRSO
ZERO? STACK /FALSE
PRINTR "You're holding it!"
.FUNCT V-BOARD
FSET? PRSO,VEHBIT \?ELS5
MOVE PLAYER,PRSO
PRINTI "You are now on"
CALL TPRINT,PRSO
PRINTR "."
?ELS5: PRINTI "You can't get into"
CALL TPRINT,PRSO
PRINTR "!"
.FUNCT V-BURN
FSET? PRSI,FLAMEBIT \?ELS5
FSET? PRSO,BURNBIT \?ELS10
REMOVE PRSO
PRINTI "The "
CALL DPRINT,PRSO
PRINTR " catches fire and is reduced to ashes."
?ELS10: PRINT PYRO
RTRUE
?ELS5: PRINTI "With"
CALL APRINT,PRSI
PRINTI "? "
CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
.FUNCT V-BUY
CALL VISIBLE?,PRSO
ZERO? STACK \?ELS5
CALL CANT-SEE-ANY,PRSO
RTRUE
?ELS5: FSET? PRSO,TAKEBIT /?ELS7
FSET? PRSO,TRYTAKEBIT /?ELS7
PRINT YOU-CANT
PRINTR "buy that!"
?ELS7: CALL ULTIMATELY-IN?,PRSO
ZERO? STACK /?ELS11
PRINTR "You already have one."
?ELS11: ZERO? PRSI /?ELS13
CALL NOT-LIKELY,PRSI,STR?31
RSTACK
?ELS13: PRINTR "You don't have any money."
.FUNCT CANT-CLOSE-THAT
PRINT YOU-CANT
PRINTR "close that!"
.FUNCT CANT-GO
PRINT YOU-CANT
PRINTR "go that way."
.FUNCT CANT-LOCK,UN?=0
PRINT YOU-CANT
ZERO? UN? /?CND1
PRINTI "un"
?CND1: PRINTI "lock"
CALL TPRINT,PRSO
PRINTR "!"
.FUNCT V-CHASTISE
ZERO? LIT \?ELS5
CALL TOO-DARK
RSTACK
?ELS5: EQUAL? PRSO,INTDIR \?ELS7
PRINTR "You'll have to go in that direction to see what's there."
?ELS7: PRINTR "Use prepositions to indicate precisely what you want to do. For example, LOOK AT the object, LOOK INSIDE it, LOOK UNDER it, etc."
.FUNCT V-CLEAN
CALL NOT-A,STR?32
RSTACK
.FUNCT V-CLIMB
CALL PERFORM,V?CLIMB-UP,PRSO
RTRUE
.FUNCT V-CLIMB-DOWN
EQUAL? PRSO,ROOMS \?ELS5
CALL DO-WALK,P?DOWN
RSTACK
?ELS5: CALL WHAT-A-CONCEPT
RSTACK
.FUNCT V-CLIMB-ON
EQUAL? P-PRSA-WORD,W?HOLD \?ELS5
CALL PERFORM,V?TAKE,PRSO
RTRUE
?ELS5: PRINT YOU-CANT
PRINTR "climb onto that."
.FUNCT V-CLIMB-OVER
EQUAL? PRSO,ROOMS \?ELS5
CALL V-WALK-AROUND
RSTACK
?ELS5: PRINT YOU-CANT
PRINTR "climb over that."
.FUNCT V-CLIMB-UP
EQUAL? PRSO,ROOMS \?ELS5
CALL DO-WALK,P?UP
RSTACK
?ELS5: CALL WHAT-A-CONCEPT
RSTACK
.FUNCT V-CLOSE
FSET? PRSO,ACTORBIT \?ELS5
CALL NOT-A,STR?33
RSTACK
?ELS5: FSET? PRSO,SURFACEBIT \?ELS7
CALL CANT-CLOSE-THAT
RSTACK
?ELS7: FSET? PRSO,CONTBIT /?ELS9
FSET? PRSO,DOORBIT /?ELS9
CALL PERFORM,V?OPEN,PRSO
RTRUE
?ELS9: FSET? PRSO,SURFACEBIT /?ELS13
GETP PRSO,P?CAPACITY
ZERO? STACK /?ELS13
FSET? PRSO,OPENBIT \?ELS20
CALL NOW-CLOSED-OR-OPEN,PRSO
CALL SAY-IF-NOT-LIT
RSTACK
?ELS20: CALL ALREADY-CLOSED
RSTACK
?ELS13: FSET? PRSO,DOORBIT \?ELS24
FSET? PRSO,OPENBIT \?ELS29
FCLEAR PRSO,OPENBIT
CALL SAY-THE,PRSO
PRINTC 32
CALL PICK-ONE,DOOR-NOISES
PRINT STACK
PRINTR " as it closes."
?ELS29: CALL ALREADY-CLOSED
RSTACK
?ELS24: CALL CANT-CLOSE-THAT
RSTACK
.FUNCT V-COMPARE
PRINTR "You compare the two items and find nothing interesting."
.FUNCT V-COUNT
CALL WASTE-OF-TIME
RSTACK
.FUNCT V-COVER
CALL PERFORM,V?PUT-ON,PRSI,PRSO
RTRUE
.FUNCT V-CROSS
PRINT YOU-CANT
PRINTR "cross that!"
.FUNCT V-CUT
CALL NOT-LIKELY,PRSI,STR?34
RSTACK
.FUNCT V-$DEBUG
ZERO? DEBUG /?ELS5
SET 'DEBUG,FALSE-VALUE
PRINTR "Debug off."
?ELS5: SET 'DEBUG,TRUE-VALUE
PRINTR "Debug on."
.FUNCT V-DIAGNOSE
PRINTI "You're in good health"
RANDOM 100
LESS? 50,STACK /?CND1
PRINTI "... at the moment"
?CND1: PRINTR "."
.FUNCT V-DIG-WITH
CALL PERFORM,V?DIG,GROUND,PRSO
RTRUE
.FUNCT V-DIG
ZERO? PRSI \?CND1
IN? SHOVEL,PLAYER \?ELS6
SET 'PRSI,SHOVEL
PRINTI "[with the shovel]"
CRLF
JUMP ?CND1
?ELS6: SET 'PRSI,HANDS
PRINTI "[with your hands]"
CRLF
?CND1: EQUAL? PRSO,SAND,GROUND \?ELS13
EQUAL? PRSI,SHOVEL /?ELS18
PRINTR "I suppose you also excavate tunnels with a teaspoon."
?ELS18: EQUAL? PRSO,SAND /?THN21
EQUAL? HERE,BEACH \?ELS20
?THN21: PRINTR "You find nothing, so you fill in the hole."
?ELS20: GETP HERE,P?CAPACITY
EQUAL? STACK,2 \?ELS24
PRINTR "You attempt to dig in the stone path, but it proves too tough for your efforts."
?ELS24: GETP HERE,P?CAPACITY
ZERO? STACK \?ELS26
PRINTR "The ground is too hard here."
?ELS26: GETP HERE,P?CAPACITY
EQUAL? STACK,10 /?THN29
GETP HERE,P?CAPACITY
EQUAL? STACK,20 \?ELS28
?THN29: PRINTR "You can't dig a hole here!"
?ELS28: EQUAL? HERE,HEART-OF-MAZE \?ELS37
IN? HEART-OF-MAZE-HOLE,HEART-OF-MAZE \?ELS42
PRINTR "You already dug a hole here."
?ELS42: PRINTI "You dig a hole and uncover"
CALL ARPRINT,RUBBER-STAMP
MOVE HEART-OF-MAZE-HOLE,HEART-OF-MAZE
RTRUE
?ELS37: GETP HERE,P?CAPACITY
EQUAL? STACK,1 \?ELS51
GETB HM-TABLE,HM-ROOM
GRTR? STACK,15 \?ELS51
PRINTR "You've already dug a hole here."
?ELS51: GETP HERE,P?CAPACITY
EQUAL? STACK,1 \FALSE
MOVE MAZE-HOLE,HERE
GETB HM-TABLE,HM-ROOM
BOR STACK,X-H
PUTB HM-TABLE,HM-ROOM,STACK
GETB HM-TABLE,HM-ROOM >HM-BITS
PRINTR "You dig a good sized hole, but find nothing."
?ELS13: CALL WASTE-OF-TIME
RSTACK
.FUNCT V-DISEMBARK
LOC PLAYER
EQUAL? STACK,PRSO /?ELS5
PRINTI "Look around you."
CRLF
RETURN 2
?ELS5: MOVE WINNER,HERE
PRINTI "You are no longer on"
CALL TPRINT,PRSO
PRINTR "."
.FUNCT V-DRINK
PRINT YOU-CANT
PRINTR "drink that!"
.FUNCT V-DRINK-FROM
CALL WHAT-A-CONCEPT
RSTACK
.FUNCT SPECIAL-DROP
EQUAL? HERE,ROOF-1,ROOF-2 \?ELS5
EQUAL? PRSO,FINCH \?ELS12
FSET? FINCH,BROKEN-BIT \?THN9
?ELS12: CALL ULTIMATELY-IN?,FINCH,PRSO
ZERO? STACK /?CND6
FSET? FINCH,BROKEN-BIT /?CND6
?THN9: CALL BREAK-FINCH,TRUE-VALUE
?CND6: EQUAL? PRSO,BLUE-CANDLE,WHITE-CANDLE,RED-CANDLE \?CND15
FSET? PRSO,FLAMEBIT \?CND15
CALL BLOW-OUT-CANDLE,PRSO,TRUE-VALUE
?CND15: MOVE PRSO,PATIO
PRINTI "The "
CALL DPRINT,PRSO
PRINTR " slides off the roof."
?ELS5: EQUAL? HERE,ON-POOL-1,ON-POOL-2,INLET /?THN22
EQUAL? HERE,IN-POOL-1,IN-POOL-2 \?ELS21
?THN22: CALL PERFORM,V?PUT,PRSO,WATER
RTRUE
?ELS21: EQUAL? HERE,CHIMNEY-2 /?THN26
EQUAL? HERE,CHIMNEY-1 \FALSE
?THN26: CALL PERFORM,V?PUT,PRSO,CHIMNEY
RTRUE
.FUNCT V-DROP
CALL SPECIAL-DROP
ZERO? STACK \TRUE
CALL IDROP
ZERO? STACK /FALSE
PRINTR "Dropped."
.FUNCT IDROP
CALL DONT-HAVE?,PRSO
ZERO? STACK \FALSE
IN? PRSO,WINNER /?ELS5
LOC PRSO
FSET? STACK,OPENBIT /?ELS5
PRINT YOU-CANT
PRINTI "do that while"
CALL TPRINT,PRSO
CALL IS-CLOSED
CRLF
RFALSE
?ELS5: FSET? PRSO,WORNBIT \?ELS9
PRINTI "You'll have to take off"
CALL TPRINT,PRSO
PRINTI " first."
CRLF
RFALSE
?ELS9: MOVE PRSO,HERE
RTRUE
.FUNCT V-EAT
CALL NOT-LIKELY,PRSO,STR?35
RSTACK
.FUNCT V-EMPTY,OBJ,NXT
FSET? PRSO,CONTBIT \?ELS3
FSET? PRSO,OPENBIT \?ELS6
FIRST? PRSO >OBJ /?KLU28
?KLU28: ZERO? OBJ /?ELS9
?PRG11: ZERO? OBJ /TRUE
NEXT? OBJ >NXT /?KLU29
?KLU29: FSET? OBJ,NARTICLEBIT /?CND17
PRINTI "The "
?CND17: CALL DPRINT,OBJ
PRINTI ": "
CALL PERFORM,V?TAKE,OBJ,PRSO
SET 'OBJ,NXT
JUMP ?PRG11
?ELS9: CALL BUT-THE,PRSO
PRINTR "is already empty!"
?ELS6: CALL ITS-CLOSED,PRSO
RTRUE
?ELS3: PRINT YOU-CANT
PRINTR "empty that!"
.FUNCT V-ENTER
EQUAL? PRSO,ROOMS \?ELS5
CALL DO-WALK,P?IN
RSTACK
?ELS5: FSET? PRSO,DOORBIT \?ELS7
CALL OTHER-SIDE,PRSO
CALL DO-WALK,STACK
RSTACK
?ELS7: IN? PRSO,WINNER \?ELS9
PRINTR "That would involve quite a contortion!"
?ELS9: FSET? PRSO,WEARBIT \?ELS11
CALL PRESUMABLY-YOU-WANT-TO,STR?36,PRSO
CALL PERFORM,V?WEAR,PRSO
RTRUE
?ELS11: FSET? PRSO,VEHBIT \?ELS13
CALL PERFORM,V?BOARD,PRSO
RTRUE
?ELS13: PRINTI "You hit your head against"
CALL TPRINT,PRSO
PRINTR " as you attempt this feat."
.FUNCT PRE-EXAMINE
ZERO? LIT \FALSE
CALL TOO-DARK
RTRUE
.FUNCT V-EXAMINE
FSET? PRSO,DOORBIT \?ELS5
PRINTI "It looks as if"
CALL TPRINT,PRSO
PRINTI " is "
FSET? PRSO,OPENBIT \?ELS8
PRINTI "open"
JUMP ?CND6
?ELS8: PRINTI "closed"
?CND6: PRINTR "."
?ELS5: FSET? PRSO,SURFACEBIT \?ELS12
CALL V-LOOK-ON
RSTACK
?ELS12: FSET? PRSO,CONTBIT \?ELS14
FSET? PRSO,OPENBIT /?THN20
FSET? PRSO,TRANSBIT \?ELS19
?THN20: CALL V-LOOK-INSIDE
RSTACK
?ELS19: CALL ITS-CLOSED,PRSO
RSTACK
?ELS14: FSET? PRSO,READBIT \?ELS25
CALL PERFORM,V?READ,PRSO
RSTACK
?ELS25: PRINTI "You see nothing "
CALL PICK-ONE,YAWNS
PRINT STACK
PRINTI " about"
CALL TRPRINT,PRSO
RSTACK
.FUNCT V-EXIT
CALL DO-WALK,P?OUT
RSTACK
.FUNCT FAILED
PRINTR "Failed."
.FUNCT V-FILL
ZERO? PRSI \?ELS5
CALL GLOBAL-IN?,WATER,HERE
ZERO? STACK /?ELS10
CALL PERFORM,V?FILL,PRSO,WATER
RTRUE
?ELS10: FSET? PRSO,CONTBIT \?ELS12
PRINTR "There's nothing to fill it with."
?ELS12: CALL V-STAND-UNDER
RSTACK
?ELS5: EQUAL? PRSI,PORTABLE-WATER,WATER \?ELS16
CALL GLOBAL-IN?,WATER,HERE
ZERO? STACK \?ELS21
CALL CANT-SEE-ANY,WATER
RSTACK
?ELS21: EQUAL? PRSO,BUCKET /?ELS23
CALL V-STAND-UNDER
RSTACK
?ELS23: FIRST? BUCKET \?ELS25
FIRST? BUCKET /?KLU34
?KLU34: EQUAL? STACK,PORTABLE-WATER /?ELS25
PRINTR "That would get the stuff in the bucket all wet."
?ELS25: MOVE PORTABLE-WATER,BUCKET
CALL QUEUE,I-DRIP,2
SET 'AMOUNT-OF-WATER,26
PRINTI "You fill"
CALL TPRINT,BUCKET
PRINTR ", which naturally leaks slowly."
?ELS16: EQUAL? PRSI,PORTABLE-WATER \?ELS31
CALL PERFORM,V?POUR,PORTABLE-WATER,PRSO
CALL THIS-IS-IT,PRSO
RTRUE
?ELS31: CALL V-STAND-UNDER
RSTACK
.FUNCT V-FIND,L
LOC PRSO >L
EQUAL? PRSO,ME,HANDS \?ELS3
PRINTI "You're right here"
JUMP ?CND1
?ELS3: IN? PRSO,PLAYER \?ELS5
PRINTI "You're holding it"
JUMP ?CND1
?ELS5: IN? PRSO,HERE /?THN8
EQUAL? PRSO,PSEUDO-OBJECT \?ELS7
?THN8: CALL BUT-THE,PRSO
PRINTI "is right in front of you"
JUMP ?CND1
?ELS7: IN? PRSO,LOCAL-GLOBALS \?ELS11
CALL HOW?
RTRUE
?ELS11: FSET? L,ACTORBIT \?ELS13
CALL VISIBLE?,L
ZERO? STACK /?ELS13
PRINTI "It looks as if"
CALL TPRINT,L
PRINTI " has it"
JUMP ?CND1
?ELS13: CALL SEE-INSIDE?,L
ZERO? STACK /?ELS17
CALL VISIBLE?,L
ZERO? STACK /?ELS17
PRINTI "It's "
FSET? L,SURFACEBIT \?ELS22
PRINTI "on"
JUMP ?CND20
?ELS22: PRINTI "in"
?CND20: CALL TPRINT,L
JUMP ?CND1
?ELS17: PRINTI "You'll have to do that yourself"
?CND1: PRINTR "."
.FUNCT FIND-IN,WHERE,WHAT,W
FIRST? WHERE >W /?KLU11
?KLU11: ZERO? W /FALSE
?PRG4: FSET? W,WHAT \?ELS8
RETURN W
?ELS8: NEXT? W >W /?PRG4
RFALSE
.FUNCT FINISH,REPEATING=0,WORD
CRLF
ZERO? REPEATING \?CND1
CALL V-SCORE
CRLF
?CND1: PRINTI "Do you want to restart the story, restore a saved position, or quit?
(Please type RESTART, RESTORE or QUIT.) >"
READ P-INBUF,P-LEXV
GET P-LEXV,1 >WORD
EQUAL? WORD,W?RESTAR \?ELS8
RESTART
CALL FAILED
CALL FINISH,TRUE-VALUE
RSTACK
?ELS8: EQUAL? WORD,W?RESTOR \?ELS10
RESTORE \?ELS15
CALL SAY-OKAY
RSTACK
?ELS15: CALL FAILED
CALL FINISH,TRUE-VALUE
RSTACK
?ELS10: EQUAL? WORD,W?QUIT,W?Q \?ELS19
QUIT
RTRUE
?ELS19: CALL FINISH,TRUE-VALUE
RSTACK
.FUNCT V-FLY
PRINTR "That's not in the script!"
.FUNCT V-FOCUS
PRINTR "It's your thinking that's out of focus."
.FUNCT V-FOLLOW,WHERE
LOC PRSO >WHERE
CALL BUT-THE,PRSO
PRINTI "is "
EQUAL? WHERE,HERE /?THN4
CALL GLOBAL-IN?,PRSO,HERE
ZERO? STACK /?ELS3
?THN4: PRINTI "right here in front of you"
JUMP ?CND1
?ELS3: EQUAL? WHERE,PLAYER \?ELS7
PRINTI "in"
CALL DPRINT,HANDS
PRINTC 115
JUMP ?CND1
?ELS7: IN? WHERE,PLAYER \?ELS9
PRINTI "in"
CALL TPRINT,WHERE
JUMP ?CND1
?ELS9: PRINTI "nowhere to be seen"
?CND1: PRINTR "!"
.FUNCT PRE-GIVE
ZERO? PRSO /?THN6
ZERO? PRSI \?ELS5
?THN6: CALL REFERRING
RTRUE
?ELS5: IN? PRSO,LOCAL-GLOBALS /?THN10
IN? PRSO,PSEUDO-OBJECT \?ELS9
?THN10: CALL NOT-HOLDING
RTRUE
?ELS9: CALL DONT-HAVE?,PRSO
ZERO? STACK \TRUE
FSET? PRSI,ACTORBIT /?ELS15
PRINT YOU-CANT
PRINTR "give anything to that!"
?ELS15: FSET? PRSO,WORNBIT \FALSE
CALL TAKE-OFF-PRSO-FIRST
RSTACK
.FUNCT V-GIVE
FSET? PRSI,ACTORBIT \FALSE
PRINTI "Politely,"
CALL TPRINT,PRSI
PRINTR " refuses your offer."
.FUNCT V-SGIVE
CALL PERFORM,V?GIVE,PRSI,PRSO
RTRUE
.FUNCT GOTO,RM,V?=1,OLIT,OHERE,X
GETP HERE,P?ACTION
CALL STACK,M-EXIT >X
SET 'OHERE,HERE
SET 'OLIT,LIT
MOVE WINNER,RM
SET 'HERE,RM
CALL LIT?,HERE >LIT
GETP HERE,P?ACTION
CALL STACK,M-ENTER
CALL DESCRIBE-ROOM
ZERO? STACK /TRUE
ZERO? VERBOSITY /TRUE
CALL DESCRIBE-OBJECTS
RTRUE
.FUNCT HACK-HACK,STR
PRINT STR
CALL TPRINT,PRSO
PRINTC 32
CALL PICK-ONE,HO-HUM
PRINT STACK
PRINTR "."
.FUNCT PRE-HANG-UP
CALL ULTIMATELY-IN?,PRSO
ZERO? STACK \FALSE
EQUAL? PRSO,PHONE /FALSE
CALL NOT-HOLDING,PRSO
RSTACK
.FUNCT V-HANG-UP
ZERO? PRSI \?ELS5
EQUAL? HERE,CLOSET \?ELS10
PRINTR "Next time, say which peg to hang it on."
?ELS10: PRINTR "There's no place to hang it up."
?ELS5: PRINTI "You can't hang something on"
CALL ARPRINT,PRSI
RSTACK
.FUNCT V-HELLO,WHO
ZERO? PRSO /?ELS3
SET 'WHO,PRSO
JUMP ?CND1
?ELS3: CALL ANYONE-HERE? >WHO
ZERO? WHO /?CND1
CALL SPOKEN-TO,WHO
CALL PERFORM,V?HELLO,WHO
RTRUE
?CND1: ZERO? WHO /?ELS15
FSET? WHO,ACTORBIT \?ELS21
PRINTI "It's apparent that"
CALL TPRINT,WHO
PRINTR " didn't expect you to say that."
?ELS21: CALL NOT-LIKELY,WHO,STR?25
RSTACK
?ELS15: CALL TALK-TO-SELF
RSTACK
.FUNCT V-HELP
PRINTR "[If you're really stuck, maps and InvisiClues (TM) hint booklets are available using the order form that came in your HOLLYWOOD HIJINX package.]"
.FUNCT V-HIDE
PRINTR "There aren't any good hiding places here."
.FUNCT V-INVENTORY
CALL DESCRIBE-CONTENTS,WINNER,FALSE-VALUE
ZERO? STACK \?CND1
PRINTI "You are empty-handed."
?CND1: CRLF
RTRUE
.FUNCT ITS-ALREADY,STR
PRINTI "It's already "
PRINT STR
PRINTR "."
.FUNCT JIGS-UP,REASON=0
ZERO? REASON /?CND1
PRINT REASON
CRLF
?CND1: CALL KILL-INTERRUPTS
CRLF
PRINTI "Fade to black:
**** You have died ****"
CRLF
CALL FINISH
RSTACK
.FUNCT V-KICK
CALL HACK-HACK,STR?44
RSTACK
.FUNCT V-KILL
FSET? PRSO,ACTORBIT /?ELS3
PRINT YOU-CANT
PRINTI "attack"
CALL TPRINT,PRSO
PRINTC 33
JUMP ?CND1
?ELS3: PRINTI "Attacking"
CALL TPRINT,PRSO
ZERO? PRSI /?CND6
PRINTI " with"
CALL TPRINT,PRSI
?CND6: PRINTI " isn't likely to help matters."
?CND1: CRLF
RTRUE
.FUNCT KILL-INTERRUPTS
RTRUE
.FUNCT V-KISS
PRINTR "Smack!"
.FUNCT V-KNOCK
FSET? PRSO,DOORBIT \?ELS5
CALL NO-ANSWER
RSTACK
?ELS5: FSET? PRSO,ACTORBIT \?ELS7
CALL PERFORM,V?USE,PRSO
RTRUE
?ELS7: CALL WASTE-OF-TIME
RSTACK
.FUNCT V-LAMP-OFF
EQUAL? P-PRSA-WORD,W?BLOW \?ELS5
EQUAL? PRSO,FLASHLIGHT,COMPUTER,FILM-PROJECTOR /?THN8
EQUAL? PRSO,SLIDE-PROJECTOR \?ELS5
?THN8: CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
?ELS5: FSET? PRSO,LIGHTBIT /?THN12
FSET? PRSO,BURNBIT \?ELS11
?THN12: FSET? PRSO,ONBIT \?ELS18
FCLEAR PRSO,ONBIT
PRINTI "Okay,"
CALL TPRINT,PRSO
PRINTI " is now off."
CRLF
CALL SAY-IF-NOT-LIT
RTRUE
?ELS18: PRINTR "It isn't on!"
?ELS11: CALL CANT-TURN,STR?46
RSTACK
.FUNCT V-LAMP-ON
FSET? PRSO,LIGHTBIT \?ELS5
FSET? PRSO,ONBIT \?ELS10
CALL ITS-ALREADY,STR?47
RSTACK
?ELS10: FSET PRSO,ONBIT
PRINTI "Okay,"
CALL TPRINT,PRSO
PRINTI " is now on."
CRLF
CALL NOW-LIT?
RSTACK
?ELS5: FSET? PRSO,BURNBIT \?ELS14
CALL SET-FLAME-SOURCE
ZERO? STACK \TRUE
CALL PERFORM,V?BURN,PRSO,PRSI
RTRUE
?ELS14: CALL CANT-TURN,STR?48
RSTACK
.FUNCT CANT-TURN,STRING
PRINT YOU-CANT
PRINTI "turn that o"
PRINT STRING
PRINTR "."
.FUNCT V-LEAP
EQUAL? PRSO,ROOMS /?ELS5
PRINTR "That'd be a cute trick."
?ELS5: EQUAL? HERE,IN-POOL-1,IN-POOL-2,ON-POOL-1 /?THN8
EQUAL? HERE,ON-POOL-2,INLET,UNDERPASS-1 /?THN8
EQUAL? HERE,UNDERPASS-2 \?ELS7
?THN8: CALL DO-WALK,P?DOWN
RSTACK
?ELS7: CALL GLOBAL-IN?,WATER,HERE
ZERO? STACK /?ELS11
CALL PERFORM,V?SWIM,WATER
RTRUE
?ELS11: CALL WASTE-OF-TIME
RSTACK
.FUNCT V-LEAVE
EQUAL? PRSO,ROOMS /?THN4
FSET? PRSO,TAKEBIT /?ELS3
?THN4: CALL DO-WALK,P?OUT
RTRUE
?ELS3: CALL DONT-HAVE?,PRSO
ZERO? STACK \TRUE
CALL PERFORM,V?DROP,PRSO
RTRUE
.FUNCT V-LET-GO
CALL PERFORM,V?DROP,PRSO
RTRUE
.FUNCT V-LIE-DOWN
PRINTR "This is no time for resting."
.FUNCT V-LISTEN
EQUAL? PRSO,ROOMS \?ELS5
EQUAL? HERE,CLOSET \?ELS10
ZERO? BUCKET-PEG /?ELS10
PRINTR """Hummm."""
?ELS10: PRINTR "You hear nothing special."
?ELS5: PRINTI "At the moment,"
CALL TPRINT,PRSO
PRINTR " makes no sound."
.FUNCT V-LOCK
FSET? PRSO,DOORBIT /?THN6
FSET? PRSO,CONTBIT \?ELS5
?THN6: FSET? HERE,LOCKEDBIT /?ELS12
PRINT YOU-CANT
PRINTR "lock it from here."
?ELS12: FSET? PRSO,OPENBIT \?ELS14
PRINTI "You can't lock"
CALL TPRINT,PRSO
PRINTR " when it's open. You should have eaten more fish (brain food) as Aunt Hildegarde told you to."
?ELS14: FSET? PRSO,LOCKEDBIT \?ELS16
PRINTI "You attempt to lock"
CALL TPRINT,PRSO
PRINTR " and find it's already locked."
?ELS16: ZERO? PRSI /?ELS18
PRINTI "When was the last time you locked something with"
CALL ARPRINT,PRSI
RSTACK
?ELS18: FSET? HERE,LOCKEDBIT \?ELS21
FSET PRSO,LOCKEDBIT
PRINTI "You lock"
CALL TRPRINT,PRSO
RSTACK
?ELS21: CALL THING-WONT-LOCK,PRSI,PRSO
RSTACK
?ELS5: CALL CANT-LOCK
RSTACK
.FUNCT THING-WONT-LOCK,THING,CLOSED-THING,UN?=0
PRINTI "A quick test shows that"
CALL TPRINT,THING
PRINTI " won't "
ZERO? UN? /?CND1
PRINTI "un"
?CND1: PRINTI "lock"
CALL TRPRINT,CLOSED-THING
RSTACK
.FUNCT V-LOOK
CALL DESCRIBE-ROOM,TRUE-VALUE
ZERO? STACK /TRUE
CALL DESCRIBE-OBJECTS
RTRUE
.FUNCT V-LOOK-BEHIND
ZERO? LIT \?ELS5
CALL TOO-DARK
RSTACK
?ELS5: PRINTI "There's nothing behind"
CALL TRPRINT,PRSO
RSTACK
.FUNCT V-LOOK-DOWN
ZERO? LIT \?ELS3
CALL TOO-DARK
RTRUE
?ELS3: EQUAL? HERE,UPPER-BEACH-STAIRS,LOWER-BEACH-STAIRS \?ELS5
CALL PERFORM,V?LOOK-INSIDE,GAP
RTRUE
?ELS5: EQUAL? PRSO,ROOMS \?ELS7
CALL PERFORM,V?EXAMINE,GROUND
RTRUE
?ELS7: CALL PERFORM,V?LOOK-INSIDE,PRSO
RTRUE
.FUNCT V-LOOK-INSIDE
ZERO? LIT \?ELS5
CALL TOO-DARK
RSTACK
?ELS5: FSET? PRSO,ACTORBIT \?ELS7
CALL NOT-A,STR?33
RSTACK
?ELS7: FSET? PRSO,DOORBIT \?ELS9
EQUAL? PRSO,UPSTAIRS-CD,FOYER-CD,CELLAR-CD /?THN17
EQUAL? PRSO,ATTIC-CD \?ELS14
?THN17: EQUAL? HERE,CLOSET /?ELS14
FSET? PRSO,OPENBIT \?ELS14
CALL PERFORM,V?LOOK-INSIDE,CLOSET-REF
RTRUE
?ELS14: CALL PERFORM,V?EXAMINE,PRSO
RTRUE
?ELS9: FSET? PRSO,CONTBIT \?ELS22
LOC WINNER
EQUAL? PRSO,STACK \?ELS27
CALL V-LOOK
RSTACK
?ELS27: FSET? PRSO,OPENBIT /?ELS29
FSET? PRSO,TRANSBIT /?ELS29
CALL ITS-CLOSED,PRSO
RSTACK
?ELS29: PRINT YOU-SEE
CALL DESCRIBE-NOTHING
ZERO? STACK \TRUE
PRINTI " in"
CALL TRPRINT,PRSO
RTRUE
?ELS22: PRINT YOU-CANT
PRINTI "look inside"
CALL ARPRINT,PRSO
RSTACK
.FUNCT V-LOOK-ON
ZERO? LIT \?CND1
CALL TOO-DARK
RTRUE
?CND1: PRINT YOU-SEE
FSET? PRSO,SURFACEBIT \?ELS8
CALL DESCRIBE-NOTHING
ZERO? STACK \TRUE
PRINTI " on"
CALL TRPRINT,PRSO
RTRUE
?ELS8: PRINTI " nothing "
CALL PICK-ONE,YAWNS
PRINT STACK
PRINTI " on"
CALL TRPRINT,PRSO
RSTACK
.FUNCT V-LOOK-THRU
ZERO? LIT \?ELS5
CALL TOO-DARK
RSTACK
?ELS5: ZERO? PRSI /?ELS7
FSET? PRSI,TRANSBIT /?ELS7
PRINT YOU-CANT
PRINTR "look through that!"
?ELS7: CALL NOTHING-INTERESTING,TRUE-VALUE
RSTACK
.FUNCT V-LOOK-UNDER
ZERO? LIT \?ELS5
CALL TOO-DARK
RSTACK
?ELS5: IN? PRSO,PLAYER \?ELS7
PRINTI "You're already "
FSET? PRSO,WORNBIT \?ELS10
PRINTI "wear"
JUMP ?CND8
?ELS10: PRINTI "hold"
?CND8: PRINTR "ing that!"
?ELS7: CALL NOTHING-INTERESTING,TRUE-VALUE
RSTACK
.FUNCT V-LOOK-UP
ZERO? LIT \?ELS5
CALL TOO-DARK
RSTACK
?ELS5: EQUAL? HERE,UPSTAIRS-HALL-MIDDLE \?ELS7
FSET? ATTIC-DOOR,OPENBIT \?ELS12
PRINTR "You see an opening in the ceiling previously covered by the small panel. A ladder attached to the small door hangs down from the opening."
?ELS12: PRINTR "You see the outline of a small panel in the ceiling."
?ELS7: EQUAL? HERE,CLOSET-TOP \?ELS16
PRINTR "The shaft continues upward."
?ELS16: EQUAL? HERE,SHAFT-BOTTOM \?ELS18
PRINTI "You see the bottom of the closet "
EQUAL? CLOSET-FLOOR,UPSTAIRS-HALL-MIDDLE,ATTIC \?CND19
PRINTI "far "
?CND19: PRINTR "above you."
?ELS18: EQUAL? HERE,FIREPLACE,CHIMNEY-1,CHIMNEY-2 /?THN24
EQUAL? HERE,CHIMNEY-3 /?THN24
FSET? HERE,OUTDOORSBIT \?ELS23
?THN24: GRTR? MOVES,556 \?ELS30
PRINTR "You see the blue sky of a new day."
?ELS30: PRINTR "You see the night's sky."
?ELS23: PRINTR "You begin to get a stiff neck."
.FUNCT V-LOWER
CALL V-RAISE
RSTACK
.FUNCT V-MOVE
EQUAL? PRSO,ROOMS \?ELS5
CALL V-WALK-AROUND
RSTACK
?ELS5: FSET? PRSO,TAKEBIT \?ELS7
PRINTI "Moving"
CALL TPRINT,PRSO
PRINTI " reveals nothing "
CALL PICK-ONE,YAWNS
PRINT STACK
PRINTR "."
?ELS7: PRINT YOU-CANT
PRINTI "move"
CALL TRPRINT,PRSO
RSTACK
.FUNCT V-MUNG
PRINTR "Let's leave the violence to the movies."
.FUNCT NO-ANSWER
PRINTR "There's no answer."
.FUNCT NOT-A,STR
PRINTI "You're not a "
PRINT STR
PRINTR "!"
.FUNCT NOTHING-INTERESTING,SEE?=0
PRINTI "You "
ZERO? SEE? /?ELS3
PRINTI "see"
JUMP ?CND1
?ELS3: PRINTI "find"
?CND1: PRINTI " nothing "
CALL PICK-ONE,YAWNS
PRINT STACK
PRINTR "."
.FUNCT NOW-BLACK
PRINTI "It is pitch black."
RTRUE
.FUNCT NOW-CLOSED-OR-OPEN,THING,OPEN?=0
CALL THIS-IS-IT,THING
PRINT OKAY
PRINTI "the "
CALL DPRINT,PRSO
PRINTI " is now "
ZERO? OPEN? /?ELS3
FSET THING,OPENBIT
PRINTI "open"
JUMP ?CND1
?ELS3: FCLEAR THING,OPENBIT
PRINTI "closed"
?CND1: PRINTR "."
.FUNCT V-OPEN,F,STR
FSET? PRSO,ACTORBIT \?ELS5
CALL NOT-A,STR?33
RSTACK
?ELS5: FSET? PRSO,SURFACEBIT /?THN8
FSET? PRSO,VEHBIT \?ELS7
?THN8: PRINTR "Huh?"
?ELS7: FSET? PRSO,CONTBIT /?ELS11
FSET? PRSO,DOORBIT /?ELS11
PRINTI "How can you do that to"
CALL APRINT,PRSO
PRINTR "?"
?ELS11: FSET? PRSO,OPENBIT \?ELS15
CALL ALREADY-OPEN
RSTACK
?ELS15: FSET? PRSO,LOCKEDBIT \?ELS17
PRINTR "You'll have to unlock it first."
?ELS17: FSET? PRSO,CONTBIT \?ELS19
FSET PRSO,OPENBIT
FSET PRSO,TOUCHBIT
FIRST? PRSO \?THN25
FSET? PRSO,TRANSBIT \?ELS24
?THN25: CALL NOW-CLOSED-OR-OPEN,PRSO,TRUE-VALUE
RSTACK
?ELS24: PRINTI "Opening"
CALL TPRINT,PRSO
PRINTI " reveals"
CALL DESCRIBE-NOTHING
ZERO? STACK \TRUE
PRINTR "."
?ELS19: FSET PRSO,OPENBIT
CALL SAY-THE,PRSO
ZERO? MYSTERY-GUEST /?ELS38
EQUAL? PRSO,OAK-DOOR \?ELS38
SET 'MYSTERY-GUEST,FALSE-VALUE
PRINTR " opens with a long squeal, and you hear hurried footsteps several rooms away."
?ELS38: PRINTC 32
CALL PICK-ONE,DOOR-NOISES
PRINT STACK
PRINTR " as it opens."
.FUNCT CANT-OPEN-CLOSE
PRINTI "You can't "
EQUAL? PRSA,V?OPEN \?ELS3
PRINTI "open"
JUMP ?CND1
?ELS3: PRINTI "close"
?CND1: CALL APRINT,PRSO
PRINTR "!"
.FUNCT OTHER-SIDE,DOBJ,P=0,T
?PRG1: NEXTP HERE,P >P
LESS? P,LOW-DIRECTION /FALSE
GETPT HERE,P >T
PTSIZE T
EQUAL? STACK,DEXIT \?PRG1
GETB T,DEXITOBJ
EQUAL? STACK,DOBJ \?PRG1
RETURN P
.FUNCT V-PICK
FSET? PRSO,DOORBIT \?ELS5
CALL NOT-A,STR?56
RSTACK
?ELS5: CALL WHAT-A-CONCEPT
RSTACK
.FUNCT V-PLAY,WD,PTR
ADD P-SENTENCE,P-LEXELEN >PTR
GET P-LEXV,PTR >WD
EQUAL? WD,W?QUOTE \?CND1
ADD PTR,P-LEXELEN
GET P-LEXV,STACK >WD
?CND1: ZERO? PRSI /?ELS8
EQUAL? PRSI,PIANO /?ELS8
PRINTI "You can't play"
CALL ARPRINT,PRSI
RSTACK
?ELS8: ZERO? PRSO /?ELS12
EQUAL? PRSO,PIANO /?ELS12
PRINTI "You can't play"
CALL ARPRINT,PRSO
RSTACK
?ELS12: IN? PIANO,HERE /?ELS16
PRINTI "There's not a musical instrument in sight."
CRLF
CALL PCLEAR
RSTACK
?ELS16: ZERO? SONG-NUMBER \?ELS18
EQUAL? WD,W?YESTER \?ELS18
CALL OPEN-CRAWL-SPACE-DOOR?
CALL PCLEAR
RSTACK
?ELS18: EQUAL? SONG-NUMBER,1 \?ELS22
EQUAL? WD,W?GREENS \?ELS22
CALL OPEN-CRAWL-SPACE-DOOR?
CALL PCLEAR
RSTACK
?ELS22: EQUAL? SONG-NUMBER,2 \?ELS26
EQUAL? WD,W?CAMELO \?ELS26
CALL OPEN-CRAWL-SPACE-DOOR?
CALL PCLEAR
RSTACK
?ELS26: EQUAL? SONG-NUMBER,3 \?ELS30
EQUAL? WD,W?STARDU \?ELS30
CALL OPEN-CRAWL-SPACE-DOOR?
CALL PCLEAR
RSTACK
?ELS30: EQUAL? SONG-NUMBER,4 \?ELS34
EQUAL? WD,W?MISTY \?ELS34
CALL OPEN-CRAWL-SPACE-DOOR?
CALL PCLEAR
RSTACK
?ELS34: EQUAL? SONG-NUMBER,5 \?ELS38
EQUAL? WD,W?PEOPLE \?ELS38
CALL OPEN-CRAWL-SPACE-DOOR?
CALL PCLEAR
RSTACK
?ELS38: EQUAL? SONG-NUMBER,6 \?ELS42
EQUAL? WD,W?FEELIN \?ELS42
CALL OPEN-CRAWL-SPACE-DOOR?
CALL PCLEAR
RSTACK
?ELS42: EQUAL? SONG-NUMBER,7 \?ELS46
EQUAL? WD,W?TOMORR \?ELS46
CALL OPEN-CRAWL-SPACE-DOOR?
CALL PCLEAR
RSTACK
?ELS46: EQUAL? SONG-NUMBER,8 \?ELS50
EQUAL? WD,W?TONIGH \?ELS50
CALL OPEN-CRAWL-SPACE-DOOR?
CALL PCLEAR
RSTACK
?ELS50: EQUAL? SONG-NUMBER,9 \?ELS54
EQUAL? WD,W?OKLAHO \?ELS54
CALL OPEN-CRAWL-SPACE-DOOR?
CALL PCLEAR
RSTACK
?ELS54: ZERO? PRSO \?CND59
ZERO? PRSI \?CND59
PRINTI "[on the piano]"
CRLF
?CND59: PRINTI "You play for a few moments. It's very beautiful and melodious."
CRLF
CALL PCLEAR
RSTACK
.FUNCT OPEN-CRAWL-SPACE-DOOR?
ZERO? SONG-PLAYED /?ELS5
PRINTI "You play """
GET SONGS,SONG-NUMBER
PRINT STACK
PRINTR """ again. You tell yourself you're getting better and promise to begin taking lessons again soon."
?ELS5: FSET CRAWL-SPACE-DOOR,OPENBIT
SET 'SONG-PLAYED,TRUE-VALUE
PRINTI "Although a little rusty, you begin to play """
GET SONGS,SONG-NUMBER
PRINT STACK
PRINTR "."" Just as you start to seriously consider taking lessons again, a door in the floor opens."
.FUNCT V-POUR
PRINT YOU-CANT
PRINTR "pour that!"
.FUNCT V-PULL
CALL HACK-HACK,STR?57
RSTACK
.FUNCT V-PUSH
CALL HACK-HACK,STR?58
RSTACK
.FUNCT V-PUSH-DOWN
ZERO? PRSI /?ELS5
PRINT YOU-CANT
PRINTR "push things down that."
?ELS5: CALL HACK-HACK,STR?59
RSTACK
.FUNCT V-PUSH-TO
PRINT YOU-CANT
PRINTR "push things to that."
.FUNCT V-PUSH-UP
CALL HACK-HACK,STR?60
RSTACK
.FUNCT PRE-PUT
EQUAL? PRSO,WHITE-WAX,RED-WAX,BLUE-WAX \?ELS5
EQUAL? PRSA,V?PUT-ON,V?PUT \?ELS5
CALL ULTIMATELY-IN?,PRSO
ZERO? STACK \FALSE
?ELS5: EQUAL? PRSO,YOUR-FEET \?ELS9
EQUAL? PRSI,BRICK-HOLE \?ELS9
PRINTR "If you want to climb up the chimney, say so."
?ELS9: EQUAL? PRSO,WATER,PORTABLE-WATER /FALSE
CALL ULTIMATELY-IN?,PRSI,PRSO
ZERO? STACK /?ELS15
PRINT YOU-CANT
PRINTI "put"
CALL TPRINT,PRSO
GET P-ITBL,P-PREP2
EQUAL? STACK,PR?ON \?ELS18
PRINTI " on"
JUMP ?CND16
?ELS18: PRINTI " in"
?CND16: CALL TPRINT,PRSI
PRINTI " when"
CALL TPRINT,PRSI
PRINTI " is already "
FSET? PRSO,SURFACEBIT \?ELS23
PRINTI "on"
JUMP ?CND21
?ELS23: PRINTI "in"
?CND21: CALL TPRINT,PRSO
PRINTR "!"
?ELS15: IN? PRSO,GLOBAL-OBJECTS /?THN28
FSET? PRSO,TAKEBIT /?ELS27
?THN28: CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
?ELS27: CALL DONT-HAVE?,PRSO
ZERO? STACK \TRUE
EQUAL? PRSI,GROUND \?ELS33
CALL PERFORM,V?DROP,PRSO
RTRUE
?ELS33: ZERO? PRSI /?ELS35
CALL ACCESSIBLE?,PRSI
ZERO? STACK \?ELS35
CALL CANT-SEE-ANY,PRSI
RTRUE
?ELS35: FSET? PRSO,WORNBIT \FALSE
CALL TAKE-OFF-PRSO-FIRST
RSTACK
.FUNCT V-PUT,?TMP1,?TMP2,?TMP3
EQUAL? PRSO,SKIS \?ELS5
EQUAL? PRSI,BS-SAFE,WALL-SAFE,SACK /?THN8
EQUAL? PRSI,COMPARTMENT \?ELS5
?THN8: PRINTR "The skis can't possibly fit in there."
?ELS5: ZERO? PRSI /?ELS11
FSET? PRSI,OPENBIT /?ELS11
FSET? PRSI,DOORBIT /?ELS11
FSET? PRSI,CONTBIT /?ELS11
FSET? PRSI,SURFACEBIT /?ELS11
PRINT YOU-CANT
PRINTR "possibly do that!"
?ELS11: FSET? PRSI,OPENBIT /?ELS15
FSET? PRSI,SURFACEBIT /?ELS15
CALL BUT-THE,PRSI
PRINTI "isn't open!"
CRLF
CALL THIS-IS-IT,PRSI
RSTACK
?ELS15: EQUAL? PRSI,PRSO \?ELS19
CALL WHAT-A-CONCEPT
RSTACK
?ELS19: IN? PRSO,PRSI \?ELS21
CALL BUT-THE,PRSO
PRINTI "is already "
FSET? PRSI,SURFACEBIT \?ELS24
PRINTI "on "
JUMP ?CND22
?ELS24: PRINTI "in "
?CND22: CALL TPRINT,PRSI
PRINTR "!"
?ELS21: FSET? PRSI,BURNBIT \?ELS28
FSET? PRSO,FLAMEBIT \?ELS28
CALL PERFORM,V?BURN,PRSI,PRSO
RTRUE
?ELS28: CALL WEIGHT,PRSI >?TMP3
CALL WEIGHT,PRSO
ADD ?TMP3,STACK >?TMP2
GETP PRSI,P?SIZE
SUB ?TMP2,STACK >?TMP1
GETP PRSI,P?CAPACITY
GRTR? ?TMP1,STACK \?ELS32
PRINTR "There's no room."
?ELS32: IN? PRSO,PLAYER /?ELS34
CALL ITAKE
EQUAL? STACK,FALSE-VALUE,M-FATAL /TRUE
?ELS34: MOVE PRSO,PRSI
FSET PRSO,TOUCHBIT
PRINTR "Done."
.FUNCT V-PUT-BEHIND
PRINTR "That hiding place is too obvious."
.FUNCT V-PUT-ON
EQUAL? PRSI,ME \?ELS5
CALL PERFORM,V?WEAR,PRSO
RTRUE
?ELS5: FSET? PRSI,SURFACEBIT \?ELS7
CALL V-PUT
RSTACK
?ELS7: EQUAL? PRSI,FILM-PROJECTOR \?ELS9
CALL V-PUT
RSTACK
?ELS9: PRINTI "There's no good surface on"
ZERO? PRSI /?ELS14
CALL TPRINT,PRSI
JUMP ?CND12
?ELS14: PRINTI " that"
?CND12: PRINTR "."
.FUNCT V-PUT-UNDER
PRINT YOU-CANT
PRINTR "put anything under that."
.FUNCT V-QUESTION
CALL V-ASK-FOR
RSTACK
.FUNCT V-QUIT,ASK?=1
CALL V-SCORE
ZERO? ASK? /?ELS5
CALL SAY-SURE
PRINTI "leave the story now?"
CALL YES?
ZERO? STACK /?ELS11
CRLF
PRINTI "Cut! That's a take."
CRLF
QUIT
RTRUE
?ELS11: PRINT OKAY
PRINTR "continuing."
?ELS5: QUIT
RTRUE
.FUNCT V-RAPE
PRINTR "What a wholesome idea."
.FUNCT V-RAISE
EQUAL? PRSO,ROOMS \?ELS5
CALL PERFORM,V?STAND,ROOMS
RTRUE
?ELS5: CALL HACK-HACK,STR?61
RSTACK
.FUNCT V-REACH-IN,OBJ
FIRST? PRSO >OBJ /?KLU16
?KLU16: FSET? PRSO,ACTORBIT \?ELS5
CALL NOT-A,STR?33
RSTACK
?ELS5: FSET? PRSO,CONTBIT /?ELS7
CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
?ELS7: FSET? PRSO,OPENBIT /?ELS9
PRINTR "It's not open."
?ELS9: ZERO? OBJ /?THN12
FSET? OBJ,INVISIBLE /?THN12
FSET? OBJ,TAKEBIT /?ELS11
?THN12: PRINTR "It's empty."
?ELS11: PRINTI "You reach into"
CALL TPRINT,PRSO
PRINTR " and feel something."
.FUNCT V-READ
FSET? PRSO,READBIT \?ELS5
GETP PRSO,P?TEXT
PRINT STACK
CRLF
RTRUE
?ELS5: CALL CANT-VERB-A-PRSO,STR?62
RSTACK
.FUNCT CANT-VERB-A-PRSO,STRING
PRINT YOU-CANT
PRINT STRING
CALL APRINT,PRSO
PRINTR "!"
.FUNCT V-READ-TO
ZERO? LIT \?ELS5
CALL TOO-DARK
RSTACK
?ELS5: FSET? PRSO,READBIT /?ELS7
CALL HOW-READ
PRINTI " to"
CALL APRINT,PRSI
PRINTR "?"
?ELS7: CALL NOT-LIKELY,PRSI,STR?63
RSTACK
.FUNCT HOW-READ
PRINTI "How can you read"
CALL APRINT,PRSO
RSTACK
.FUNCT V-REMOVE
FSET? PRSO,WORNBIT \?ELS5
CALL PERFORM,V?TAKE-OFF,PRSO
RTRUE
?ELS5: CALL PERFORM,V?TAKE,PRSO
RTRUE
.FUNCT V-REMOVE-FROM
EQUAL? PRSO,WAX-COAT-2,WAX-COAT-1 \?ELS5
EQUAL? PRSI,GREEN-MATCH,RED-MATCH \?ELS5
CALL PERFORM,V?SCRAPE-OFF,PRSO,PRSI
RTRUE
?ELS5: CALL PERFORM,V?TAKE,PRSO,PRSI
RTRUE
.FUNCT V-REPLACE
EQUAL? PRSO,ME \?ELS3
PRINTI "That's easy"
JUMP ?CND1
?ELS3: CALL BUT-THE,PRSO
PRINTI "doesn't need replacement"
?CND1: PRINTR "."
.FUNCT V-REPLY
CALL NOT-LIKELY,PRSO,STR?64
CALL PCLEAR
RETURN 2
.FUNCT V-RESCUE
EQUAL? PRSO,ME \?ELS5
CALL V-HELP
RSTACK
?ELS5: CALL BUT-THE,PRSO
PRINTR "doesn't need any help."
.FUNCT V-RESET
PRINTR "You don't need to reset that."
.FUNCT V-RESTART
CALL V-SCORE
CALL SAY-SURE
PRINTI "restart the story?"
CALL YES?
ZERO? STACK /FALSE
RESTART
CALL FAILED
RSTACK
.FUNCT V-RESTORE
RESTORE \?ELS5
CALL SAY-OKAY
RSTACK
?ELS5: CALL FAILED
RSTACK
.FUNCT V-RIDE
FSET? PRSO,ACTORBIT \?ELS3
CALL NOT-LIKELY,PRSO,STR?65
JUMP ?CND1
?ELS3: PRINT YOU-CANT
PRINTI "ride that!"
CRLF
?CND1: CRLF
RTRUE
.FUNCT ROB,WHO,WHERE,N,X
FIRST? WHO >X /?KLU12
?KLU12:
?PRG1: ZERO? X /TRUE
NEXT? X >N /?KLU13
?KLU13: FSET? X,TAKEBIT \?CND7
MOVE X,WHERE
?CND7: SET 'X,N
JUMP ?PRG1
.FUNCT V-ROLL-UP
PRINT YOU-CANT
PRINTI "roll up"
CALL APRINT,PRSO
PRINTR "."
.FUNCT V-RUB
CALL HACK-HACK,STR?66
RSTACK
.FUNCT V-SAVE
PRINTI "You can almost hear Buck Palace saying, ""Wimp!"""
CRLF
CRLF
SAVE \?ELS5
CALL SAY-OKAY
RSTACK
?ELS5: CALL FAILED
RSTACK
.FUNCT V-SAY
CALL ANYONE-HERE?
ZERO? STACK /?ELS5
CALL WAY-TO-TALK
CALL PCLEAR
RETURN 2
?ELS5: CALL TALK-TO-SELF
RSTACK
.FUNCT SAY-IF-NOT-LIT
CALL LIT?,HERE >LIT
ZERO? LIT \FALSE
CRLF
CALL NOW-BLACK
CRLF
RTRUE
.FUNCT SAY-OKAY
PRINT OKAY
PRINTR "done."
.FUNCT SAY-SURE
PRINTI "Are you sure you want to "
RTRUE
.FUNCT V-SCORE
PRINTI "Your score is "
PRINTN SCORE
PRINTI " point"
EQUAL? SCORE,1 /?CND1
PRINTC 115
?CND1: PRINTI " out of "
PRINTN SCORE-MAX
PRINTI ", in "
PRINTN MOVES
PRINTI " move"
EQUAL? MOVES,1 /?CND4
PRINTC 115
?CND4: PRINTR "."
.FUNCT V-SCRAPE-OFF
ZERO? PRSI /?ELS5
PRINTI "You can't scrape"
CALL TPRINT,PRSO
PRINTI " off"
CALL TPRINT,PRSI
PRINTR "!"
?ELS5: PRINTI "There's nothing to scrape off"
CALL TRPRINT,PRSO
RSTACK
.FUNCT V-SCRIPT
GET 0,8
BOR STACK,1
PUT 0,8,STACK
CALL TRANSCRIPT,STR?67
RTRUE
.FUNCT V-UNSCRIPT
CALL TRANSCRIPT,STR?68
GET 0,8
BAND STACK,-2
PUT 0,8,STACK
RTRUE
.FUNCT TRANSCRIPT,STR
PRINTI "Here "
PRINT STR
PRINTI "s a transcript of interaction with"
CRLF
CALL V-VERSION
RSTACK
.FUNCT V-SEARCH
EQUAL? PRSO,ME \?ELS5
CALL V-HELP
RSTACK
?ELS5: FSET? PRSO,CONTBIT \?ELS7
FSET? PRSO,OPENBIT /?ELS12
FSET? PRSO,TRANSBIT /?ELS12
CALL YOUD-HAVE-TO,STR?23,PRSO
RSTACK
?ELS12: PRINTI "You find"
CALL DESCRIBE-NOTHING
ZERO? STACK \TRUE
PRINTR "."
?ELS7: FSET? PRSO,SURFACEBIT \?ELS21
PRINTI "You find"
CALL DESCRIBE-NOTHING
ZERO? STACK \TRUE
PRINTR "."
?ELS21: FSET? PRSO,ACTORBIT \?ELS26
CALL PERFORM,V?USE,PRSO
RTRUE
?ELS26: CALL NOTHING-INTERESTING
RSTACK
.FUNCT V-SHAKE,X
FSET? PRSO,ACTORBIT \?ELS5
CALL PERFORM,V?ALARM,PRSO
RTRUE
?ELS5: FSET? PRSO,TAKEBIT /?ELS7
FSET? PRSO,TRYTAKEBIT /?ELS7
CALL HACK-HACK,STR?69
RSTACK
?ELS7: CALL WASTE-OF-TIME
RSTACK
.FUNCT V-SHOOT
ZERO? PRSI \?ELS5
CALL ULTIMATELY-IN?,GUN
ZERO? STACK /?ELS5
CALL PERFORM,V?SHOOT,GUN,PRSO
RTRUE
?ELS5: FSET? PRSO,ACTORBIT \?ELS9
PRINTR "You haven't got a gun."
?ELS9: PRINTR "You can't shoot that."
.FUNCT V-SSHOOT
CALL PERFORM,V?SHOOT,PRSI,PRSO
RTRUE
.FUNCT V-SHOW
PRINTI "It isn't likely that"
CALL TPRINT,PRSI
PRINTR " is interested."
.FUNCT V-SSHOW
CALL PERFORM,V?SHOW,PRSI,PRSO
RTRUE
.FUNCT V-SIT,VEHICLE
EQUAL? PRSO,ROOMS \?ELS5
CALL GLOBAL-IN?,SEAT,HERE
ZERO? STACK /?ELS5
CALL PERFORM,V?BOARD,SEAT
RTRUE
?ELS5: CALL WASTE-OF-TIME
RSTACK
.FUNCT PRE-SKI
FSET? SKIS,WORNBIT /FALSE
PRINTR "You're not wearing skis!"
.FUNCT V-SKI
EQUAL? PRSO,INTDIR \?ELS5
EQUAL? P-DIRECTION,P?UP \?ELS10
PRINTR "There's no tow rope here."
?ELS10: CALL DO-WALK,P-DIRECTION
RSTACK
?ELS5: PRINTR "You can't ski down that!"
.FUNCT V-SLEEP
PRINTR "Maybe you should've had a nap before the lawyer dropped you off."
.FUNCT V-SMELL
EQUAL? PRSO,ROOMS \?ELS3
PRINTI "You smell nothing "
CALL PICK-ONE,YAWNS
PRINT STACK
JUMP ?CND1
?ELS3: PRINTI "It smells just like"
CALL APRINT,PRSO
?CND1: PRINTR "."
.FUNCT V-SPLICE
PRINT YOU-CANT
PRINTR "splice that!"
.FUNCT V-SQUEEZE
CALL WASTE-OF-TIME
RSTACK
.FUNCT V-STAND
ZERO? PRSO /?THN6
EQUAL? PRSO,ROOMS \?ELS5
?THN6: PRINTR "You're already standing."
?ELS5: PRINT YOU-CANT
PRINTR "stand that up."
.FUNCT V-STAND-ON
CALL WASTE-OF-TIME
RSTACK
.FUNCT V-STAND-UNDER
CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
.FUNCT V-SWING
ZERO? PRSI \?ELS5
PRINTR "Whoosh!"
?ELS5: CALL PERFORM,V?KILL,PRSI,PRSO
RTRUE
.FUNCT V-SWIM
ZERO? PRSO /?ELS5
EQUAL? PRSO,INTDIR \?ELS11
FSET? PLAYER,WETBIT \?ELS16
CALL DO-WALK,P-DIRECTION
RSTACK
?ELS16: PRINTR "You'd be swimming in air."
?ELS11: PRINTI "You can't swim in"
CALL ARPRINT,PRSO
RSTACK
?ELS5: CALL GLOBAL-IN?,WATER,HERE
ZERO? STACK /?ELS22
CALL PERFORM,V?SWIM,WATER
RTRUE
?ELS22: PRINT YOU-CANT
PRINTR "swim here!"
.FUNCT V-SWIM-UP
CALL DO-WALK,P?UP
RSTACK
.FUNCT V-SWIM-DOWN
CALL DO-WALK,P?DOWN
RSTACK
.FUNCT PRE-TAKE,CONTAINER
LOC PRSO >CONTAINER
IN? PRSO,WINNER \?ELS5
PRINTI "You're already "
FSET? PRSO,WORNBIT \?ELS8
PRINTI "wear"
JUMP ?CND6
?ELS8: PRINTI "hold"
?CND6: PRINTR "ing it."
?ELS5: ZERO? CONTAINER /?ELS12
FSET? CONTAINER,CONTBIT \?ELS12
FSET? CONTAINER,OPENBIT /?ELS12
PRINT YOU-CANT
PRINTI "reach into"
CALL TPRINT,CONTAINER
PRINTR ". It's closed."
?ELS12: ZERO? PRSI /?ELS16
EQUAL? PRSO,ME \?ELS20
CALL PERFORM,V?DROP,PRSI
RTRUE
?ELS20: EQUAL? PRSO,WATER \?ELS22
EQUAL? PRSI,POND /FALSE
?ELS22: IN? PRSO,PRSI /?ELS26
EQUAL? PRSO,RING \?ELS29
EQUAL? PRSI,DOG \?ELS29
FSET? DOG,CLUTCHING-BIT /FALSE
?ELS29: EQUAL? PRSO,LADDER \?ELS33
EQUAL? PRSI,HATCH-HOLE \?ELS33
FSET? LADDER,HUNG-BIT /FALSE
?ELS33: EQUAL? PRSO,LENS-CAP \?CND27
EQUAL? PRSI,FILM-PROJECTOR-LENS \?CND27
FSET? LENS-CAP,NDESCBIT /FALSE
?CND27: FSET? PRSI,ACTORBIT /?THN43
EQUAL? PRSI,DOG \?ELS42
?THN43: CALL BUT-THE,PRSI
PRINTI "doesn't have"
CALL APRINT,PRSO
JUMP ?CND40
?ELS42: CALL BUT-THE,PRSO
PRINTI "isn't in"
CALL TPRINT,PRSI
?CND40: PRINTR "."
?ELS26: CALL ULTIMATELY-IN?,PRSO,BUCKET
ZERO? STACK /FALSE
ZERO? BUCKET-PEG /FALSE
PRINT PEG-IN-WAY
RTRUE
?ELS16: CALL ULTIMATELY-IN?,PRSO,BUCKET
ZERO? STACK /?ELS54
ZERO? BUCKET-PEG /?ELS54
PRINT PEG-IN-WAY
RTRUE
?ELS54: LOC WINNER
EQUAL? PRSO,STACK \FALSE
PRINTR "You're in it!"
.FUNCT V-TAKE
CALL ITAKE
ZERO? STACK /FALSE
PRINTR "Taken."
.FUNCT ITAKE,VB=1
CALL THIS-IS-IT,PRSO
FSET? PRSO,TAKEBIT /?ELS5
ZERO? VB /FALSE
CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RFALSE
?ELS5: CALL TOO-MUCH-JUNK?,VB
ZERO? STACK \FALSE
CALL BOKS-BIG-ONE,PRSO
ZERO? STACK /?ELS13
EQUAL? TREASURES-FOUND,10 /FALSE
?ELS13: MOVE PRSO,WINNER
FSET PRSO,TOUCHBIT
FCLEAR PRSO,NDESCBIT
RTRUE
.FUNCT BOKS-BIG-ONE,T-OBJ
GETP T-OBJ,P?VALUE
ZERO? STACK /FALSE
GETP T-OBJ,P?VALUE
ADD SCORE,STACK >SCORE
PUTP T-OBJ,P?VALUE,0
INC 'TREASURES-FOUND
EQUAL? TREASURES-FOUND,10 \TRUE
LOC T-OBJ
MOVE PEG-0,STACK
LOC T-OBJ
MOVE NOTE,STACK
EQUAL? T-OBJ,FINCH /?CND9
MOVE T-OBJ,WINNER
?CND9: FSET T-OBJ,TOUCHBIT
FCLEAR T-OBJ,NDESCBIT
EQUAL? T-OBJ,RING \?ELS14
PRINTI "As you take"
CALL TPRINT,PRSO
PRINTI ", a small peg and a note drop out from under the model."
CRLF
MOVE PEG-0,HERE
MOVE NOTE,HERE
RTRUE
?ELS14: PRINTI "As you "
PRINTB P-PRSA-WORD
CALL TPRINT,PRSO
PRINTI " you notice a wooden peg and a note "
EQUAL? T-OBJ,CORPSE-LINE,GRATER,PARKING-METER \?ELS19
PRINTI "behind"
JUMP ?CND17
?ELS19: EQUAL? T-OBJ,FINCH \?ELS21
PRINTI "next to"
CALL ARPRINT,FINCH
RTRUE
?ELS21: PRINTI "beneath"
?CND17: PRINTR " it."
.FUNCT V-TAKE-OFF,WHERE
EQUAL? P-PRSA-WORD,W?GET \?ELS5
CALL PERFORM,V?DISEMBARK,PRSO
RTRUE
?ELS5: IN? PRSO,PLAYER \?ELS7
FSET? PRSO,WORNBIT \?ELS7
FCLEAR PRSO,WORNBIT
PRINT OKAY
PRINTI "you're no longer wearing"
CALL TRPRINT,PRSO
RSTACK
?ELS7: PRINTR "You aren't wearing that!"
.FUNCT TAKE-OFF-PRSO-FIRST
PRINTI "You'll have to remove"
CALL TPRINT,PRSO
PRINTR " first."
.FUNCT V-TASTE
CALL PERFORM,V?EAT,PRSO
RTRUE
.FUNCT V-TELL
EQUAL? PRSO,ME,ROOMS \?ELS5
CALL TALK-TO-SELF
RSTACK
?ELS5: FSET? PRSO,ACTORBIT \?ELS7
ZERO? P-CONT /?ELS12
SET 'WINNER,PRSO
LOC WINNER >HERE
RETURN HERE
?ELS12: CALL NO-ANSWER
RSTACK
?ELS7: PRINT YOU-CANT
PRINTI "talk to"
CALL APRINT,PRSO
PRINTC 33
CRLF
CALL PCLEAR
RETURN 2
.FUNCT TELL-TIME,MINUTES,HOURS,PM=0
ADD MOVES,1260 >MINUTES
GRTR? MINUTES,1439 \?CND1
SUB MINUTES,1440 >MINUTES
?CND1: DIV MINUTES,60 >HOURS
GRTR? HOURS,11 \?CND4
SET 'PM,TRUE-VALUE
SUB HOURS,12 >HOURS
?CND4: ZERO? HOURS \?CND7
SET 'HOURS,12
?CND7: PRINTN HOURS
PRINTC 58
MOD MINUTES,60 >MINUTES
LESS? MINUTES,10 \?CND10
PRINTC 48
?CND10: PRINTN MINUTES
ZERO? PM /?ELS17
PRINTI " pm"
RTRUE
?ELS17: PRINTI " am"
RTRUE
.FUNCT V-TIME
PRINTI "It's "
CALL TELL-TIME
PRINTR "."
.FUNCT V-THROW
CALL IDROP
ZERO? STACK /FALSE
CALL SPECIAL-DROP
ZERO? STACK \TRUE
ZERO? PRSI /?ELS12
PRINTR "You missed."
?ELS12: PRINTR "Thrown."
.FUNCT V-THROW-OFF
CALL WASTE-OF-TIME
RSTACK
.FUNCT V-TIE
PRINT YOU-CANT
PRINTI "tie"
CALL TPRINT,PRSO
PRINTR " to that."
.FUNCT V-TIE-UP
PRINT YOU-CANT
PRINTR "tie anything with that!"
.FUNCT TOO-DARK
PRINTR "It's too dark to see!"
.FUNCT TOO-MUCH-JUNK?,VB=1,?TMP1
LOC PRSO
IN? STACK,WINNER /FALSE
CALL WEIGHT,PRSO >?TMP1
CALL WEIGHT,WINNER
ADD ?TMP1,STACK
GRTR? STACK,LOAD-ALLOWED \FALSE
ZERO? VB /TRUE
FIRST? PLAYER \?ELS14
PRINTI "Your load is"
JUMP ?CND12
?ELS14: PRINTI "It's a little"
?CND12: PRINTR " too heavy."
.FUNCT V-TURN
FSET? PRSO,TAKEBIT /?ELS5
FSET? PRSO,TRYTAKEBIT /?ELS5
CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
?ELS5: CALL HACK-HACK,STR?72
RSTACK
.FUNCT V-TURN-LEFT
CALL V-TURN
RSTACK
.FUNCT V-TURN-RIGHT
CALL V-TURN
RSTACK
.FUNCT V-USE
FSET? PRSO,ACTORBIT \?ELS5
CALL BUT-THE,PRSO
PRINTR "might resent that."
?ELS5: CALL HOW?
RSTACK
.FUNCT V-VERBOSE
SET 'VERBOSITY,2
PRINTI "[Maximum verbosity.]"
CRLF
CRLF
CALL V-LOOK
RSTACK
.FUNCT V-BRIEF
SET 'VERBOSITY,1
PRINTR "[Brief descriptions.]"
.FUNCT V-SUPER-BRIEF
SET 'VERBOSITY,0
PRINTR "[Superbrief descriptions.]"
.FUNCT V-VERSION,CNT=17,V
GET 0,1
BAND STACK,2047 >V
CRLF
PRINTI "HOLLYWOOD HIJINX
Infocom interactive fiction -- a zany treasure hunt
Copyright (C) 1986 Infocom, Inc. All rights reserved.
"
GETB 0,1
BAND STACK,8
ZERO? STACK /?CND1
PRINTI "Licensed to Tandy Corporation. Version 00.00."
PRINTN V
CRLF
?CND1: PRINTI "HOLLYWOOD HIJINX is a trademark of Infocom, Inc.
Release "
PRINTN V
PRINTI " / Serial Number "
?PRG4: IGRTR? 'CNT,23 /?REP5
GETB 0,CNT
PRINTC STACK
JUMP ?PRG4
?REP5: CRLF
RTRUE
.FUNCT V-$VERIFY
ZERO? PRSO /?ELS5
EQUAL? PRSO,INTNUM \?ELS11
EQUAL? P-NUMBER,57 \?ELS11
PRINTN SERIAL
CRLF
RTRUE
?ELS11: CALL DONT-UNDERSTAND
RSTACK
?ELS5: PRINTI "Verifying disk."
CRLF
VERIFY \?ELS22
PRINTR "Correct."
?ELS22: CALL FAILED
RSTACK
.FUNCT V-$COMMAND
DIRIN 1
RTRUE
.FUNCT V-$RANDOM
EQUAL? PRSO,INTNUM /?ELS5
PRINTR "Illegal."
?ELS5: SUB 0,P-NUMBER
RANDOM STACK
RTRUE
.FUNCT V-$RECORD
DIROUT D-RECORD-ON
RTRUE
.FUNCT V-$UNRECORD
DIROUT D-RECORD-OFF
RTRUE
.FUNCT V-UNLOCK
FSET? PRSO,DOORBIT /?THN6
FSET? PRSO,CONTBIT \?ELS5
?THN6: FSET? PRSO,OPENBIT \?ELS12
PRINTI "The "
CALL DPRINT,PRSO
PRINTR " is already open. You should have eaten more carrots as Aunt Hildegarde always told you."
?ELS12: FSET? PRSO,LOCKEDBIT /?ELS14
PRINTI "You attempt to unlock"
CALL TPRINT,PRSO
PRINTR " and find it isn't locked."
?ELS14: ZERO? PRSI /?ELS16
PRINTI "When was the last time you unlocked something with"
CALL APRINT,PRSI
PRINTR "?"
?ELS16: FSET? PRSO,DOORBIT \?ELS19
FSET? HERE,LOCKEDBIT /?ELS24
PRINT YOU-CANT
PRINTR "unlock it from this side."
?ELS24: PRINTI "With a click you unlock"
CALL TRPRINT,PRSO
FCLEAR PRSO,LOCKEDBIT
RTRUE
?ELS19: FSET? PRSO,CONTBIT \?ELS28
FSET? PRSO,LOCKEDBIT \?ELS28
PRINTR "Perhaps if you had the combination..."
?ELS28: CALL THING-WONT-LOCK,PRSI,PRSO,TRUE-VALUE
RSTACK
?ELS5: CALL CANT-LOCK,TRUE-VALUE
RSTACK
.FUNCT V-UNROLL
PRINT YOU-CANT
PRINTI "unroll"
CALL ARPRINT,PRSO
RSTACK
.FUNCT V-UNTIE
PRINTR "You don't need to untie it. It's not tied to anything."
.FUNCT DO-WALK,DIR
SET 'P-WALK-DIR,DIR
CALL PERFORM,V?WALK,DIR
RTRUE
.FUNCT V-WALK,PT,PTS,STR,OBJ,RM
FSET? SKIS,WORNBIT \?ELS5
EQUAL? PRSO,P?DOWN /?ELS5
PRINTI "These are downhill skis, not cross-country skis!"
CRLF
RETURN 2
?ELS5: ZERO? P-WALK-DIR \?ELS11
ZERO? PRSO /?ELS14
CALL PRESUMABLY-YOU-WANT-TO,STR?73,PRSO
CALL PERFORM,V?WALK-TO,PRSO
RTRUE
?ELS14: CALL V-WALK-AROUND
RTRUE
?ELS11: LOC PLAYER
EQUAL? STACK,HERE /?ELS19
PRINTI "You're not going anywhere while you're on"
LOC PLAYER
CALL TRPRINT,STACK
RETURN 2
?ELS19: GETPT HERE,PRSO >PT
ZERO? PT /?ELS23
PTSIZE PT >PTS
EQUAL? PTS,UEXIT \?ELS28
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?ELS28: EQUAL? PTS,NEXIT \?ELS30
GET PT,NEXITSTR
PRINT STACK
CRLF
RETURN 2
?ELS30: EQUAL? PTS,FEXIT \?ELS34
GET PT,FEXITFCN
CALL STACK >RM
ZERO? RM /?ELS39
CALL GOTO,RM
RSTACK
?ELS39: RETURN 2
?ELS34: EQUAL? PTS,CEXIT \?ELS45
GETB PT,CEXITFLAG
VALUE STACK
ZERO? STACK /?ELS50
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?ELS50: GET PT,CEXITSTR >STR
ZERO? STR /?ELS52
PRINT STR
CRLF
RETURN 2
?ELS52: CALL CANT-GO
RETURN 2
?ELS45: EQUAL? PTS,DEXIT \FALSE
GETB PT,DEXITOBJ >OBJ
FSET? OBJ,OPENBIT \?ELS65
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?ELS65: GET PT,DEXITSTR >STR
ZERO? STR /?ELS67
PRINT STR
CRLF
CALL THIS-IS-IT,OBJ
RETURN 2
?ELS67: CALL ITS-CLOSED,OBJ
RETURN 2
?ELS23: EQUAL? P-WALK-DIR,P?IN,P?OUT \?ELS80
PRINTR "Please use compass directions."
?ELS80: CALL CANT-GO
RETURN 2
.FUNCT V-WALK-AROUND
PRINTR "[Do you have any particular direction in mind?]"
.FUNCT V-WALK-TO
EQUAL? PRSO,INTDIR \?ELS5
CALL DO-WALK,P-DIRECTION
RSTACK
?ELS5: CALL V-WALK-AROUND
RSTACK
.FUNCT V-WAIT,NUM=3
PRINTI "Time passes."
CRLF
?PRG1: DLESS? 'NUM,0 /?REP2
CALL CLOCKER
ZERO? STACK /?PRG1
?REP2: SET 'CLOCK-WAIT,TRUE-VALUE
RETURN CLOCK-WAIT
.FUNCT V-$WAIT,NUM
EQUAL? PRSO,INTNUM \?ELS5
SET 'NUM,P-NUMBER
PRINTI "Time passes."
CRLF
?PRG6: DLESS? 'NUM,0 /?REP7
CALL CLOCKER
ZERO? STACK /?PRG6
?REP7: SET 'CLOCK-WAIT,TRUE-VALUE
RETURN CLOCK-WAIT
?ELS5: PRINTR "Youse should use a numba."
.FUNCT V-WAIT-FOR
LOC PRSO
EQUAL? STACK,HERE,WINNER \?ELS3
CALL BUT-THE,PRSO
PRINTI "is already here!"
JUMP ?CND1
?ELS3: PRINTI "You may be waiting quite a while."
?CND1: CRLF
RTRUE
.FUNCT PRE-WATER
ZERO? PRSI /?ELS5
EQUAL? PRSI,PORTABLE-WATER /FALSE
EQUAL? PRSI,BUCKET \?ELS13
IN? PORTABLE-WATER,BUCKET \?ELS13
SET 'PRSI,PORTABLE-WATER
RFALSE
?ELS13: PRINTI "As the word implies, you can only water"
CALL APRINT,PRSO
PRINTR " with water."
?ELS5: CALL ULTIMATELY-IN?,PORTABLE-WATER
ZERO? STACK /?ELS24
SET 'PRSI,PORTABLE-WATER
RFALSE
?ELS24: PRINTI "You don't have any water to water"
CALL TPRINT,PRSO
PRINTR " with!"
.FUNCT V-WATER
PRINTI "A nice thought, but"
CALL TPRINT,PRSO
PRINTR " doesn't need watering."
.FUNCT V-WAVE-AT
CALL V-ASK-FOR
RSTACK
.FUNCT V-WEAR
FSET? PRSO,WORNBIT \?ELS5
PRINTI "You're already wearing"
CALL TRPRINT,PRSO
RSTACK
?ELS5: FSET? PRSO,WEARBIT /?ELS7
PRINT YOU-CANT
PRINTI "wear"
CALL ARPRINT,PRSO
RSTACK
?ELS7: CALL DONT-HAVE?,PRSO
ZERO? STACK \TRUE
FSET PRSO,WORNBIT
EQUAL? PRSO,TOUPEE \?ELS16
PRINTI "You put on "
CALL DPRINT,TOUPEE
PRINTR " in an attempt to cover that Burbank bald spot."
?ELS16: EQUAL? PRSO,MASK \?ELS18
PRINTI "You slip on"
CALL TPRINT,MASK
PRINTR " and feel an unexplainable urge to go to summer camp."
?ELS18: PRINT OKAY
PRINTI "you're now wearing"
CALL TRPRINT,PRSO
RSTACK
.FUNCT WEIGHT,THING,OBJ,WT=0
FIRST? THING >OBJ /?KLU16
?KLU16:
?PRG1: ZERO? OBJ /?REP2
EQUAL? THING,PLAYER \?ELS9
FSET? OBJ,WORNBIT \?ELS9
INC 'WT
JUMP ?CND7
?ELS9: CALL WEIGHT,OBJ
ADD WT,STACK >WT
?CND7: NEXT? OBJ >OBJ /?PRG1
JUMP ?PRG1
?REP2: GETP THING,P?SIZE
ADD WT,STACK >WT
RETURN WT
.FUNCT V-YELL
CALL PCLEAR
CALL ANYONE-HERE?
ZERO? STACK /?ELS5
CALL WAY-TO-TALK
RETURN 2
?ELS5: PRINTR "You begin to get a sore throat."
.FUNCT YES?,WORD
CRLF
?PRG1: CRLF
PRINTI "(Please type YES or NO.) >"
PUTB YES-LEXV,0,4
READ YES-INBUF,YES-LEXV
GET YES-LEXV,P-LEXSTART >WORD
GETB YES-LEXV,P-LEXWORDS
ZERO? STACK /?PRG1
ZERO? WORD /?PRG1
EQUAL? WORD,W?YES,W?Y,W?YUP /TRUE
EQUAL? WORD,W?OKAY,W?OK,W?AYE /TRUE
EQUAL? WORD,W?SURE,W?AFFIRM,W?POSITI /TRUE
EQUAL? WORD,W?NO,W?N,W?NOPE /FALSE
EQUAL? WORD,W?NAY,W?NAW,W?NEGATIVE \?PRG1
RFALSE
.FUNCT NOW-LIT?
ZERO? LIT \FALSE
CALL LIT?,HERE
ZERO? STACK /FALSE
SET 'LIT,TRUE-VALUE
CRLF
CALL V-LOOK
RSTACK
.FUNCT WASTE-OF-TIME
CALL PICK-ONE,USELESSNESS
PRINT STACK
PRINTR "."
.ENDI