465 lines
12 KiB
Plaintext
465 lines
12 KiB
Plaintext
"Generic GLOBALS file for
|
|
The ZORK Trilogy
|
|
started on 7/28/83 by MARC
|
|
|
|
-- CHEAPO EDITION"
|
|
|
|
"SUBTITLE GLOBAL OBJECTS"
|
|
|
|
<OBJECT GLOBAL-OBJECTS
|
|
(SYNONYM ZZMGCK)
|
|
(DESC "it")
|
|
(FLAGS RMUNGBIT INVISIBLE TOUCHBIT SURFACEBIT TRYTAKEBIT
|
|
OPENBIT SEARCHBIT TRANSBIT ONBIT RLANDBIT FIGHTBIT
|
|
STAGGERED WEARBIT KLUDGEBIT MAZEBIT READBIT ;NARTICLEBIT)>
|
|
|
|
<OBJECT LOCAL-GLOBALS
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM ZZMGCK)
|
|
(DESCFCN PATH-OBJECT)
|
|
(GLOBAL GLOBAL-OBJECTS)
|
|
(ADVFCN 0)
|
|
(FDESC "F")
|
|
(LDESC "F")
|
|
;(PSEUDO "FOOBAR" V-WALK)
|
|
(CONTFCN 0)
|
|
(VTYPE 1)
|
|
(SIZE 0)
|
|
(CAPACITY 0)>
|
|
|
|
;"Yes, this synonym for LOCAL-GLOBALS needs to exist... sigh"
|
|
|
|
<OBJECT ROOMS
|
|
(IN TO ROOMS)>
|
|
|
|
<OBJECT INTNUM
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM INTNUM)
|
|
(FLAGS TOOLBIT)
|
|
(DESC "number")>
|
|
|
|
<OBJECT INTDIR
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM DIRECTION)
|
|
(FLAGS TOOLBIT)
|
|
(DESC "direction")>
|
|
|
|
;<OBJECT PSEUDO-OBJECT
|
|
(LOC LOCAL-GLOBALS)
|
|
(DESC "pseudo")
|
|
(ACTION CRETIN-FCN)>
|
|
|
|
<OBJECT IT
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM IT THEM HER HIM)
|
|
(DESC "random object")
|
|
(FLAGS NDESCBIT TOUCHBIT)>
|
|
|
|
<OBJECT NOT-HERE-OBJECT
|
|
(DESC "such thing" ;"[not here]")
|
|
(ACTION NOT-HERE-OBJECT-F)>
|
|
|
|
<ROUTINE NOT-HERE-OBJECT-F ("AUX" TBL (PRSO? T) OBJ)
|
|
;"This COND is game independent (except the TELL)"
|
|
<COND (<AND <EQUAL? ,PRSO ,NOT-HERE-OBJECT>
|
|
<EQUAL? ,PRSI ,NOT-HERE-OBJECT>>
|
|
<TELL "Those things aren't here!" CR>
|
|
<RTRUE>)
|
|
(<EQUAL? ,PRSO ,NOT-HERE-OBJECT>
|
|
<SET TBL ,P-PRSO>)
|
|
(T
|
|
<SET TBL ,P-PRSI>
|
|
<SET PRSO? <>>)>
|
|
;"Here is the default 'cant see any' printer"
|
|
<SETG P-CONT <>>
|
|
<SETG QUOTE-FLAG <>>
|
|
<COND (<EQUAL? ,WINNER ,PLAYER>
|
|
<TELL "You can't see any ">
|
|
<NOT-HERE-PRINT .PRSO?>
|
|
<TELL " here!" CR>)
|
|
(T
|
|
<TELL "The " D ,WINNER " seems confused. \"I don't see any ">
|
|
<NOT-HERE-PRINT .PRSO?>
|
|
<TELL " here!\"" CR>)>
|
|
<RTRUE>>
|
|
|
|
;<ROUTINE FIND-NOT-HERE (TBL PRSO? "AUX" M-F OBJ)
|
|
;"Here is where special-case code goes. <MOBY-FIND .TBL> returns
|
|
number of matches. If 1, then P-MOBY-FOUND is it. One may treat
|
|
the 0 and >1 cases alike or different. It doesn't matter. Always
|
|
return RFALSE (not handled) if you have resolved the problem."
|
|
<SET M-F <MOBY-FIND .TBL>>
|
|
;<COND (,DEBUG
|
|
<TELL "[Moby-found " N .M-F " objects" "]" CR>)>
|
|
<COND (<AND <G? .M-F 1>
|
|
<SET OBJ <GETP <GET .TBL 1> ,P?GLOBAL>>>
|
|
<SET M-F 1>
|
|
<SETG P-MOBY-FOUND .OBJ>)>
|
|
<COND (<==? 1 .M-F>
|
|
;<COND (,DEBUG <TELL "[Namely: " D ,P-MOBY-FOUND "]" CR>)>
|
|
<COND (.PRSO? <SETG PRSO ,P-MOBY-FOUND>)
|
|
(T <SETG PRSI ,P-MOBY-FOUND>)>
|
|
<RFALSE>)
|
|
(<NOT .PRSO?>
|
|
<TELL "You wouldn't find any ">
|
|
<NOT-HERE-PRINT .PRSO?>
|
|
<TELL " there." CR>
|
|
<RTRUE>)
|
|
(T ,NOT-HERE-OBJECT)>>
|
|
|
|
;<ROUTINE GLOBAL-NOT-HERE-PRINT (OBJ)
|
|
;<COND (,P-MULT <SETG P-NOT-HERE <+ ,P-NOT-HERE 1>>)>
|
|
<SETG P-CONT <>>
|
|
<SETG QUOTE-FLAG <>>
|
|
<TELL "You can't see any">
|
|
<COND (<EQUAL? .OBJ ,PRSO> <PRSO-PRINT>)
|
|
(T <PRSI-PRINT>)>
|
|
<TELL " here." CR>>
|
|
|
|
<ROUTINE NOT-HERE-PRINT (PRSO?)
|
|
<COND (,P-OFLAG
|
|
<COND (,P-XADJ <PRINTB ,P-XADJ ;N>)>
|
|
<COND (,P-XNAM <PRINTB ,P-XNAM>)>)
|
|
(.PRSO?
|
|
<BUFFER-PRINT <GET ,P-ITBL ,P-NC1> <GET ,P-ITBL ,P-NC1L> <>>)
|
|
(T
|
|
<BUFFER-PRINT <GET ,P-ITBL ,P-NC2> <GET ,P-ITBL ,P-NC2L> <>>)>>
|
|
|
|
<ROUTINE NULL-F ("OPTIONAL" A1 A2)
|
|
<RFALSE>>
|
|
|
|
/^L
|
|
|
|
"Objects shared by all three Zorks go here"
|
|
|
|
<GLOBAL LOAD-MAX 100>
|
|
|
|
<GLOBAL LOAD-ALLOWED 100>
|
|
|
|
<OBJECT BLESSINGS
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM BLESSINGS GRACES)
|
|
(DESC "blessings")
|
|
(FLAGS NDESCBIT)>
|
|
|
|
<OBJECT STAIRS
|
|
(LOC LOCAL-GLOBALS)
|
|
(SYNONYM STAIRS STEPS STAIRCASE STAIRWAY)
|
|
(ADJECTIVE STONE DARK MARBLE FORBIDDING STEEP)
|
|
(DESC "stairs")
|
|
(FLAGS NDESCBIT CLIMBBIT)
|
|
(ACTION STAIRS-F)>
|
|
|
|
<ROUTINE STAIRS-F ()
|
|
<COND (<VERB? THROUGH>
|
|
<TELL
|
|
"You should say whether you want to go up or down." CR>)>>
|
|
|
|
<OBJECT SAILOR
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM SAILOR FOOTPAD AVIATOR)
|
|
(DESC "sailor")
|
|
(FLAGS NDESCBIT)
|
|
(ACTION SAILOR-FCN)>
|
|
|
|
<ROUTINE SAILOR-FCN ()
|
|
<COND (<VERB? TELL>
|
|
<SETG P-CONT <>>
|
|
<SETG QUOTE-FLAG <>>
|
|
<TELL "You can't talk to the sailor that way." CR>)
|
|
(<VERB? EXAMINE>
|
|
%<COND (<==? ,ZORK-NUMBER 3>
|
|
'<COND (<NOT <FSET? ,VIKING-SHIP ,INVISIBLE>>
|
|
<TELL
|
|
"He looks like a sailor." CR>
|
|
<RTRUE>)>)
|
|
(ELSE T)>
|
|
<TELL
|
|
"There is no sailor to be seen." CR>)
|
|
(<VERB? HELLO>
|
|
<SETG HS <+ ,HS 1>>
|
|
%<COND (<==? ,ZORK-NUMBER 3>
|
|
'<COND (<NOT <FSET? ,VIKING-SHIP ,INVISIBLE>>
|
|
<TELL
|
|
"The seaman looks up and maneuvers the boat toward shore. He cries out \"I
|
|
have waited three ages for someone to say those words and save me from
|
|
sailing this endless ocean. Please accept this gift. You may find it
|
|
useful!\" He throws something which falls near you in the sand, then sails
|
|
off toward the west, singing a lively, but somewhat uncouth, sailor song." CR>
|
|
<FSET ,VIKING-SHIP ,INVISIBLE>
|
|
<MOVE ,VIAL ,HERE>)
|
|
(<==? ,HERE ,FLATHEAD-OCEAN>
|
|
<COND (,SHIP-GONE
|
|
<TELL "Nothing happens anymore." CR>)
|
|
(T
|
|
<TELL "Nothing happens yet." CR>)>)
|
|
(T <TELL "Nothing happens here." CR>)>)
|
|
(T
|
|
'<COND (<0? <MOD ,HS 20>>
|
|
<TELL
|
|
"You seem to be repeating yourself." CR>)
|
|
(<0? <MOD ,HS 10>>
|
|
<TELL
|
|
"I think that phrase is getting a bit worn out." CR>)
|
|
(T
|
|
<TELL "Nothing happens here." CR>)>)>)>>
|
|
|
|
<OBJECT GROUND
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM GROUND SAND DIRT FLOOR)
|
|
(DESC "ground")
|
|
(ACTION GROUND-FUNCTION)>
|
|
|
|
<ROUTINE GROUND-FUNCTION ()
|
|
<COND (<AND <VERB? PUT PUT-ON>
|
|
<EQUAL? ,PRSI ,GROUND>>
|
|
<PERFORM ,V?DROP ,PRSO>
|
|
<RTRUE>)
|
|
%<COND (<==? ,ZORK-NUMBER 1>
|
|
'(<EQUAL? ,HERE ,SANDY-CAVE>
|
|
<SAND-FUNCTION>))
|
|
(T
|
|
'(<NULL-F>
|
|
<RFALSE>))>
|
|
(<VERB? DIG>
|
|
<TELL "The ground is too hard for digging here." CR>)>>
|
|
|
|
<OBJECT GRUE
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM GRUE)
|
|
(ADJECTIVE LURKING SINISTER HUNGRY SILENT)
|
|
(DESC "lurking grue")
|
|
(ACTION GRUE-FUNCTION)>
|
|
|
|
<ROUTINE GRUE-FUNCTION ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The grue is a sinister, lurking presence in the dark places of the
|
|
earth. Its favorite diet is adventurers, but its insatiable
|
|
appetite is tempered by its fear of light. No grue has ever been
|
|
seen by the light of day, and few have survived its fearsome jaws
|
|
to tell the tale." CR>)
|
|
(<VERB? FIND>
|
|
<TELL
|
|
"There is no grue here, but I'm sure there is at least one lurking
|
|
in the darkness nearby. I wouldn't let my light go out if I were
|
|
you!" CR>)
|
|
(<VERB? LISTEN>
|
|
<TELL
|
|
"It makes no sound but is always lurking in the darkness nearby." CR>)>>
|
|
|
|
<OBJECT LUNGS
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM LUNGS AIR MOUTH BREATH)
|
|
(DESC "blast of air")
|
|
(FLAGS NDESCBIT)>
|
|
|
|
<OBJECT ME
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM ME MYSELF SELF CRETIN)
|
|
(DESC "you")
|
|
(FLAGS ACTORBIT ;NARTICLEBIT)
|
|
(ACTION CRETIN-FCN)>
|
|
|
|
<ROUTINE CRETIN-FCN ()
|
|
<COND (<VERB? TELL>
|
|
<SETG P-CONT <>>
|
|
<SETG QUOTE-FLAG <>>
|
|
<TELL
|
|
"Talking to yourself is said to be a sign of impending mental collapse." CR>)
|
|
(<AND <VERB? GIVE>
|
|
<EQUAL? ,PRSI ,ME>>
|
|
<PERFORM ,V?TAKE ,PRSO>
|
|
<RTRUE>)
|
|
(<VERB? MAKE>
|
|
<TELL "Only you can do that." CR>)
|
|
(<VERB? DISEMBARK>
|
|
<TELL "You'll have to do that on your own." CR>)
|
|
(<VERB? EAT>
|
|
<TELL "Auto-cannibalism is not the answer." CR>)
|
|
(<VERB? ATTACK MUNG>
|
|
<COND (<AND ,PRSI <FSET? ,PRSI ,WEAPONBIT>>
|
|
<JIGS-UP "If you insist.... Poof, you're dead!">)
|
|
(T
|
|
<TELL "Suicide is not the answer." CR>)>)
|
|
(<VERB? THROW>
|
|
<COND (<==? ,PRSO ,ME>
|
|
<TELL
|
|
"Why don't you just walk like normal people?" CR>)>)
|
|
(<VERB? TAKE>
|
|
<TELL "How romantic!" CR>)
|
|
(<VERB? EXAMINE>
|
|
<COND %<COND (<==? ,ZORK-NUMBER 1>
|
|
'(<EQUAL? ,HERE <LOC ,MIRROR-1> <LOC ,MIRROR-2>>
|
|
<TELL
|
|
"Your image in the mirror looks tired." CR>))
|
|
(<==? ,ZORK-NUMBER 3>
|
|
'(,INVIS
|
|
<TELL
|
|
"A good trick, as you are currently invisible." CR>))
|
|
(T
|
|
'(<NULL-F> <RTRUE>))>
|
|
(T
|
|
%<COND (<==? ,ZORK-NUMBER 3>
|
|
'<TELL
|
|
"What you can see looks pretty much as usual, sorry to say." CR>)
|
|
(ELSE
|
|
'<TELL
|
|
"That's difficult unless your eyes are prehensile." CR>)>)>)>>
|
|
|
|
<OBJECT ADVENTURER
|
|
(SYNONYM ADVENTURER)
|
|
(DESC "cretin")
|
|
(FLAGS NDESCBIT INVISIBLE SACREDBIT ACTORBIT)
|
|
(STRENGTH 0)
|
|
(ACTION 0)>
|
|
|
|
<OBJECT PATHOBJ
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM TRAIL PATH)
|
|
(ADJECTIVE FOREST NARROW LONG WINDING)
|
|
(DESC "passage")
|
|
(FLAGS NDESCBIT)
|
|
(ACTION PATH-OBJECT)>
|
|
|
|
<ROUTINE PATH-OBJECT ()
|
|
<COND (<VERB? TAKE FOLLOW>
|
|
<TELL "You must specify a direction to go." CR>)
|
|
(<VERB? FIND>
|
|
<TELL "I can't help you there...." CR>)
|
|
(<VERB? DIG>
|
|
<TELL "Not a chance." CR>)>>
|
|
|
|
<OBJECT ZORKMID
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM ZORKMID)
|
|
(DESC "zorkmid")
|
|
(ACTION ZORKMID-FUNCTION)>
|
|
|
|
<ROUTINE ZORKMID-FUNCTION ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The zorkmid is the unit of currency of the Great Underground Empire." CR>)
|
|
(<VERB? FIND>
|
|
<TELL
|
|
"The best way to find zorkmids is to go out and look for them." CR>)>>
|
|
|
|
<OBJECT HANDS
|
|
(LOC GLOBAL-OBJECTS)
|
|
(SYNONYM PAIR HANDS HAND)
|
|
(ADJECTIVE BARE)
|
|
(DESC "pair of hands")
|
|
(FLAGS NDESCBIT TOOLBIT)>
|
|
|
|
;"status line stuff"
|
|
|
|
<CONSTANT S-TEXT 0>
|
|
<CONSTANT S-WINDOW 1>
|
|
|
|
<CONSTANT H-NORMAL 0>
|
|
<CONSTANT H-INVERSE 1>
|
|
<CONSTANT H-BOLD 2>
|
|
<CONSTANT H-ITALIC 4>
|
|
|
|
<CONSTANT D-SCREEN-ON 1>
|
|
<CONSTANT D-SCREEN-OFF -1>
|
|
<CONSTANT D-PRINTER-ON 2>
|
|
<CONSTANT D-PRINTER-OFF -2>
|
|
<CONSTANT D-TABLE-ON 3>
|
|
<CONSTANT D-TABLE-OFF -3>
|
|
<CONSTANT D-RECORD-ON 4>
|
|
<CONSTANT D-RECORD-OFF -4>
|
|
|
|
<GLOBAL HOST:NUMBER 0> "Host machine."
|
|
<GLOBAL WIDTH:NUMBER 0> "Width of screen in chars."
|
|
;<GLOBAL MIDSCREEN:NUMBER 0> "Center of screen."
|
|
;<GLOBAL CWIDTH:NUMBER 0> "Pixel width of characters."
|
|
;<GLOBAL CHEIGHT:NUMBER 0> "Pixel height of characters."
|
|
|
|
<ROUTINE INIT-STATUS-LINE ()
|
|
<SETG HOST <LOWCORE INTID>>
|
|
;<SETG CWIDTH <LOWCORE (FWRD 0)>>
|
|
;<SETG WIDTH </ <LOWCORE HWRD> ,CWIDTH>>
|
|
<SETG WIDTH <LOWCORE SCRH>>
|
|
<COND (<L? ,WIDTH 38>
|
|
<TELL "[Screen too narrow.]" CR>
|
|
<QUIT>)>
|
|
;<SETG MIDSCREEN <+ </ ,WIDTH 2> 1>>
|
|
;<SETG CHEIGHT <LOWCORE (FWRD 1)>>
|
|
|
|
<SETG OHERE <>>
|
|
<SETG OLD-LEN 0>
|
|
;<SETG DO-WINDOW <>>
|
|
<SPLIT 1>
|
|
<SCREEN ,S-WINDOW>
|
|
;<BUFOUT <>>
|
|
<HLIGHT ,H-INVERSE>
|
|
<CURSET 1 1>
|
|
;<ERASE 1> ;"This semi by Jeff"
|
|
;<PRINT-SPACES <LOWCORE SCRH>>
|
|
<PRINT-SPACES ,WIDTH>
|
|
<COND (<G? ,WIDTH 75>
|
|
<CURSET 1 53>
|
|
<TELL "Score:">
|
|
<CURSET 1 66>
|
|
<TELL "Moves:">)>
|
|
;<BUFOUT T>
|
|
<HLIGHT ,H-NORMAL>
|
|
<SCREEN ,S-TEXT>
|
|
<RTRUE>>
|
|
|
|
<CONSTANT SL-TABLE:TABLE <ITABLE NONE 80>> "status line constructed here"
|
|
<GLOBAL OHERE:OBJECT <>>
|
|
<GLOBAL OLD-LEN:NUMBER 0>
|
|
|
|
;<GLOBAL MIDSCREEN:NUMBER 0>
|
|
|
|
<ROUTINE UPDATE-STATUS-LINE ()
|
|
<SCREEN ,S-WINDOW>
|
|
;<BUFOUT <>>
|
|
<HLIGHT ,H-NORMAL>
|
|
<HLIGHT ,H-INVERSE>
|
|
<COND (<NOT <EQUAL? ,HERE ,OHERE>>
|
|
<SETG OHERE ,HERE>
|
|
; <DIROUT ,D-SCREEN-OFF> ; "Screen off."
|
|
<DIROUT ,D-TABLE-ON ,SL-TABLE> ; "Table on."
|
|
<SAY-HERE>
|
|
<DIROUT ,D-TABLE-OFF> ; "Table off."
|
|
; <DIROUT ,D-SCREEN-ON> ; "Screen on."
|
|
<CURSET 1 2>
|
|
<PRINT-SPACES ,OLD-LEN> ; "Erase old HERE desc"
|
|
<SETG OLD-LEN <GET ,SL-TABLE 0>> ; "Print new HERE desc."
|
|
<CURSET 1 2>
|
|
<SAY-HERE>)>
|
|
<COND (<G? ,WIDTH 78>
|
|
<CURSET 1 ;59 60>
|
|
<TELL N ,SCORE " ">
|
|
<CURSET 1 73>
|
|
<TELL N ,MOVES>)
|
|
(T
|
|
<DIROUT ,D-TABLE-ON ,SL-TABLE>
|
|
<TELL N ,SCORE "/" N ,MOVES>
|
|
<DIROUT ,D-TABLE-OFF>
|
|
<CURSET 1 <- ,WIDTH <+ <GET ,SL-TABLE 0> 2 ;1>>>
|
|
<TELL " " N ,SCORE "/" N ,MOVES>)>
|
|
<HLIGHT ,H-NORMAL>
|
|
<SCREEN ,S-TEXT> ;"Back to main screen."
|
|
<RTRUE>>
|
|
|
|
<ROUTINE PRINT-SPACES (N)
|
|
<REPEAT ()
|
|
<COND (<L? <SET N <- .N 1>> 0>
|
|
<RTRUE>)
|
|
(T
|
|
<TELL !\ >)>>
|
|
<RTRUE>>
|
|
|
|
<ROUTINE SAY-HERE ()
|
|
<COND (<ZERO? ,LIT?>
|
|
<TELL "Darkness">)
|
|
(T
|
|
<TELL D ,HERE>
|
|
<COND (<AND <G? ,WIDTH 75>
|
|
<NOT <IN? ,ADVENTURER ,HERE>>>
|
|
<TELL ", in the " D <LOC ,ADVENTURER>>)>)>
|
|
<RTRUE>> |