1355 lines
38 KiB
Plaintext
1355 lines
38 KiB
Plaintext
"MAGIC for
|
|
MAGE
|
|
(c) Copyright 1985 Infocom, Inc. All Rights Reserved."
|
|
|
|
"---Summary of magic spells---
|
|
|
|
-Spell- -English-
|
|
|
|
s AIMFIZ transport yourself to someone's location
|
|
e BLORB STRONG-BOX-SPELL
|
|
6 BLORPLE explore mystic connections
|
|
6 CASKLY perfect
|
|
e CLEESH NEWT-SPELL
|
|
6 ESPNIS SLEEP-SPELL
|
|
e EXEX HASTE-SPELL
|
|
e FILFRE CREDITS-SPELL
|
|
es FROTZ LIGHT-SPELL
|
|
s FWEEP turn caster into a bat
|
|
s GASPAR resurrection
|
|
6 GIRGOL stop time
|
|
es GNUSTO WRITE-MAGIC-SPELL
|
|
s GOLMAC travel temporally
|
|
e GONDAR QUENCH-SPELL
|
|
e GUNCHO BANISH-SPELL
|
|
es IZYUK FLY-SPELL
|
|
6 JINDAK detect magic
|
|
e KREBF REPAIR-SPELL
|
|
e KULCAD DISPEL-SPELL
|
|
6 LESOCH gust of wind
|
|
6 LISKON shrink
|
|
s MALYON bring life to inanimate objects
|
|
s MEEF cause plants to wilt
|
|
e MELBOR PROTECTION-SPELL
|
|
e NITFOL TALK-TO-ANIMALS-SPELL
|
|
e OZMOO CHEAT-DEATH-SPELL
|
|
s PULVER cause liquids to dry up
|
|
es REZROV OPEN-SPELL
|
|
6 SNAVIG transform into another
|
|
s SWANZO exorcise an inhabiting presence
|
|
6 THROCK cause plants to grow
|
|
6 TINSOT freeze
|
|
s VARDIK shield a mind from an evil spirit
|
|
e VAXUM CHARM-SPELL
|
|
s VEZZA view the future
|
|
s YOMIN mind probe
|
|
s YONK augment the power of certain spells
|
|
e ZIFMIA SUMMON-SPELL
|
|
|
|
-Potion- -English-
|
|
|
|
s BERZIO obviate need for food and drink
|
|
s BLORT see in the dark
|
|
s FLAXO exquisite torture
|
|
s FOOBLE increase coordination
|
|
s VILSTU obviate need for breathing
|
|
"
|
|
|
|
<OBJECT SPELL-BOOK
|
|
(IN PLAYER)
|
|
(SYNONYM BOOK NOTES)
|
|
(ADJECTIVE MY SPELL MARGIN)
|
|
(DESC "spell book")
|
|
(ACTION SPELL-BOOK-F)
|
|
(FLAGS TOUCHBIT TAKEBIT READBIT CONTBIT OPENBIT MAGICBIT)>
|
|
|
|
<GLOBAL SEEN-BLORPLE? <>>
|
|
|
|
<ROUTINE SPELL-BOOK-F ("AUX" F)
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"This is your well-used old " 'SPELL-BOOK ", first given to you by Belboz
|
|
years ago after your original book was lost. ">
|
|
<COND (<FSET? ,PRSO ,RMUNGBIT>
|
|
<TELL
|
|
"He would be appalled by its current ruined condition. It's
|
|
water-soaked, and the ink has run. It's useless.">)
|
|
(ELSE
|
|
<TELL "There are some spells
|
|
written in the book, those few still working of the many you once knew.
|
|
The rest have faded away.">
|
|
<COND (<AND ,CLEESHED? <NOT ,SEEN-BLORPLE?>>
|
|
<SEE-BLORPLE>
|
|
<TELL
|
|
" As you look at it closely, though, you realize that the book has
|
|
changed subtly from its previous appearance. There is a new
|
|
entry: " 'BLORPLE-SPELL " ("
|
|
<GETP ,BLORPLE-SPELL ,P?TEXT> ").">)>)>
|
|
<CRLF>)
|
|
(<VERB? OPEN CLOSE>
|
|
<TELL
|
|
"The " 'SPELL-BOOK " is always open to the right place, but it is also
|
|
always closed. This eliminates tedious leafing and hunting for spells.
|
|
Many lives have been saved by this magical innovation." CR>)
|
|
(<VERB? READ LOOK-INSIDE>
|
|
<COND (<FSET? ,PRSO ,RMUNGBIT>
|
|
<TELL
|
|
CTHE ,SPELL-BOOK " is totally unreadable. The ink has run, and the pages
|
|
are soaked. What a mess!" CR>
|
|
<RTRUE>)
|
|
(<NOT ,LIT>
|
|
<TELL
|
|
"The magic writing of the spells casts enough light
|
|
that you can read them." CR>)>
|
|
<TELL "My Spell Book|
|
|
|
|
|
">
|
|
<MAP-CONTENTS (F ,SPELL-BOOK)
|
|
<TELL CTHE .F " (" <GETP .F ,P?TEXT> ")." CR>>
|
|
<COND (<AND ,CLEESHED? <NOT ,SEEN-BLORPLE?>>
|
|
<SEE-BLORPLE>
|
|
<TELL
|
|
"|
|
|
Oddly enough, you have never before seen or heard of the blorple spell
|
|
which now graces (or defaces?) your book." CR>)>
|
|
<RTRUE>)
|
|
(<VERB? WRITE>
|
|
<TELL
|
|
"When you are done, the " 'SPELL-BOOK " remains unmarred." CR>)>>
|
|
|
|
<OBJECT BLORPLE-SPELL
|
|
(IN CASTLE) ;"so MOBY-FIND can find it"
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC BLORPLE)
|
|
(DESC "blorple spell")
|
|
(TEXT "explore an object's mystic connections")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT LESOCH-SPELL
|
|
(IN SPELL-BOOK)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC LESOCH)
|
|
(DESC "lesoch spell")
|
|
(TEXT "gust of wind")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT SNAVIG-SPELL
|
|
(IN CASTLE) ;"so MOBY-FIND can find it"
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC SNAVIG)
|
|
(DESC "snavig spell")
|
|
(TEXT "shape change")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT GIRGOL-SCROLL
|
|
(IN CASTLE) ;"so MOBY-FIND can find it"
|
|
(SYNONYM SCROLL)
|
|
(ADJECTIVE FLIMSY)
|
|
(DESC "flimsy scroll")
|
|
(ACTION SCROLL-F)
|
|
(FLAGS TAKEBIT TRYTAKEBIT READBIT
|
|
SCROLLBIT CONTBIT TRANSBIT)>
|
|
|
|
<OBJECT GIRGOL-SPELL
|
|
(IN GIRGOL-SCROLL)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC GIRGOL)
|
|
(DESC "girgol spell")
|
|
(TEXT "stop time")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT JINDAK-SPELL
|
|
(IN SPELL-BOOK)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC JINDAK)
|
|
(DESC "jindak spell")
|
|
(TEXT "detect magic")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT ESPNIS-SCROLL
|
|
(IN OGRE-BEDROOM)
|
|
(SYNONYM SCROLL)
|
|
(ADJECTIVE DUSTY)
|
|
(DESC "dusty scroll")
|
|
(ACTION SCROLL-F)
|
|
(FLAGS TAKEBIT TRYTAKEBIT READBIT
|
|
SCROLLBIT CONTBIT TRANSBIT)>
|
|
|
|
<OBJECT ESPNIS-SPELL
|
|
(IN ESPNIS-SCROLL)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC ESPNIS)
|
|
(DESC "espnis spell")
|
|
(TEXT "sleep")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT TINSOT-SCROLL
|
|
(IN GLACIER-ROOM)
|
|
(SYNONYM SCROLL)
|
|
(ADJECTIVE WHITE)
|
|
(DESC "white scroll")
|
|
(ACTION SCROLL-F)
|
|
(FLAGS TAKEBIT TRYTAKEBIT READBIT
|
|
SCROLLBIT CONTBIT TRANSBIT)>
|
|
|
|
<OBJECT TINSOT-SPELL
|
|
(IN TINSOT-SCROLL)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC TINSOT)
|
|
(DESC "tinsot spell")
|
|
(TEXT "freeze")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT THROCK-SCROLL
|
|
(IN CLIFF-MIDDLE)
|
|
(SYNONYM SCROLL)
|
|
(ADJECTIVE DIRTY)
|
|
(DESC "dirty scroll")
|
|
(ACTION SCROLL-F)
|
|
(FLAGS TAKEBIT TRYTAKEBIT READBIT
|
|
SCROLLBIT CONTBIT TRANSBIT)>
|
|
|
|
<OBJECT THROCK-SPELL
|
|
(IN THROCK-SCROLL)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC THROCK)
|
|
(DESC "throck spell")
|
|
(TEXT "cause plants to grow")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT CASKLY-SCROLL
|
|
(IN ROC-NEST)
|
|
(SYNONYM SCROLL)
|
|
(ADJECTIVE STAINED)
|
|
(DESC "stained scroll")
|
|
(ACTION SCROLL-F)
|
|
(FLAGS TAKEBIT TRYTAKEBIT READBIT
|
|
SCROLLBIT CONTBIT TRANSBIT)>
|
|
|
|
<OBJECT CASKLY-SPELL
|
|
(IN CASKLY-SCROLL)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC CASKLY)
|
|
(DESC "caskly spell")
|
|
(TEXT "cause perfection")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT LISKON-SCROLL
|
|
(IN BOTTLE)
|
|
(SYNONYM SCROLL)
|
|
(ADJECTIVE DAMP)
|
|
(DESC "damp scroll")
|
|
(ACTION SCROLL-F)
|
|
(FLAGS NDESCBIT
|
|
TAKEBIT TRYTAKEBIT READBIT
|
|
SCROLLBIT CONTBIT TRANSBIT)>
|
|
|
|
<OBJECT LISKON-SPELL
|
|
(IN LISKON-SCROLL)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC LISKON)
|
|
(DESC "liskon spell")
|
|
(TEXT "shrink a living thing")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
"OLD SPELLS"
|
|
|
|
<OBJECT MALYON-SPELL
|
|
(IN SPELL-BOOK)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC MALYON)
|
|
(DESC "malyon spell")
|
|
(TEXT "animate")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT GNUSTO-SPELL
|
|
(IN SPELL-BOOK)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC GNUSTO)
|
|
(DESC "gnusto spell")
|
|
(TEXT "write a magic spell into a spell book")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT FROTZ-SPELL
|
|
(IN SPELL-BOOK)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC FROTZ)
|
|
(DESC "frotz spell")
|
|
(TEXT "cause something to give off light")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT REZROV-SPELL
|
|
(IN SPELL-BOOK)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC REZROV)
|
|
(DESC "rezrov spell")
|
|
(TEXT "open even locked or enchanted objects")
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)>
|
|
|
|
<OBJECT YOMIN-SPELL
|
|
(IN SPELL-BOOK)
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE AABBCC YOMIN)
|
|
(DESC "yomin spell")
|
|
(TEXT "mind probe")
|
|
(COUNT 0)
|
|
(SIZE 1)
|
|
(FLAGS NDESCBIT SPELLBIT)
|
|
(ACTION SPELL-F)>
|
|
|
|
<ROUTINE SCROLL-F ("AUX" SPELL)
|
|
<COND (<VERB? TAKE>
|
|
<SET SPELL <FIRST? ,PRSO>>
|
|
<FSET .SPELL ,TOUCHBIT>
|
|
<FCLEAR ,PRSO ,TRYTAKEBIT>
|
|
<RFALSE>)
|
|
;(<AND <NOT <FIRST? ,PRSO>>
|
|
<NOT <FIRST? ,PRSI>>>
|
|
<TELL "Bug #72" CR>)
|
|
(<VERB? GNUSTO COPY WRITE>
|
|
<COND (<AND <FSET? ,PRSO ,SCROLLBIT>
|
|
<NOT <IN? ,PRSO ,WINNER>>>
|
|
<MUST-HOLD-SCROLL>)
|
|
(<SET SPELL <FIRST? ,PRSO>>
|
|
<PERFORM ,PRSA .SPELL ,PRSI>
|
|
<RTRUE>)>)
|
|
(<VERB? EXAMINE READ>
|
|
<READ-SCROLL>)>>
|
|
|
|
<ROUTINE SCROLL-WET ()
|
|
<TELL
|
|
"The scroll is wet, and the spell cannot be read." CR>>
|
|
|
|
<ROUTINE READ-SCROLL ("OPTIONAL" (SPELL <>))
|
|
<COND (<FSET? ,PRSO ,RMUNGBIT>
|
|
<SCROLL-WET>
|
|
<RTRUE>)>
|
|
<COND (<NOT .SPELL> <SET SPELL <FIRST? ,PRSO>>)>
|
|
<TELL "The scroll">
|
|
<SPELL-READS .SPELL>>
|
|
|
|
<ROUTINE MUST-HOLD-SCROLL ()
|
|
<TELL
|
|
"You must be holding the spell scroll you wish to copy!" CR>>
|
|
|
|
<ROUTINE SPELL-F ("AUX" MEM? (FORGET <>))
|
|
<COND (<AND <VERB? READ LEARN>
|
|
<NOT <IN? ,PRSO ,SPELL-BOOK>>
|
|
<FSET? <LOC ,PRSO> ,TOUCHBIT>
|
|
<NOT <IN? <LOC ,PRSO> ,WINNER>>>
|
|
<TELL
|
|
,YOU-CANT "do that without having the spell in your book." CR>
|
|
<RFATAL>)
|
|
(<AND <VERB? READ LEARN>
|
|
<FSET? ,SPELL-BOOK ,RMUNGBIT>>
|
|
<PERFORM ,V?READ ,SPELL-BOOK>
|
|
<THIS-IS-IT ,PRSO>
|
|
<RFATAL>)
|
|
(<AND <LOC ,PRSO>
|
|
<FSET? <LOC ,PRSO> ,RMUNGBIT>>
|
|
<SCROLL-WET>)
|
|
(<VERB? READ>
|
|
<TELL "The spell">
|
|
<SPELL-READS ,PRSO>)
|
|
(<VERB? LEARN>
|
|
<COND (<NOT <IN? ,PRSO ,SPELL-BOOK>>
|
|
<COND (<HELD? ,PRSO>
|
|
<TELL
|
|
"You haven't written that spell into your book yet. Until you do, you
|
|
can't memorize the spell." CR>)
|
|
(T
|
|
<V-LEARN>)>
|
|
<RFATAL>)
|
|
(<IN? ,PRSO ,DEAD-BOOK>
|
|
<TELL
|
|
"You can learn spells only from your own " 'SPELL-BOOK>
|
|
<TELL ,PERIOD>
|
|
<RFATAL>)
|
|
(<EQUAL? ,PRSO
|
|
,GNUSTO-SPELL ,FROTZ-SPELL ,REZROV-SPELL>
|
|
<TELL "You already know that spell by heart." CR>)
|
|
(<NOT <IN? ,SPELL-BOOK ,WINNER>>
|
|
<TELL
|
|
,YOU-DONT-HAVE "your " 'SPELL-BOOK ". You can't memorize a spell
|
|
without a " 'SPELL-BOOK ,PERIOD>
|
|
<RFATAL>)
|
|
(T
|
|
<SET MEM? <GETP ,PRSO ,P?COUNT>>
|
|
<COND (<NOT <HELD? ,MAGIC-CUBE>>
|
|
<COND (<OR <EQUAL? ,SPELL-MAX 1>
|
|
<G? ,AWAKE 6>
|
|
<AND <G? ,AWAKE 0>
|
|
<PROB <* 5 ,AWAKE>>>>
|
|
<TELL
|
|
,YOU-CANT "concentrate well enough to learn the spell." CR>
|
|
<RTRUE>)
|
|
(<EQUAL? .MEM? ,SPELL-MAX>
|
|
<TELL
|
|
"You try, but you just can't memorize those complex syllables again.
|
|
They slip out of your memory as soon as you cram them in." CR>
|
|
<RTRUE>)
|
|
(<NOT <G? ,SPELL-ROOM 0>>
|
|
<FORGET-SPELL>
|
|
<SETG SPELL-ROOM 1>
|
|
<SET FORGET T>)>)>
|
|
<SETG SPELL-ROOM <- ,SPELL-ROOM 1>>
|
|
<SET MEM? <+ .MEM? 1>>
|
|
<PUTP ,PRSO ,P?COUNT .MEM?>
|
|
<COND (<HELD? ,MAGIC-CUBE>
|
|
<TELL "You easily">)
|
|
(ELSE
|
|
<TELL "Using your best study habits, you">)>
|
|
<TELL " learn the " 'PRSO>
|
|
<COND (<G? .MEM? 1>
|
|
<TELL " yet another time">)>
|
|
<TELL ,PERIOD>
|
|
<COND (.FORGET
|
|
<TELL
|
|
"You have so much buzzing around in your head, though, that it's
|
|
likely that something may have been forgotten in the shuffle." CR>)>
|
|
<RTRUE>)>)
|
|
(<AND <NOT <VISIBLE? ,PRSO>>
|
|
<NOT <VERB? CAST>>>
|
|
<TELL ,YOU-CANT-SEE "that spell here!" CR>)
|
|
(<VERB? TAKE DROP THROW>
|
|
<TELL-YUKS>)>>
|
|
|
|
<ROUTINE SPELL-READS (SPELL)
|
|
<TELL
|
|
" reads \"" D .SPELL ": " <GETP .SPELL ,P?TEXT> ".\"">
|
|
<COND (<OR <EQUAL? .SPELL ,GIRGOL-SPELL>
|
|
<AND <EQUAL? .SPELL ,SPELL-COPY>
|
|
<EQUAL? <GETP .SPELL ,P?WALLS> ,GIRGOL-SPELL>>>
|
|
<TELL
|
|
" The spell is long and complicated.">)>
|
|
<CRLF>>
|
|
|
|
<ROUTINE FORGET-SPELL ("AUX" F TBL (NUM 0) (SP <>))
|
|
<SET F <FIRST? ,SPELL-BOOK>>
|
|
<SET TBL ,FORGET-TBL>
|
|
<REPEAT ()
|
|
<COND (<NOT .F> <RETURN>)
|
|
(<G? <GETP .F ,P?COUNT> 0>
|
|
<SET SP .F>
|
|
<PUT .TBL 1 .F>
|
|
<SET NUM <+ .NUM 1>>
|
|
<SET TBL <REST .TBL 2>>)>
|
|
<SET F <NEXT? .F>>>
|
|
<COND (<ZERO? .NUM> <RTRUE>)>
|
|
<COND (<G? .NUM 1>
|
|
<PUT ,FORGET-TBL 0 .NUM>
|
|
<SET SP <RANDOM-ELEMENT ,FORGET-TBL>>)>
|
|
<PUTP .SP ,P?COUNT <- <GETP .SP ,P?COUNT> 1>>>
|
|
|
|
<GLOBAL FORGET-TBL <LTABLE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>>
|
|
|
|
<ROUTINE FORGET-ALL ("AUX" F)
|
|
<SETG SPELL-ROOM ,SPELL-MAX>
|
|
<MAP-CONTENTS (F ,SPELL-BOOK)
|
|
<PUTP .F ,P?COUNT 0>>>
|
|
|
|
<ROUTINE WEAR-OFF-SPELLS ("OPTIONAL" (SLEEP? T))
|
|
<COND (,CHANGED?
|
|
<COND (.SLEEP? <I-SNAVIG>)
|
|
(ELSE
|
|
<SETG CHANGED? <>>
|
|
<DEQUEUE I-SNAVIG>)>)> ;"not changed"
|
|
<COND (,SHRINK-FLAG
|
|
<COND (.SLEEP? <I-LISKON>)
|
|
(ELSE
|
|
<COND (<AND <HELD? ,SHRINK-FLAG>
|
|
<EQUAL? ,SHRINK-FLAG ,WEED>>
|
|
<MOVE ,WEED ,HERE>)>
|
|
<SETG SHRINK-FLAG <>>
|
|
<SETG SMALL-FLAG <>>
|
|
<DEQUEUE I-LISKON>)>)> ;"not shrunk"
|
|
<COND (,TIME-STOPPED?
|
|
<COND (.SLEEP? <I-GIRGOL>)
|
|
(ELSE
|
|
<SETG TIME-STOPPED? <>>
|
|
<SETG ROCK-FLAG <>>
|
|
<DEQUEUE I-GIRGOL>)>)> ;"not time-stopped"
|
|
<COND (,ESPNIS?
|
|
<COND (.SLEEP? <I-ESPNIS>)
|
|
(ELSE
|
|
<SETG ESPNIS? <>>
|
|
<DEQUEUE I-ESPNIS>)>)> ;"not sleeped">
|
|
|
|
<GLOBAL REAL-SPELL-MAX 4>
|
|
<GLOBAL SPELL-MAX 4> ;"max spells memorizable"
|
|
<GLOBAL SPELL-ROOM 4> ;"number can memorize now"
|
|
|
|
"subtitle magic-related verbs"
|
|
|
|
<ROUTINE SPELL-VERB? ()
|
|
<VERB? GNUSTO FROTZ REZROV TINSOT YOMIN
|
|
MALYON LESOCH BLORPLE SNAVIG GIRGOL
|
|
JINDAK ESPNIS CASKLY LISKON THROCK>>
|
|
|
|
<ROUTINE PRE-CAST ("AUX" SPELL SCROLL)
|
|
<COND (,SPELL-CAST <RFALSE>)>
|
|
<SET SPELL
|
|
<COND (<VERB? GNUSTO> ,GNUSTO-SPELL)
|
|
(<VERB? FROTZ> ,FROTZ-SPELL)
|
|
(<VERB? REZROV> ,REZROV-SPELL)
|
|
(<VERB? YOMIN> ,YOMIN-SPELL)
|
|
(<VERB? LESOCH> ,LESOCH-SPELL)
|
|
(<VERB? BLORPLE> ,BLORPLE-SPELL)
|
|
(<VERB? SNAVIG> ,SNAVIG-SPELL)
|
|
(<VERB? GIRGOL> ,GIRGOL-SPELL)
|
|
(<VERB? JINDAK> ,JINDAK-SPELL)
|
|
(<VERB? ESPNIS> ,ESPNIS-SPELL)
|
|
(<VERB? MALYON> ,MALYON-SPELL)
|
|
(<VERB? CASKLY> ,CASKLY-SPELL)
|
|
(<VERB? LISKON> ,LISKON-SPELL)
|
|
(<VERB? THROCK> ,THROCK-SPELL)
|
|
(<VERB? TINSOT> ,TINSOT-SPELL)
|
|
(<VERB? $XEROX> ,SPELL-COPY)>>
|
|
<COND (<AND <IN? .SPELL ,BLANK-SCROLL>
|
|
<IN? <LOC ,SPELL-COPY> ,WINNER>
|
|
<NOT <IN? ,BLANK-SCROLL ,WINNER>>>
|
|
<SET SPELL ,SPELL-COPY>)>
|
|
<COND (<EQUAL? ,CHANGED? ,GROUPER ,SNAKE ,GRUE>
|
|
<TELL
|
|
"Your mouth cannot form the words of spells while you are changed into a "
|
|
'CHANGED? ,PERIOD>
|
|
<RTRUE>)
|
|
(<EQUAL? ,HERE ,OCEAN-FLOOR>
|
|
<TELL
|
|
"You can't cast a spell while underwater!" CR>
|
|
<RTRUE>)>
|
|
<SET SCROLL <LOC .SPELL>>
|
|
<COND (<OR <EQUAL? .SPELL ,PRSO>
|
|
<AND <EQUAL? .SCROLL ,PRSO>
|
|
<NOT <EQUAL? .SCROLL ,SPELL-BOOK>>>>
|
|
<TELL
|
|
"As you must remember from Thaumaturgy 101, you cannot cast a spell upon
|
|
itself, or upon the scroll it is written on." CR>
|
|
<RTRUE>)
|
|
(<AND .SCROLL
|
|
<NOT <EQUAL? .SCROLL ,SPELL-BOOK>>
|
|
<OR <FSET? .SCROLL ,SCROLLBIT>
|
|
<EQUAL? .SCROLL ,DEAD-BOOK>>>
|
|
<COND (<FSET? .SCROLL ,RMUNGBIT>
|
|
<TELL CTHE .SCROLL " is unreadable." CR>
|
|
<RTRUE>)
|
|
(<IN? .SCROLL ,WINNER>
|
|
<REMOVE .SCROLL>
|
|
<TELL
|
|
"As you cast the spell, " THE .SCROLL " vanishes!" CR>
|
|
<PUTP .SPELL ,P?COUNT 1>)
|
|
(T
|
|
<TELL
|
|
CTHE .SPELL " is not memorized, and you aren't holding a scroll
|
|
on which it is written." CR>
|
|
<RTRUE>)>)>
|
|
<COND (<EQUAL? .SPELL ,SPELL-COPY>
|
|
<SETG PRSA <GETP ,SPELL-COPY ,P?EXITS>>)>
|
|
<COND (<AND <VERB? BLORPLE> <NOT <IN? ,PRSO ,WINNER>>>
|
|
<NOT-HOLDING ,PRSO>
|
|
<RTRUE>)>
|
|
<COND (<OR <NOT <ZERO? <GETP .SPELL ,P?COUNT>>>
|
|
<EQUAL? .SPELL ,GNUSTO-SPELL ,REZROV-SPELL ,FROTZ-SPELL>>
|
|
<SETG SPELL-CAST .SPELL>
|
|
<COND (<EQUAL? ,HERE ,SCALES-ROOM>
|
|
<COND (<AND <VERB? REZROV MALYON>
|
|
<EQUAL? ,PRSO ,IRON-DOOR ,VAULT-DOOR>>
|
|
<SETG SPELLS-USED 2>)>
|
|
<USE-SPELL>)>
|
|
<COND (<EQUAL? ,HERE ,PLAIN-ROOM>
|
|
<PLAIN-SPELL-FAIL>)
|
|
(<NOT <SPELL-PROB? .SPELL>>
|
|
<TELL
|
|
"The casting feels wrong, and sure enough, " <PICK-ONE ,FIZZLES> CR>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<RFALSE>)>)
|
|
(ELSE
|
|
<TELL
|
|
,YOU-DONT-HAVE THE .SPELL " memorized!" CR>
|
|
<THIS-IS-IT .SPELL>
|
|
<RTRUE>)>>
|
|
|
|
<GLOBAL USED-JINDAK? <>>
|
|
|
|
<ROUTINE USE-SPELL ()
|
|
<COND (<VERB? JINDAK> <SETG USED-JINDAK? T>)>
|
|
<SETG SPELLS-USED <+ ,SPELLS-USED 1>>
|
|
<COND (<AND <G? ,SPELLS-USED 2>
|
|
<ZERO? ,GUARDS-FLAG>
|
|
<NOT <QUEUED? I-ALARM>>>
|
|
<QUEUE I-ALARM -1>
|
|
<QUEUE I-GUARDS 2>)>
|
|
<RFALSE>>
|
|
|
|
<GLOBAL SPELL-CAST <>>
|
|
|
|
<GLOBAL FIZZLES
|
|
<LTABLE 0
|
|
"nothing happens."
|
|
"a huge ball of green light appears, then dissipates."
|
|
"your fingers grow numb."
|
|
"you are momentarily blinded."
|
|
"there is a distant rumble of thunder."
|
|
"your whole body feels as if your funny bone has been struck.">>
|
|
|
|
<ROUTINE SPELL-PROB? (SPELL? "AUX" (P 50) N1 N2)
|
|
<COND (<AND <GOT? ,MAGIC-CUBE>
|
|
<NOT <EQUAL? .SPELL? ,GIRGOL-SPELL>>>
|
|
<RTRUE>)
|
|
(<AND <EQUAL? .SPELL? ,FROTZ-SPELL>
|
|
<OR <EQUAL? ,HERE ,DARK-CAVE ,GRUE-CAVE ,LIGHT-POOL>
|
|
<EQUAL? ,HERE ,PILLAR-ROOM>>>
|
|
<RFALSE>)
|
|
(<AND <EQUAL? .SPELL? ,BLORPLE-SPELL>
|
|
<EQUAL? ,HERE ,CASTLE>
|
|
<G? ,SHADOW-COUNT 8>>
|
|
<RFALSE>)>
|
|
<COND (<EQUAL? .SPELL? ,GNUSTO-SPELL>
|
|
<SET P 75>
|
|
<SET N1 ,CHANGE-CUBE> <SET N2 ,EARTH-CUBE>)
|
|
(<EQUAL? .SPELL? ,FROTZ-SPELL>
|
|
<SET P 75>
|
|
<SET N1 ,CHANGE-CUBE> <SET N2 ,LIGHT-CUBE>)
|
|
(<EQUAL? .SPELL? ,REZROV-SPELL>
|
|
<SET N1 ,CHANGE-CUBE> <SET N2 ,EARTH-CUBE>)
|
|
(<EQUAL? .SPELL? ,YOMIN-SPELL>
|
|
<SET N1 ,MIND-CUBE> <SET N2 ,LIGHT-CUBE>)
|
|
(<EQUAL? .SPELL? ,LESOCH-SPELL>
|
|
<SET N1 ,AIR-CUBE> <SET N2 ,FIRE-CUBE>)
|
|
(<EQUAL? .SPELL? ,BLORPLE-SPELL>
|
|
<RTRUE>)
|
|
(<EQUAL? .SPELL? ,SNAVIG-SPELL>
|
|
<SET N1 ,CHANGE-CUBE> <SET N2 ,DARK-CUBE>)
|
|
(<EQUAL? .SPELL? ,GIRGOL-SPELL>
|
|
<COND (<IN? ,GIRGOL-SPELL ,GIRGOL-SCROLL>
|
|
<COND (<AND <EQUAL? .SPELL? ,GIRGOL-SPELL>
|
|
<EQUAL? ,HERE ,COUNCIL-CHAMBER>>
|
|
<RFALSE>)
|
|
(ELSE <RTRUE>)>)
|
|
(<EQUAL? ,HERE ,CASTLE ,PAST-RUINS-ROOM ,PAST-CELL-EAST>
|
|
<RTRUE>)
|
|
(<EQUAL? ,HERE ,MAGIC-ROOM ,TIME-ROOM>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<RFALSE>)>)
|
|
(<EQUAL? .SPELL? ,JINDAK-SPELL>
|
|
<SET N1 ,LIGHT-CUBE> <SET N2 ,CONNECTIVITY-CUBE>)
|
|
(<EQUAL? .SPELL? ,ESPNIS-SPELL>
|
|
<SET N1 ,MIND-CUBE> <SET N2 ,DEATH-CUBE>)
|
|
(<EQUAL? .SPELL? ,MALYON-SPELL>
|
|
<SET N1 ,FIRE-CUBE> <SET N2 ,LIFE-CUBE>)
|
|
(<EQUAL? .SPELL? ,CASKLY-SPELL>
|
|
<SET N1 ,CHANGE-CUBE> <SET N2 ,CONNECTIVITY-CUBE>)
|
|
(<EQUAL? .SPELL? ,LISKON-SPELL>
|
|
<SET N1 ,CHANGE-CUBE> <SET N2 ,EARTH-CUBE>)
|
|
(<EQUAL? .SPELL? ,THROCK-SPELL>
|
|
<SET N1 ,LIFE-CUBE> <SET N2 ,WATER-CUBE>)
|
|
(<EQUAL? .SPELL? ,TINSOT-SPELL>
|
|
<SET N1 ,WATER-CUBE> <SET N2 ,FIRE-CUBE>)>
|
|
<SET P <+ .P <* <COUNT-CUBES> 5>>>
|
|
<COND (<GOT? .N1> <SET P <+ .P 20>>)>
|
|
<COND (<GOT? .N2> <SET P <+ .P 20>>)>
|
|
%<DEBUG-CODE
|
|
<COND (,ZDEBUG
|
|
<TELL "[Prob=" N .P "]" CR>)>>
|
|
<COND (<OR <NOT <L? .P 100>> <PROB .P>>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<RFALSE>)>>
|
|
|
|
<ROUTINE V-CAST ("AUX" VRB)
|
|
<COND (<NOT <FSET? ,PRSO ,SPELLBIT>>
|
|
<TELL
|
|
"You can't cast "> <A-PRSO>)
|
|
(T
|
|
<SET VRB <SPELL-TO-VERB>>
|
|
<COND (<AND <NOT ,PRSI>
|
|
<NOT <EQUAL? .VRB
|
|
,V?JINDAK ,V?GIRGOL ,V?LESOCH>>
|
|
<NOT <EQUAL? .VRB ,V?$XEROX>>>
|
|
<TELL
|
|
"You must cast that on something." CR>)
|
|
(T
|
|
<PERFORM .VRB ,PRSI>)>
|
|
<RTRUE>)>>
|
|
|
|
<ROUTINE V-$XEROX ("AUX" VRB)
|
|
<COND (<SET VRB <GETP ,SPELL-COPY ,P?EXITS>>
|
|
<PERFORM .VRB ,PRSO>)>
|
|
<RTRUE>>
|
|
|
|
<ROUTINE SPELL-TO-VERB ()
|
|
<COND (<EQUAL? ,PRSO ,GNUSTO-SPELL> ,V?GNUSTO)
|
|
(<EQUAL? ,PRSO ,FROTZ-SPELL> ,V?FROTZ)
|
|
(<EQUAL? ,PRSO ,REZROV-SPELL> ,V?REZROV)
|
|
(<EQUAL? ,PRSO ,YOMIN-SPELL> ,V?YOMIN)
|
|
(<EQUAL? ,PRSO ,LESOCH-SPELL> ,V?LESOCH)
|
|
(<EQUAL? ,PRSO ,BLORPLE-SPELL> ,V?BLORPLE)
|
|
(<EQUAL? ,PRSO ,SNAVIG-SPELL> ,V?SNAVIG)
|
|
(<EQUAL? ,PRSO ,GIRGOL-SPELL> ,V?GIRGOL)
|
|
(<EQUAL? ,PRSO ,JINDAK-SPELL> ,V?JINDAK)
|
|
(<EQUAL? ,PRSO ,ESPNIS-SPELL> ,V?ESPNIS)
|
|
(<EQUAL? ,PRSO ,MALYON-SPELL> ,V?MALYON)
|
|
(<EQUAL? ,PRSO ,CASKLY-SPELL> ,V?CASKLY)
|
|
(<EQUAL? ,PRSO ,LISKON-SPELL> ,V?LISKON)
|
|
(<EQUAL? ,PRSO ,THROCK-SPELL> ,V?THROCK)
|
|
(<EQUAL? ,PRSO ,TINSOT-SPELL> ,V?TINSOT)
|
|
(<EQUAL? ,PRSO ,SPELL-COPY> ,V?$XEROX ;<GETP ,PRSO ,P?EXITS>)>>
|
|
|
|
<GLOBAL ALL-SPELLS
|
|
<PLTABLE
|
|
GNUSTO-SPELL
|
|
FROTZ-SPELL
|
|
REZROV-SPELL
|
|
YOMIN-SPELL
|
|
LESOCH-SPELL
|
|
BLORPLE-SPELL
|
|
SNAVIG-SPELL
|
|
GIRGOL-SPELL
|
|
JINDAK-SPELL
|
|
MALYON-SPELL
|
|
ESPNIS-SPELL
|
|
CASKLY-SPELL
|
|
LISKON-SPELL
|
|
THROCK-SPELL
|
|
TINSOT-SPELL>>
|
|
|
|
;"These spells no longer exist"
|
|
;IZYUK-SPELL
|
|
;AIMFIZ-SPELL
|
|
;SWANZO-SPELL
|
|
;GOLMAC-SPELL
|
|
;VARDIK-SPELL
|
|
;PULVER-SPELL
|
|
;MEEF-SPELL
|
|
;VEZZA-SPELL
|
|
;GASPAR-SPELL
|
|
;YONK-SPELL
|
|
|
|
<ROUTINE V-SPELLS ("AUX" S (ANY <>) (OS <>) TMP)
|
|
<TELL
|
|
"The gnusto, rezrov, and frotz spells are yours forever. Other than that,
|
|
you have ">
|
|
<DO (CNT <GET ,ALL-SPELLS 0> 1 -1)
|
|
<COND (<SET TMP <SPELL-TIMES <GET ,ALL-SPELLS .CNT>>>
|
|
<COND (.OS
|
|
<SPELL-PRINT .OS .ANY>
|
|
<SET ANY T>)>
|
|
<SET OS .TMP>)>>
|
|
<COND (.OS
|
|
<SPELL-PRINT .OS .ANY T>
|
|
<SET ANY T>)>
|
|
<COND (<NOT .ANY>
|
|
<TELL "no spells memorized.">)
|
|
(T
|
|
<TELL " committed to memory.">)>
|
|
<CRLF>
|
|
<RTRUE>>
|
|
|
|
<ROUTINE SPELL-PRINT (S ANY "OPTIONAL" (PAND? <>) "AUX" X)
|
|
<COND (.ANY
|
|
<COND (.PAND?
|
|
<TELL " and ">)
|
|
(T
|
|
<TELL ", ">)>)>
|
|
<TELL THE .S " ">
|
|
<SET X <- <GETP .S ,P?COUNT> 1>>
|
|
<COND (<G? .X 4>
|
|
<SET X 4>)> ;"prevents ,COUNTERS table overflow"
|
|
<TELL <GET ,COUNTERS .X>>
|
|
.S>
|
|
|
|
<ROUTINE SPELL-TIMES (S)
|
|
<COND (<AND <G? <GETP .S ,P?COUNT> 0>
|
|
<IN? .S ,SPELL-BOOK>>
|
|
.S)>>
|
|
|
|
<GLOBAL COUNTERS ;"should be as many entries as ,SPELL-MAX"
|
|
<PTABLE "once"
|
|
"twice"
|
|
"thrice"
|
|
"four times"
|
|
"many times">>
|
|
|
|
<ROUTINE V-LEARN ()
|
|
<TELL ,YOU-DONT-HAVE "that spell, if indeed that is a spell." CR>>
|
|
|
|
<ROUTINE SEE-BLORPLE ()
|
|
<COND (<NOT ,SEEN-BLORPLE?>
|
|
<SETG SEEN-BLORPLE? T>
|
|
<SETG SCORE <+ ,SCORE 15>>)>>
|
|
|
|
<ROUTINE V-BLORPLE ("AUX" RM)
|
|
<SEE-BLORPLE>
|
|
<COND (<OR <GETP ,HERE ,P?CUBE> <EQUAL? ,HERE ,DULL-ROOM>>
|
|
<TELL ,NOTHING-HAPPENS>)
|
|
(ELSE
|
|
<COND (<AND <EQUAL? ,PRSO ,TIME-CUBE>
|
|
<NOT ,USED-JINDAK?>>
|
|
<SETG BLORPLE-OBJECT <>>
|
|
<SET RM <>>)
|
|
(ELSE
|
|
<SETG BLORPLE-OBJECT ,PRSO>
|
|
<SET RM <GETP ,PRSO ,P?CUBE>>)>
|
|
<COND (<NOT .RM>
|
|
<SETG DULL-ROOM-RETURN ,HERE>
|
|
<SET RM ,DULL-ROOM>)>
|
|
<TELL
|
|
"Abruptly, your surroundings shift.">
|
|
<COND (<FSET? <LOC ,PLAYER> ,VEHBIT>
|
|
<SETG SITTING? <>>
|
|
<COND (<EQUAL? ,HERE ,MIDAIR>
|
|
<MOVE <LOC ,PLAYER> ,LOST-ON-LAND>)>
|
|
<TELL
|
|
" The spell leaves " THE <LOC ,PLAYER> " behind.">)>
|
|
<MOVE ,PLAYER ,HERE>
|
|
<REMOVE ,PRSO>
|
|
<CRLF>
|
|
<CRLF>
|
|
<GOTO .RM>)>>
|
|
|
|
<GLOBAL BLORPLE-OBJECT <>>
|
|
|
|
<ROUTINE RECOVER-CUBE ()
|
|
<COND (<AND ,BLORPLE-OBJECT
|
|
<NOT <EQUAL? ,HERE ,OHERE>>>
|
|
<TELL
|
|
"As you leave, " THE ,BLORPLE-OBJECT " reappears in your hand." CR CR>
|
|
<MOVE ,BLORPLE-OBJECT ,WINNER>
|
|
<FCLEAR ,BLORPLE-OBJECT ,NDESCBIT>
|
|
<SETG BLORPLE-OBJECT <>>
|
|
<RTRUE>)>>
|
|
|
|
<ROUTINE V-LESOCH ()
|
|
<COND (<AND <EQUAL? ,HERE ,BELWIT-SQUARE>
|
|
<OR <EQUAL? ,PRSO ,CLOUD>
|
|
<AND <NOT ,PRSO>
|
|
<NOT <FSET? ,CLOUD ,INVISIBLE>>>>>
|
|
<FSET ,CLOUD ,INVISIBLE>
|
|
<DEQUEUE I-CLOUD-GONE>
|
|
<TELL
|
|
"A small gust of wind begins to roil the cloud. The cloud is unimpressed.
|
|
The wind builds, slowly but inexorably, to hurricane force. The cloud starts
|
|
to unravel at the edges, and then gives up and dissipates">
|
|
<COND (<IN? ,EARTH-CUBE ,HERE>
|
|
<THIS-IS-IT ,EARTH-CUBE>
|
|
<FCLEAR ,EARTH-CUBE ,INVISIBLE>
|
|
<TELL
|
|
". Left behind on the ground is a small " ,WHITE-CUBE ".">)>
|
|
<CLEVER-CONTENTS ,HERE " Also revealed" ,EARTH-CUBE>
|
|
<CRLF>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<TELL
|
|
"Slowly, teasingly, a small puff of wind begins to blow. It quickly builds
|
|
to gale force, then hurricane force, and just as you feel you are about to
|
|
be swept away, it subsides." CR>)>>
|
|
|
|
<GLOBAL CHANGED? <>>
|
|
|
|
<ROUTINE V-SNAVIG ()
|
|
<COND (<NOT ,PRSO>
|
|
<TELL
|
|
"You have to transform into something, and it has to be something nearby." CR>)
|
|
(<EQUAL? ,CHANGED? ,PRSO>
|
|
<TELL ,NOTHING-HAPPENS>)
|
|
(<AND <EQUAL? ,PRSO ,PSEUDO-OBJECT>
|
|
<EQUAL? ,P-PNAM ,W?MOSS ,W?CORAL>>
|
|
<TELL "You're too large." CR>)
|
|
(ELSE
|
|
<YOU-CANT-X-PRSO "change into">)>>
|
|
|
|
<GLOBAL TIME-STOPPED? <>>
|
|
|
|
<ROUTINE TOO-PRECISE (STR)
|
|
<COND (<NOT <EQUAL? ,PRSO <> ,GLOBAL-ROOM>>
|
|
<TELL
|
|
"This spell " .STR " in a large area, so directing it at ">
|
|
<COND (<HELD? ,PRSO>
|
|
<TELL "an object
|
|
you are holding won't work very well">)
|
|
(ELSE
|
|
<TELL "a specific
|
|
object is unnecessarily precise">)>
|
|
<TELL ,PERIOD CR>)>>
|
|
|
|
<ROUTINE V-GIRGOL ()
|
|
<COND (,TIME-STOPPED?
|
|
<TELL ,NOTHING-HAPPENS>)
|
|
(<EQUAL? ,HERE ,EMPORIUM>
|
|
<PERFORM ,V?ESPNIS ,MERCHANT>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<TOO-PRECISE "stops time">
|
|
<SETG TIME-STOPPED? ,HERE>
|
|
<QUEUE I-GIRGOL 12>
|
|
<COND (<AND <EQUAL? ,HERE ,CLIFF-TOP>
|
|
<QUEUED? I-AVALANCHE>
|
|
<G? ,ROCK-SLIDE-COUNT 0>>
|
|
<STOP-AVALANCHE>)
|
|
(<EQUAL? ,HERE ,OGRE-CAVE>
|
|
<TELL
|
|
"The ogre, who was gesticulating wildly, freezes in place. He looks like
|
|
a particularly bad statue of himself. Even his lice aren't moving." CR>)
|
|
(<EQUAL? ,HERE ,SOUTH-SNAKE-ROOM ,NORTH-SNAKE-ROOM>
|
|
<TELL
|
|
"The snake freezes in place, as though a particularly good statue of itself
|
|
had been put in its place. However, it still completely blocks the passage." CR>)
|
|
(<EQUAL? ,HERE ,PAST-RUINS-ROOM>
|
|
<DEQUEUE I-WATER-RISING>
|
|
<TELL "The water stops rising." CR>)
|
|
(<AND <EQUAL? ,HERE ,CASTLE>
|
|
<IN? ,SHADOW ,CASTLE>>
|
|
<COND (<L? ,SHADOW-COUNT 8>
|
|
<SETG TIME-STOPPED? <>>
|
|
<DEQUEUE I-GIRGOL>
|
|
<TELL
|
|
"The shadow turns and silences you with a word of power, cancelling
|
|
the spell." CR>)
|
|
(<EQUAL? ,SHADOW-COUNT 8>
|
|
<QUEUE I-GIRGOL 3>
|
|
<TELL
|
|
"All around you freezes in place! The shadow is caught in
|
|
a particularly evil posture. You can tell the spell won't hold for
|
|
long!" CR>)
|
|
(<EQUAL? ,SHADOW-COUNT 9>
|
|
<QUEUE I-GIRGOL 3>
|
|
<TELL
|
|
"The shadow freezes in mid-leap! You can tell the spell won't hold for
|
|
long in this magically charged atmosphere!" CR>)>)
|
|
(ELSE
|
|
<TELL
|
|
,AT-FIRST "subtle changes in your
|
|
surroundings. Nothing is moving. You can see dust motes hanging
|
|
in midair, and a tiny gnat, its wings motionless, unknowingly defying
|
|
gravity." CR>)>)>>
|
|
|
|
<GLOBAL AT-FIRST "At first, nothing happens. Then you notice ">
|
|
|
|
<ROUTINE V-JINDAK ("AUX" F (1ST? T) P1 P2)
|
|
<TOO-PRECISE "detects magic">
|
|
<COND (<EQUAL? ,HERE ,SCALES-ROOM>
|
|
<SET P1 <MEASURE ,PILE-1>>
|
|
<SET P2 <MEASURE ,PILE-2>>
|
|
<COND (<AND <G? .P1 0> <G? .P2 0>>
|
|
<TELL
|
|
"Both piles of cubes glow with a faint blue glow. ">
|
|
<COND (<EQUAL? .P1 .P2>
|
|
<TELL "Both piles seem to glow
|
|
with identical brightness.">)
|
|
(ELSE
|
|
<TELL
|
|
"However, the ">
|
|
<COND (<G? .P1 .P2> <TELL 'PILE-1>)
|
|
(ELSE <TELL 'PILE-2>)>
|
|
<TELL " is glowing more brightly.">)>)
|
|
(<G? .P1 0>
|
|
<TELL CTHE ,PILE-1 ,IS-GLOWING>)
|
|
(<G? .P2 0>
|
|
<TELL CTHE ,PILE-2 ,IS-GLOWING>)
|
|
(<AND <FIRST? ,PILE-1> <FIRST? ,PILE-2>>
|
|
<TELL "Neither pile is glowing at all.">)>
|
|
<CRLF>
|
|
<COND (<NOT <DETECT-MAGIC ,HERE>>
|
|
<TELL "Nothing else is glowing." CR>)>)
|
|
(<NOT <DETECT-MAGIC ,HERE>>
|
|
<TELL
|
|
"Nothing in the vicinity glows. Apparently there is no magic
|
|
nearby." CR>)>>
|
|
|
|
<ROUTINE DETECT-MAGIC (OBJ "OPTIONAL" (1ST? T) "AUX" F)
|
|
<MAP-CONTENTS (F .OBJ)
|
|
(END <RETURN <NOT .1ST?>>)
|
|
<COND (<NOT <EQUAL? .F ,PLAYER ,PILE-1 ,PILE-2>>
|
|
<COND (<AND <VISIBLE? .F>
|
|
<MAGIC? .F>>
|
|
<SET 1ST? <>>
|
|
<TELL CTHE .F ,IS-GLOWING CR>)
|
|
(<AND <SEE-INSIDE? .F>
|
|
<FIRST? .F>>
|
|
<COND (<DETECT-MAGIC .F .1ST?>
|
|
<SET 1ST? <>>)>)>)>>>
|
|
|
|
<ROUTINE MAGIC? (OBJ)
|
|
<COND (<FSET? .OBJ ,MAGICBIT> <RTRUE>)
|
|
(<FSET? .OBJ ,SCROLLBIT> <RTRUE>)
|
|
(<GETPT .OBJ ,P?NAME> <RTRUE>)>>
|
|
|
|
<GLOBAL ESPNIS? <>>
|
|
|
|
<ROUTINE V-ESPNIS ()
|
|
<COND (<EQUAL? ,PRSO ,ME ,WINNER>
|
|
<V-SLEEP T>)
|
|
(<TIME-FROZEN?>
|
|
<TELL ,NOTHING-HAPPENS>)
|
|
(<FSET? ,PRSO ,PERSON>
|
|
<QUEUE I-ESPNIS 20>
|
|
<COND (<EQUAL? ,ESPNIS? ,PRSO>
|
|
<TELL
|
|
CTHE ,PRSO " continues to sleep." CR>)
|
|
(ELSE
|
|
<COND (,ESPNIS? <I-ESPNIS>)>
|
|
<SETG ESPNIS? ,PRSO>
|
|
<TELL
|
|
CTHE ,PRSO " falls asleep, yawning lazily." CR>)>)
|
|
(ELSE
|
|
<TELL
|
|
"I suppose you expect to hear " THE ,PRSO " snoring?" CR>)>>
|
|
|
|
<ROUTINE V-CASKLY ()
|
|
<TELL CTHE ,PRSO>
|
|
<COND (<AND <FSET? ,PRSO ,RMUNGBIT>
|
|
<FSET? ,PRSO ,TAKEBIT>>
|
|
<FCLEAR ,PRSO ,RMUNGBIT>
|
|
<TELL
|
|
" is returned to its original perfection." CR>)
|
|
(ELSE
|
|
<TELL
|
|
" looks pretty perfect as is." CR>)>>
|
|
|
|
<ROUTINE V-THROCK ()
|
|
<TELL
|
|
"I guess you have a black thumb. " ,NOTHING-HAPPENS>>
|
|
|
|
<ROUTINE V-TINSOT ()
|
|
<SETG ICED-OBJECT ,PRSO>
|
|
<COND (<AND <EQUAL? ,HERE ,OUBLIETTE>
|
|
<OR <EQUAL? ,PRSO ,INFLOW ,OUTFLOW ,OUBLIETTE-CHANNEL>
|
|
<EQUAL? ,PRSO ,WATER>>>
|
|
<COND (<AND <G? ,WATER-FLAG 0>
|
|
<NOT <EQUAL? ,PRSO ,WATER>>>
|
|
<TELL ,YOU-CANT-SEE "that anymore" ,PERIOD>)
|
|
(<EQUAL? ,PRSO ,INFLOW>
|
|
<PARTIAL-BLOCKAGE ,INFLOW>)
|
|
(<EQUAL? ,WATER-FLAG 0>
|
|
<QUEUE I-TINSOT 30>
|
|
<SETG ICED-OBJECT ,OUTFLOW>
|
|
<SETG FREEZE-FLAG <+ ,FREEZE-FLAG 1>>
|
|
<COND (<EQUAL? ,FREEZE-FLAG 1>
|
|
<PARTIAL-BLOCKAGE ,OUTFLOW>)
|
|
(<EQUAL? ,FREEZE-FLAG 2>
|
|
<QUEUE I-OUBLIETTE-FILLS -1>
|
|
<TELL
|
|
"In a dazzling purple flash, more water freezes, forming a large icy cap over
|
|
the outflow pipe in the channel. Water continues to pour in the inflow, and
|
|
it spills over the edge of the channel and begins to fill the room." CR>)>)
|
|
(<NOT <IN? ,ICEBERG ,HERE>>
|
|
<MOVE ,ICEBERG ,HERE>
|
|
<SETG ICED-OBJECT ,ICEBERG>
|
|
<TELL
|
|
"The purple flash freezes a small ice floe in the frigid water. It has a nice
|
|
flat top." CR>)
|
|
(ELSE
|
|
<TELL ,NOTHING-HAPPENS>)>)
|
|
;(<AND <EQUAL? ,HERE ,RUINS-ROOM>
|
|
<EQUAL? ,PRSO ,WATER ,RUINS-OUTFLOW ,RUINS-CHANNEL>>
|
|
)
|
|
(<EQUAL? ,PRSO ,AIR>
|
|
<V-SQUEEZE>)
|
|
(<AND <EQUAL? ,PRSO ,BOTTLE ,WATER ,LOCAL-WATER>
|
|
<IN? ,LOCAL-WATER ,BOTTLE>>
|
|
<REMOVE ,LOCAL-WATER>
|
|
<REMOVE ,BOTTLE>
|
|
<TELL
|
|
"The water and bottle freeze and shatter into a million pieces!" CR>)
|
|
(ELSE
|
|
<TELL
|
|
CTHE ,PRSO " is covered with a thin film of ice.">
|
|
<COND (<FSET? ,PRSO ,PERSON>
|
|
<TELL
|
|
" " CTHE ,PRSO " shakes and shivers, and the ice cracks and peels away.">)>
|
|
<CRLF>)>>
|
|
|
|
<ROUTINE PARTIAL-BLOCKAGE (OBJ)
|
|
<TELL
|
|
"There is a purple flash, and in a burst of snow and freezing spray, the
|
|
water in the channel freezes. But the water flow is so hard that " THE .OBJ
|
|
" is only partially blocked." CR>>
|
|
|
|
<ROUTINE PRE-LISKON ()
|
|
<COND (<OR <EQUAL? ,SHRINK-FLAG ,PRSO>
|
|
<AND <EQUAL? ,SHRINK-FLAG ,PLAYER>
|
|
<EQUAL? ,PRSO ,ME>>>
|
|
<TELL ,NOTHING-HAPPENS>
|
|
<RTRUE>)
|
|
(,SHRINK-FLAG
|
|
<COND (<I-LISKON T>
|
|
<CRLF>)>
|
|
<RFALSE>)>>
|
|
|
|
<ROUTINE V-LISKON ()
|
|
<COND (<FSET? ,PRSO ,PERSON>
|
|
<COND (<PRE-LISKON> <RTRUE>)
|
|
(ELSE
|
|
<QUEUE I-LISKON 15>
|
|
<COND (<AND ,PRSO <NOT <EQUAL? ,PRSO ,ME>>>
|
|
<SETG SHRINK-FLAG ,PRSO>
|
|
<TELL
|
|
CTHE ,PRSO " shrinks to about a tenth of its former size.">
|
|
<COND (<EQUAL? ,PRSO ,OGRE>
|
|
<TELL " He still looks mean.">)>
|
|
<CRLF>)
|
|
(ELSE
|
|
<SETG SHRINK-FLAG ,PLAYER>
|
|
<SETG SMALL-FLAG T>
|
|
<TELL
|
|
"You feel very funny, sort of squashed and pushed and squeezed. Your
|
|
surroundings are wavering, then growing, then wavering again. The feeling
|
|
vanishes, but your surroundings are ten times their former size... or is
|
|
it that you are one-tenth your former size?" CR>)>)>)
|
|
(ELSE
|
|
<TELL
|
|
"Nothing happens, which is unsurprising, as this spell works only on
|
|
living things." CR>)>>
|
|
|
|
<GLOBAL SHRINK-FLAG <>> ;"object shrunk"
|
|
<GLOBAL SMALL-FLAG <>> ;"T if player shrunk"
|
|
|
|
<ROUTINE V-GNUSTO ("AUX" SCROLL)
|
|
<COND (<NOT <IN? ,SPELL-BOOK ,WINNER>>
|
|
<TELL
|
|
"The spell quests around in your hands, looking for your " 'SPELL-BOOK ", and
|
|
not finding it, fades reluctantly." CR>)
|
|
(<NOT <FSET? ,PRSO ,SPELLBIT>>
|
|
<TELL
|
|
,YOU-CANT "inscribe " A ,PRSO " in your " 'SPELL-BOOK "!" CR>)
|
|
(<IN? ,PRSO ,SPELL-BOOK>
|
|
<TELL
|
|
,YOU-HAVE "that spell inscribed in your " 'SPELL-BOOK "!" CR>)
|
|
(<AND <LOC ,PRSO>
|
|
<NOT <IN? <LOC ,PRSO> ,WINNER>>>
|
|
<MUST-HOLD-SCROLL>)
|
|
(<FSET? ,PRSO ,RMUNGBIT>
|
|
<TELL "The spell is unreadable." CR>)
|
|
(T
|
|
<SET SCROLL <LOC ,PRSO>>
|
|
<COND (<FSET? .SCROLL ,RMUNGBIT>
|
|
<SCROLL-WET>)
|
|
(<AND <FSET? .SCROLL ,SCROLLBIT>
|
|
<HELD? .SCROLL>>
|
|
<TELL "Your " 'SPELL-BOOK " begins to glow softly. ">
|
|
<COND (<EQUAL? ,PRSO ,GIRGOL-SPELL>
|
|
<TELL "In a spectacular effort of magic,
|
|
the powers of the gnusto spell attempt to copy the " 'PRSO " into your
|
|
book, but the spell is too long, too complicated, and too powerful. The
|
|
glow fades, but fortunately " THE .SCROLL " remains intact." CR>
|
|
<RTRUE>)
|
|
(T
|
|
<REMOVE .SCROLL>
|
|
<MOVE ,PRSO ,SPELL-BOOK>
|
|
<PUTP ,PRSO ,P?COUNT 0>
|
|
<TELL "Slowly, ornately, the words of the "
|
|
'PRSO " are inscribed, glowing even more brightly than
|
|
the book itself. The book's brightness fades, but the spell remains!">
|
|
<COND (<EQUAL? .SCROLL ,DEAD-BOOK>
|
|
<TELL
|
|
" The old book in which it was written crumbles to dust">)
|
|
(ELSE
|
|
<TELL
|
|
" However, the scroll on which it was written vanishes">)>
|
|
<TELL " as the last word is copied." CR>)>
|
|
T)
|
|
(T
|
|
<TELL
|
|
"You must have the object from which you are copying in your hands before
|
|
the gnusto spell will work on it." CR>)>)>>
|
|
|
|
<ROUTINE V-FROTZ ("AUX" OLIT) ;"light"
|
|
<SET OLIT ,LIT>
|
|
<COND (<FSET? ,PRSO ,ONBIT>
|
|
<TELL
|
|
"Have you forgotten that you already frotzed " THE ,PRSO "?" CR>)
|
|
(<OR <FSET? ,PRSO ,TAKEBIT>
|
|
<FSET? ,PRSO ,PERSON>>
|
|
<FSET ,PRSO ,ONBIT>
|
|
<FSET ,PRSO ,TOUCHBIT>
|
|
<TELL "There is an almost blinding flash of light as ">
|
|
<COND (<EQUAL? ,PRSO ,ME>
|
|
<FSET ,WINNER ,ONBIT>
|
|
<TELL "you begin">)
|
|
(ELSE
|
|
<TELL THE ,PRSO " begins">)>
|
|
<TELL
|
|
" to glow! It slowly fades to a less painful level, but ">
|
|
<COND (<EQUAL? ,PRSO ,ME>
|
|
<TELL "you are">)
|
|
(ELSE <TELL THE ,PRSO " is">)>
|
|
<TELL
|
|
" now a serviceable light source.">
|
|
<CRLF>
|
|
<SETG LIT <LIT? ,HERE>>
|
|
<COND (<AND <NOT .OLIT> ,LIT>
|
|
<CRLF>
|
|
<V-LOOK>)>
|
|
<RTRUE>)
|
|
(T
|
|
<V-NO-OP>)>>
|
|
|
|
<ROUTINE V-MALYON ()
|
|
<COND (<TIME-FROZEN?>
|
|
<TELL ,NOTHING-HAPPENS>)
|
|
(<FSET? ,PRSO ,PERSON>
|
|
<TELL
|
|
"Wow! " ,IT-LOOKS-LIKE THE ,PRSO " is now alive! What a magician you are!" CR>)
|
|
(<FSET? ,PRSO ,TAKEBIT>
|
|
<TELL
|
|
"As you complete the spell, " THE ,PRSO " comes alive! It blinks, dances a
|
|
little jig, and a moment later returns to normal." CR>)
|
|
(T
|
|
<V-NO-OP>)>>
|
|
|
|
<ROUTINE V-REZROV () ;"open"
|
|
<COND (<FSET? ,PRSO ,PERSON>
|
|
<TELL
|
|
"It might be a boon to surgeons if it worked, but it doesn't." CR>)
|
|
(<AND <FSET? ,PRSO ,VEHBIT>
|
|
<NOT <EQUAL? ,PRSO ,ZIPPER>>>
|
|
<TELL
|
|
"It doesn't need opening." CR>)
|
|
(<OR <FSET? ,PRSO ,CONTBIT>
|
|
<FSET? ,PRSO ,DOORBIT>>
|
|
<COND (<FSET? ,PRSO ,OPENBIT>
|
|
<ALREADY-OPEN>)
|
|
(<TIME-FROZEN?>
|
|
<TELL ,NOTHING-HAPPENS>)
|
|
(<NOT <FSET? ,PRSO ,SCROLLBIT>>
|
|
<TELL "Silently, ">
|
|
<TELL THE ,PRSO " swings open">
|
|
<COND (<FIRST? ,PRSO>
|
|
<TELL ", revealing ">
|
|
<PRINT-CONTENTS ,PRSO>)>
|
|
<COND (<NOT <EQUAL? ,PRSO ,IRON-DOOR>>
|
|
<TELL
|
|
". Like swatting a fly with a sledge hammer, if you ask me">)>
|
|
<TELL ,PERIOD>
|
|
<FSET ,PRSO ,OPENBIT>)
|
|
(T
|
|
<V-NO-OP>)>)
|
|
(T
|
|
<V-NO-OP>)>>
|
|
|
|
<ROUTINE V-NO-OP () ;"exorcise"
|
|
<TELL
|
|
"Although you complete the spell, nothing has happened." CR>>
|
|
|
|
<ROUTINE V-YOMIN ()
|
|
<TELL "I'm afraid ">
|
|
<TELL THE ,PRSO " doesn't have much of a mind for you to read." CR>>
|
|
|
|
<OBJECT SPELL-COPY
|
|
(SYNONYM SPELLS SPELL)
|
|
(ADJECTIVE DUPLICATE ;"PLACE HOLDER" ORIGINAL)
|
|
(DESC "original")
|
|
(TEXT 0)
|
|
(COUNT 0)
|
|
(ACTION SPELL-F)
|
|
(SIZE 1)
|
|
(EXITS 0) ;"will hold verb of spell this is a copy of"
|
|
(WALLS 0) ;"will hold spell this is a copy of"
|
|
(FLAGS NDESCBIT SPELLBIT AN)>
|
|
|
|
<OBJECT BLANK-SCROLL
|
|
(IN PAST-CABINET)
|
|
(SYNONYM SCROLL)
|
|
(ADJECTIVE NEW VELLUM BLANK)
|
|
(DESC "vellum scroll")
|
|
(ACTION BLANK-SCROLL-F)
|
|
(FLAGS TAKEBIT TRYTAKEBIT READBIT
|
|
SCROLLBIT CONTBIT TRANSBIT)>
|
|
|
|
<ROUTINE BLANK-SCROLL-F ("AUX" OT DT)
|
|
<COND (<VERB? COPY>
|
|
<COND (<NOT <IN? ,BURIN ,WINNER>>
|
|
<NO-BURIN>)
|
|
(<NOT <EQUAL? ,PRSI ,BLANK-SCROLL>>
|
|
<RFALSE>)
|
|
(<FSET? ,PRSI ,RMUNGBIT>
|
|
<TELL CTHE ,PRSI " is too wet." CR>)
|
|
(<FIRST? ,PRSI>
|
|
<ALREADY-USED>)
|
|
(<NOT <FSET? ,PRSO ,SPELLBIT>>
|
|
<RFALSE>)
|
|
(<EQUAL? <LOC ,PRSO> ,SPELL-BOOK ,DEAD-BOOK>
|
|
<TELL
|
|
"Spell books are copy-protected to prevent spell thieves from making
|
|
spell scrolls from another mage's spell book." CR>)
|
|
(<AND <EQUAL? ,PRSO ,GIRGOL-SPELL>
|
|
<NOT <HELD? ,MAGIC-CUBE>>>
|
|
<TELL
|
|
"You try hard to copy the obscure runes and ideographs of the spell, but
|
|
your mind just can't comprehend them, and your fingers just can't
|
|
follow the curves and strokes." CR>)
|
|
(ELSE
|
|
<SET DT <GETPT ,PRSO ,P?ADJECTIVE>>
|
|
<SET OT <GETPT ,SPELL-COPY ,P?ADJECTIVE>>
|
|
<PUTB .DT 0 <GETB .OT 0>>
|
|
<PUTB .OT 0 <GETB .DT 1>>
|
|
<PUTP ,SPELL-COPY
|
|
,P?TEXT
|
|
<GETP ,PRSO ,P?TEXT>>
|
|
<MOVE ,SPELL-COPY <LOC ,PRSO>>
|
|
<FSET ,PRSO ,RWATERBIT>
|
|
<MOVE ,PRSO ,PRSI>
|
|
<PUTP ,SPELL-COPY ,P?WALLS ,PRSO>
|
|
<PUTP ,SPELL-COPY ,P?EXITS <SPELL-TO-VERB>>
|
|
<TELL
|
|
"Copied." CR>)>)
|
|
(<NOT <FIRST? ,PRSO>>
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
,IT-LOOKS-LIKE "a blank piece of vellum scroll paper." CR>)
|
|
(<VERB? READ>
|
|
<TELL "This scroll is blank." CR>)
|
|
(<AND <VERB? WRITE>
|
|
<EQUAL? ,PRSO ,QWORD>>
|
|
<TELL
|
|
"You should write spells, not random words, on spell paper." CR>)
|
|
(<AND <VERB? WRITE>
|
|
<NOT <FSET? ,PRSO ,SPELLBIT>>>
|
|
<TELL
|
|
"That's not a spell! You'll waste good spell paper!" CR>)>)
|
|
(ELSE <SCROLL-F>)>>
|