zorkzero/jester.zap
historicalsource 8b3579aab4 Release 296
2019-04-16 09:52:54 -04:00

1468 lines
40 KiB
Plaintext

.SEGMENT "0"
.FUNCT JESTER-F,ARG
EQUAL? ARG,M-OBJDESC? /TRUE
EQUAL? ARG,M-OBJDESC \?CCL5
PRINTI " The jester "
IN? COOKPOT,HERE \?CCL8
PRINTI "is here, "
PRINT COOK-DESC
RTRUE
?CCL8: EQUAL? HERE,TAX-OFFICE \?CCL10
IN? ZORKMID-COIN,LOCAL-GLOBALS \?CCL10
PRINT BOOKKEEPER-DESC
RTRUE
?CCL10: ZERO? J-ON-RAFT /?CCL14
PRINTI "lies on an inner tube. His eyes twinkle at you behind his sunglasses."
RTRUE
?CCL14: PRINTI "is nearby, watching you with great amusement."
RTRUE
?CCL5: EQUAL? ARG,M-WINNER \?CCL16
EQUAL? PRSA,V?SAY \?CCL19
EQUAL? HERE,ENTRANCE-HALL \?CCL19
FSET? PORTCULLIS,OPENBIT \FALSE
?CCL19: EQUAL? PRSA,V?SAY \?CCL24
IN? EAST-KEY,JESTER /FALSE
?CCL24: EQUAL? PRSA,V?SAY \?CCL28
EQUAL? HERE,OUBLIETTE /FALSE
?CCL28: PRINTI """Don't waste your breath, for I'd go to any length to avoid a conversation with such depth as yours. Also, silence is the height of fashion nowadays."""
CRLF
CALL1 STOP
RSTACK
?CCL16: EQUAL? PRSA,V?EXAMINE \?CCL32
ZERO? J-ON-RAFT /?CCL35
PRINTR "The jester is wearing dark glasses and floating around on an inner tube."
?CCL35: IN? COOKPOT,HERE \?CCL37
PRINTI "The jester is "
PRINT COOK-DESC
CRLF
RTRUE
?CCL37: EQUAL? HERE,TAX-OFFICE \?CCL39
IN? ZORKMID-COIN,LOCAL-GLOBALS \?CCL39
PRINTI "The jester is "
PRINT BOOKKEEPER-DESC
CRLF
RTRUE
?CCL39: FSET? GOGGLES,WORNBIT \?CCL43
PRINT YOU-SEE
PRINTR " right through the jester's clothes as though they were transparent! Embarassed, you turn away. (But not before noticing that the jester has pink butterflies stitched onto his underwear.)"
?CCL43: PRINTR "The jester is dressed in a green skin-tight suit, and is wearing a hat with many pointy ends. From each end dangles a gaudy little bell. The jester's eyes twinkle with mischievous energy."
?CCL32: EQUAL? PRSA,V?SHOW,V?GIVE \?CCL45
EQUAL? HERE,MARSH,NICE-LUNCH-SPOT \?CCL45
EQUAL? PRSO,FOX,ROOSTER,WORM \?CCL45
PRINTR """Mon Dieu! I must have all zee ingredients together!"""
?CCL45: EQUAL? PRSA,V?GIVE \?CCL50
EQUAL? PRSO,PIGEON \?CCL50
CALL2 META-LOC,PERCH
EQUAL? STACK,HERE \?CCL55
PRINTR "The jester takes the pigeon, looks it over, shrugs, and hands it back."
?CCL55: PRINTI "The jester recedes to a point and vanishes, a look of comical surprise splattered across his wide face."
IN? SHELL-TABLE,HERE \?CND56
PRINTI " The table and shells disappear as well."
?CND56: CRLF
ICALL1 REMOVE-J
SET 'J-DISPOSED,MOVES
LOC PERCH
ZERO? STACK /?CCL60
LOC PERCH
MOVE PIGEON,STACK
RETURN 2
?CCL60: REMOVE PIGEON
RETURN 2
?CCL50: EQUAL? PRSA,V?SHOW \?CCL64
EQUAL? PRSO,NUT \?CCL67
ZERO? NUT-OPENED /?CCL70
SET 'NUT-SHOWN,TRUE-VALUE
PRINTR """True, no one has seen this 'ere me -- but thousands may see it in years to be!"""
?CCL70: PRINTR """Uncertain and skeptical I must be; countless people may have gazed upon this before me."""
?CCL67: EQUAL? PRSO,UNOPENED-NUT,NUT-SHELL \FALSE
PRINTI "The jester cocks one eyebrow"
EQUAL? HERE,WEST-WING \?CND73
PRINTI " and a smile dances at the corners of his mouth"
?CND73: PRINT PERIOD-CR
RTRUE
?CCL64: EQUAL? PRSA,V?KILL,V?EAT \?CCL76
ZERO? ALLIGATOR /?CCL76
PRINTR "The jester jumps nimbly away from your snapping jaws."
?CCL76: EQUAL? PRSA,V?RESEARCH \FALSE
CALL PICTURED-ENTRY,J-ILL,FALSE-VALUE
RSTACK
.SEGMENT "CASTLE"
.FUNCT J-ENTRY
PRINTI """Jesters employ physical, verbal, and magical trickery for the entertainment of king and court. The most recent Royal Jester, the favorite of Lord Wurb Flathead, is named Barbazzo "
GET MID-NAMES,MID-NAME-NUM
PRINT STACK
PRINTR " Fernap."""
.ENDSEG
.SEGMENT "0"
.FUNCT MID-NAME-F
CALL2 VISIBLE?,JESTER
ZERO? STACK /?CCL3
GET MID-NAME-WORDS,MID-NAME-NUM
CALL NOUN-USED?,MID-NAME,STACK
ZERO? STACK /?CCL3
CALL2 PERFORM-PRSA,JESTER
RSTACK
?CCL3: CALL2 HANDLE,MID-NAME
ZERO? STACK \?CCL7
EQUAL? PRSA,V?FOLLOW \FALSE
?CCL7: PRINT BY-THAT-NAME
CALL1 STOP
RSTACK
.FUNCT OTHER-J-NAMES-F
CALL2 VISIBLE?,JESTER
ZERO? STACK /?CCL3
CALL2 PERFORM-PRSA,JESTER
RSTACK
?CCL3: CALL2 HANDLE,OTHER-J-NAMES
ZERO? STACK \?CCL5
EQUAL? PRSA,V?FOLLOW \FALSE
?CCL5: PRINT BY-THAT-NAME
CALL1 STOP
RSTACK
.FUNCT J-GARMENT-F
EQUAL? PRSO,J-POCKET,J-SHOE,J-HAT \?CCL3
CALL2 TOUCHING?,PRSO
ZERO? STACK /?CCL3
PRINTR "The jester dances spryly out of reach."
?CCL3: EQUAL? PRSA,V?LOOK-UNDER,V?LOOK-INSIDE,V?EXAMINE \?CCL7
IN? ZORKMID-BILL,PRSO \?CCL7
FSET? GOGGLES,WORNBIT \?CCL7
PRINT YOU-SEE
PRINTI " right through"
ICALL1 TPRINT-PRSO
PRINTR " as if it were made of glass -- and sure enough, there's the zorkmid bill!"
?CCL7: EQUAL? PRSA,V?EXAMINE \?CCL12
EQUAL? PRSO,J-HAT \?CCL12
PRINTR "It has many floppy tips, with bells dangling from each one."
?CCL12: EQUAL? PRSA,V?POINT \FALSE
EQUAL? HERE,GAMING-ROOM \FALSE
FSET? ZORKMID-BILL,TOUCHBIT /FALSE
IN? ZORKMID-BILL,PRSO \?CCL22
MOVE ZORKMID-BILL,PROTAGONIST
FSET ZORKMID-BILL,TOUCHBIT
PRINTI "The jester looks sheepish. He removes the bill and hands it to you. ""You're pretty slick; you've discovered my trick."""
ICALL1 J-EXITS
ICALL2 INC-SCORE,12
RTRUE
?CCL22: PRINTI "The jester howls with glee, and "
EQUAL? PRSO,J-POCKET \?CCL25
PRINTI "turns his pocket inside out"
JUMP ?CND23
?CCL25: EQUAL? PRSO,J-HAT \?CCL27
PRINTI "removes his hat"
JUMP ?CND23
?CCL27: PRINTI "removes his shoe"
?CND23: PRINTI ". Nothing. "
CALL1 ANOTHER-SHELL-GAME
RSTACK
.FUNCT I-JESTER,CALLED-BY-DOORBELL,PLUR,APPEAR-PROB
ZERO? TIME-STOPPED /?CND1
ICALL2 DEQUEUE,I-JESTER
RFALSE
?CND1: SET 'APPEAR-PROB,J-APPEAR-PROB
EQUAL? HERE,FR-OFFICES,OFFICES-WEST,OFFICES-EAST /?CCL4
EQUAL? HERE,OFFICES-NORTH,OFFICES-SOUTH \?CND3
?CCL4: ADD FLOOR-NUMBER,40
DIV STACK,40
DIV APPEAR-PROB,STACK >APPEAR-PROB
?CND3: ICALL QUEUE,I-JESTER,-1
IN? PROTAGONIST,DB /?CTR8
EQUAL? HERE,INQUISITION,PLAIN /?CTR8
EQUAL? HERE,ENTRANCE-HALL \?CCL9
FSET? PORTCULLIS,OPENBIT /?CCL9
ZERO? CALLED-BY-DOORBELL \?CCL9
?CTR8: RANDOM 5
ICALL QUEUE,I-JESTER,STACK
RFALSE
?CCL9: ZERO? LIT \?CCL17
RANDOM 5
ICALL QUEUE,I-JESTER,STACK
ICALL1 RETURN-FROM-MAP
PRINTI " You hear jingling bells and a familiar laugh in the darkness."
FSET? SECRET-PASSAGE,TOUCHBIT /?CND18
PRINTR " ""Trouble finding a light? I'm just the man to set you right! Tighten your belt and pull up your socks and re-read the book from your ZORK ZERO box! Or,"" the voice asks suspiciously, ""maybe you're one of those software pirates? In that case, I hope you fall into a bottomless pit."""
?CND18: CRLF
RTRUE
?CCL17: ZERO? DO-J \?CTR20
RANDOM 100
LESS? APPEAR-PROB,STACK /?CCL21
?CTR20: SET 'DO-J,FALSE-VALUE
ICALL2 DEQUEUE,I-JESTER
ICALL1 RETURN-FROM-MAP
PRINTI " "
IN? JESTER,HERE /?CND24
ZERO? TURNED-INTO /?CCL28
ICALL1 REMOVE-J
PRINTI "You suddenly notice another "
ICALL2 DPRINT,TURNED-INTO
PRINTI ", wearing a jester's costume. Laughing, it says, ""I'd heard that there was a dauntless adventurer around, but there's no one here but us "
GETP TURNED-INTO,P?PLURAL >PLUR
ZERO? PLUR /?CCL31
PRINT PLUR
JUMP ?CND29
?CCL21: INC 'J-APPEAR-PROB
RFALSE
?CCL31: ICALL2 DPRINT,TURNED-INTO
PRINTC 115
?CND29: PRINTI "!"" Still laughing, the jester/"
ICALL2 DPRINT,TURNED-INTO
PRINTR " vanishes."
?CCL28: CALL2 VISIBLE?,OTTO
ZERO? STACK /?CCL33
PRINTI "You spot a fly wearing a tiny floppy green hat with bells at the tips. Otto spots the fly as well, and begins to salivate. In a high, thin imitation of the jester's voice, the fly cries ""Help me!"" -- but Otto's tongue moves before you can, and in a split-second the jester/fly is gonzo."
RTRUE
?CCL33: IN? PROTAGONIST,YACHT \?CCL35
SET 'J-ON-RAFT,TRUE-VALUE
PRINTI "You notice the jester, floating next to the yacht in an inner tube, wearing sunglasses and lots of tanning lotion."
JUMP ?CND24
?CCL35: FSET? JESTER,TOUCHBIT \?CCL37
PRINTI "The jester appears."
EQUAL? HERE,ICKY-CAVE \?CCL40
IN? SICKLY-WITCH,HERE \?CCL40
PRINT WITCH-REMOVES-J
RTRUE
?CCL40: FSET? HERE,BEYONDBIT \?CND24
PRINTI " ""Hi! Small world, isn't it!"""
JUMP ?CND24
?CCL37: FSET JESTER,TOUCHBIT
PRINTI "You suddenly notice a wiry fellow with an outrageous costume and a feral grin. ""I'm the jester of the castle, I may pester, I may hassle; and I often speak in rhyme, for it helps to pass the time!"""
?CND24: MOVE JESTER,HERE
ICALL2 THIS-IS-IT,JESTER
EQUAL? PRSA,V?TAKE \?CCL46
EQUAL? PRSO,EAST-KEY \?CCL46
FSET? EAST-KEY,TRYTAKEBIT \?CCL46
MOVE EAST-KEY,JESTER
PRINTI " He snatches the key before you can take it."
JUMP ?CND44
?CCL46: EQUAL? HERE,PITS \?CND44
FSET? LANTERN,TRYTAKEBIT \?CND44
PRINTR " He has an enormous slice of watermelon which he devours with juicy abandon, rind and all, and then spits out a stream of pits, which land and turn into even more bottomless pits. ""Don't you hate pits? I know I do!"""
?CND44: CRLF
PRINTI " "
EQUAL? HERE,ENTRANCE-HALL \?CCL55
FSET? PORTCULLIS,OPENBIT \?CCL58
PRINTI "The jester looks at the open portcullis. ""Oh, right! My memory is no longer so great; I've already opened this gate!"""
ICALL1 J-EXITS
JUMP ?CND53
?CCL58: ICALL2 SETUP-ORPHAN,STR?44
PRINTI """If you're quick as a fiddle, and answer this riddle, you'll get what you're hopin' -- the gate will be open!"" The jester clears his throat. """
GETP HERE,P?RIDDLE
PRINT STACK
CRLF
JUMP ?CND53
?CCL55: IN? EAST-KEY,JESTER \?CCL60
ICALL2 SETUP-ORPHAN,STR?44
PRINTI """Before you get this key, you must answer this riddle for me!"" The jester poses theatrically. """
GETP SOLAR,P?RIDDLE
PRINT STACK
CRLF
JUMP ?CND53
?CCL60: EQUAL? HERE,OUBLIETTE \?CCL62
ZERO? OUBLIETTE-SCORE \?CCL65
PRINTI """Trapped again? Don't frown or fret! I'll help you leave the Oubliette! But saving you is such a pain; please don't get stuck down here again!"""
CRLF
CRLF
ICALL2 GOTO,DUNGEON
JUMP ?CND53
?CCL65: ICALL2 SETUP-ORPHAN,STR?44
PRINTI """Don't scream or shout, I'll get you out! But first my thirst for a riddle must be twiddled!"" The jester coughs lightly and begins. """
GETP HERE,P?RIDDLE
PRINT STACK
CRLF
JUMP ?CND53
?CCL62: EQUAL? HERE,WEST-WING \?CCL67
ZERO? NUT-EATEN \?CCL67
PRINT ERE-YOU-PASS
JUMP ?CND53
?CCL67: EQUAL? HERE,GAMING-ROOM \?CCL71
FSET? ZORKMID-BILL,TOUCHBIT /?CCL71
MOVE SHELL-TABLE,HERE
PRINTI """Blackjack... Fanucci... all too tame; let's play the old shell game!"" From thin air, the jester produces a small table, three shells, and a zorkmid bill of high denomination. He arranges the shells in a row on the table and places the bill under the center shell. With hands that move in a dizzying blur, he shuffles the order of the shells. ""Demonstrate your visual skill -- point to the location of the zorkmid bill!"" He motions toward the shells, left, center, and right."
ICALL1 SEE-BILL?
CRLF
JUMP ?CND53
?CCL71: EQUAL? HERE,FR-PENTHOUSE \?CCL75
PRINTI """Your persistence will bring you wide renown; you've reached the four hundredth floor! The hard part now is getting down -- I suggest that you simply RESTORE!"""
CRLF
ICALL1 J-EXITS
JUMP ?CND53
?CCL75: RANDOM 100
LESS? SLATE-PROB,STACK /?CCL77
IN? SLATE,LOCAL-GLOBALS \?CCL77
MOVE SLATE,PROTAGONIST
PRINTI """While cleaning my attic, I found some old haddock, a hammer and nails, some barrels and pails, an old garden gate, and this silly old slate!"" He hands you the slate."
ICALL2 J-EXITS,TRUE-VALUE
JUMP ?CND53
?CCL77: RANDOM 100
LESS? SCROLL-PROB,STACK /?CCL81
IN? SCROLL,LOCAL-GLOBALS \?CCL81
LOC PROTAGONIST
FSET? STACK,DROPBIT \?CCL86
LOC PROTAGONIST
MOVE SCROLL,STACK
JUMP ?CND84
?CCL86: MOVE SCROLL,HERE
?CND84: PRINTI """I thought of no rhyme; my puzzle's on paper this time."" He drops a scroll by your feet."
ICALL2 J-EXITS,TRUE-VALUE
JUMP ?CND53
?CCL81: RANDOM 100
LESS? 25,STACK /?CCL88
FSET? HERE,BEYONDBIT /?CCL88
PRINTI """I've learned from years of loyalty, spinning rhymes for this noble court, that with the attention span of royalty, my poems must be short!"""
ICALL1 J-EXITS
JUMP ?CND53
?CCL88: PRINTI "The jester watches you with twinkling eyes."
CRLF
?CND53: ADD SLATE-PROB,2 >SLATE-PROB
ADD SCROLL-PROB,2 >SCROLL-PROB
RETURN SCROLL-PROB
.FUNCT J-EXITS,JUST-DID-SLATE-OR-SCROLL,DO-FUNNY-PAPER,LIT?
ICALL1 REMOVE-J
RANDOM 100
LESS? FUNNY-PAPER-PROB,STACK /?CND1
IN? FUNNY-PAPER,LOCAL-GLOBALS \?CND1
ZERO? JUST-DID-SLATE-OR-SCROLL \?CND1
SET 'DO-FUNNY-PAPER,TRUE-VALUE
?CND1: RANDOM 100
LESS? 15,STACK /?CCL8
ZERO? DO-FUNNY-PAPER \?CCL8
PRINTR " The jester winces at his rhyming, then shrugs. ""Oh, well, they can't all be gems."" In a wink, he is gone."
?CCL8: RANDOM 100
LESS? 20,STACK /?CND6
IN? PROTAGONIST,HERE \?CND6
EQUAL? HERE,TORTURE-CHAMBER /?CND6
ZERO? DO-FUNNY-PAPER \?CND6
MOVE BEDBUG,HERE
SET 'P-CONT,-1
PRINTR " The jester yawns and says, ""Think I'll catch some winks. Nighty night! Don't let the bedbugs bite!"" As the jester vanishes, you hear the clicking of giant mandibles."
?CND6: PRINTI " The jester gives a cheerful wave of farewell and vanishes, saying, """
ZERO? DO-FUNNY-PAPER /?CCL18
ICALL QUEUE,I-FUNNY-PAPER,2
SET 'FUNNY-PAPER-PROB,0
PRINTI "See you in the funny papers!"" A breeze begins picking up."
CRLF
JUMP ?CND16
?CCL18: RANDOM 100
LESS? 20,STACK /?CCL20
FSET? HERE,DESERTBIT /?CCL20
EQUAL? HERE,LAKE-FLATHEAD,UNDERWATER,LAKE-BOTTOM /?CCL20
EQUAL? HERE,HOLD,GONDOLA /?CCL20
GETP HERE,P?REGION
EQUAL? STACK,STR?249 /?CCL20
PRINTI "See you next week, same bat time, same bat channel!"" A moment later, you hear a shrieking, ""Fweep! Fweep! Fweep!"" A large deranged bat swoops down, snatches you up, and deposits you in"
PRINT ELLIPSIS
MOVE PROTAGONIST,HERE
CALL FIND-IN,PROTAGONIST,ONBIT >LIT?
ZERO? LIT? \?CND27
CALL FIND-IN,HERE,ONBIT >LIT?
ZERO? LIT? /?CND27
MOVE LIT?,PROTAGONIST
?CND27: CALL1 BEYOND-LAKE?
ZERO? STACK \?CTR32
ZERO? LIT? /?CCL33
RANDOM 100
LESS? 25,STACK /?CCL33
?CTR32: PUSH BATS-LAIR
JUMP ?CND31
?CCL33: ZERO? SECRET-PASSAGE-OPEN /?CCL39
ZERO? LIT? /?CCL39
RANDOM 100
LESS? 40,STACK /?CCL39
PUSH PARAPET
JUMP ?CND31
?CCL39: FSET? DRAWBRIDGE,OPENBIT \?CCL44
RANDOM 100
LESS? 50,STACK /?CCL44
PUSH OUTER-BAILEY
JUMP ?CND31
?CCL44: PUSH ROOF
?CND31: ICALL2 GOTO,STACK
JUMP ?CND16
?CCL20: RANDOM 100
LESS? 33,STACK /?CCL48
EQUAL? HERE,UNDER-THE-WORLD,HANGING-FROM-ROOTS,SHOULDER /?CCL48
EQUAL? HERE,EAR,INNER-EAR /?CCL48
ZERO? HUNGER-COUNT \?CCL48
EQUAL? JUMP-X,99 \?CCL48
EQUAL? JUMP-Y,99 \?CCL48
SET 'ALLIGATOR,TRUE-VALUE
ICALL QUEUE,I-UNALLIGATOR,4
PRINTI "See you later, alligator!"" Your skin feels itchy"
FIRST? PROTAGONIST \?CND56
PRINTI " and you've dropped what you were holding"
?CND56: PRINTC 46
LOC PROTAGONIST
FSET? STACK,DROPBIT \?CCL60
LOC PROTAGONIST
JUMP ?CND58
?CCL60: PUSH HERE
?CND58: ICALL ROB,PROTAGONIST,STACK
SET 'P-CONT,-1
CRLF
JUMP ?CND16
?CCL48: RANDOM 100
LESS? 50,STACK \?CTR61
ZERO? ALLIGATOR \?CTR61
FSET? CLOWN-NOSE,WORNBIT \?CCL62
?CTR61: PRINTI "So long, and thanks for all the fish!"" Odd. You've never given the jester any fish."
CRLF
JUMP ?CND16
?CCL62: MOVE CLOWN-NOSE,PROTAGONIST
FSET CLOWN-NOSE,WORNBIT
ICALL QUEUE,I-SUFFOCATE,-1
SET 'P-CONT,-1
PRINTI "Catch you aroun', clown!"" You suddenly find yourself having a bit of difficulty breathing."
CRLF
?CND16: ADD FUNNY-PAPER-PROB,5 >FUNNY-PAPER-PROB
RETURN FUNNY-PAPER-PROB
.FUNCT BEYOND-LAKE?
FSET? HERE,DESERTBIT /TRUE
EQUAL? HERE,STABLE,GROTTO,SHRINE /TRUE
EQUAL? HERE,G-U-MOUNTAIN,STREAM,G-U-WOODS /TRUE
EQUAL? HERE,G-U-SAVANNAH,EAST-SHORE,SOUTH-SHORE /TRUE
EQUAL? HERE,RING-OF-DUNES,BASE-OF-MOUNTAIN /TRUE
RFALSE
.FUNCT REMOVE-J
ICALL QUEUE,I-JESTER,12
SET 'J-APPEAR-PROB,0
SET 'GUESSES,FALSE-VALUE
SET 'J-ON-RAFT,FALSE-VALUE
IN? EAST-KEY,JESTER \?CND1
MOVE EAST-KEY,SOLAR
?CND1: FSET? ZORKMID-BILL,TOUCHBIT /?CND3
MOVE ZORKMID-BILL,LOCAL-GLOBALS
?CND3: REMOVE SHELL-TABLE
REMOVE JESTER
RTRUE
.FUNCT DONT-CRY
INC 'GUESSES
PRINTI """Wrong, but don't "
EQUAL? GUESSES,3 \?CCL3
SET 'GUESSES,0
PRINTI "get all a-twiddle; I'll repeat the riddle! "
GETP HERE,P?RIDDLE
PRINT STACK
CRLF
RTRUE
?CCL3: PRINTR "cry -- give it another try."""
.FUNCT I-UNALLIGATOR
SET 'ALLIGATOR,FALSE-VALUE
ICALL1 RETURN-FROM-MAP
PRINTR " With a pop, your tail and snout shorten, and you are no longer a candidate for being turned into a pair of expensive shoes."
.FUNCT I-SUFFOCATE
FSET? CLOWN-NOSE,WORNBIT /?CND1
SET 'SUFFOCATE-COUNTER,0
ICALL2 DEQUEUE,I-SUFFOCATE
RFALSE
?CND1: INC 'SUFFOCATE-COUNTER
EQUAL? SUFFOCATE-COUNTER,5 \?CCL5
ICALL1 RETURN-FROM-MAP
PRINTR " You're still having trouble breathing. It's probably due to the clown nose that's clamped in the middle of your face."
?CCL5: EQUAL? SUFFOCATE-COUNTER,8 \?CCL7
ICALL1 RETURN-FROM-MAP
PRINTR " It's really getting tough to keep going without fresh air!"
?CCL7: EQUAL? SUFFOCATE-COUNTER,10 \?CCL9
ICALL1 RETURN-FROM-MAP
PRINTR " You're getting lightheaded..."
?CCL9: EQUAL? SUFFOCATE-COUNTER,11 \FALSE
ICALL1 RETURN-FROM-MAP
CALL2 JIGS-UP,STR?928
RSTACK
.FUNCT I-FUNNY-PAPER
LOC PROTAGONIST
MOVE FUNNY-PAPER,STACK
ICALL QUEUE,I-REMOVE-FUNNY-PAPER,1
ICALL2 THIS-IS-IT,FUNNY-PAPER
ICALL1 RETURN-FROM-MAP
PRINTR " The wind blows a colorful piece of newspaper into view. It's a funny paper!"
.FUNCT I-REMOVE-FUNNY-PAPER,TOLD
IN? FUNNY-PAPER,PROTAGONIST /?CND1
CALL2 VISIBLE?,FUNNY-PAPER
ZERO? STACK /?CND3
SET 'TOLD,TRUE-VALUE
ICALL1 RETURN-FROM-MAP
PRINTI " The wind blows the funny paper out of sight."
CRLF
?CND3: MOVE FUNNY-PAPER,LOCAL-GLOBALS
?CND1: ZERO? TOLD \TRUE
RFALSE
.FUNCT FUNNY-PAPER-F
EQUAL? PRSA,V?READ \?CCL3
PRINTI "It's a comic strip entitled ""Me and the Jester."" In the strip, a peasant adventurer is bumbling around a mighty castle, alternately helped and hindered by a playful jester. In one panel, the Jester suggests that the adventurer look under the "
ICALL2 DPRINT,HOLEY-SLAB
PRINTR " in the Crypt."
?CCL3: EQUAL? PRSA,V?FOLLOW \FALSE
PRINTR "You've lost track of it."
.FUNCT BEDBUG-F
EQUAL? PRSA,V?EXAMINE \?CCL3
PRINTR "It's quite larger than any bedbug you've ever seen before: about the size of a small sheep. It looks as if it has just been roused from a deep sleep, and isn't at all happy about the fact. With a mixture of weariness and anger, it waves powerful pincers in your direction."
?CCL3: EQUAL? PRSA,V?LEAP \?CCL5
CALL1 IMPOSSIBLES
RSTACK
?CCL5: EQUAL? PRSA,V?KICK,V?BITE,V?KILL \FALSE
PRINTR "This bedbug's chitinous shell is like battle armor."
.FUNCT CLOWN-NOSE-F
EQUAL? PRSA,V?WEAR \FALSE
FSET? CLOWN-NOSE,WORNBIT /FALSE
FSET CLOWN-NOSE,WORNBIT
ICALL QUEUE,I-SUFFOCATE,-1
PRINTR "You don the nose, which makes breathing extremely difficult."
.FUNCT SLATE-F
EQUAL? PRSA,V?EXAMINE \?CCL3
PRINTR "The small slate is set into a wooden frame. It looks to be at least fifty if not a hundred years old. A shaky hand has inscribed something onto the slate."
?CCL3: EQUAL? PRSA,V?READ \FALSE
ZERO? STUMP-X \?CND6
RANDOM 3 >STUMP-X
RANDOM 100
LESS? 50,STACK /?CND8
MUL STUMP-X,-1 >STUMP-X
?CND8: RANDOM 3 >STUMP-Y
RANDOM 100
LESS? 50,STACK /?CND10
MUL STUMP-Y,-1 >STUMP-Y
?CND10: PRINTI "You shake enough dust off the slate to read it: "
?CND6: PRINTI """Stand at the oldest and mightiest elm around. Jump "
GRTR? STUMP-Y,0 \?CCL14
PRINTI "north "
JUMP ?CND12
?CCL14: PRINTI "south "
?CND12: EQUAL? STUMP-Y,1,-1 \?CCL17
PRINTI "once"
JUMP ?CND15
?CCL17: EQUAL? STUMP-Y,2,-2 \?CCL19
PRINTI "twice"
JUMP ?CND15
?CCL19: PRINTI "thrice"
?CND15: PRINTI " then jump "
GRTR? STUMP-X,0 \?CCL22
PRINTI "east "
JUMP ?CND20
?CCL22: PRINTI "west "
?CND20: EQUAL? STUMP-X,1,-1 \?CCL25
PRINTI "once"
JUMP ?CND23
?CCL25: EQUAL? STUMP-X,2,-2 \?CCL27
PRINTI "twice"
JUMP ?CND23
?CCL27: PRINTI "thrice"
?CND23: PRINTR "."""
.FUNCT SCROLL-F
EQUAL? PRSA,V?EXAMINE,V?READ \FALSE
PRINTI "The paper reads:"
CRLF
CRLF
PRINTI " "
HLIGHT H-ITALIC
PRINTI "RAM A NAG"
CRLF
CRLF
HLIGHT H-NORMAL
PRINTR "TREEN RIBARLY HENT HOCUT MORRA RICHET"
.ENDSEG
.SEGMENT "CASTLE"
.FUNCT SHELL-F
EQUAL? PRSA,V?POINT \?CCL3
PRINTI "The jester lifts the shell. Empty. "
CALL1 ANOTHER-SHELL-GAME
RSTACK
?CCL3: EQUAL? PRSA,V?MOVE,V?LOOK-UNDER,V?TOUCH /?CTR4
EQUAL? PRSA,V?TAKE \?CCL5
?CTR4: PRINTR "The jester stops you, saying, ""You deserve a beating for trying such cheating!"""
?CCL5: EQUAL? PRSA,V?EXAMINE,V?LOOK-INSIDE \FALSE
FSET? GOGGLES,WORNBIT \FALSE
PRINTR "Thanks to the goggles, you can see right through the shell as though it were transparent! There's nothing under it."
.FUNCT ANOTHER-SHELL-GAME
PRINTI """Don't be sore, let's try it once more!"" He reshuffles the shells."
MOVE ZORKMID-BILL,LOCAL-GLOBALS
ICALL1 SEE-BILL?
CRLF
RTRUE
.FUNCT SEE-BILL?,BILL-LOC
FSET? GOGGLES,WORNBIT \FALSE
RANDOM 100
LESS? 33,STACK /?CCL6
SET 'BILL-LOC,J-POCKET
JUMP ?CND4
?CCL6: RANDOM 100
LESS? 50,STACK /?CCL8
SET 'BILL-LOC,J-SHOE
JUMP ?CND4
?CCL8: SET 'BILL-LOC,J-HAT
?CND4: MOVE ZORKMID-BILL,BILL-LOC
PRINTI " You find that you can see right through the shells -- and the zorkmid bill isn't under any of them! Before you can say so, you notice the bill -- "
EQUAL? BILL-LOC,J-HAT \?CCL11
PRINTI "under"
JUMP ?CND9
?CCL11: PRINTI "in"
?CND9: ICALL2 TPRINT,BILL-LOC
PRINTI "! After a moment, the vision fades, and"
ICALL2 TPRINT,BILL-LOC
PRINTI " once again appears opaque."
RTRUE
.FUNCT JESTERS-QUARTERS-F,RARG
EQUAL? RARG,M-LOOK \FALSE
PRINTI "This is a small, spare room. The only features are a small louvered door on the south wall, a larger arched door on the north wall, and a stair which spirals downward. "
FSET? LARGE-DOOR,OPENBIT \?CCL6
PRINTI "The large door is open but the small door is"
JUMP ?CND4
?CCL6: PRINTI "Both doors are"
?CND4: PRINTI " closed."
RTRUE
.FUNCT SMALL-DOOR-ENTER-F,RARG
ZERO? RARG \FALSE
ICALL1 RETURN-FROM-MAP
ICALL DO-FIRST,STR?140,SMALL-DOOR
ICALL2 THIS-IS-IT,SMALL-DOOR
RFALSE
.FUNCT LARGE-DOOR-F
EQUAL? PRSA,V?OPEN \FALSE
ZERO? TOWER-BEATEN \FALSE
PRINTR "Although there's no visible lock, the door refuses to budge."
.FUNCT G-J-DOOR-F,TBL,LEN
EQUAL? PRSA,V?OPEN \?CCL3
FSET? LARGE-DOOR,OPENBIT \?CCL3
RETURN SMALL-DOOR
?CCL3: EQUAL? PRSA,V?CLOSE \FALSE
FSET? LARGE-DOOR,OPENBIT \FALSE
RETURN LARGE-DOOR
.FUNCT SMALL-DOOR-F,WEIGHT-CNT,FUDGE,?TMP1,?TMP2
EQUAL? PRSA,V?LOOK-BEHIND,V?OPEN \?CCL3
ICALL2 PICINF-PLUS-ONE,B-1-L-PIC-LOC
GET PICINF-TBL,0
PUT B-Y-TBL,5,STACK
GET PICINF-TBL,1
PUT B-X-TBL,0,STACK
ICALL2 PICINF-PLUS-ONE,B-2-C-PIC-LOC
GET PICINF-TBL,0
PUT B-Y-TBL,4,STACK
GET PICINF-TBL,1
PUT B-X-TBL,1,STACK
ICALL2 PICINF-PLUS-ONE,B-3-R-PIC-LOC
GET PICINF-TBL,0
PUT B-Y-TBL,3,STACK
GET PICINF-TBL,1
PUT B-X-TBL,2,STACK
ICALL2 PICINF-PLUS-ONE,B-4-PIC-LOC
GET PICINF-TBL,0
PUT B-Y-TBL,2,STACK
ICALL2 PICINF-PLUS-ONE,B-5-PIC-LOC
GET PICINF-TBL,0
PUT B-Y-TBL,1,STACK
ICALL2 PICINF-PLUS-ONE,B-6-PIC-LOC
GET PICINF-TBL,0
PUT B-Y-TBL,0,STACK
FSET SMALL-DOOR,OPENBIT
SET 'TOWER-CHANGED,FALSE-VALUE
ICALL SPLIT-BY-PICTURE,B-SPLIT,TRUE-VALUE
ICALL2 ADJUST-TEXT-WINDOW,B-BOTTOM
ICALL1 DRAW-TOWER
PRINTI "Opening the door reveals a tiny nook containing a Tower of Bozbar, consisting of 3 pegs and "
CALL2 CCOUNT,LEFT-PEG >?TMP2
CALL2 CCOUNT,RIGHT-PEG
ADD ?TMP2,STACK >?TMP1
CALL2 CCOUNT,CENTER-PEG
ADD ?TMP1,STACK >WEIGHT-CNT
PRINTN WEIGHT-CNT
PRINTI " cylindrical weight"
EQUAL? WEIGHT-CNT,1 /?CND4
PRINTC 115
?CND4: EQUAL? WEIGHT-CNT,6 \?CND6
PRINTI " ranging from a 1-ugh to a 6-ugh weight"
?CND6: PRINT PERIOD-CR
PRINTI " Type the number of the weight you want to move, followed by the peg you want to move it to: L, C, or R. "
ZERO? ACTIVE-MOUSE /?CND8
PRINTI "Or, if you'd rather use your mouse, click on the weight you want to move, then click on the peg you want to move it to. "
?CND8: PRINTI "You can Undo your move by typing U"
ZERO? ACTIVE-MOUSE /?CND10
PRINTI " (or clicking on the UNDO spot)"
?CND10: GET 0,8
BTST STACK,8 /?CCL14
PRINTI " -- even though Undo doesn't normally work on your system!"
JUMP ?CND12
?CCL14: PRINTC 46
?CND12: PRINTI " Type X"
ZERO? ACTIVE-MOUSE /?CND15
PRINTI " (or click on the EXIT spot)"
?CND15: PRINTI " to exit."
ICALL1 TOWER-MODE
CRLF
CRLF
ICALL1 HIT-ANY-KEY
ICALL2 INIT-SL-WITH-SPLIT,TEXT-WINDOW-PIC-LOC
RTRUE
?CCL3: EQUAL? PRSA,V?EXAMINE \?CCL18
PRINTR "The small door is closed."
?CCL18: EQUAL? PRSA,V?CLOSE \FALSE
PRINTR "It is!"
.FUNCT WEIGHT-F,CNT,RECURSING
EQUAL? PRSA,V?MOVE-TO \FALSE
EQUAL? PRSI,RIGHT-PEG,CENTER-PEG,LEFT-PEG \FALSE
IN? PRSO,PRSI \?CCL8
PRINTI "It's already on that peg."
RTRUE
?CCL8: CALL2 NOT-TOP-WEIGHT,PRSO
ZERO? STACK /?CCL10
PRINTI "You can only move the weight that's on top!"
RTRUE
?CCL10: SET 'TOWER-CHANGED,TRUE-VALUE
ICALL MOVE-WEIGHT,PRSO,PRSI
MOVE PRSO,PRSI
PRINTI "You move"
ICALL1 TPRINT-PRSO
PRINTI " to"
ICALL1 TPRINT-PRSI
?PRG11: CALL CRUSH-WEIGHT,PRSO,PRSI,RECURSING
ZERO? STACK /?REP12
SET 'RECURSING,TRUE-VALUE
JUMP ?PRG11
?REP12: ZERO? TOWER-BEATEN /?CND16
SET 'TOWER-BEATEN,FALSE-VALUE
FSET? LARGE-DOOR,OPENBIT \?CND16
FCLEAR LARGE-DOOR,OPENBIT
PRINTI ". The large door to the north swings silently shut"
?CND16: PRINTC 46
RTRUE
.FUNCT TOWER-MODE,CHAR,WGT,PEG,X,JUST-UNDID,?TMP1
?PRG1: ZERO? TOWER-CHANGED /?CND3
ZERO? JUST-UNDID \?CND3
CALL1 TOWER-WIN-CHECK >TOWER-BEATEN
ZERO? TOWER-BEATEN /?CND3
PRINTI " You hear a ""click"" from the direction of the Tower"
EQUAL? TOWER-BEATEN,PYRAMID /?CND8
PRINTI ". It tilts to the "
EQUAL? TOWER-BEATEN,PYRAMID-L \?CCL12
PRINTI "left"
JUMP ?CND8
?CCL12: PRINTI "right"
?CND8: FSET WEIRD,REDESCBIT
FCLEAR SMALL-DOOR,OPENBIT
PRINTI ". The small louvered door swings silently shut."
RTRUE
?CND3: ZERO? DEMO-VERSION? /?CCL15
CALL2 INPUT-DEMO,1 >CHAR
JUMP ?CND13
?CCL15: INPUT 1 >CHAR
?CND13: ICALL1 MOUSE-INPUT?
EQUAL? CHAR,CLICK1,CLICK2 \?CND16
CALL1 B-MOUSE-WEIGHT-PICK >CHAR
?CND16: CLEAR S-TEXT
EQUAL? CHAR,88,120 \?CCL20
PRINTI "You shut the louvered door, concealing the Tower of Bozbar from view."
RTRUE
?CCL20: EQUAL? CHAR,85,117 \?CCL22
ZERO? TOWER-CHANGED \?CCL25
PRINTI "You can't undo until you make a move!"
JUMP ?PRG1
?CCL25: ZERO? JUST-UNDID /?CCL27
PRINTI "You just undid; you can't undo again until you move again!"
JUMP ?PRG1
?CCL27: SET 'JUST-UNDID,TRUE-VALUE
ICALL1 B-RESTORE
ICALL2 DRAW-TOWER,TRUE-VALUE
PRINTI "Undone."
JUMP ?PRG1
?CCL22: EQUAL? CHAR,49,50,51 /?CTR28
EQUAL? CHAR,52,53,54 /?CTR28
EQUAL? CHAR,146,147,148 /?CTR28
EQUAL? CHAR,149,150,151 \?CCL29
?CTR28: EQUAL? CHAR,49,146 \?CCL36
SET 'WGT,1-WEIGHT
JUMP ?CND34
?CCL36: EQUAL? CHAR,50,147 \?CCL38
SET 'WGT,2-WEIGHT
JUMP ?CND34
?CCL38: EQUAL? CHAR,51,148 \?CCL40
SET 'WGT,3-WEIGHT
JUMP ?CND34
?CCL40: EQUAL? CHAR,52,149 \?CCL42
SET 'WGT,4-WEIGHT
JUMP ?CND34
?CCL42: EQUAL? CHAR,53,150 \?CCL44
SET 'WGT,5-WEIGHT
JUMP ?CND34
?CCL44: SET 'WGT,6-WEIGHT
?CND34: LOC WGT
EQUAL? STACK,LEFT-PEG,CENTER-PEG,RIGHT-PEG /?CCL47
PRINTI "There's no "
ICALL2 DPRINT,WGT
PRINTI " anymore -- you crushed it."
JUMP ?PRG1
?CCL47: ZERO? ACTIVE-MOUSE /?CCL50
PRINTI "Use your mouse or t"
JUMP ?CND48
?CCL50: PRINTC 84
?CND48: PRINTI "ype L (left) or C (center) or R (right) to specify the peg you'd like to move the "
ICALL2 DPRINT,WGT
PRINTI " to."
ZERO? DEMO-VERSION? /?CCL53
CALL2 INPUT-DEMO,1 >CHAR
JUMP ?CND51
?CCL53: INPUT 1 >CHAR
?CND51: ICALL1 MOUSE-INPUT?
EQUAL? CHAR,CLICK1,CLICK2 \?CND54
CALL1 B-MOUSE-PEG-PICK >CHAR
?CND54: CLEAR S-TEXT
EQUAL? CHAR,76,108,82 /?CCL58
EQUAL? CHAR,114,67,99 /?CCL58
PRINTI "Next time, "
EQUAL? CHAR,CLICK1 \?CCL63
PRINTI "click on the left, center, or right peg!"
JUMP ?PRG1
?CCL63: PRINTI "type R (right), L (left), or C (center) to specify a destination peg!"
JUMP ?PRG1
?CCL58: EQUAL? CHAR,76,108 \?CCL66
SET 'PEG,LEFT-PEG
JUMP ?CND64
?CCL66: EQUAL? CHAR,82,114 \?CCL68
SET 'PEG,RIGHT-PEG
JUMP ?CND64
?CCL68: SET 'PEG,CENTER-PEG
?CND64: ICALL1 B-SAVE
ZERO? TOWER-CHANGED /?PRD72
ZERO? JUST-UNDID /?CND69
?PRD72: ZERO? ACTIVE-MOUSE /?CND69
ICALL2 PICINF-PLUS-ONE,TOWER-UNDO-BOX-LOC
SCREEN S-WINDOW
GET PICINF-TBL,0 >?TMP1
GET PICINF-TBL,1
DISPLAY UNDO-BOX,?TMP1,STACK
SCREEN S-TEXT
?CND69: SET 'JUST-UNDID,FALSE-VALUE
CALL PERFORM,V?MOVE-TO,WGT,PEG >X
JUMP ?PRG1
?CCL29: EQUAL? CHAR,76,108,82 /?CTR75
EQUAL? CHAR,114,67,99 \?CCL76
?CTR75: PRINTI "You must select a weight before you select a destination!"
JUMP ?PRG1
?CCL76: PRINT TYPE-A-NUMBER
PRINTI "6, U for Undo, or X to eXit the Tower of Bozbar game."
JUMP ?PRG1
.FUNCT B-MOUSE-PEG-PICK,TL-X,TL-Y,BR-X,BR-Y,WEIGHT-WIDTH,WEIGHT-HEIGHT
PICINF B-1-WEIGHT,PICINF-TBL /?BOGUS1
?BOGUS1: GET PICINF-TBL,1 >WEIGHT-WIDTH
GET PICINF-TBL,0 >WEIGHT-HEIGHT
ICALL2 PICINF-PLUS-ONE,B-1-L-PIC-LOC
GET PICINF-TBL,0 >TL-Y
GET PICINF-TBL,1 >TL-X
ADD WEIGHT-WIDTH,TL-X >BR-X
ICALL2 PICINF-PLUS-ONE,B-6-PIC-LOC
GET PICINF-TBL,0
ADD STACK,TL-Y >BR-Y
CALL WITHIN?,TL-X,TL-Y,BR-X,BR-Y
ZERO? STACK /?CND2
RETURN 76
?CND2: ICALL2 PICINF-PLUS-ONE,B-2-C-PIC-LOC
GET PICINF-TBL,1 >TL-X
ADD WEIGHT-WIDTH,TL-X >BR-X
CALL WITHIN?,TL-X,TL-Y,BR-X,BR-Y
ZERO? STACK /?CND4
RETURN 67
?CND4: ICALL2 PICINF-PLUS-ONE,B-3-R-PIC-LOC
GET PICINF-TBL,1 >TL-X
ADD WEIGHT-WIDTH,TL-X >BR-X
CALL WITHIN?,TL-X,TL-Y,BR-X,BR-Y
ZERO? STACK /?CCL8
RETURN 82
?CCL8: SOUND 1
RETURN CLICK1
.FUNCT B-MOUSE-WEIGHT-PICK,TL-X,TL-Y,BR-X,BR-Y,NUM,TBL,CNT-X,CNT-Y,WEIGHT-WIDTH,WEIGHT-HEIGHT
ICALL2 PICINF-PLUS-ONE,TOWER-UNDO-BOX-LOC
GET PICINF-TBL,1 >TL-X
GET PICINF-TBL,0 >TL-Y
PICINF UNDO-BOX,PICINF-TBL /?BOGUS1
?BOGUS1: GET PICINF-TBL,1
ADD TL-X,STACK >BR-X
GET PICINF-TBL,0
ADD TL-Y,STACK >BR-Y
CALL WITHIN?,TL-X,TL-Y,BR-X,BR-Y
ZERO? STACK /?CND2
RETURN 85
?CND2: ICALL2 PICINF-PLUS-ONE,TOWER-EXIT-BOX-LOC
GET PICINF-TBL,1 >TL-X
GET PICINF-TBL,0 >TL-Y
PICINF EXIT-BOX,PICINF-TBL /?BOGUS4
?BOGUS4: GET PICINF-TBL,1
ADD TL-X,STACK >BR-X
GET PICINF-TBL,0
ADD TL-Y,STACK >BR-Y
CALL WITHIN?,TL-X,TL-Y,BR-X,BR-Y
ZERO? STACK /?CND5
RETURN 88
?CND5: PICINF B-1-WEIGHT,PICINF-TBL /?BOGUS7
?BOGUS7: GET PICINF-TBL,1 >WEIGHT-WIDTH
GET PICINF-TBL,0 >WEIGHT-HEIGHT
SET 'TBL,LEFT-PEG-TABLE
?PRG10: GET B-X-TBL,CNT-X >TL-X
GET B-Y-TBL,CNT-Y >TL-Y
ADD TL-X,WEIGHT-WIDTH >BR-X
ADD TL-Y,WEIGHT-HEIGHT >BR-Y
CALL WITHIN?,TL-X,TL-Y,BR-X,BR-Y
ZERO? STACK /?CND12
GET TBL,CNT-Y >NUM
ZERO? NUM /?CND12
GETP NUM,P?SIZE >NUM
?CND12: INC 'CNT-Y
ZERO? NUM \?REP11
EQUAL? CNT-Y,6 \?PRG10
?REP11: ZERO? NUM \?REP9
ZERO? CNT-X \?CCL24
SET 'CNT-X,1
SET 'CNT-Y,0
SET 'TBL,CENTER-PEG-TABLE
JUMP ?PRG10
?CCL24: EQUAL? CNT-X,1 \?REP9
SET 'CNT-X,2
SET 'CNT-Y,0
SET 'TBL,RIGHT-PEG-TABLE
JUMP ?PRG10
?REP9: ZERO? NUM /?CCL29
ADD NUM,48
RSTACK
?CCL29: SOUND 1
RETURN CLICK1
.FUNCT TOWER-WIN-CHECK
IN? 1-WEIGHT,LEFT-PEG \?CCL3
IN? 2-WEIGHT,LEFT-PEG \?CCL3
IN? 3-WEIGHT,LEFT-PEG \?CCL3
IN? 4-WEIGHT,LEFT-PEG \?CCL3
IN? 5-WEIGHT,LEFT-PEG \?CCL3
IN? 6-WEIGHT,LEFT-PEG \?CCL3
RETURN PYRAMID-L
?CCL3: IN? 1-WEIGHT,RIGHT-PEG \?CCL11
IN? 2-WEIGHT,RIGHT-PEG \?CCL11
IN? 3-WEIGHT,RIGHT-PEG \?CCL11
IN? 4-WEIGHT,RIGHT-PEG \?CCL11
IN? 5-WEIGHT,RIGHT-PEG \?CCL11
IN? 6-WEIGHT,RIGHT-PEG \?CCL11
RETURN PYRAMID-R
?CCL11: IN? 1-WEIGHT,CENTER-PEG \FALSE
IN? 2-WEIGHT,CENTER-PEG \FALSE
IN? 3-WEIGHT,CENTER-PEG \FALSE
IN? 4-WEIGHT,CENTER-PEG \FALSE
IN? 5-WEIGHT,CENTER-PEG \FALSE
IN? 6-WEIGHT,CENTER-PEG \FALSE
RETURN PYRAMID
.FUNCT SET-PEG-TABLE,PEG
EQUAL? PEG,LEFT-PEG \?CCL3
RETURN LEFT-PEG-TABLE
?CCL3: EQUAL? PEG,CENTER-PEG /?CTR4
RETURN RIGHT-PEG-TABLE
?CTR4: RETURN CENTER-PEG-TABLE
.FUNCT NOT-TOP-WEIGHT,WGT,TBL,CNT,NOT-TOP
LOC WGT
CALL2 SET-PEG-TABLE,STACK >TBL
?PRG1: GET TBL,CNT
EQUAL? STACK,WGT \?CND3
EQUAL? CNT,5 \?CCL7
SET 'NOT-TOP,FALSE-VALUE
RETURN NOT-TOP
?CCL7: ADD CNT,1
GET TBL,STACK
ZERO? STACK \?CCL9
SET 'NOT-TOP,FALSE-VALUE
RETURN NOT-TOP
?CCL9: SET 'NOT-TOP,TRUE-VALUE
RETURN NOT-TOP
?CND3: INC 'CNT
JUMP ?PRG1
.FUNCT MOVE-WEIGHT,WGT,PEG,TBL,CNT,X,?TMP1
SCREEN S-WINDOW
LOC WGT
EQUAL? STACK,LEFT-PEG \?CCL3
PUSH 0
JUMP ?CND1
?CCL3: LOC WGT
EQUAL? STACK,CENTER-PEG \?CCL5
PUSH 1
JUMP ?CND1
?CCL5: PUSH 2
?CND1: GET B-X-TBL,STACK >X
LOC WGT
CALL2 SET-PEG-TABLE,STACK >TBL
?PRG6: GET TBL,CNT
EQUAL? STACK,WGT \?CND8
GET B-Y-TBL,CNT
DISPLAY B-RESTORE-PEG,STACK,X
PUT TBL,CNT,0
SET 'CNT,0
EQUAL? PEG,LEFT-PEG \?CCL12
SET 'X,0
JUMP ?CND10
?CND8: INC 'CNT
JUMP ?PRG6
?CCL12: EQUAL? PEG,CENTER-PEG \?CCL14
SET 'X,1
JUMP ?CND10
?CCL14: SET 'X,2
?CND10: GET B-X-TBL,X >X
CALL2 SET-PEG-TABLE,PEG >TBL
?PRG15: GET TBL,CNT
ZERO? STACK \?CND17
CALL2 SET-B-PIC,WGT >?TMP1
GET B-Y-TBL,CNT
DISPLAY ?TMP1,STACK,X
PUT TBL,CNT,WGT
SCREEN S-TEXT
RTRUE
?CND17: INC 'CNT
JUMP ?PRG15
.FUNCT CRUSH-WEIGHT,WGT,PEG,RECURSING,TBL,CNT,CRUSHED,X,?TMP1
CALL2 SET-PEG-TABLE,PEG >TBL
?PRG1: GET TBL,CNT
EQUAL? STACK,WGT \?CND3
ZERO? CNT \?CCL7
SET 'CRUSHED,FALSE-VALUE
JUMP ?REP2
?CCL7: SUB CNT,1
GET TBL,STACK >CRUSHED
ZERO? CRUSHED /?CCL9
GETP CRUSHED,P?SIZE >?TMP1
GETP WGT,P?SIZE
LESS? ?TMP1,STACK \?CCL9
EQUAL? PEG,LEFT-PEG \?CCL14
PUSH 0
JUMP ?CND12
?CCL14: EQUAL? PEG,CENTER-PEG \?CCL16
PUSH 1
JUMP ?CND12
?CCL16: PUSH 2
?CND12: GET B-X-TBL,STACK >X
SCREEN S-WINDOW
GET B-Y-TBL,CNT
DISPLAY B-RESTORE-PEG,STACK,X
CALL2 SET-B-PIC,WGT >?TMP1
SUB CNT,1
GET B-Y-TBL,STACK
DISPLAY ?TMP1,STACK,X
SCREEN S-TEXT
REMOVE CRUSHED
PUT TBL,CNT,0
SUB CNT,1
PUT TBL,STACK,WGT
JUMP ?REP2
?CCL9: SET 'CRUSHED,FALSE-VALUE
?REP2: ZERO? CRUSHED /FALSE
ZERO? RECURSING /?CCL21
PRINTI ". And"
CALL2 TPRINT,CRUSHED
RSTACK
?CND3: INC 'CNT
JUMP ?PRG1
?CCL21: PRINTI ", crushing"
CALL2 TPRINT,CRUSHED
RSTACK
.FUNCT B-SAVE,CNT
COPYT LEFT-PEG-TABLE,TOWER-UNDO-TABLE,12
ADD TOWER-UNDO-TABLE,12
COPYT CENTER-PEG-TABLE,STACK,12
ADD TOWER-UNDO-TABLE,24
COPYT RIGHT-PEG-TABLE,STACK,12
LOC 1-WEIGHT
PUT TOWER-UNDO-TABLE,18,STACK
LOC 2-WEIGHT
PUT TOWER-UNDO-TABLE,19,STACK
LOC 3-WEIGHT
PUT TOWER-UNDO-TABLE,20,STACK
LOC 4-WEIGHT
PUT TOWER-UNDO-TABLE,21,STACK
LOC 5-WEIGHT
PUT TOWER-UNDO-TABLE,22,STACK
LOC 6-WEIGHT
PUT TOWER-UNDO-TABLE,23,STACK
RTRUE
.FUNCT B-RESTORE,CNT,L
COPYT TOWER-UNDO-TABLE,LEFT-PEG-TABLE,12
ADD TOWER-UNDO-TABLE,12
COPYT STACK,CENTER-PEG-TABLE,12
ADD TOWER-UNDO-TABLE,24
COPYT STACK,RIGHT-PEG-TABLE,12
GET TOWER-UNDO-TABLE,18 >L
ZERO? L /?CND1
MOVE 1-WEIGHT,L
?CND1: GET TOWER-UNDO-TABLE,19 >L
ZERO? L /?CND3
MOVE 2-WEIGHT,L
?CND3: GET TOWER-UNDO-TABLE,20 >L
ZERO? L /?CND5
MOVE 3-WEIGHT,L
?CND5: GET TOWER-UNDO-TABLE,21 >L
ZERO? L /?CND7
MOVE 4-WEIGHT,L
?CND7: GET TOWER-UNDO-TABLE,22 >L
ZERO? L /?CND9
MOVE 5-WEIGHT,L
?CND9: GET TOWER-UNDO-TABLE,23
MOVE 6-WEIGHT,STACK
RTRUE
.FUNCT DRAW-TOWER,UNDOING,CNT,WGT,PEG-LOC,?TMP1,?TMP2
CLEAR S-FULL
SCREEN S-FULL
DISPLAY B-BORDER,1,1
PICSET B-PICSET-TBL
SCREEN S-WINDOW
ICALL DRAW-PEG,LEFT-PEG-TABLE,0
ICALL DRAW-PEG,CENTER-PEG-TABLE,1
ICALL DRAW-PEG,RIGHT-PEG-TABLE,2
ZERO? ACTIVE-MOUSE /?CND1
ICALL2 PICINF-PLUS-ONE,TOWER-UNDO-BOX-LOC
CALL1 TOWER-WIN-CHECK
ZERO? STACK \?CTR4
ZERO? UNDOING /?CCL5
?CTR4: SET '?TMP2,DIM-UNDO-BOX
JUMP ?CND3
?CCL5: SET '?TMP2,UNDO-BOX
?CND3: GET PICINF-TBL,0 >?TMP1
GET PICINF-TBL,1
DISPLAY ?TMP2,?TMP1,STACK
ICALL2 PICINF-PLUS-ONE,TOWER-EXIT-BOX-LOC
GET PICINF-TBL,0 >?TMP1
GET PICINF-TBL,1
DISPLAY EXIT-BOX,?TMP1,STACK
?CND1: SCREEN S-TEXT
RTRUE
.FUNCT DRAW-PEG,TBL,X,WGT,CNT,?TMP1
GET B-X-TBL,X >X
?PRG1: EQUAL? CNT,6 /TRUE
GET TBL,CNT >WGT
ZERO? WGT /TRUE
CALL2 SET-B-PIC,WGT >?TMP1
GET B-Y-TBL,CNT
DISPLAY ?TMP1,STACK,X
INC 'CNT
JUMP ?PRG1
.FUNCT SET-B-PIC,WGT
EQUAL? WGT,1-WEIGHT \?CCL3
RETURN B-1-WEIGHT
?CCL3: EQUAL? WGT,2-WEIGHT \?CCL5
RETURN B-2-WEIGHT
?CCL5: EQUAL? WGT,3-WEIGHT \?CCL7
RETURN B-3-WEIGHT
?CCL7: EQUAL? WGT,4-WEIGHT \?CCL9
RETURN B-4-WEIGHT
?CCL9: EQUAL? WGT,5-WEIGHT \?CCL11
RETURN B-5-WEIGHT
?CCL11: EQUAL? WGT,6-WEIGHT \FALSE
RETURN B-6-WEIGHT
.FUNCT WEIRD-EXIT-F,RARG
EQUAL? PRSO,P?WEST \?PRD5
EQUAL? TOWER-BEATEN,PYRAMID-L /?CTR2
?PRD5: EQUAL? PRSO,P?NORTH \?PRD8
EQUAL? TOWER-BEATEN,PYRAMID /?CTR2
?PRD8: EQUAL? PRSO,P?EAST \?CCL3
EQUAL? TOWER-BEATEN,PYRAMID-R \?CCL3
?CTR2: RETURN TOWER-BEATEN
?CCL3: ZERO? RARG \FALSE
ICALL1 CANT-GO
RFALSE
.FUNCT WEIRD-ENTER-F,RARG
EQUAL? HERE,TOWER-BEATEN \?CCL3
RETURN WEIRD
?CCL3: ZERO? RARG \FALSE
ICALL1 RETURN-FROM-MAP
PRINTI "There DOES seem to be an outline of a entrance in that direction, but it appears sealed with no way to open it. Too bad."
CRLF
RFALSE
.FUNCT WEIRD-F,RARG
EQUAL? RARG,M-LOOK \FALSE
PRINTI "You are in a disturbing hallway; the lines of the walls are disorienting in a strange, non-Euclidean sort of way. The passageway "
ZERO? TOWER-BEATEN \?CCL6
PRINTI "ends abruptly to the north"
JUMP ?CND4
?CCL6: EQUAL? TOWER-BEATEN,PYRAMID \?CCL8
PRINTI "continues straight ahead, to the north"
JUMP ?CND4
?CCL8: PRINTI "curves sharply to the "
EQUAL? TOWER-BEATEN,PYRAMID-L \?CCL11
PRINTI "left"
JUMP ?CND9
?CCL11: PRINTI "right"
?CND9: PRINTI " here, ending at an archway to the "
EQUAL? TOWER-BEATEN,PYRAMID-L \?CCL14
PRINTI "west"
JUMP ?CND4
?CCL14: PRINTI "east"
?CND4: PRINTI ". To the south, the passage ends at a large arched door which is "
ICALL2 OPEN-CLOSED,LARGE-DOOR
PRINTC 46
RTRUE
.SEGMENT "0"
.FUNCT GOGGLES-F
EQUAL? PRSA,V?WEAR \?CCL3
EQUAL? HERE,GAMING-ROOM \?CCL3
FSET? ZORKMID-BILL,TOUCHBIT /?CCL3
IN? ZORKMID-BILL,LOCAL-GLOBALS \?CCL3
RANDOM 100
LESS? 33,STACK /?CCL10
PUSH J-POCKET
JUMP ?CND8
?CCL10: RANDOM 100
LESS? 50,STACK /?CCL12
PUSH J-SHOE
JUMP ?CND8
?CCL12: PUSH J-HAT
?CND8: MOVE ZORKMID-BILL,STACK
RFALSE
?CCL3: EQUAL? PRSA,V?EXAMINE \?CCL14
EQUAL? PRSI,GOGGLES \?CCL14
FSET? GOGGLES,WORNBIT /?CCL19
ICALL PERFORM,V?LOOK-INSIDE,GOGGLES
RTRUE
?CCL19: EQUAL? PRSI,WALL \FALSE
PRINTR "You see the inside of the wall, but apparently it's too thick for the goggles to see all the way through."
?CCL14: EQUAL? PRSA,V?EXAMINE \?CCL23
CALL NOUN-USED?,GOGGLES,W?ETCHING
ZERO? STACK /?CCL26
ICALL PERFORM,V?READ,GOGGLES
RTRUE
?CCL26: PRINTR "There is a small etching on one side of the goggles."
?CCL23: EQUAL? PRSA,V?READ \?CCL28
PRINTR """Frobozz Magic Goggles Company."""
?CCL28: EQUAL? PRSA,V?LOOK-INSIDE \FALSE
FSET? GOGGLES,WORNBIT \?CCL33
PRINTI "You glance about you"
PRINT ELLIPSIS
CALL1 V-LOOK
RSTACK
?CCL33: PRINT YOULL-HAVE-TO
PRINTR "wear them to do that."
.FUNCT DISCOVER-X-RAY
ZERO? DONT-KNOW-ABOUT-XRAY /FALSE
SET 'DONT-KNOW-ABOUT-XRAY,FALSE-VALUE
PRINTI "This is incredible! You can see right through the outside of the "
EQUAL? PRSO,UNOPENED-NUT /?CND4
PRINTI "closed "
?CND4: ICALL2 DPRINT,PRSO
PRINTI " as if it were transparent! "
RTRUE
.ENDSEG
.SEGMENT "CASTLE"
.FUNCT PYRAMID-F,RARG
EQUAL? RARG,M-LOOK \FALSE
PRINTI "This room, though rather wide at floor level, narrows as it rises like the interior of a pyramid or of an enormous beehive. "
EQUAL? TOWER-BEATEN,HERE \?CCL6
PRINTI "The only exit is "
EQUAL? HERE,PYRAMID \?CCL9
PRINTI "south"
JUMP ?CND7
?CCL9: EQUAL? HERE,PYRAMID-L \?CCL11
PRINTI "east"
JUMP ?CND7
?CCL11: PRINTI "west"
?CND7: PRINTC 46
RTRUE
?CCL6: PRINTI "There are no visible exits, although there's a faint outline of a doorway on the "
EQUAL? HERE,PYRAMID \?CCL14
PRINTI "south"
JUMP ?CND12
?CCL14: EQUAL? HERE,PYRAMID-L \?CCL16
PRINTI "east"
JUMP ?CND12
?CCL16: PRINTI "west"
?CND12: PRINTI " wall."
RTRUE
.SEGMENT "0"
.FUNCT CUP-F
EQUAL? PRSA,V?DRINK-FROM,V?DRINK \?CCL3
IN? POTION,CUP \?CCL6
ICALL PERFORM,V?DRINK,POTION
RTRUE
?CCL6: PRINTR "The cup is empty!"
?CCL3: EQUAL? PRSA,V?PUT \FALSE
EQUAL? PRSI,CUP \FALSE
IN? POTION,CUP \FALSE
ICALL PERFORM,V?PUT,PRSO,POTION
RTRUE
.ENDSEG
.SEGMENT "0"
.FUNCT POTION-F,X
EQUAL? PRSA,V?DRINK,V?TASTE \?CCL3
CALL2 ULTIMATELY-IN?,CUP
ZERO? STACK \?CND4
MOVE CUP,PROTAGONIST
PRINTI "[taking the cup first]"
CRLF
?CND4: PRINTI "You take a gulp. The potion is now "
EQUAL? POTION-GULPS,4 \?CCL8
PRINTI "a quarter"
JUMP ?CND6
?CCL8: EQUAL? POTION-GULPS,3 \?CCL10
PRINTI "half"
JUMP ?CND6
?CCL10: EQUAL? POTION-GULPS,2 \?CCL12
PRINTI "three-quarters"
JUMP ?CND6
?CCL12: REMOVE POTION
PRINTI "all"
?CND6: PRINTI " gone."
ZERO? PLANT-TALKER \?CND13
SET 'PLANT-TALKER,TRUE-VALUE
PRINTI " Your ears seem to tingle for a moment."
CRLF
?CND13: DEC 'POTION-GULPS
ICALL QUEUE,I-POTION,15
CALL FIND-IN,HERE,PLANTBIT >X
ZERO? X /TRUE
ZERO? TIME-STOPPED \TRUE
PRINTI " You notice that"
ICALL2 TPRINT,X
PRINTR " seems to be murmuring."
?CCL3: EQUAL? PRSA,V?PUT \?CCL20
EQUAL? PRSI,POTION \?CCL20
PRINTI "Dipping"
ICALL1 TPRINT-PRSO
PRINTI " into the potion seems to have no effect on"
CALL2 TRPRINT,PRSO
RSTACK
?CCL20: EQUAL? PRSA,V?POUR \?CCL24
EQUAL? PRSO,POTION \?CCL24
REMOVE POTION
PRINTR "The potion vanishes into a cloud of sweet-smelling fumes which quickly disperse."
?CCL24: EQUAL? PRSA,V?EXAMINE \FALSE
PRINTR "The potion is a yellow-green color."
.FUNCT I-POTION,X
SET 'PLANT-TALKER,FALSE-VALUE
ICALL1 RETURN-FROM-MAP
PRINTI " Your ears tingle again"
CALL FIND-IN,HERE,PLANTBIT >X
ZERO? X /?CND1
ZERO? TIME-STOPPED \?CND1
PRINTI ", and"
ICALL2 TPRINT,X
PRINTI " no longer seems to be murmuring"
?CND1: PRINT PERIOD-CR
RTRUE
.FUNCT PLANT-STUNNED
PRINTI "There is no response -- perhaps"
ICALL2 TPRINT,WINNER
PRINTI " is simply stunned to hear a human talking plant-talk."
CRLF
CALL1 STOP
RSTACK
.ENDSEG
.SEGMENT "FENSHIRE"
.FUNCT COOKPOT-F
EQUAL? PRSA,V?PUT \FALSE
PRINTR "The jester stops you. ""Non, non! Too many cooks spoil zee broth!"""
.ENDSEG
.ENDI