zorkzero/fenshire.zil

1123 lines
33 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

"FENSHIRE for
ZORK ZERO
(c) Copyright 1988 Infocom, Inc. All Rights Reserved."
<BEGIN-SEGMENT FENSHIRE>
;"the dirigible"
<ROOM DIRIGIBLE-HANGAR
(LOC ROOMS)
(REGION "Flatheadia")
(DESC "Dirigible Hangar")
(LDESC
"Even after becoming accustomed to the oversized scale of the castle,
this hangar seems tremendous. The only exit on foot is to the east.")
(EAST TO WEST-WING)
(OUT TO WEST-WING)
(IN PER DIRIGIBLE-ENTER-F)
(FLAGS RLANDBIT ONBIT)
(SYNONYM HANGAR)
(ADJECTIVE DIRIGIBLE LARGE)
(MAP-LOC <PTABLE MAIN-MAP-NUM MAP-GEN-Y-5 MAP-GEN-X-1>)
(GLOBAL GONDOLA)
(ACTION DIRIGIBLE-HANGAR-F)>
<ROUTINE DIRIGIBLE-ENTER-F ("OPTIONAL" (RARG <>)) ;"called by NEXT-ROOM?"
<COND (<IN? ,DIRIGIBLE ,HERE>
,GONDOLA)
(T
<COND (<NOT .RARG>
<V-WALK-AROUND>)>
<RFALSE>)>>
<ROUTINE DIRIGIBLE-HANGAR-F ("OPT" (RARG <>))
<COND (<AND ,DEMO-VERSION? <EQUAL? .RARG ,M-END>>
<END-DEMO>)>>
<OBJECT DIRIGIBLE
(LOC DIRIGIBLE-HANGAR)
(DESC "dirigible")
(LDESC
"A tremendous dirigible is moored here. The gondola is just a few inches
off the ground.")
(SYNONYM DIRIGIBLE)
(FLAGS VEHBIT) ;"so GET IN finds the dirigible"
(ACTION DIRIGIBLE-F)>
<ROUTINE DIRIGIBLE-F ()
<COND (<AND <VERB? THROW-FROM PUT-THROUGH>
<PRSI? ,DIRIGIBLE>>
<PERFORM-PRSA ,PRSO ,GONDOLA>)
(<VERB? EXAMINE>
<COND (<EQUAL? ,HERE ,GONDOLA>
<V-LOOK>)
(T
<TELL <GETP ,DIRIGIBLE ,P?LDESC> CR>)>)
(<VERB? LOOK-INSIDE>
<COND (<EQUAL? ,HERE ,GONDOLA>
<TELL ,LOOK-AROUND>)
(T
<TELL "You can't see much from out here." CR>)>)
(<VERB? ENTER>
<GOTO ,GONDOLA>)>>
<ROOM GONDOLA
(LOC ROOMS)
(REGION "Flatheadia")
(DESC "Gondola")
(OUT PER GONDOLA-EXIT-F)
(FLAGS RLANDBIT ONBIT)
(SYNONYM GONDOLA)
(GLOBAL WINDOW DIRIGIBLE DIRIGIBLE-HANGAR SMALLER-HANGAR)
(MAP-LOC ;"not a PTABLE because the info changes during dirigible trip"
<TABLE MAIN-MAP-NUM GONDOLA-AT-FLATHEADIA-LOC MAP-GEN-X-1>)
(ICON GONDOLA-ICON)
(ACTION GONDOLA-F)>
<ROUTINE GONDOLA-F ("OPTIONAL" (RARG <>))
<COND (<EQUAL? .RARG ,M-LOOK>
<TELL
"You are in the luxurious gondola of the dirigible. A window wraps completely
around the gondola. " ,GONDOLA-CONTROLS-DESC>)
(.RARG
<RFALSE>)
(<VERB? EXAMINE>
<PERFORM-PRSA ,DIRIGIBLE>)
(<AND <VERB? ENTER>
<NOT <EQUAL? ,HERE ,GONDOLA>>>
<DO-WALK ,P?IN>)
(<AND <VERB? LEAP-OFF EXIT>
<EQUAL? ,HERE ,GONDOLA>>
<DO-WALK ,P?OUT>)
(<VERB? LOOK-INSIDE>
<PERFORM-PRSA ,DIRIGIBLE>)
(<AND <VERB? THROW-FROM PUT-THROUGH>
<PRSI? ,GONDOLA ,GLOBAL-HERE>>
<COND (<OR <IN? ,DIRIGIBLE ,DIRIGIBLE-HANGAR>
<IN? ,DIRIGIBLE ,SMALLER-HANGAR>>
<MOVE ,PRSO <LOC ,DIRIGIBLE>>)
(T
<COND (<OR <PRSO? ,PERCH>
<ULTIMATELY-IN? ,PERCH ,PRSO>>
<SETG REMOVED-PERCH-LOC ,GROUND>)>
<REMOVE ,PRSO>)>
<TELL "You fling" T ,PRSO " out of the gondola." CR>)>>
<CONSTANT GONDOLA-CONTROLS-DESC
"The controls consist of merely two buttons: the left button
is marked \"Flatheadia\" and the right button is marked \"Fenshire.\"">
<OBJECT GONDOLA-CONTROLS
(LOC GONDOLA)
(DESC "controls")
(SYNONYM CONTROL CONTROLS)
(FLAGS NDESCBIT)
(ACTION GONDOLA-CONTROLS-F)>
<ROUTINE GONDOLA-CONTROLS-F ()
<COND (<VERB? EXAMINE>
<TELL ,GONDOLA-CONTROLS-DESC CR>)>>
<OBJECT LEFT-GONDOLA-BUTTON
(LOC GONDOLA)
(DESC "left button")
(SYNONYM BUTTON)
(ADJECTIVE LEFT)
(FLAGS NDESCBIT)
(ACTION GONDOLA-BUTTON-F)>
<OBJECT RIGHT-GONDOLA-BUTTON
(LOC GONDOLA)
(DESC "right button")
(SYNONYM BUTTON)
(ADJECTIVE RIGHT)
(FLAGS NDESCBIT)
(ACTION GONDOLA-BUTTON-F)>
<ROUTINE GONDOLA-BUTTON-F ()
<COND (<VERB? PUSH>
<COND (<OR ,TIME-STOPPED
<FSET? ,OUTER-GATE ,OPENBIT>
<G? ,DIRIGIBLE-COUNTER 0>
<AND <PRSO? ,LEFT-GONDOLA-BUTTON>
<IN? ,DIRIGIBLE ,DIRIGIBLE-HANGAR>>
<AND <PRSO? ,RIGHT-GONDOLA-BUTTON>
<IN? ,DIRIGIBLE ,SMALLER-HANGAR>>>
<TELL ,NOTHING-HAPPENS>)
(T
<QUEUE I-DIRIGIBLE -1>
<SETG DIRIGIBLE-COUNTER 1>
<COND (<AND ,BORDER-ON
<NOT <EQUAL? <LOWCORE INTID> ,DEC-20>>>
<CLEAR-BORDER>
<INIT-STATUS-LINE T>)>
<TELL
"The dirigible rises out of the hangar and sails ">
<COND (<IN? ,DIRIGIBLE ,DIRIGIBLE-HANGAR>
<SETG DESTINATION ,SMALLER-HANGAR>
<TELL "ea">)
(T
<SETG DESTINATION ,DIRIGIBLE-HANGAR>
<TELL "we">)>
<PUTP ,GONDOLA ,P?REGION "In the Air">
<PUT <GETP ,GONDOLA ,P?MAP-LOC> 0 <>>
<FSET ,DIRIGIBLE ,NDESCBIT>
<MOVE ,DIRIGIBLE ,GONDOLA>
<TELL "stward." CR>)>)>>
<ROUTINE GONDOLA-EXIT-F ("OPTIONAL" (RARG <>)) ;"called by NEXT-ROOM?"
<COND (<G? ,DIRIGIBLE-COUNTER 0>
<COND (.RARG
<RFALSE>)
(T
<JIGS-UP
"The experience is exhilarating, but you don't have much time to
enjoy it. Not as much time as you would've had if, for instance,
you'd worn a parachute.">)>)
(T
<RETURN <LOC ,DIRIGIBLE>>)>>
<GLOBAL DESTINATION <>>
<GLOBAL DIRIGIBLE-COUNTER 0>
<ROUTINE I-DIRIGIBLE ("AUX" TBL)
<COND (<EQUAL? ,HERE ,GONDOLA>
<RETURN-FROM-MAP>
<TELL " ">)>
<COND (<EQUAL? ,DIRIGIBLE-COUNTER 5>
<SET TBL <GETP ,GONDOLA ,P?MAP-LOC>>
<COND (<EQUAL? ,DESTINATION ,SMALLER-HANGAR>
<PUT .TBL 0 ,FENSHIRE-MAP-NUM>
<PUT .TBL 1 ,GONDOLA-AT-FENSHIRE-LOC>
<PUT .TBL 2 ,MAP-GEN-X-2>
<PUTP ,GONDOLA ,P?REGION "Fenshire">)
(T
<PUT .TBL 0 ,MAIN-MAP-NUM>
<PUT .TBL 1 ,GONDOLA-AT-FLATHEADIA-LOC>
<PUT .TBL 2 ,MAP-GEN-X-1>
<PUTP ,GONDOLA ,P?REGION "Flatheadia">)>
<MOVE ,DIRIGIBLE ,DESTINATION>
<FCLEAR ,DIRIGIBLE ,NDESCBIT>
<DEQUEUE I-DIRIGIBLE>
<SETG DIRIGIBLE-COUNTER 0>
<COND (<AND ,BORDER-ON
<EQUAL? ,HERE ,GONDOLA>
<NOT <EQUAL? <LOWCORE INTID> ,DEC-20>>>
<CLEAR-BORDER>
<SETG CURRENT-BORDER ,CASTLE-BORDER>
<SCREEN ,S-FULL>
<INIT-STATUS-LINE T>
<SCREEN ,S-TEXT>)>
<COND (<EQUAL? ,HERE ,GONDOLA>
<TELL
"The dirigible descends into a hangar and comes to a stop.">)
(<EQUAL? ,HERE ,DESTINATION>
<RETURN-FROM-MAP>
<TELL " A dirigible descends into the hangar.">)
(T
<RFALSE>)>)
(<NOT <EQUAL? ,HERE ,GONDOLA>>
<SETG DIRIGIBLE-COUNTER <+ ,DIRIGIBLE-COUNTER 1>>
<RFALSE>)
(T
<RETURN-FROM-MAP>
<TELL "The dirigible continues to glide along. ">
<COND (<EQUAL? ,DESTINATION ,DIRIGIBLE-HANGAR>
<TELL
<GET ,DIRIGIBLE-TRIP-DESCS <- 4 ,DIRIGIBLE-COUNTER>>>)
(T
<TELL
<GET ,DIRIGIBLE-TRIP-DESCS <- ,DIRIGIBLE-COUNTER 1>>>)>
<SETG DIRIGIBLE-COUNTER <+ ,DIRIGIBLE-COUNTER 1>>)>
<CRLF>>
<CONSTANT DIRIGIBLE-TRIP-DESCS
<PTABLE
"It is now passing over a thickly tangled woods, stretching for miles in every
direction."
"You are now above the Frigid River. Cliffs crowd the river on both sides. To
the south, you can just make out the spray of Aragain Falls."
"The dirigible rises even higher as it crosses the Flathead Mountains. Jagged,
snow-topped peaks slide by below."
"Below you are vast square bloits of dismal swampland: the endless marshes of
Fenshire.">>
;"the summer castle"
<ROOM SMALLER-HANGAR
(LOC ROOMS)
(REGION "Fenshire")
(DESC "Smaller Hangar")
(LDESC
"This hangar, though still large, is smaller than the one in Flatheadia.
The only exit is south.")
(SOUTH TO DESERTED-CASTLE)
(IN PER DIRIGIBLE-ENTER-F)
(OUT TO DESERTED-CASTLE)
(FLAGS RLANDBIT ONBIT)
(SYNONYM HANGAR)
(ADJECTIVE SMALLER)
(GLOBAL GONDOLA)
(VALUE 6)
(MAP-LOC <PTABLE FENSHIRE-MAP-NUM MAP-GEN-Y-3 MAP-GEN-X-2>)
(ACTION 0) ;"filled in by SLIDE-SHOW">
<ROUTINE SMALLER-HANGAR-F ("OPT" (RARG <>))
<COND (<AND <EQUAL? .RARG ,M-ENTER>
<NOT <FSET? ,SMALLER-HANGAR ,TOUCHBIT>>>
<QUEUE I-FOX -1>)>>
<ROOM DESERTED-CASTLE
(LOC ROOMS)
(REGION "Fenshire")
(DESC "Deserted Castle")
(LDESC
"The summer palace of the Kings of Quendor now lies in ruins, unoccupied
and uncared for, forgotten for many years. What's left of the castle can
be entered to the east, and a hangar lies to the north.")
(NORTH TO SMALLER-HANGAR)
(EAST TO RUINED-HALL)
(FLAGS RLANDBIT ONBIT OUTSIDEBIT)
(GLOBAL SMALLER-HANGAR)
(MAP-LOC <PTABLE FENSHIRE-MAP-NUM MAP-GEN-Y-4 MAP-GEN-X-2>)
(ACTION 0) ;"filled in by SLIDE-SHOW">
<ROUTINE DESERTED-CASTLE-F ("OPT" (RARG <>))
<COND (<AND <EQUAL? .RARG ,M-ENTER>
<NOT <FSET? ,DESERTED-CASTLE ,TOUCHBIT>>>
<QUEUE I-ROOSTER -1>)>>
<ROOM RUINED-HALL
(LOC ROOMS)
(REGION "Fenshire")
(DESC "Ruined Hall")
(NORTH TO MARSH IF ARCHWAY-OPEN ELSE "That archway has crumbled!")
(SOUTH TO HOTHOUSE)
(WEST TO DESERTED-CASTLE)
(EAST TO SECRET-ROOM IF SECRET-ROOM-REVEALED)
(UP SORRY "The stairs have crumbled beyond use.")
(FLAGS RLANDBIT ONBIT)
(GLOBAL STAIRS)
(MAP-LOC <PTABLE FENSHIRE-MAP-NUM MAP-GEN-Y-4 MAP-GEN-X-3>)
(ICON RUINED-HALL-ICON)
(ACTION RUINED-HALL-F)>
<ROUTINE RUINED-HALL-F ("OPT" (RARG <>))
<COND (<EQUAL? .RARG ,M-LOOK>
<TELL
"The entrance hall of the summer castle retains but a shadow of its former
elegance; the ceiling has partially collapsed, and myriad weeds grow amongst
the debris that covers the floor. A fireplace is choked with the rubble of its
collapsed chimney. Above the fireplace is a faded fresco, and next to that,
a tiny vase is mounted on the wall. Arched openings lead ">
<COND (,ARCHWAY-OPEN
<TELL "north, ">)>
<TELL "south and west. ">
<COND (<NOT ,ARCHWAY-OPEN>
<TELL "The archway to the north">
<COND (<NOT <IN? ,HEXAGONAL-BLOCK ,LOCAL-GLOBALS>>
<SETG ARCHWAY-OPEN T>
<TELL
", which had earlier crumbled, seems restored to its
former condition: decayed but passable! ">)
(T
<TELL " has crumbled to rubble. ">)>)>
<COND (,SECRET-ROOM-REVEALED
<TELL "In addition, a dusty passage leads east. ">)>
<TELL
"A stairway once led upwards, but there's little left of it.">)
(<AND <EQUAL? .RARG ,M-END>
<NOT ,ARCHWAY-OPEN>
<NOT <IN? ,HEXAGONAL-BLOCK ,LOCAL-GLOBALS>>>
<SETG ARCHWAY-OPEN T>)>>
<OBJECT FIREPLACE
(LOC RUINED-HALL)
(DESC "fireplace")
(SYNONYM FIREPLACE)
(ADJECTIVE CHOKED)
(FLAGS NDESCBIT)
(ACTION FIREPLACE-F)>
<ROUTINE FIREPLACE-F ()
<COND (<VERB? ENTER>
<DO-FIRST "clear out all the rubble">)
(<VERB? CLEAN>
<TELL
"Not a chance (unless you're actually a team of thirty people,
in disguise)." CR>)
(<VERB? LOOK-INSIDE>
<TELL "Rubble. Lots of rubble." CR>)>>
<OBJECT FRESCO
(LOC RUINED-HALL)
(DESC "fresco")
(SYNONYM FRESCO)
(ADJECTIVE FADED)
(FLAGS NDESCBIT)
(ACTION FRESCO-F)>
<ROUTINE FRESCO-F ()
<COND (<VERB? EXAMINE>
<TELL
"The fresco depicts the death of Duncanthrax. His spirit is ascending to
heaven on a tremendous ladder, surrounded by a host of angels." CR>)>>
<OBJECT VASE
(LOC RUINED-HALL)
(DESC "vase")
(SYNONYM VASE)
(ADJECTIVE SMALL)
(FLAGS NDESCBIT CONTBIT SEARCHBIT OPENBIT TRYTAKEBIT)
(ACTION VASE-F)>
<ROUTINE VASE-F ()
<COND (<VERB? CLOSE OPEN>
<TELL ,HUH>)
(<AND <VERB? TAKE>
<PRSO? ,VASE>>
<TELL "The vase is affixed to the wall." CR>)
(<AND <VERB? PUT>
<PRSO? ,FLOWER>
<NOT ,SECRET-ROOM-REVEALED>>
<SETG SECRET-ROOM-REVEALED T>
<SETG COMPASS-CHANGED T>
<MOVE ,FLOWER ,VASE>
<TELL
"The flower seems to grow fuller, its colors richer. You hear a noise,
and turn to see a passageway opening to the east!" CR>
<INC-SCORE 16>)>>
<GLOBAL SECRET-ROOM-REVEALED <>>
<ROOM SECRET-ROOM
(LOC ROOMS)
(REGION "Fenshire")
(DESC "Secret Room")
(LDESC
"You are the first person to breathe the air of this room in uncounted years.
The only exit is west.")
(WEST TO RUINED-HALL)
(OUT TO RUINED-HALL)
(FLAGS RLANDBIT)
(SYNONYM ROOM)
(ADJECTIVE SECRET)
(MAP-LOC <PTABLE FENSHIRE-MAP-NUM MAP-GEN-Y-4 MAP-GEN-X-4>)
(ICON SECRET-ROOM-ICON)>
;<BEGIN-SEGMENT 0>
<OBJECT LADDER
(LOC SECRET-ROOM)
(DESC "ladder")
(FDESC
"This room was probably intended as a hiding place for the royal family
in the event of a revolution, and may have once been well-stocked with
supplies. Now, however, the only item here is a small stepladder.")
;(LDESC "A small stepladder is standing here.")
(SYNONYM LADDER STEPLADDER)
(ADJECTIVE SMALL)
(CAPACITY 20)
(SIZE 20)
(FLAGS TAKEBIT VEHBIT CONTBIT SEARCHBIT SURFACEBIT)
(ACTION LADDER-F)>
<BEGIN-SEGMENT 0>
<ROUTINE LADDER-F ("OPTIONAL" (VARG <>))
<COND (.VARG
<RFALSE>)
(<VERB? OPEN CLOSE EXAMINE>
<TELL
"The stepladder seems to be stuck in the open position." CR>)
(<AND <VERB? PUT-UNDER>
<PRSO? ,MEGABOZ-TRAP-DOOR>>
<TELL "The ladder is now standing beneath the trap door." CR>)
(<VERB? STAND-ON CLIMB CLIMB-ON>
<PERFORM ,V?ENTER ,LADDER>
<RTRUE>)>>
<END-SEGMENT>
<BEGIN-SEGMENT FENSHIRE>
<GLOBAL ARCHWAY-OPEN T>
<GLOBAL STEPPING-STONES-VISIBLE <>>
<ROOM MARSH
(LOC ROOMS)
(REGION "Fenshire")
(DESC "Marsh")
(SOUTH TO RUINED-HALL IF ARCHWAY-OPEN ELSE
"The archway has collapsed; that way is now impassable.")
(NORTH PER STEPPING-STONES-F)
(FLAGS RLANDBIT ONBIT OUTSIDEBIT)
(GLOBAL SWAMP ARCH)
(ICON MARSH-ICON)
(MAP-LOC <PTABLE FENSHIRE-MAP-NUM MAP-GEN-Y-3 MAP-GEN-X-3>)
(ACTION MARSH-F)>
<ROUTINE MARSH-F ("OPT" (RARG <>))
<COND (<EQUAL? .RARG ,M-LOOK>
<TELL
"The swamps of Fenshire have encroached on this once-beautiful garden. The
garden wall is now just a pile of mossy stones, and the garden terraces are
ankle-deep with squishy mud. A c">
<COND (,ARCHWAY-OPEN
<TELL "rumbling archway leads">)
(T
<TELL "ollapsed archway blocks the exit to the">)>
<TELL " south. To the north">
<COND (,STEPPING-STONES-VISIBLE
<TELL
", stepping stones lead across a field of quicksand.">)
(T
<TELL " is a wide expanse of fetid quicksand.">)>)
(<EQUAL? .RARG ,M-END>
<COND (<AND <IN? ,JESTER ,HERE>
<VISIBLE? ,ROOSTER>
<FSET? ,ROOSTER ,ANIMATEDBIT>
<VISIBLE? ,FOX>
<FSET? ,FOX ,ANIMATEDBIT>
<VISIBLE? ,WORM>
<FSET? ,WORM ,ANIMATEDBIT>>
<MOVE ,JESTER ,NICE-LUNCH-SPOT>
<MOVE ,COOKPOT ,NICE-LUNCH-SPOT>
<MOVE ,COOKFIRE ,NICE-LUNCH-SPOT>
<SETG ARCHWAY-OPEN <>>
<SETG STEPPING-STONES-VISIBLE T>
<SETG COMPASS-CHANGED T>
<FSET ,RUINED-HALL ,REDESCBIT>
<RETURN-FROM-MAP>
<TELL
" The jester looks delighted. \"Sacre bleu! At last! All zee ingredients for
Borphbelly Stew! But zee ambience here eesn't quite right.\" He picks up his
cookpot AND his cookfire, and dashes across the quicksand to the north, using
a series of stepping stones which you'd swear weren't there a minute ago. This
flurry of activity seems to have been too much for the archway behind you; it
crumbles into a pile of rubble, blocking the exit to the south.|
The jester, out of sight amongst the reeds to the north, shouts, \"Yoo hoo!
I've found a lovely spot for lunch! Bring over zee ingredients!\"" CR>)
(<AND <NOT <IN? ,JESTER ,HERE>>
<IN? ,HEXAGONAL-BLOCK ,LOCAL-GLOBALS>
,ARCHWAY-OPEN>
<DEQUEUE I-JESTER>
<THIS-IS-IT ,JESTER>
<MOVE ,JESTER ,HERE>
<MOVE ,COOKPOT ,HERE>
<MOVE ,COOKFIRE ,HERE>
<TELL
" A string of eloquent cursing in a foreign tongue assaults you, and you spy
the jester " ,COOK-DESC " He is stirring a cookpot which sits upon a roaring
cookfire. \"Impossible!\" he shrieks, switching to a more familiar language.
\"Eet is impossible to cook a Borphbelly Stew weethout zee proper ingredients!
Impossible, impossible, impossible!\"" CR>)>)>>
<ROUTINE STEPPING-STONES-F ("OPTIONAL" (RARG <>)) ;"called by NEXT-ROOM?"
<COND (<NOT ,STEPPING-STONES-VISIBLE>
<COND (<NOT .RARG>
<TELL "You'd be sucked into the quicksand!" CR>)>
<RFALSE>)
(<G? <CCOUNT ,PROTAGONIST> 1>
<COND (<NOT .RARG>
<TELL
"It's difficult to balance on the stepping stones with all you're carrying.
You try, but after almost falling into the quicksand, you give up." CR>)>
<RFALSE>)
(<EQUAL? ,HERE ,MARSH>
,NICE-LUNCH-SPOT)
(T
,MARSH)>>
<ROOM NICE-LUNCH-SPOT
(LOC ROOMS)
(REGION "Fenshire")
(DESC "Nice Lunch Spot")
(LDESC
"Maybe the jester likes the ambience here, but to you it just looks like
a slightly drier spot amidst a reedy marsh. The reeds are impassably thick
in every direction, except to the south where a series of stepping stones
offers a way to cross a malodorous patch of quicksand.")
(SOUTH TO MARSH)
(FLAGS RLANDBIT ONBIT OUTSIDEBIT)
(MAP-LOC <PTABLE FENSHIRE-MAP-NUM MAP-GEN-Y-2 MAP-GEN-X-3>)
(ACTION NICE-LUNCH-SPOT-F)>
<ROUTINE NICE-LUNCH-SPOT-F ("OPT" (RARG <>))
<COND (<AND <EQUAL? .RARG ,M-END>
<VISIBLE? ,ROOSTER>
<FSET? ,ROOSTER ,ANIMATEDBIT>
<VISIBLE? ,FOX>
<FSET? ,FOX ,ANIMATEDBIT>
<VISIBLE? ,WORM>
<FSET? ,WORM ,ANIMATEDBIT>>
<MOVE ,HEXAGONAL-BLOCK ,SMALLER-HANGAR>
<FSET ,SMALLER-HANGAR ,REDESCBIT>
<FSET ,RUINED-HALL ,REDESCBIT>
<REMOVE ,WORM>
<REMOVE ,FOX>
<REMOVE ,ROOSTER>
<REMOVE ,COOKPOT>
<REMOVE ,COOKFIRE>
<DEQUEUE I-FOX>
<DEQUEUE I-ROOSTER>
<RETURN-FROM-MAP>
<TELL
" The jester says, \"Excellent! Zee ingredients for Borphbelly Stew and a "
D ,HERE " to enjoy eet!\" He tosses the animals into the cookpot, and begins
dishing out two generous portions of stew. Before you can eat it, a tremendous
weariness comes over you. The last thing you hear is the jester saying,
\"Waiter? Check, please!\"|
|
You awake from a deep sleep and struggle to your feet. As your head clears
you realize that you're not where you were when you fell asleep" ,ELLIPSIS>
<GOTO ,SMALLER-HANGAR>
<INC-SCORE 9>)>>
<BEGIN-SEGMENT 0>
<OBJECT HEXAGONAL-BLOCK
(LOC LOCAL-GLOBALS)
(DESC "hexagonal block")
(SYNONYM BLOCK ROCK)
(ADJECTIVE SMALL ELONGATED HEXAGONAL HEXAGON-SHAPED)
(FLAGS TAKEBIT)
(SIZE 3)
(ACTION HEXAGONAL-BLOCK-F)>
<ROUTINE HEXAGONAL-BLOCK-F ()
<COND (<VERB? EXAMINE>
<TELL
"It's just a small rock which has been neatly carved into the shape of an
elongated hexagon." CR>)>>
<END-SEGMENT>
<BEGIN-SEGMENT FENSHIRE>
<ROOM HOTHOUSE
(LOC ROOMS)
(REGION "Fenshire")
(DESC "Hothouse")
(LDESC
"This enclosed arboretum must have been a breathtaking room at one time. Now,
much of the glass is broken and the foliage has run wild, nearly obscuring the
exit to the north. Despite the broken glass, it's stiflingly hot in here.")
(NORTH TO RUINED-HALL)
(OUT TO RUINED-HALL)
(FLAGS RLANDBIT ONBIT)
(SYNONYM HOTHOUSE GREENHOUSE ARBORETUM)
(GLOBAL WINDOW)
(MAP-LOC <PTABLE FENSHIRE-MAP-NUM MAP-GEN-Y-5 MAP-GEN-X-3>)
(ICON HOTHOUSE-ICON)
(ACTION HOTHOUSE-F)>
<ROUTINE HOTHOUSE-F ("OPT" (RARG <>))
<COND (<AND <EQUAL? .RARG ,M-ENTER>
<FSET? ,FAN ,TRYTAKEBIT>>
<QUEUE I-SN 1>)>>
<CONSTANT SN-PICSET-TBL
<TABLE BOX-1
BOX-2
BOX-3
BOX-4
BOX-5
BOX-6
BOX-7
BOX-8
BOX-9
DIM-BOX-1
DIM-BOX-2
DIM-BOX-3
DIM-BOX-4
DIM-BOX-5
DIM-BOX-6
DIM-BOX-7
DIM-BOX-8
DIM-BOX-9
PILE-OF-0
PILE-OF-1
PILE-OF-2
PILE-OF-3
PILE-OF-4
PILE-OF-5
PILE-OF-6
PILE-OF-7
PILE-OF-8
PILE-OF-9
R-FLOWERS-0
R-FLOWERS-1
R-FLOWERS-2
R-FLOWERS-3
R-FLOWERS-4
R-FLOWERS-5
R-FLOWERS-6
R-FLOWERS-7
R-FLOWERS-8
R-FLOWERS-9
L-FLOWERS-0
L-FLOWERS-1
L-FLOWERS-2
L-FLOWERS-3
L-FLOWERS-4
0>>
<ROUTINE I-SN ()
<COND (<NOT <EQUAL? ,HERE ,HOTHOUSE>>
<RFALSE>)
(,ALLIGATOR
<QUEUE I-SN 1>
<RFALSE>)>
<RETURN-FROM-MAP>
<UPDATE-STATUS-LINE>
<TELL
" The jester steps out from behind some tropical vines, fanning himself with
a dainty paper fan. \"Hot enough for you? I know just the thing to take your
mind off this heat! It's one of my favorite games, Snarfem.|
\"The rules: I'll produce four piles of pebbles. Each of us, starting with
you, will remove as many pebbles as we feel like -- as long as they come from
the same pile. You must take at least one pebble each turn. The player who
takes the last pebble wins. It's that simple!\"" CR CR>
<HIT-ANY-KEY "Snarfem">
<SPLIT-BY-PICTURE ,SN-SPLIT T>
<ADJUST-TEXT-WINDOW ,SN-BOTTOM>
<REPEAT ()
;"All four piles should contain different numbers of pebbles,
such as 1-4-5-9 rather than 1-4-4-9. Also, the opening
position can't be a 'safe' position, or you can't win."
<PUT ,PILE-TABLE 1 <RANDOM 9>>
<REPEAT ()
<PUT ,PILE-TABLE 2 <RANDOM 9>>
<COND (<EQUAL? <GET ,PILE-TABLE 2>
<GET ,PILE-TABLE 1>>
<PUT ,PILE-TABLE 2 <+ <GET ,PILE-TABLE 2> 1>>
<COND (<EQUAL? <GET ,PILE-TABLE 2> 10>
<PUT ,PILE-TABLE 2 1>)>)
(T
<RETURN>)>>
<REPEAT ()
<PUT ,PILE-TABLE 3 <RANDOM 9>>
<COND (<EQUAL? <GET ,PILE-TABLE 3>
<GET ,PILE-TABLE 2>
<GET ,PILE-TABLE 1>>
<PUT ,PILE-TABLE 3 <+ <GET ,PILE-TABLE 3> 1>>
<COND (<EQUAL? <GET ,PILE-TABLE 3> 10>
<PUT ,PILE-TABLE 3 1>)>)
(T
<RETURN>)>>
<REPEAT ()
<PUT ,PILE-TABLE 4 <RANDOM 9>>
<COND (<EQUAL? <GET ,PILE-TABLE 4>
<GET ,PILE-TABLE 3>
<GET ,PILE-TABLE 2>
<GET ,PILE-TABLE 1>>
<PUT ,PILE-TABLE 4 <+ <GET ,PILE-TABLE 4> 1>>
<COND (<EQUAL? <GET ,PILE-TABLE 4> 10>
<PUT ,PILE-TABLE 4 1>)>)
(T
<RETURN>)>>
<COND (<NOT <SAFE-NUMBER? ,PILE-TABLE>>
<RETURN>)>>
<SETUP-SN>
<CRLF>
<SNARFEM>
<INIT-SL-WITH-SPLIT ,TEXT-WINDOW-PIC-LOC>
<COND (<FSET? ,FAN ,TRYTAKEBIT>
<TELL
"The jester claps you on the back and says, \"He who wins and
runs away, returns to let you win another day!\"">
<J-EXITS>)
(T
<MOVE ,FAN ,HERE>
<REMOVE-J>
<TELL
"\"You're undoubtedly not a flash in the pan; you've turned me into your
biggest fan!\" The jester is suddenly wearing a cap and sweater bearing your
initials, and waving a pennant with your name on it. Still chanting a cheer,
he vanishes, and you notice a delicate paper fan lying at your feet." CR>
<INC-SCORE 12>)>>
<ROUTINE SETUP-SN ()
<SCREEN ,S-FULL>
<DISPLAY ,SN-BORDER 1 1>
<SCREEN ,S-WINDOW>
<PICSET ,SN-PICSET-TBL>
<DRAW-PILE 1>
<DRAW-PILE 2>
<DRAW-PILE 3>
<DRAW-PILE 4>
<DRAW-FLOWERS>>
<ROUTINE DRAW-SN-BOXES ("OPTIONAL" (PILE <>) "AUX" X Y SPACE (CNT 1) TBL)
<SCREEN ,S-WINDOW>
<PICINF-PLUS-ONE ,BOX-1-LOC>
<SET Y <GET ,PICINF-TBL 0>>
<SET X <GET ,PICINF-TBL 1>>
<PICINF ,SN-BOX-SPACE ,PICINF-TBL>
<SET SPACE <GET ,PICINF-TBL 1>>
<REPEAT ()
<SET TBL <COND (<NOT .PILE>
<COND (<G? .CNT 4> ,DIM-BOX-TBL)
(<EQUAL? <GET ,PILE-TABLE .CNT> 0>
,DIM-BOX-TBL)
(T ,BOX-TBL)>)
(<G? .CNT <GET ,PILE-TABLE .PILE>> ,DIM-BOX-TBL)
(T ,BOX-TBL)>>
<DISPLAY <GET .TBL .CNT> .Y .X>
<COND (<EQUAL? .CNT 9>
<RETURN>)
(T
<SET X <+ .X .SPACE>>
<SET CNT <+ .CNT 1>>)>>
<SCREEN ,S-TEXT>>
<CONSTANT BOX-TBL
<PTABLE 0 BOX-1 BOX-2 BOX-3 BOX-4 BOX-5 BOX-6 BOX-7 BOX-8 BOX-9>>
<CONSTANT DIM-BOX-TBL
<PTABLE 0 DIM-BOX-1 DIM-BOX-2 DIM-BOX-3 DIM-BOX-4 DIM-BOX-5
DIM-BOX-6 DIM-BOX-7 DIM-BOX-8 DIM-BOX-9>>
<CONSTANT PILE-TABLE
<TABLE 0 0 0 0 0> ;"first element not used">
<ROUTINE DRAW-PILE (PILE "AUX" NUM PIC)
<SCREEN ,S-WINDOW>
<SET NUM <GET ,PILE-TABLE .PILE>>
<PICINF-PLUS-ONE <COND (<EQUAL? .PILE 1> ,PILE-1-PIC-LOC)
(<EQUAL? .PILE 2> ,PILE-2-PIC-LOC)
(<EQUAL? .PILE 3> ,PILE-3-PIC-LOC)
(T ,PILE-4-PIC-LOC)>>
<SET PIC <COND (<EQUAL? .NUM 0> ,PILE-OF-0)
(<EQUAL? .NUM 1> ,PILE-OF-1)
(<EQUAL? .NUM 2> ,PILE-OF-2)
(<EQUAL? .NUM 3> ,PILE-OF-3)
(<EQUAL? .NUM 4> ,PILE-OF-4)
(<EQUAL? .NUM 5> ,PILE-OF-5)
(<EQUAL? .NUM 6> ,PILE-OF-6)
(<EQUAL? .NUM 7> ,PILE-OF-7)
(<EQUAL? .NUM 8> ,PILE-OF-8)
(T ,PILE-OF-9)>>
<DISPLAY .PIC <GET ,PICINF-TBL 0> <GET ,PICINF-TBL 1>>
<SCREEN ,S-TEXT>>
<ROUTINE DRAW-FLOWERS ("AUX" (PILE 1) (NUM 1) LEFT RIGHT)
<COND (<SAFE-NUMBER? ,PILE-TABLE>
<SET LEFT ,L-FLOWERS-0>
<SET RIGHT ,R-FLOWERS-0>)
(T
<REPEAT ()
<COPYT <REST ,PILE-TABLE 2> <REST ,TEMP-TABLE 2> 8>
<COND (<EQUAL? <GET ,PILE-TABLE .PILE> 0>
<SET PILE <+ .PILE 1>>)
(<EQUAL? <+ <GET ,PILE-TABLE 1> <GET ,PILE-TABLE 2>
<GET ,PILE-TABLE 3> <GET ,PILE-TABLE 4>>
<GET ,PILE-TABLE .PILE>>
;"case where three piles are empty"
<SET NUM <GET ,PILE-TABLE .PILE>>
<RETURN>)
(T
<PUT ,TEMP-TABLE .PILE
<- <GET ,TEMP-TABLE .PILE> .NUM>>
<COND (<SAFE-NUMBER? ,TEMP-TABLE>
<RETURN>)
(<EQUAL? <- <GET ,PILE-TABLE .PILE> .NUM> 0>
<SET NUM 1>
<SET PILE <+ .PILE 1>>)
(T
<SET NUM <+ .NUM 1>>)>)>>
<SET LEFT <COND (<EQUAL? .PILE 1> ,L-FLOWERS-1)
(<EQUAL? .PILE 2> ,L-FLOWERS-2)
(<EQUAL? .PILE 3> ,L-FLOWERS-3)
(<EQUAL? .PILE 4> ,L-FLOWERS-4)>>
<SET RIGHT <COND (<EQUAL? .NUM 1> ,R-FLOWERS-1)
(<EQUAL? .NUM 2> ,R-FLOWERS-2)
(<EQUAL? .NUM 3> ,R-FLOWERS-3)
(<EQUAL? .NUM 4> ,R-FLOWERS-4)
(<EQUAL? .NUM 5> ,R-FLOWERS-5)
(<EQUAL? .NUM 6> ,R-FLOWERS-6)
(<EQUAL? .NUM 7> ,R-FLOWERS-7)
(<EQUAL? .NUM 8> ,R-FLOWERS-8)
(<EQUAL? .NUM 9> ,R-FLOWERS-9)>>)>
<SCREEN ,S-WINDOW>
<PICINF-PLUS-ONE ,L-FLOWERS-PIC-LOC>
<DISPLAY .LEFT <GET ,PICINF-TBL 0> <GET ,PICINF-TBL 1>>
<PICINF-PLUS-ONE ,R-FLOWERS-PIC-LOC>
<DISPLAY .RIGHT <GET ,PICINF-TBL 0> <GET ,PICINF-TBL 1>>
<SCREEN ,S-TEXT>>
<ROUTINE SNARFEM ("AUX" X NUM (PILE <>) (STOP-SN <>))
<REPEAT ()
<COND (.STOP-SN
<RETURN>)
(.PILE
<CLEAR ,S-TEXT>
<COND (,ACTIVE-MOUSE
<DRAW-SN-BOXES .PILE>)>
<TELL "Type a number ">
<COND (,ACTIVE-MOUSE
<TELL
"(or click on one of the numbered boxes with your mouse) ">)>
<TELL
"to indicate how many pebbles you want to remove from Pile #" N .PILE ".">
<REPEAT ()
<SET X <INPUT X>>
<MOUSE-INPUT?>
<COND (<EQUAL? .X ,CLICK1 ,CLICK2>
<SET X <SN-CLICK T>>)
(<AND <G? .X 144>
<L? .X 155>>
;"numeric keypad, 0=145, 1=146, etc."
<SET .X <- .X 145>>)
(T
;"normal # keys, 1 = 49, 2 = 50, etc."
<SET X <- .X 48>>)>
<COND (<OR <G? .X 9>
<L? .X 1>>
<CLEAR ,S-TEXT>
<TELL ,TYPE-A-NUMBER "9">
<COND (,ACTIVE-MOUSE
<TELL
" (or click on one of the numbered boxes with your mouse)">)>
<TELL ".">)
(<G? .X .NUM>
<CLEAR ,S-TEXT>
<TELL "There ">
<COND (<EQUAL? .NUM 1>
<TELL "is">)
(T
<TELL "are">)>
<TELL " only " N .NUM " pebble">
<COND (<NOT <EQUAL? .NUM 1>>
<TELL "s">)>
<TELL " in Pile #" N .PILE ".">)
(T
<CLEAR ,S-TEXT>
<TELL "You remove " N .X " pebble">
<COND (<NOT <EQUAL? .X 1>>
<TELL "s">)>
<TELL " from Pile #" N .PILE ".">
<COUNTDOWN-PILE .PILE .NUM .X>
<DRAW-FLOWERS>
<SET PILE <>>
<COND (<END-SN?>
<SET STOP-SN T>
<FCLEAR ,FAN ,TRYTAKEBIT>
<CRLF> <CRLF>
<HIT-ANY-KEY>
<RETURN>)
(T
<TELL CR " ">)>
<J-MOVE>
<COND (<END-SN?>
<SET STOP-SN T>
<CRLF> <CRLF>
<HIT-ANY-KEY>)
(T
<TELL CR " ">)>
<RETURN>)>>)
(T
<COND (,ACTIVE-MOUSE
<DRAW-SN-BOXES>)>
<TELL "Type a number ">
<COND (,ACTIVE-MOUSE
<TELL
"(or click on one of the numbered boxes with your mouse) ">)>
<TELL
"to select the pile from which you'd like to remove a pebble or pebbles.">
<REPEAT ()
<SET X <INPUT X>>
<MOUSE-INPUT?>
<COND (<EQUAL? .X ,CLICK1 ,CLICK2>
<SET X <SN-CLICK>>)
(<AND <G? .X 144>
<L? .X 155>>
;"numeric keypad, 0=145, 1=146, etc."
<SET .X <- .X 145>>)
(T
;"normal # keys, 1 = 49, 2 = 50, etc."
<SET X <- .X 48>>)>
<COND (<OR <G? .X 4>
<L? .X 1>>
<CLEAR ,S-TEXT>
<TELL ,TYPE-A-NUMBER "4">
<COND (,ACTIVE-MOUSE
<TELL
" (or click on one of the numbered boxes with your mouse)">)>
<TELL ".">)
(<EQUAL? <GET ,PILE-TABLE .X> 0>
<CLEAR ,S-TEXT>
<TELL
"There are no longer any pebbles in Pile #" N .X ".">)
(T
<SET PILE .X>
<SET NUM <GET ,PILE-TABLE .PILE>>
<RETURN>)>>)>>>
<ROUTINE SN-CLICK ("OPT" (ALREADY-PICKED-PILE <>)
"AUX" TL-X TL-Y BR-X BR-Y BOX-WIDTH BOX-HEIGHT (CNT 1) (HIT-SPOT <>))
<PICINF ,BOX-1 ,PICINF-TBL>
<SET BOX-WIDTH <GET ,PICINF-TBL 1>>
<SET BOX-HEIGHT <GET ,PICINF-TBL 0>>
<PICINF-PLUS-ONE ,BOX-1-LOC>
<SET TL-X <GET ,PICINF-TBL 1>>
<SET TL-Y <GET ,PICINF-TBL 0>>
<SET BR-Y <+ .TL-Y .BOX-HEIGHT>>
<PICINF ,SN-BOX-SPACE ,PICINF-TBL>
<REPEAT ()
<SET BR-X <+ .TL-X .BOX-WIDTH>>
<COND (<WITHIN? .TL-X .TL-Y .BR-X .BR-Y>
<SET HIT-SPOT T>
<RETURN>)
(<EQUAL? .CNT 9>
<RETURN>)
(T
<SET CNT <+ .CNT 1>>
<SET TL-X <+ .TL-X <GET ,PICINF-TBL 1>>>)>>
<COND (.HIT-SPOT
<RETURN .CNT>)
(.ALREADY-PICKED-PILE
<RFALSE>)>
<PICINF-PLUS-ONE ,PILE-OF-1>
<SET BOX-WIDTH <GET ,PICINF-TBL 1>>
<SET BOX-HEIGHT <GET ,PICINF-TBL 0>>
<PICINF-PLUS-ONE ,PILE-1-PIC-LOC>
<SET TL-X <GET ,PICINF-TBL 1>>
<SET TL-Y <GET ,PICINF-TBL 0>>
<SET BR-X <+ .TL-X .BOX-WIDTH>>
<SET BR-Y <+ .TL-Y .BOX-HEIGHT>>
<COND (<WITHIN? .TL-X .TL-Y .BR-X .BR-Y>
<SET CNT 1>
<SET HIT-SPOT T>)>
<COND (<NOT .HIT-SPOT>
<PICINF-PLUS-ONE ,PILE-2-PIC-LOC>
<SET TL-X <GET ,PICINF-TBL 1>>
<SET TL-Y <GET ,PICINF-TBL 0>>
<SET BR-X <+ .TL-X .BOX-WIDTH>>
<SET BR-Y <+ .TL-Y .BOX-HEIGHT>>
<COND (<WITHIN? .TL-X .TL-Y .BR-X .BR-Y>
<SET CNT 2>
<SET HIT-SPOT T>)>)>
<COND (<NOT .HIT-SPOT>
<PICINF-PLUS-ONE ,PILE-3-PIC-LOC>
<SET TL-X <GET ,PICINF-TBL 1>>
<SET TL-Y <GET ,PICINF-TBL 0>>
<SET BR-X <+ .TL-X .BOX-WIDTH>>
<SET BR-Y <+ .TL-Y .BOX-HEIGHT>>
<COND (<WITHIN? .TL-X .TL-Y .BR-X .BR-Y>
<SET CNT 3>
<SET HIT-SPOT T>)>)>
<COND (<NOT .HIT-SPOT>
<PICINF-PLUS-ONE ,PILE-4-PIC-LOC>
<SET TL-X <GET ,PICINF-TBL 1>>
<SET TL-Y <GET ,PICINF-TBL 0>>
<SET BR-X <+ .TL-X .BOX-WIDTH>>
<SET BR-Y <+ .TL-Y .BOX-HEIGHT>>
<COND (<WITHIN? .TL-X .TL-Y .BR-X .BR-Y>
<SET CNT 4>
<SET HIT-SPOT T>)>)>
<COND (.HIT-SPOT
<RETURN .CNT>)
(T
<RFALSE>)>>
<ROUTINE COUNTDOWN-PILE (PILE NUM X)
<REPEAT ()
<PUT ,PILE-TABLE .PILE <- <GET ,PILE-TABLE .PILE> 1>>
<DRAW-PILE .PILE>
<SET X <- .X 1>>
<COND (<EQUAL? .X 0>
<RETURN>)>>>
<CONSTANT BINARY-TABLE
<PTABLE 0 1 10 11 100 101 110 111 1000 1001>>
<ROUTINE SAFE-NUMBER? (TBL "AUX" X)
<SET X <+ <GET ,BINARY-TABLE <GET .TBL 1>>
<GET ,BINARY-TABLE <GET .TBL 2>>
<GET ,BINARY-TABLE <GET .TBL 3>>
<GET ,BINARY-TABLE <GET .TBL 4>>>>
<COND (<AND <EQUAL? <MOD .X 2> 0>
<EQUAL? <MOD </ .X 10> 2> 0>
<EQUAL? <MOD </ .X 100> 2> 0>
<EQUAL? <MOD </ .X 1000> 2> 0>>
<RTRUE>)
(T
<RFALSE>)>>
<CONSTANT TEMP-TABLE
<TABLE 0 0 0 0 0>>
<ROUTINE J-MOVE ("AUX" (PILE 1) (NUM 1))
<TELL "The jester peruses the piles, considering his move." CR CR>
<HIT-ANY-KEY>
<CLEAR ,S-TEXT>
<COND (<SAFE-NUMBER? ,PILE-TABLE>
<REPEAT () ;"pick a random pile, but make sure it isn't empty"
<SET PILE <RANDOM 4>>
<COND (<EQUAL? <GET ,PILE-TABLE .PILE> 0>
<COND (<EQUAL? .PILE 4>
<SET PILE 0>)
(T
<SET PILE <+ .PILE 1>>)>)
(T
<RETURN>)>>
;"now take a random number of pebbles between 1 and all of 'em"
<SET NUM <RANDOM <GET ,PILE-TABLE .PILE>>>)
(T
<REPEAT ()
<COPYT <REST ,PILE-TABLE 2> <REST ,TEMP-TABLE 2> 8>
<COND (<EQUAL? <GET ,PILE-TABLE .PILE> 0>
<SET PILE <+ .PILE 1>>)
(<EQUAL? <+ <GET ,PILE-TABLE 1> <GET ,PILE-TABLE 2>
<GET ,PILE-TABLE 3> <GET ,PILE-TABLE 4>>
<GET ,PILE-TABLE .PILE>>
;"case where three piles are empty"
<SET NUM <GET ,PILE-TABLE .PILE>>
<RETURN>)
(T
<PUT ,TEMP-TABLE .PILE
<- <GET ,TEMP-TABLE .PILE> .NUM>>
<COND (<SAFE-NUMBER? ,TEMP-TABLE>
<RETURN>)
(<EQUAL? <- <GET ,PILE-TABLE .PILE> .NUM> 0>
<SET NUM 1>
<SET PILE <+ .PILE 1>>)
(T
<SET NUM <+ .NUM 1>>)>)>>)>
<TELL "The jester removes " N .NUM " pebble">
<COND (<NOT <EQUAL? .NUM 1>>
<TELL "s">)>
<TELL " from Pile #" N .PILE ".">
<COUNTDOWN-PILE .PILE <GET ,PILE-TABLE .PILE> .NUM>
<DRAW-FLOWERS>>
<ROUTINE END-SN? ()
<COND (<AND <EQUAL? <GET ,PILE-TABLE 1> 0>
<EQUAL? <GET ,PILE-TABLE 2> 0>
<EQUAL? <GET ,PILE-TABLE 3> 0>
<EQUAL? <GET ,PILE-TABLE 4> 0>>
<RTRUE>)
(T
<RFALSE>)>>
<OBJECT FAN
(DESC "fan")
(SYNONYM FAN)
(ADJECTIVE DELICATE DAINTY PAPER)
(FLAGS TAKEBIT TRYTAKEBIT MAGICBIT)
(VALUE 0) ;"12 points given elsewhere"
(ACTION FAN-F)>
<ROUTINE FAN-F ()
<COND (<AND <VERB? POINT>
<EQUAL? ,P-PRSA-WORD ,W?WAVE>>
<TELL "You produce a light breeze." CR>)>>
<END-SEGMENT>