Original Source
This commit is contained in:
commit
65673bb434
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,43 @@
|
|||
<SETG LENTAB <IVECTOR 4 0>>
|
||||
<SETG TBL <IVECTOR 26 0>>
|
||||
<SETG LINE <ISTRING 100>>
|
||||
|
||||
<DEFINE CNTLIN (C "AUX" STR L)
|
||||
<PROG ()
|
||||
<READSTRING ,LINE .C <STRING <ASCII 13>> '<RETURN <>>>
|
||||
<READCHR .C>
|
||||
<READCHR .C>
|
||||
<SET L <REST <MEMQ !\, ,LINE>>>
|
||||
<SET STR <PARSE .L>>
|
||||
<MAPF <>
|
||||
<FUNCTION (CHR "AUX" OFF)
|
||||
<SET OFF <- <ASCII .CHR> 96>>
|
||||
<PUT ,TBL .OFF <+ <NTH ,TBL .OFF> 1>>>
|
||||
.STR>>>
|
||||
|
||||
<DEFINE WRDLIN (C "AUX" STR L)
|
||||
<PROG ()
|
||||
<READSTRING ,LINE .C <STRING <ASCII 13>> '<RETURN <>>>
|
||||
<READCHR .C>
|
||||
<READCHR .C>
|
||||
<SET L <REST <MEMQ !\, ,LINE>>>
|
||||
<SET STR <PARSE .L>>
|
||||
<SET LEN </ <+ 4
|
||||
<MAPF ,+
|
||||
<FUNCTION (CHR)
|
||||
<COND (<MEMQ .CHR ,BAD> 2)
|
||||
(T 1)>>
|
||||
.STR>> 4>>
|
||||
<PUT ,LENTAB .LEN <+ <NTH ,LENTAB .LEN> 1>>>>
|
||||
|
||||
<DEFINE WRDFILE (NAM "AUX" C)
|
||||
<COND (<SET C <OPEN "READ" .NAM>>
|
||||
<REPEAT ()
|
||||
<COND (<NOT <WRDLIN .C>> <RETURN>)>>
|
||||
<CLOSE .C>)>>
|
||||
|
||||
<DEFINE CNTFILE (NAM "AUX" C)
|
||||
<COND (<SET C <OPEN "READ" .NAM>>
|
||||
<REPEAT ()
|
||||
<COND (<NOT <CNTLIN .C>> <RETURN>)>>
|
||||
<CLOSE .C>)>>
|
|
@ -0,0 +1,51 @@
|
|||
|
||||
<CONSTANT C-TABLELEN 180>
|
||||
|
||||
<GLOBAL C-TABLE <ITABLE NONE 90>>
|
||||
|
||||
<GLOBAL C-INTS 90>
|
||||
|
||||
<CONSTANT C-INTLEN 6>
|
||||
|
||||
<CONSTANT C-ENABLED? 0>
|
||||
|
||||
<CONSTANT C-TICK 1>
|
||||
|
||||
<CONSTANT C-RTN 2>
|
||||
|
||||
<ROUTINE QUEUE (RTN TICK "AUX" CINT)
|
||||
#DECL ((RTN) ATOM (TICK) FIX (CINT) <PRIMTYPE VECTOR>)
|
||||
<PUT <SET CINT <INT .RTN>> ,C-TICK .TICK>
|
||||
.CINT>
|
||||
|
||||
<ROUTINE INT (RTN "AUX" E C INT)
|
||||
#DECL ((RTN) ATOM (E C INT) <PRIMTYPE VECTOR>)
|
||||
<SET E <REST ,C-TABLE ,C-TABLELEN>>
|
||||
<SET C <REST ,C-TABLE ,C-INTS>>
|
||||
<REPEAT ()
|
||||
<COND (<==? .C .E>
|
||||
<SETG C-INTS <- ,C-INTS ,C-INTLEN>>
|
||||
<SET INT <REST ,C-TABLE ,C-INTS>>
|
||||
<PUT .INT ,C-RTN .RTN>
|
||||
<RETURN .INT>)
|
||||
(<==? <GET .C ,C-RTN> .RTN> <RETURN .C>)>
|
||||
<SET C <REST .C ,C-INTLEN>>>>
|
||||
|
||||
<GLOBAL CLOCK-WAIT <>>
|
||||
|
||||
<ROUTINE CLOCKER ("AUX" C E TICK (FLG <>))
|
||||
#DECL ((C E) <PRIMTYPE VECTOR> (TICK) FIX (FLG) <OR FALSE ATOM>)
|
||||
<COND (,CLOCK-WAIT <SETG CLOCK-WAIT <>> <RFALSE>)>
|
||||
<SET C <REST ,C-TABLE ,C-INTS>>
|
||||
<SET E <REST ,C-TABLE ,C-TABLELEN>>
|
||||
<REPEAT ()
|
||||
<COND (<==? .C .E> <RETURN .FLG>)
|
||||
(<NOT <0? <GET .C ,C-ENABLED?>>>
|
||||
<SET TICK <GET .C ,C-TICK>>
|
||||
<COND (<0? .TICK>)
|
||||
(T
|
||||
<PUT .C ,C-TICK <- .TICK 1>>
|
||||
<COND (<NOT <G? .TICK 1>>
|
||||
<SET FLG T>
|
||||
<APPLY <GET .C ,C-RTN>>)>)>)>
|
||||
<SET C <REST .C ,C-INTLEN>>>>
|
|
@ -0,0 +1,28 @@
|
|||
|
||||
.FUNCT THIS-IT?,OBJ,TBL,SYNS,?TMP1
|
||||
FSET? OBJ,INVISIBLE /FALSE
|
||||
ZERO? P-NAM /?THN3
|
||||
GETPT OBJ,P?SYNONYM >SYNS
|
||||
PTSIZE SYNS
|
||||
DIV STACK,2
|
||||
SUB STACK,1
|
||||
CALL ZMEMQ,P-NAM,SYNS,STACK
|
||||
ZERO? STACK /FALSE
|
||||
?THN3: ZERO? P-ADJ /?ELS8
|
||||
GETPT OBJ,P?ADJECTIVE >SYNS
|
||||
ZERO? SYNS /FALSE
|
||||
PTSIZE SYNS
|
||||
SUB STACK,1
|
||||
CALL ZMEMQB,P-ADJ,SYNS,STACK
|
||||
ZERO? STACK /FALSE
|
||||
?ELS8: ZERO? P-GWIMBIT /TRUE
|
||||
FSET? OBJ,P-GWIMBIT /TRUE
|
||||
RFALSE
|
||||
|
||||
|
||||
.FUNCT I-LANTERN
|
||||
CALL LIGHT-INT,LAMP,I-LANTERN,'LAMP-TABLE
|
||||
RSTACK
|
||||
|
||||
|
||||
.ENDI
|
|
@ -0,0 +1,18 @@
|
|||
<ROUTINE THIS-IT? (OBJ TBL "AUX" SYNS)
|
||||
#DECL ((OBJ) OBJECT (TBL) TABLE (SYNS) <OR FALSE TABLE>)
|
||||
<AND <NOT <FSET? .OBJ ,INVISIBLE>>
|
||||
<OR <NOT ,P-NAM>
|
||||
<ZMEMQ ,P-NAM
|
||||
<SET SYNS <GETPT .OBJ ,P?SYNONYM>>
|
||||
<- </ <PTSIZE .SYNS> 2> 1>>>
|
||||
<OR <NOT ,P-ADJ>
|
||||
<AND <SET SYNS <GETPT .OBJ ,P?ADJECTIVE>>
|
||||
<ZMEMQB ,P-ADJ .SYNS <- <PTSIZE .SYNS> 1>>>>
|
||||
<OR <0? ,P-GWIMBIT> <FSET? .OBJ ,P-GWIMBIT>>>>
|
||||
|
||||
<ROUTINE I-LANTERN ()
|
||||
<LIGHT-INT ,LAMP I-LANTERN LAMP-TABLE>>
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
"Fighting demon"
|
||||
|
||||
<ROUTINE I-FIGHT ("AUX" (FIGHT? <>) (LEN <GET ,VILLAINS 0>)
|
||||
CNT OO O P)
|
||||
<COND (,DEAD <RTRUE>)>
|
||||
<SET CNT 0>
|
||||
<REPEAT ()
|
||||
<SET CNT <+ .CNT 1>>
|
||||
<COND (<==? .CNT .LEN> <RETURN>)>
|
||||
<SET OO <GET ,VILLAINS .CNT>>
|
||||
<COND (<IN? <SET O <GET .OO ,V-VILLAIN>> ,HERE>
|
||||
<COND (<AND <==? .O ,THIEF> ,THIEF-ENGROSSED>
|
||||
<SETG THIEF-ENGROSSED <>>)
|
||||
(<L? <GETP .O ,P?STRENGTH> 0>
|
||||
<SET P <GET .OO ,V-PROB>>
|
||||
<COND (<AND <NOT <0? .P>> <PROB .P>>
|
||||
<PUT .OO ,V-PROB 0>
|
||||
<AWAKEN .O>)
|
||||
(ELSE
|
||||
<PUT .OO ,V-PROB <+ .P 25>>)>)
|
||||
(<OR <FSET? .O ,FIGHTBIT>
|
||||
<APPLY <GETP .O ,P?ACTION> ,F-FIRST?>>
|
||||
<SET FIGHT? T>)>)
|
||||
(ELSE
|
||||
<COND (<FSET? .O ,FIGHTBIT>
|
||||
<APPLY <GETP .O ,P?ACTION> ,F-BUSY?>)>
|
||||
<COND (<==? .O ,THIEF> <SETG THIEF-ENGROSSED <>>)>
|
||||
<FCLEAR ,WINNER ,STAGGERED>
|
||||
<FCLEAR .O ,STAGGERED>
|
||||
<FCLEAR .O ,FIGHTBIT>
|
||||
<AWAKEN .O>)>>
|
||||
<COND (<NOT .FIGHT?> <RTRUE>)>
|
||||
<DO-FIGHT .LEN>>
|
||||
|
||||
<ROUTINE AWAKEN (O "AUX" (S <GETP .O ,P?STRENGTH>))
|
||||
<COND (<L? .S 0>
|
||||
<PUTP .O ,P?STRENGTH <- 0 .S>>
|
||||
<APPLY <GETP .O ,P?ACTION> ,F-CONSCIOUS>)>
|
||||
T>
|
||||
|
||||
"SWORD demon"
|
||||
|
||||
<ROUTINE I-SWORD ("AUX" (DEM <INT I-SWORD>) (G <GETP ,SWORD ,P?TVALUE>)
|
||||
(NG 0) P T L)
|
||||
#DECL ((NG G) FIX)
|
||||
<COND (<IN? ,SWORD ,ADVENTURER>
|
||||
<COND (<INFESTED? ,HERE> <SET NG 2>)
|
||||
(ELSE
|
||||
<SET P 0>
|
||||
<REPEAT ()
|
||||
<COND (<0? <SET P <NEXTP ,HERE .P>>>
|
||||
<RETURN>)
|
||||
(<NOT <L? .P ,LOW-DIRECTION>>
|
||||
<SET T <GETPT ,HERE .P>>
|
||||
<SET L <PTSIZE .T>>
|
||||
<COND (<EQUAL? .L ,UEXIT ,CEXIT ,DEXIT>
|
||||
<COND (<INFESTED? <GETB .T 0>>
|
||||
<SET NG 1>
|
||||
<RETURN>)>)>)>>)>
|
||||
<COND (<==? .NG .G>)
|
||||
(<==? .NG 2>
|
||||
<TELL "Your sword has begun to glow very brightly." CR>)
|
||||
(<1? .NG>
|
||||
<TELL "Your sword is glowing with a faint blue glow."
|
||||
CR>)
|
||||
(<0? .NG>
|
||||
<TELL "Your sword is no longer glowing." CR>)>
|
||||
<PUTP ,SWORD ,P?TVALUE .NG>)
|
||||
(ELSE <PUT .DEM ,C-ENABLED? 0>)>>
|
||||
|
||||
<ROUTINE INFESTED? (R "AUX" (F <FIRST? .R>))
|
||||
<REPEAT ()
|
||||
<COND (<NOT .F> <RETURN <>>)
|
||||
(<AND <FSET? .F ,VILLAIN> <NOT <FSET? .F ,INVISIBLE>>>
|
||||
<RTRUE>)
|
||||
(<NOT <SET F <NEXT? .F>>> <RETURN <>>)>>>
|
||||
|
||||
"THIEF demon"
|
||||
|
||||
<ROUTINE I-THIEF ("AUX" (RM <LOC ,THIEF>) ROBJ HERE? (ONCE <>))
|
||||
<PROG ()
|
||||
<COND (<SET HERE? <NOT <FSET? ,THIEF ,INVISIBLE>>>
|
||||
<SET RM <LOC ,THIEF>>)>
|
||||
<COND
|
||||
(<AND <==? .RM ,TREASURE-ROOM> <NOT <==? .RM ,HERE>>>
|
||||
<COND (.HERE? <HACK-TREASURES> <SET HERE? <>>)>
|
||||
<DEPOSIT-BOOTY ,TREASURE-ROOM>)
|
||||
(<==? .RM ,HERE>
|
||||
<THIEF-VS-ADVENTURER .HERE?>)
|
||||
(ELSE
|
||||
<COND (<AND <IN? ,THIEF .RM>
|
||||
<NOT <FSET? ,THIEF ,INVISIBLE>>> ;"Leave if victim left"
|
||||
<FSET ,THIEF ,INVISIBLE>
|
||||
<SET HERE? <>>)>
|
||||
<COND (<FSET? .RM ,TOUCHBIT> ;"Hack the adventurer's belongings"
|
||||
<ROB .RM ,THIEF 75>
|
||||
<COND (<AND <FSET? .RM ,MAZEBIT> <FSET? ,HERE ,MAZEBIT>>
|
||||
<ROB-MAZE .RM>)
|
||||
(ELSE <STEAL-JUNK .RM>)>)>)>
|
||||
<COND (<AND <SET ONCE <NOT .ONCE>> <NOT .HERE?>>
|
||||
;"Move to next room, and hack."
|
||||
<REPEAT ()
|
||||
<COND (<AND .RM <SET RM <NEXT? .RM>>>)
|
||||
(ELSE <SET RM <FIRST? ,ROOMS>>)>
|
||||
<COND (<AND <NOT <FSET? .RM ,SACREDBIT>>
|
||||
<FSET? .RM ,RLANDBIT>>
|
||||
<MOVE ,THIEF .RM>
|
||||
<FCLEAR ,THIEF ,FIGHTBIT>
|
||||
<FSET ,THIEF ,INVISIBLE>
|
||||
<RETURN>)>>
|
||||
<AGAIN>)>>
|
||||
<COND (<NOT <==? .RM ,TREASURE-ROOM>>
|
||||
<DROP-JUNK .RM>)>>
|
||||
|
||||
<ROUTINE DROP-JUNK (RM "AUX" X N)
|
||||
<SET X <FIRST? ,THIEF>>
|
||||
<REPEAT ()
|
||||
<COND (<NOT .X> <RETURN>)>
|
||||
<SET N <NEXT? .X>>
|
||||
<COND (<==? .X ,STILETTO>)
|
||||
(<AND <0? <GETP .X ,P?TVALUE>> <PROB 30 T>>
|
||||
<FCLEAR .X ,INVISIBLE>
|
||||
<MOVE .X .RM>
|
||||
<COND (<==? .RM ,HERE>
|
||||
<TELL
|
||||
"The robber, rummaging through his bag, dropped a few items he found
|
||||
valueless." CR>)>)>
|
||||
<SET X .N>>>
|
||||
|
||||
<ROUTINE STEAL-JUNK (RM "AUX" X N)
|
||||
<SET X <FIRST? .RM>>
|
||||
<REPEAT ()
|
||||
<COND (<NOT .X> <RETURN>)>
|
||||
<SET N <NEXT? .X>>
|
||||
<COND (<AND <0? <GETP .X ,P?TVALUE>>
|
||||
<FSET? .X ,TAKEBIT>
|
||||
<NOT <FSET? .X ,SACREDBIT>>
|
||||
<NOT <FSET? .X ,INVISIBLE>>
|
||||
<OR <==? .X ,STILETTO>
|
||||
<PROB 10 T>>>
|
||||
<MOVE .X ,THIEF>
|
||||
<FSET .X ,TOUCHBIT>
|
||||
<FSET .X ,INVISIBLE>
|
||||
<COND (<==? .X ,ROPE> <SETG DOME-FLAG <>>)>
|
||||
<COND (<==? .RM ,HERE>
|
||||
<TELL "You suddenly notice that the "
|
||||
D .X " vanished." CR>)>
|
||||
<RETURN>)>
|
||||
<SET X .N>>>
|
||||
|
||||
<ROUTINE ROB (WHAT THIEF "OPTIONAL" (PROB <>) "AUX" N X (ROBBED? <>))
|
||||
<SET X <FIRST? .WHAT>>
|
||||
<REPEAT ()
|
||||
<COND (<NOT .X> <RETURN .ROBBED?>)>
|
||||
<SET N <NEXT? .X>>
|
||||
<COND (<AND <NOT <FSET? .X ,INVISIBLE>>
|
||||
<NOT <FSET? .X ,SACREDBIT>>
|
||||
<G? <GETP .X ,P?TVALUE> 0>
|
||||
<OR <NOT .PROB> <PROB .PROB>>>
|
||||
<MOVE .X .THIEF>
|
||||
<FSET .X ,TOUCHBIT>
|
||||
<COND (<==? .THIEF ,THIEF> <FSET .X ,INVISIBLE>)>
|
||||
<SET ROBBED? T>)>
|
||||
<SET X .N>>>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,98 @@
|
|||
;"SUBTITLE PURE STRUCTURE FROM MELEE"
|
||||
|
||||
"messages for winner"
|
||||
|
||||
<CONSTANT F-WEP 0> ;"means print weapon name"
|
||||
<CONSTANT F-DEF 1> ;"means print defender name (villain, e.g.)"
|
||||
|
||||
<GLOBAL HERO-MELEE
|
||||
<TABLE
|
||||
<LTABLE
|
||||
<LTABLE "Your " F-WEP " misses the " F-DEF " by an inch.">
|
||||
<LTABLE "A good slash, but it misses the " F-DEF " by a mile.">
|
||||
<LTABLE "You charge, but the " F-DEF " jumps nimbly aside.">>
|
||||
<LTABLE
|
||||
<LTABLE "Your " F-WEP " crashes down, knocking the " F-DEF " into dreamland.">>
|
||||
<LTABLE
|
||||
|
||||
<LTABLE "The fatal blow strikes the " F-DEF " square in the heart: He dies.">>
|
||||
<LTABLE
|
||||
<LTABLE "The " F-DEF " is struck on the arm, blood begins to trickle down.">
|
||||
<LTABLE "Your " F-WEP " pinks the " F-DEF " on the wrist, but it's not serious.">>
|
||||
<LTABLE
|
||||
<LTABLE "The " F-DEF " receives a deep gash in his side.">
|
||||
<LTABLE "A savage blow on the thigh! The " F-DEF " is stunned but can still fight!">>
|
||||
<LTABLE
|
||||
<LTABLE "The " F-DEF " is confused and can't fight back.">
|
||||
<LTABLE "The quickness of your thrust knocks the " F-DEF " back, stunned.">>
|
||||
<LTABLE
|
||||
<LTABLE "The " F-DEF " is disarmed by a subtle feint past his guard.">>>>
|
||||
|
||||
\
|
||||
|
||||
"messages for troll"
|
||||
|
||||
<GLOBAL TROLL-MELEE
|
||||
<TABLE
|
||||
<LTABLE
|
||||
<LTABLE "The axe sweeps past as you jump aside.">
|
||||
<LTABLE "The axe crashes against the rock, throwing sparks!">>
|
||||
<LTABLE
|
||||
<LTABLE "The flat of the troll's axe hits you delicately on the head, knocking
|
||||
you out.">>
|
||||
<LTABLE
|
||||
<LTABLE "The troll neatly removes your head.">>
|
||||
<LTABLE
|
||||
<LTABLE "The axe gets you right in the side. Ouch!">
|
||||
<LTABLE "The flat of the troll's axe skins across your forearm.">>
|
||||
<LTABLE
|
||||
<LTABLE "An axe stroke makes a deep wound in your leg.">
|
||||
<LTABLE "The troll's axe swings down, gashing your shoulder.">>
|
||||
<LTABLE
|
||||
<LTABLE "The troll hits you with a glancing blow, and you are momentarily
|
||||
stunned.">
|
||||
<LTABLE "You stagger back under a hail of axe strokes.">>
|
||||
<LTABLE
|
||||
<LTABLE "The axe knocks your " F-WEP " out of your hand. It falls to the floor.">>
|
||||
<LTABLE
|
||||
<LTABLE "The troll hesitates, fingering his axe.">>
|
||||
<LTABLE
|
||||
<LTABLE "Conquering his fears, the troll puts you to death.">>>>
|
||||
|
||||
\
|
||||
|
||||
"messages for thief"
|
||||
|
||||
<GLOBAL THIEF-MELEE
|
||||
<TABLE
|
||||
<LTABLE
|
||||
<LTABLE "The thief stabs nonchalantly with his stiletto and misses.">
|
||||
<LTABLE "You dodge as the thief comes in low.">
|
||||
<LTABLE "The thief tries to sneak past your guard, but you twist away.">>
|
||||
<LTABLE
|
||||
<LTABLE "The thief knocks you out.">>
|
||||
<LTABLE
|
||||
<LTABLE "The thief bows formally, raises his stiletto, and with a wry grin,
|
||||
ends the battle and your life.">>
|
||||
<LTABLE
|
||||
<LTABLE "The thief draws blood, raking his stiletto across your arm.">
|
||||
<LTABLE "The thief slowly approaches, strikes like a snake, and leaves
|
||||
you wounded.">>
|
||||
<LTABLE
|
||||
<LTABLE "The thief stabs a deep cut in your upper arm.">
|
||||
<LTABLE "The thief strikes at your wrist, and suddenly your grip is slippery
|
||||
with blood.">>
|
||||
<LTABLE
|
||||
<LTABLE "The thief rams the haft of his blade into your stomach, leaving
|
||||
you out of breath.">>
|
||||
<LTABLE
|
||||
<LTABLE "The thief neatly flips your " F-WEP " out of your hands, and it drops
|
||||
to the floor.">>
|
||||
<LTABLE
|
||||
<LTABLE "The thief, a man of good breeding, refrains from attacking a helpless
|
||||
opponent.">
|
||||
<LTABLE "The thief amuses himself by searching your pockets.">>
|
||||
<LTABLE
|
||||
<LTABLE "The thief, who is essentially a pragmatist, dispatches you as a
|
||||
threat to his livelihood.">>>>
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
<SETG C-ENABLED? 0>
|
||||
<SETG C-ENABLED 1>
|
||||
<SETG C-DISABLED 0>
|
||||
|
||||
<DEFMAC TELL ("ARGS" A)
|
||||
<FORM PROG ()
|
||||
!<MAPF ,LIST
|
||||
<FUNCTION ("AUX" E P O)
|
||||
<COND (<EMPTY? .A> <MAPSTOP>)
|
||||
(<SET E <NTH .A 1>>
|
||||
<SET A <REST .A>>)>
|
||||
<COND (<TYPE? .E ATOM>
|
||||
<COND (<OR <=? <SET P <SPNAME .E>>
|
||||
"CRLF">
|
||||
<=? .P "CR">>
|
||||
<MAPRET '<CRLF>>)
|
||||
(<EMPTY? .A>
|
||||
<ERROR INDICATOR-AT-END? .E>)
|
||||
(ELSE
|
||||
<SET O <NTH .A 1>>
|
||||
<SET A <REST .A>>
|
||||
<COND (<OR <=? <SET P <SPNAME .E>>
|
||||
"DESC">
|
||||
<=? .P "D">
|
||||
<=? .P "OBJ">
|
||||
<=? .P "O">>
|
||||
<MAPRET <FORM PRINTD .O>>)
|
||||
(<OR <=? .P "NUM">
|
||||
<=? .P "N">>
|
||||
<MAPRET <FORM PRINTN .O>>)
|
||||
(<OR <=? .P "CHAR">
|
||||
<=? .P "CHR">
|
||||
<=? .P "C">>
|
||||
<MAPRET <FORM PRINTC .O>>)
|
||||
(ELSE
|
||||
<MAPRET
|
||||
<FORM PRINT
|
||||
<FORM GETP .O .E>>>)>)>)
|
||||
(<TYPE? .E STRING>
|
||||
<MAPRET <FORM PRINTI .E>>)
|
||||
(<TYPE? .E FORM>
|
||||
<MAPRET <FORM PRINT .E>>)
|
||||
(ELSE <ERROR UNKNOWN-TYPE .E>)>>>>>
|
||||
|
||||
<DEFMAC VERB? ("TUPLE" ATMS "AUX" (O ()) (L ()))
|
||||
<REPEAT ()
|
||||
<COND (<EMPTY? .ATMS>
|
||||
<RETURN!- <COND (<LENGTH? .O 1> <NTH .O 1>)
|
||||
(ELSE <FORM OR !.O>)>>)>
|
||||
<REPEAT ()
|
||||
<COND (<EMPTY? .ATMS> <RETURN!->)>
|
||||
<SET ATM <NTH .ATMS 1>>
|
||||
<SET L
|
||||
(<FORM GVAL <PARSE <STRING "V?" <SPNAME .ATM>>>>
|
||||
!.L)>
|
||||
<SET ATMS <REST .ATMS>>
|
||||
<COND (<==? <LENGTH .L> 3> <RETURN!->)>>
|
||||
<SET O (<FORM EQUAL? ',PRSA !.L> !.O)>
|
||||
<SET L ()>>>
|
||||
|
||||
<DEFMAC RFATAL ()
|
||||
'<PROG () <PUSH 2> <RSTACK>>>
|
||||
|
||||
<DEFMAC PROB ('BASE? "OPTIONAL" 'LOSER?)
|
||||
<COND (<ASSIGNED? LOSER?> <FORM ZPROB .BASE?>)
|
||||
(ELSE <FORM G? .BASE? '<RANDOM 100>>)>>
|
||||
|
||||
<ROUTINE ZPROB
|
||||
(BASE)
|
||||
<COND (,LUCKY <G? .BASE <RANDOM 100>>)
|
||||
(ELSE <G? .BASE <RANDOM 300>>)>>
|
||||
|
||||
<ROUTINE PICK-ONE (FROB)
|
||||
<GET .FROB <RANDOM <GET .FROB 0>>>>
|
||||
|
||||
<DEFMAC ENABLE ('INT) <FORM PUT .INT ,C-ENABLED? 1>>
|
||||
|
||||
<DEFMAC DISABLE ('INT) <FORM PUT .INT ,C-ENABLED? 0>>
|
||||
|
||||
<DEFMAC FLAMING? ('OBJ)
|
||||
<FORM AND <FORM FSET? .OBJ ',FLAMEBIT>
|
||||
<FORM FSET? .OBJ ',ONBIT>>>
|
||||
|
||||
<DEFMAC OPENABLE? ('OBJ)
|
||||
<FORM OR <FORM FSET? .OBJ ',DOORBIT>
|
||||
<FORM FSET? .OBJ ',CONTBIT>>>
|
||||
|
||||
<DEFMAC ABS ('NUM)
|
||||
<FORM COND (<FORM L? .NUM 0> <FORM - 0 .NUM>)
|
||||
(T .NUM)>>
|
|
@ -0,0 +1,129 @@
|
|||
<CONSTANT M-FATAL 2>
|
||||
|
||||
<CONSTANT M-HANDLED 1>
|
||||
|
||||
<CONSTANT M-NOT-HANDLED <>>
|
||||
|
||||
<CONSTANT M-BEG 1>
|
||||
|
||||
<CONSTANT M-END <>>
|
||||
|
||||
<CONSTANT M-ENTER 2>
|
||||
|
||||
<CONSTANT M-LOOK 3>
|
||||
|
||||
<ROUTINE GO ()
|
||||
<ENABLE <QUEUE I-FIGHT -1>>
|
||||
<QUEUE I-SWORD -1>
|
||||
<ENABLE <QUEUE I-THIEF -1>>
|
||||
<QUEUE I-LANTERN 200>
|
||||
<PUTP ,INFLATED-BOAT ,P?VTYPE ,RWATERBIT>
|
||||
<PUT ,DEF1-RES 1 <REST ,DEF1 2>>
|
||||
<PUT ,DEF1-RES 2 <REST ,DEF1 4>>
|
||||
<PUT ,DEF2-RES 2 <REST ,DEF2B 2>>
|
||||
<PUT ,DEF2-RES 3 <REST ,DEF2B 4>>
|
||||
<PUT ,DEF3-RES 1 <REST ,DEF3A 2>>
|
||||
<PUT ,DEF3-RES 3 <REST ,DEF3B 2>>
|
||||
<SETG HERE ,WEST-OF-HOUSE>
|
||||
<SETG P-IT-OBJECT ,MAILBOX>
|
||||
<SETG P-IT-LOC ,HERE>
|
||||
<COND (<NOT <FSET? ,HERE ,TOUCHBIT>> <V-VERSION> <CRLF>)>
|
||||
<SETG LIT T>
|
||||
<SETG WINNER ,ADVENTURER>
|
||||
<V-LOOK>
|
||||
<MAIN-LOOP>
|
||||
<AGAIN>>
|
||||
|
||||
|
||||
<ROUTINE MAIN-LOOP ("AUX" ICNT OCNT NUM CNT OBJ TBL V PTBL OBJ1 TMP)
|
||||
#DECL ((CNT OCNT ICNT NUM) FIX (V) <OR 'T FIX FALSE> (OBJ) <OR FALSE OBJECT>
|
||||
(OBJ1) OBJECT (TBL) TABLE (PTBL) <OR FALSE ATOM>)
|
||||
<REPEAT ()
|
||||
<SET CNT 0>
|
||||
<SET OBJ <>>
|
||||
<SET PTBL T>
|
||||
<COND (<SETG P-WON <PARSER>>
|
||||
<SET ICNT <GET ,P-PRSI ,P-MATCHLEN>>
|
||||
<SET NUM
|
||||
<COND (<0? <SET OCNT <GET ,P-PRSO ,P-MATCHLEN>>> .OCNT)
|
||||
(<G? .OCNT 1>
|
||||
<SET TBL ,P-PRSO>
|
||||
<COND (<0? .ICNT> <SET OBJ <>>)
|
||||
(T <SET OBJ <GET ,P-PRSI 1>>)>
|
||||
.OCNT)
|
||||
(<G? .ICNT 1>
|
||||
<SET PTBL <>>
|
||||
<SET TBL ,P-PRSI>
|
||||
<SET OBJ <GET ,P-PRSO 1>>
|
||||
.ICNT)
|
||||
(T 1)>>
|
||||
<COND (<AND <NOT .OBJ> <1? .ICNT>> <SET OBJ <GET ,P-PRSI 1>>)>
|
||||
<COND (<==? ,PRSA ,V?WALK> <SET V <PERFORM ,PRSA ,PRSO>>)
|
||||
(<0? .NUM>
|
||||
<COND (<0? <BAND <GETB ,P-SYNTAX ,P-SBITS> ,P-SONUMS>>
|
||||
<SET V <PERFORM ,PRSA>>)
|
||||
(T
|
||||
<TELL "I don't know what object you mean.">
|
||||
<SET V <>>)>)
|
||||
(T
|
||||
<REPEAT ()
|
||||
<COND (<G? <SET CNT <+ .CNT 1>> .NUM> <RETURN>)
|
||||
(T
|
||||
<COND (.PTBL <SET OBJ1 <GET ,P-PRSO .CNT>>)
|
||||
(T <SET OBJ1 <GET ,P-PRSI .CNT>>)>
|
||||
<COND (<G? .NUM 1>
|
||||
<PRINTD .OBJ1>
|
||||
<TELL ": ">)>
|
||||
<SET V
|
||||
<PERFORM ,PRSA
|
||||
<COND (.PTBL .OBJ1) (T .OBJ)>
|
||||
<COND (.PTBL .OBJ) (T .OBJ1)>>>
|
||||
<COND (<==? .V ,M-FATAL> <RETURN>)>)>>
|
||||
<SETG P-IT-OBJECT .OBJ1>
|
||||
<SETG P-IT-LOC ,HERE>)>
|
||||
<SETG MOVES <+ ,MOVES 1>>
|
||||
<COND (<==? .V ,M-FATAL> <SETG P-CONT <>>)>)
|
||||
(T
|
||||
<SETG P-CONT <>>)>
|
||||
<SET V <CLOCKER>>>>
|
||||
|
||||
<GLOBAL L-PRSA <>>
|
||||
|
||||
<GLOBAL L-PRSO <>>
|
||||
|
||||
<GLOBAL L-PRSI <>>
|
||||
|
||||
<ROUTINE PERFORM (A "OPTIONAL" (O <>) (I <>) "AUX" V OA OO OI)
|
||||
#DECL ((A) FIX (O) <OR FALSE OBJECT FIX> (I) <OR FALSE OBJECT> (V) ANY)
|
||||
<SET OA ,PRSA>
|
||||
<SET OO ,PRSO>
|
||||
<SET OI ,PRSI>
|
||||
<SETG PRSA .A>
|
||||
<COND (<AND <EQUAL? ,IT .I .O>
|
||||
<NOT <EQUAL? ,P-IT-LOC ,HERE>>>
|
||||
<TELL "I don't see what you are referring to." CR>
|
||||
<RFATAL>)>
|
||||
<COND (<==? .O ,IT> <SET O ,P-IT-OBJECT>)>
|
||||
<COND (<==? .I ,IT> <SET I ,P-IT-OBJECT>)>
|
||||
<SETG PRSO .O>
|
||||
<SETG PRSI .I>
|
||||
<COND (<NOT <==? .A ,V?AGAIN>>
|
||||
<SETG L-PRSA .A>
|
||||
<SETG L-PRSO .O>
|
||||
<SETG L-PRSI .I>)>
|
||||
<COND (<SET V <APPLY <GETP ,WINNER ,P?ACTION>>> .V)
|
||||
(<SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-BEG>> .V)
|
||||
(<SET V <APPLY <GET ,PREACTIONS .A>>> .V)
|
||||
(<AND .I <SET V <APPLY <GETP .I ,P?ACTION>>>> .V)
|
||||
(<AND .O
|
||||
<NOT <==? .A ,V?WALK>>
|
||||
<SET V <APPLY <GETP .O ,P?ACTION>>>>
|
||||
.V)
|
||||
(<SET V <APPLY <GET ,ACTIONS .A>>> .V)>
|
||||
<COND (<NOT <==? .V ,M-FATAL>>
|
||||
<SET V <APPLY <GETP ,HERE ,P?ACTION> ,M-END>>)>
|
||||
<SETG PRSA .OA>
|
||||
<SETG PRSO .OO>
|
||||
<SETG PRSI .OI>
|
||||
.V>
|
||||
|
|
@ -0,0 +1,365 @@
|
|||
"SUBTITLE MELEE"
|
||||
|
||||
"melee actions (object functions for villains called with these"
|
||||
|
||||
<CONSTANT F-DEAD 2> ;"mistah kurtz, he dead."
|
||||
<CONSTANT F-FIRST? 5> ;"strike first?"
|
||||
|
||||
\
|
||||
|
||||
"blow results"
|
||||
|
||||
<CONSTANT MISSED 1> ;"attacker misses"
|
||||
<CONSTANT KILLED 3> ;"defender dead"
|
||||
<CONSTANT LIGHT-WOUND 4> ;"defender lightly wounded"
|
||||
<CONSTANT SERIOUS-WOUND 5> ;"defender seriously wounded"
|
||||
<CONSTANT STAGGER 6> ;"defender staggered (miss turn)"
|
||||
<CONSTANT LOSE-WEAPON 7> ;"defender loses weapon"
|
||||
<CONSTANT HESITATE 8> ;"hesitates (miss on free swing)"
|
||||
<CONSTANT SITTING-DUCK 9> ;"sitting duck (crunch!)"
|
||||
|
||||
"tables of melee results"
|
||||
|
||||
<GLOBAL DEF1
|
||||
<TABLE
|
||||
MISSED MISSED MISSED MISSED
|
||||
STAGGER STAGGER
|
||||
STAGGER STAGGER
|
||||
KILLED KILLED KILLED KILLED KILLED>>
|
||||
|
||||
<GLOBAL DEF2A
|
||||
<TABLE
|
||||
MISSED MISSED MISSED MISSED MISSED
|
||||
STAGGER STAGGER
|
||||
LIGHT-WOUND LIGHT-WOUND
|
||||
KILLED>>
|
||||
|
||||
<GLOBAL DEF2B
|
||||
<TABLE
|
||||
MISSED MISSED MISSED
|
||||
STAGGER STAGGER
|
||||
LIGHT-WOUND LIGHT-WOUND LIGHT-WOUND
|
||||
KILLED
|
||||
KILLED KILLED KILLED>>
|
||||
|
||||
<GLOBAL DEF3A
|
||||
<TABLE
|
||||
MISSED MISSED MISSED MISSED MISSED
|
||||
STAGGER STAGGER
|
||||
LIGHT-WOUND LIGHT-WOUND
|
||||
SERIOUS-WOUND SERIOUS-WOUND>>
|
||||
|
||||
<GLOBAL DEF3B
|
||||
<TABLE
|
||||
MISSED MISSED MISSED
|
||||
STAGGER STAGGER
|
||||
LIGHT-WOUND LIGHT-WOUND LIGHT-WOUND
|
||||
SERIOUS-WOUND SERIOUS-WOUND SERIOUS-WOUND>>
|
||||
|
||||
<GLOBAL DEF3C
|
||||
<TABLE
|
||||
MISSED
|
||||
STAGGER STAGGER
|
||||
LIGHT-WOUND LIGHT-WOUND LIGHT-WOUND LIGHT-WOUND
|
||||
SERIOUS-WOUND SERIOUS-WOUND SERIOUS-WOUND>>
|
||||
|
||||
<GLOBAL DEF1-RES
|
||||
<TABLE DEF1
|
||||
0 ;<REST ,DEF1 2>
|
||||
0 ;<REST ,DEF1 4>>>
|
||||
|
||||
<GLOBAL DEF2-RES
|
||||
<TABLE DEF2A
|
||||
DEF2B
|
||||
0; <REST ,DEF2B 2>
|
||||
0; <REST ,DEF2B 4>>>
|
||||
|
||||
<GLOBAL DEF3-RES
|
||||
<TABLE DEF3A
|
||||
0 ;<REST ,DEF3A 2>
|
||||
DEF3B
|
||||
0 ;<REST ,DEF3B 2>
|
||||
DEF3C>>
|
||||
|
||||
\
|
||||
|
||||
"useful constants"
|
||||
|
||||
<CONSTANT STRENGTH-MAX 7>
|
||||
<CONSTANT STRENGTH-MIN 2>
|
||||
<CONSTANT CURE-WAIT 30>
|
||||
|
||||
"each table entry is:"
|
||||
|
||||
<CONSTANT V-VILLAIN 0> ;"villain"
|
||||
<CONSTANT V-BEST 1> ;"best weapon"
|
||||
<CONSTANT V-BEST-ADV 2> ;"advantage it confers"
|
||||
<CONSTANT V-PROB 3> ;"prob of waking if unconscious"
|
||||
<CONSTANT V-MSGS 4> ;"messages for that villain"
|
||||
|
||||
<GLOBAL VILLAINS
|
||||
<LTABLE <TABLE TROLL SWORD 1 0 TROLL-MELEE>
|
||||
<TABLE THIEF KNIFE 1 0 THIEF-MELEE>>>
|
||||
|
||||
\
|
||||
|
||||
"I-FIGHT moved to DEMONS"
|
||||
|
||||
<ROUTINE DO-FIGHT (LEN "AUX" CNT RES O OO (OUT <>))
|
||||
<REPEAT ()
|
||||
<SET CNT 0>
|
||||
<REPEAT ()
|
||||
<SET CNT <+ .CNT 1>>
|
||||
<COND (<==? .CNT .LEN>
|
||||
<SET RES T>
|
||||
<RETURN T>)>
|
||||
<SET OO <GET ,VILLAINS .CNT>>
|
||||
<SET O <GET .OO ,V-VILLAIN>>
|
||||
<COND (<NOT <FSET? .O ,FIGHTBIT>>)
|
||||
(<NOT <SET RES
|
||||
<VILLAIN-BLOW
|
||||
.OO
|
||||
.OUT>>>
|
||||
<SET RES <>>
|
||||
<RETURN>)
|
||||
(<==? .RES ,UNCONSCIOUS>
|
||||
<SET OUT <+ 1 <RANDOM 3>>>)>>
|
||||
<COND (.RES
|
||||
<COND (<NOT .OUT> <RETURN>)
|
||||
(T
|
||||
<SET OUT <- .OUT 1>>
|
||||
<COND (<0? .OUT> <RETURN>)>)>)
|
||||
(ELSE <RETURN>)>>>
|
||||
|
||||
\
|
||||
|
||||
"takes a remark, defender, and good-guy's weapon"
|
||||
|
||||
<ROUTINE REMARK (REMARK D W "AUX" (LEN <GET .REMARK 0>) (CNT 0) STR)
|
||||
#DECL ((A D) OBJECT (W) <OR OBJECT FALSE> (LEN CNT) FIX
|
||||
(STR) <OR FIX STRING>)
|
||||
<REPEAT ()
|
||||
<COND (<G? <SET CNT <+ .CNT 1>> .LEN> <RETURN>)>
|
||||
<SET STR <GET .REMARK .CNT>>
|
||||
<COND (<==? .STR ,F-WEP> <PRINTD .W>)
|
||||
(<==? .STR ,F-DEF> <PRINTD .D>)
|
||||
(ELSE <PRINT .STR>)>>
|
||||
<CRLF>>
|
||||
|
||||
"Strength of the player is a basic value (S) adjusted by his P?STRENGTH
|
||||
property, which is normally 0"
|
||||
|
||||
<ROUTINE FIGHT-STRENGTH ("OPTIONAL" (ADJUST? T) "AUX" S)
|
||||
#DECL ((HERO) ADV (S SMAX SMIN VALUE) FIX (ADJUST?) <OR ATOM FALSE>)
|
||||
<SET S
|
||||
<+ ,STRENGTH-MIN
|
||||
</ ,SCORE
|
||||
</ ,SCORE-MAX
|
||||
<- ,STRENGTH-MAX ,STRENGTH-MIN>>>>>
|
||||
<COND (.ADJUST? <+ .S <GETP ,WINNER ,P?STRENGTH>>)(ELSE .S)>>
|
||||
|
||||
<ROUTINE VILLAIN-STRENGTH (OO
|
||||
"AUX" (VILLAIN <GET .OO ,V-VILLAIN>)
|
||||
OD TMP)
|
||||
#DECL ((VILLAIN) OBJECT (WV) <OR FALSE VECTOR>
|
||||
(OD VALUE) FIX)
|
||||
<SET OD <GETP .VILLAIN ,P?STRENGTH>>
|
||||
<COND (<NOT <L? .OD 0>>
|
||||
<COND (<AND <==? .VILLAIN ,THIEF> ,THIEF-ENGROSSED>
|
||||
<COND (<G? .OD 2> <SET OD 2>)>
|
||||
<SETG THIEF-ENGROSSED <>>)>
|
||||
<COND (<AND ,PRSI
|
||||
<FSET? ,PRSI ,WEAPONBIT>
|
||||
<==? <GET .OO ,V-BEST> ,PRSI>>
|
||||
<SET TMP <- .OD <GET .OO ,V-BEST-ADV>>>
|
||||
<COND (<L? .TMP 1> <SET TMP 1>)>
|
||||
<SET OD .TMP>)>)>
|
||||
.OD>
|
||||
|
||||
"find a weapon (if any) in possession of argument"
|
||||
|
||||
<ROUTINE FIND-WEAPON (O "AUX" W)
|
||||
<SET W <FIRST? .O>>
|
||||
<COND (<NOT .W>
|
||||
<RFALSE>)>
|
||||
<REPEAT ()
|
||||
<COND (<FSET? .W ,WEAPONBIT> <RETURN .W>)
|
||||
(<NOT <SET W <NEXT? .W>>> <RETURN <>>)>>>
|
||||
|
||||
\
|
||||
|
||||
<ROUTINE VILLAIN-BLOW (OO OUT?
|
||||
"AUX" (VILLAIN <GET .OO ,V-VILLAIN>)
|
||||
(REMARKS <GET .OO ,V-MSGS>)
|
||||
DWEAPON ATT DEF OA OD TBL RES NWEAPON)
|
||||
<FCLEAR ,WINNER ,STAGGERED>
|
||||
<COND (<FSET? .VILLAIN ,STAGGERED>
|
||||
<TELL "The " D .VILLAIN
|
||||
" slowly regains his feet." CR>
|
||||
<FCLEAR .VILLAIN ,STAGGERED>
|
||||
<RTRUE>)>
|
||||
<SET OA <SET ATT <VILLAIN-STRENGTH .OO>>>
|
||||
<COND (<NOT <G? <SET DEF <FIGHT-STRENGTH>> 0>> <RTRUE>)>
|
||||
<SET OD <FIGHT-STRENGTH <>>>
|
||||
<SET DWEAPON <FIND-WEAPON ,WINNER>>
|
||||
<COND (<L? .DEF 0> <SET RES ,KILLED>)
|
||||
(ELSE
|
||||
<COND (<1? .DEF>
|
||||
<COND (<G? .ATT 2> <SET ATT 3>)>
|
||||
<SET TBL <GET ,DEF1-RES <- .ATT 1>>>)
|
||||
(<==? .DEF 2>
|
||||
<COND (<G? .ATT 3> <SET ATT 4>)>
|
||||
<SET TBL <GET ,DEF2-RES <- .ATT 1>>>)
|
||||
(<G? .DEF 2>
|
||||
<SET ATT <- .ATT .DEF>>
|
||||
<COND (<L? .ATT -1> <SET ATT -2>)
|
||||
(<G? .ATT 1> <SET ATT 2>)>
|
||||
<SET TBL <GET ,DEF3-RES <+ .ATT 2>>>)>
|
||||
<SET RES <GET .TBL <- <RANDOM 9> 1>>>
|
||||
<REMARK
|
||||
<PICK-ONE <GET .REMARKS <- .RES 1>>>
|
||||
,WINNER
|
||||
.DWEAPON>)>
|
||||
<COND (<OR <==? .RES ,MISSED> <==? .RES ,HESITATE>>)
|
||||
(<OR <==? .RES ,KILLED> <==? .RES ,SITTING-DUCK>> <SET DEF 0>)
|
||||
(<==? .RES ,LIGHT-WOUND>
|
||||
<SET DEF <- .DEF 1>>
|
||||
<COND (<L? .DEF 0> <SET DEF 0>)>
|
||||
<COND (<G? ,LOAD-ALLOWED 50>
|
||||
<SETG LOAD-ALLOWED <- ,LOAD-ALLOWED 10>>)>)
|
||||
(<==? .RES ,SERIOUS-WOUND>
|
||||
<SET DEF <- .DEF 2>>
|
||||
<COND (<L? .DEF 0> <SET DEF 0>)>
|
||||
<COND (<G? ,LOAD-ALLOWED 50>
|
||||
<SETG LOAD-ALLOWED <- ,LOAD-ALLOWED 20>>)>)
|
||||
(<==? .RES ,STAGGER> <FSET ,WINNER ,STAGGERED>)>
|
||||
<WINNER-RESULT .DEF .RES .OD>>
|
||||
|
||||
<ROUTINE HERO-BLOW ("AUX" OO VILLAIN DWEAPON ATT DEF (CNT 0)
|
||||
OA OD TBL RES NWEAPON (LEN <GET ,VILLAINS 0>))
|
||||
#DECL ((VILLAIN) OBJECT (NWEAPON) <OR OBJECT FALSE>
|
||||
(RES OA OD ATT DEF FIX) FIX (HERO?) <OR ATOM FALSE>)
|
||||
<REPEAT ()
|
||||
<SET CNT <+ .CNT 1>>
|
||||
<COND (<==? .CNT .LEN> <RETURN>)>
|
||||
<SET OO <GET ,VILLAINS .CNT>>
|
||||
<COND (<==? <GET .OO ,V-VILLAIN> ,PRSO>
|
||||
<RETURN>)>>
|
||||
<FSET ,PRSO ,FIGHTBIT>
|
||||
<COND (<FSET? ,WINNER ,STAGGERED>
|
||||
<TELL
|
||||
"You are still recovering from that last blow, so your attack is
|
||||
ineffective." CR>
|
||||
<FCLEAR ,WINNER ,STAGGERED>
|
||||
<RTRUE>)>
|
||||
<SET ATT <FIGHT-STRENGTH>>
|
||||
<COND (<L? .ATT 1> <SET ATT 1>)>
|
||||
<SET OA .ATT>
|
||||
<SET VILLAIN <GET .OO ,V-VILLAIN>>
|
||||
<COND (<0? <SET OD <SET DEF <VILLAIN-STRENGTH .OO>>>>
|
||||
<COND (<==? ,PRSO ,WINNER>
|
||||
<RETURN <JIGS-UP
|
||||
"Well, you really did it that time. Is suicide painless?">>)>
|
||||
<TELL "Attacking the " D .VILLAIN " is pointless." CR>
|
||||
<RTRUE>)>
|
||||
<SET DWEAPON <FIND-WEAPON .VILLAIN>>
|
||||
<COND (<1? .DEF>
|
||||
<COND (<G? .ATT 2> <SET ATT 3>)>
|
||||
<SET TBL <GET ,DEF1-RES <- .ATT 1>>>)
|
||||
(<==? .DEF 2>
|
||||
<COND (<G? .ATT 3> <SET ATT 4>)>
|
||||
<SET TBL <GET ,DEF2-RES <- .ATT 1>>>)
|
||||
(<G? .DEF 2>
|
||||
<SET ATT <- .ATT .DEF>>
|
||||
<COND (<L? .ATT -1> <SET ATT -2>)
|
||||
(<G? .ATT 1> <SET ATT 2>)>
|
||||
<SET TBL <GET ,DEF3-RES <+ .ATT 2>>>)>
|
||||
<SET RES <GET .TBL <- <RANDOM 9> 1>>>
|
||||
<COND (<==? .RES 2> <SET RES 1>)>
|
||||
<REMARK
|
||||
<PICK-ONE <GET ,HERO-MELEE <- .RES 1>>>
|
||||
,PRSO
|
||||
,PRSI>
|
||||
<COND (<EQUAL? .RES ,MISSED ,HESITATE>)
|
||||
(<EQUAL? .RES ,KILLED ,SITTING-DUCK> <SET DEF 0>)
|
||||
(<==? .RES ,LIGHT-WOUND>
|
||||
<SET DEF <- .DEF 1>>
|
||||
<COND (<L? .DEF 0> <SET DEF 0>)>)
|
||||
(<==? .RES ,SERIOUS-WOUND>
|
||||
<SET DEF <- .DEF 2>>
|
||||
<COND (<L? .DEF 0> <SET DEF 0>)>)
|
||||
(<==? .RES ,STAGGER> <FSET ,PRSO ,STAGGERED>)>
|
||||
<VILLAIN-RESULT ,PRSO .DEF .RES>>
|
||||
|
||||
\
|
||||
|
||||
<ROUTINE WINNER-RESULT (DEF RES OD)
|
||||
<PUTP ,WINNER
|
||||
,P?STRENGTH
|
||||
<COND (<0? .DEF> -10000)(ELSE <- .DEF .OD>)>>
|
||||
<COND (<L? <- .DEF .OD> 0>
|
||||
<ENABLE <QUEUE I-CURE ,CURE-WAIT>>)>
|
||||
<COND (<NOT <G? <FIGHT-STRENGTH> 0>>
|
||||
<PUTP ,WINNER ,P?STRENGTH <+ 1 <- <FIGHT-STRENGTH <>>>>>
|
||||
<JIGS-UP
|
||||
"It appears that that last blow was too much for you. I'm afraid you
|
||||
are dead.">
|
||||
<>)
|
||||
(ELSE .RES)>>
|
||||
|
||||
<ROUTINE VILLAIN-RESULT (VILLAIN DEF RES)
|
||||
<PUTP .VILLAIN ,P?STRENGTH .DEF>
|
||||
<COND (<0? .DEF>
|
||||
<FCLEAR .VILLAIN ,FIGHTBIT>
|
||||
<TELL
|
||||
"Almost as soon as the " D .VILLAIN " breathes his last breath, a cloud
|
||||
of sinister black fog envelops him, and when the fog lifts, his carcass
|
||||
and weapon have disappeared." CR>
|
||||
<REMOVE .VILLAIN>
|
||||
<APPLY <GETP .VILLAIN ,P?ACTION> ,F-DEAD>
|
||||
.RES)
|
||||
(ELSE .RES)>>
|
||||
|
||||
\
|
||||
|
||||
<ROUTINE WINNING? (V "AUX" VS PS)
|
||||
#DECL ((V) OBJECT (VS PS) FIX)
|
||||
<SET VS <GETP .V ,P?STRENGTH>>
|
||||
<SET PS <- .VS <FIGHT-STRENGTH>>>
|
||||
<COND (<G? .PS 3> <PROB 90>)
|
||||
(<G? .PS 0> <PROB 75>)
|
||||
(<0? .PS> <PROB 50>)
|
||||
(<G? .VS 1> <PROB 25>)
|
||||
(ELSE <PROB 10>)>>
|
||||
|
||||
<ROUTINE I-CURE ("AUX" (S <GETP ,WINNER ,P?STRENGTH>))
|
||||
#DECL ((S) FIX)
|
||||
<COND (<G? .S 0> <SET S 0> <PUTP ,WINNER ,P?STRENGTH .S>)
|
||||
(<L? .S 0> <SET S <+ .S 1>> <PUTP ,WINNER ,P?STRENGTH .S>)>
|
||||
<COND (<L? .S 0>
|
||||
<COND (<L? ,LOAD-ALLOWED ,LOAD-MAX>
|
||||
<SETG LOAD-ALLOWED <+ ,LOAD-ALLOWED 10>>)>
|
||||
<ENABLE <QUEUE I-CURE ,CURE-WAIT>>)
|
||||
(ELSE
|
||||
<SETG LOAD-ALLOWED ,LOAD-MAX>
|
||||
<DISABLE <INT I-CURE>>)>>
|
||||
|
||||
<ROUTINE V-DIAGNOSE ("AUX" (MS <FIGHT-STRENGTH <>>)
|
||||
(WD <GETP ,WINNER ,P?STRENGTH>) (RS <+ .MS .WD>))
|
||||
#DECL ((MS WD RS) FIX)
|
||||
<COND (<0? <GET <INT I-CURE> ,C-ENABLED?>> <SET WD 0>)
|
||||
(ELSE <SET WD <- .WD>>)>
|
||||
<COND (<0? .WD> <TELL "You are in perfect health.">)
|
||||
(T
|
||||
<TELL "You have wounds which will be cured in ">
|
||||
<PRINTN
|
||||
<+ <* ,CURE-WAIT <- .WD 1>>
|
||||
<GET <INT I-CURE> ,C-TICK>>>
|
||||
<TELL " moves." CR>)>
|
||||
<CRLF>
|
||||
<COND (<0? .RS> <TELL "You are at death's door.">)
|
||||
(<1? .RS> <TELL "You can be killed by one more wound.">)
|
||||
(<==? .RS 2> <TELL "You can be killed by a serious wound.">)
|
||||
(<==? .RS 3> <TELL "You can survive one serious wound.">)
|
||||
(<G? .RS 3> <TELL "You are still strong.">)>
|
||||
<CRLF>>
|
|
@ -0,0 +1,749 @@
|
|||
"Z-parser (ZIL)"
|
||||
;"Parser global variable convention: All parser globals will
|
||||
begin with 'P-'. Local variables are not restricted in any
|
||||
way.
|
||||
"
|
||||
|
||||
<SETG SIBREAKS ".,">
|
||||
|
||||
<GLOBAL ALWAYS-LIT <>>
|
||||
|
||||
<GLOBAL GWIM-DISABLE <>>
|
||||
|
||||
<GLOBAL PRSA 0>
|
||||
|
||||
<GLOBAL PRSI 0>
|
||||
|
||||
<GLOBAL PRSO 0>
|
||||
|
||||
<GLOBAL P-TABLE 0>
|
||||
|
||||
<GLOBAL P-ONEOBJ 0>
|
||||
|
||||
<GLOBAL P-SYNTAX 0>
|
||||
|
||||
<GLOBAL P-CCSRC 0>
|
||||
|
||||
<GLOBAL P-LEN 0>
|
||||
|
||||
<GLOBAL P-DIR 0>
|
||||
|
||||
<GLOBAL HERE 0>
|
||||
|
||||
<GLOBAL WINNER 0>
|
||||
|
||||
<GLOBAL P-LEXV <ITABLE BYTE 60>>
|
||||
;"INBUF - Input buffer for READ"
|
||||
|
||||
<GLOBAL P-INBUF <ITABLE BYTE 60>>
|
||||
;"Parse-cont variable"
|
||||
|
||||
<GLOBAL P-CONT <>>
|
||||
|
||||
<GLOBAL P-IT-OBJECT <>>
|
||||
<GLOBAL P-IT-LOC <>>
|
||||
|
||||
;"Parser variables and temporaries"
|
||||
|
||||
<CONSTANT P-PHRLEN 3>
|
||||
|
||||
<CONSTANT P-ORPHLEN 7>
|
||||
|
||||
<CONSTANT P-RTLEN 3>
|
||||
;"Byte offset to # of entries in LEXV"
|
||||
|
||||
<CONSTANT P-LEXWORDS 1>
|
||||
;"Word offset to start of LEXV entries"
|
||||
|
||||
<CONSTANT P-LEXSTART 1>
|
||||
;"Number of words per LEXV entry"
|
||||
|
||||
<CONSTANT P-LEXELEN 2>
|
||||
|
||||
<CONSTANT P-WORDLEN 4>
|
||||
;"Offset to parts of speech byte"
|
||||
|
||||
<CONSTANT P-PSOFF 4>
|
||||
;"Offset to first part of speech"
|
||||
|
||||
<CONSTANT P-P1OFF 5>
|
||||
;"First part of speech bit mask in PSOFF byte"
|
||||
|
||||
<CONSTANT P-P1BITS 3>
|
||||
|
||||
<CONSTANT P-ITBLLEN 9>
|
||||
|
||||
<GLOBAL P-ITBL <TABLE 0 0 0 0 0 0 0 0 0 0>>
|
||||
|
||||
<GLOBAL P-VTBL <TABLE 0 0 0 0>>
|
||||
|
||||
<GLOBAL P-NCN 0>
|
||||
|
||||
<CONSTANT P-VERB 0>
|
||||
|
||||
<CONSTANT P-VERBN 1>
|
||||
|
||||
<CONSTANT P-PREP1 2>
|
||||
|
||||
<CONSTANT P-PREP1N 3>
|
||||
|
||||
<CONSTANT P-PREP2 4>
|
||||
|
||||
<CONSTANT P-PREP2N 5>
|
||||
|
||||
<CONSTANT P-NC1 6>
|
||||
|
||||
<CONSTANT P-NC1L 7>
|
||||
|
||||
<CONSTANT P-NC2 8>
|
||||
|
||||
<CONSTANT P-NC2L 9>
|
||||
|
||||
" Grovel down the input finding the verb, prepositions, and noun clauses.
|
||||
If the input is <direction> or <walk> <direction>, fall out immediately
|
||||
setting PRSA to ,V?WALK and PRSO to <direction>. Otherwise, perform
|
||||
all required orphaning, syntax checking, and noun clause lookup."
|
||||
|
||||
<ROUTINE PARSER ("AUX" (PTR ,P-LEXSTART) WORD (VAL 0) (VERB <>)
|
||||
LEN (DIR <>) (NW 0) NUM)
|
||||
<CLEAR-ITBL>
|
||||
<PUT ,P-PRSO ,P-MATCHLEN 0>
|
||||
<PUT ,P-PRSI ,P-MATCHLEN 0>
|
||||
<PUT ,P-BUTS ,P-MATCHLEN 0>
|
||||
<COND (,P-CONT
|
||||
<SET PTR ,P-CONT>
|
||||
<SETG P-CONT <>>
|
||||
<COND (<NOT ,SUPER-BRIEF> <CRLF>)>)
|
||||
(T
|
||||
<COND (<NOT ,SUPER-BRIEF> <CRLF>)>
|
||||
<TELL ">">
|
||||
<READ ,P-INBUF ,P-LEXV>)>
|
||||
<SETG P-LEN <GETB ,P-LEXV ,P-LEXWORDS>>
|
||||
<COND (<0? ,P-LEN> <TELL "Beg pardon?" CR> <RFALSE>)>
|
||||
<SET LEN ,P-LEN>
|
||||
<SETG P-DIR <>>
|
||||
<SETG P-NCN 0>
|
||||
<SETG P-GETFLAGS 0>
|
||||
<REPEAT ()
|
||||
<COND (<L? <SETG P-LEN <- ,P-LEN 1>> 0> <RETURN>)
|
||||
(<SET WORD <GET ,P-LEXV .PTR>>
|
||||
<COND (<EQUAL? .WORD ,W?THEN ,W?.>
|
||||
<OR <0? ,P-LEN>
|
||||
<SETG P-CONT <+ .PTR ,P-LEXELEN>>>
|
||||
<PUTB ,P-LEXV ,P-LEXWORDS ,P-LEN>
|
||||
<RETURN>)
|
||||
(<AND <SET VAL
|
||||
<WT? .WORD
|
||||
,PS?DIRECTION
|
||||
,P1?DIRECTION>>
|
||||
<OR <==? .LEN 1>
|
||||
<AND <==? .LEN 2> <==? .VERB ,ACT?WALK>>
|
||||
<EQUAL? <SET NW
|
||||
<GET ,P-LEXV
|
||||
<+ .PTR ,P-LEXELEN>>>
|
||||
,W?THEN
|
||||
,W?.>
|
||||
<EQUAL? .NW ,W?COMMA ,W?AND>>>
|
||||
<SET DIR .VAL>
|
||||
<COND (<EQUAL? .NW ,W?COMMA ,W?AND>
|
||||
<PUT ,P-LEXV
|
||||
<+ .PTR ,P-LEXELEN>
|
||||
,W?THEN>)>
|
||||
<COND (<NOT <G? .LEN 2>> <RETURN>)>)
|
||||
(<AND <SET VAL <WT? .WORD ,PS?VERB ,P1?VERB>>
|
||||
<NOT .VERB>>
|
||||
<SET VERB .VAL>
|
||||
<PUT ,P-ITBL ,P-VERB .VAL>
|
||||
<PUT ,P-ITBL ,P-VERBN ,P-VTBL>
|
||||
<PUT ,P-VTBL 0 .WORD>
|
||||
<PUTB ,P-VTBL 2 <GETB ,P-LEXV
|
||||
<SET NUM
|
||||
<+ <* .PTR 2> 2>>>>
|
||||
<PUTB ,P-VTBL 3 <GETB ,P-LEXV <+ .NUM 1>>>)
|
||||
(<OR <SET VAL <WT? .WORD ,PS?PREPOSITION 0>>
|
||||
<AND <OR <EQUAL? .WORD ,W?ALL ,W?ONE ,W?A>
|
||||
<WT? .WORD ,PS?ADJECTIVE>
|
||||
<WT? .WORD ,PS?OBJECT>>
|
||||
<SET VAL 0>>>
|
||||
<COND (<AND <G? ,P-LEN 0>
|
||||
<==? <GET ,P-LEXV
|
||||
<+ .PTR ,P-LEXELEN>>
|
||||
,W?OF>
|
||||
<0? .VAL>
|
||||
<NOT
|
||||
<EQUAL? .WORD ,W?ALL ,W?ONE ,W?A>>>)
|
||||
(<AND <NOT <0? .VAL>>
|
||||
<OR <0? ,P-LEN>
|
||||
<EQUAL? <GET ,P-LEXV <+ .PTR 2>>
|
||||
,W?THEN ,W?.>>>
|
||||
<COND (<L? ,P-NCN 2>
|
||||
<PUT ,P-ITBL ,P-PREP1 .VAL>
|
||||
<PUT ,P-ITBL ,P-PREP1N .WORD>)>)
|
||||
(<==? ,P-NCN 2>
|
||||
<TELL "Too many noun clauses??" CR>
|
||||
<RFALSE>)
|
||||
(T
|
||||
<SETG P-NCN <+ ,P-NCN 1>>
|
||||
<OR <SET PTR <CLAUSE .PTR .VAL .WORD>>
|
||||
<RFALSE>>
|
||||
<AND <L? .PTR 0> <RETURN>>)>)
|
||||
(<WT? .WORD ,PS?BUZZ-WORD>)
|
||||
(T
|
||||
<TELL "I can't use the word '">
|
||||
<PRINTB .WORD>
|
||||
<TELL "' here." CR>
|
||||
<RFALSE>)>)
|
||||
(T <UNKNOWN-WORD .PTR> <RFALSE>)>
|
||||
<SET PTR <+ .PTR ,P-LEXELEN>>>
|
||||
<COND (.DIR <SETG PRSA ,V?WALK> <SETG PRSO .DIR> <RETURN T>)>
|
||||
<COND (<AND <SYNTAX-CHECK> <SNARF-OBJECTS> <TAKE-CHECK> <MANY-CHECK>>
|
||||
T)>>
|
||||
;"Check whether word pointed at by PTR is the correct part of speech.
|
||||
The second argument is the part of speech (,PS?<part of speech>). The
|
||||
3rd argument (,P1?<part of speech>), if given, causes the value
|
||||
for that part of speech to be returned."
|
||||
|
||||
<ROUTINE WT? (PTR BIT "OPTIONAL" (B1 5) "AUX" (OFFSET ,P-P1OFF) TYP)
|
||||
<COND (<BTST <SET TYP <GETB .PTR ,P-PSOFF>> .BIT>
|
||||
<COND (<G? .B1 4> <RTRUE>)
|
||||
(T
|
||||
<SET TYP <BAND .TYP ,P-P1BITS>>
|
||||
<COND (<NOT <==? .TYP .B1>> <SET OFFSET <+ .OFFSET 1>>)>
|
||||
<GETB .PTR .OFFSET>)>)>>
|
||||
;" Scan through a noun clause, leave a pointer to its starting location"
|
||||
|
||||
<ROUTINE CLAUSE (PTR VAL WORD "AUX" OFF NUM (ANDFLG <>) (FIRST?? <>) NW)
|
||||
#DECL ((PTR VAL OFF NUM) FIX (WORD NW) <OR FALSE FIX TABLE>
|
||||
(ANDFLG FIRST??) <OR ATOM FALSE>)
|
||||
<SET OFF <* <- ,P-NCN 1> 2>>
|
||||
<COND (<NOT <==? .VAL 0>>
|
||||
<PUT ,P-ITBL <SET NUM <+ ,P-PREP1 .OFF>> .VAL>
|
||||
<PUT ,P-ITBL <+ .NUM 1> .WORD>
|
||||
<SET PTR <+ .PTR ,P-LEXELEN>>)
|
||||
(T <SETG P-LEN <+ ,P-LEN 1>>)>
|
||||
<COND (<0? ,P-LEN> <SETG P-NCN <- ,P-NCN 1>> <RETURN -1>)>
|
||||
<PUT ,P-ITBL <SET NUM <+ ,P-NC1 .OFF>> <REST ,P-LEXV <* .PTR 2>>>
|
||||
<REPEAT ()
|
||||
<COND (<L? <SETG P-LEN <- ,P-LEN 1>> 0>
|
||||
<PUT ,P-ITBL <+ .NUM 1> <REST ,P-LEXV <* .PTR 2>>>
|
||||
<RETURN -1>)>
|
||||
<COND (<SET WORD <GET ,P-LEXV .PTR>>
|
||||
<COND (<0? ,P-LEN> <SET NW 0>)
|
||||
(T <SET NW <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>>)>
|
||||
<COND (<EQUAL? .WORD ,W?AND ,W?COMMA> <SET ANDFLG T>)
|
||||
(<EQUAL? .WORD ,W?ALL ,W?ONE>
|
||||
<COND (<==? .NW ,W?OF>
|
||||
<SETG P-LEN <- ,P-LEN 1>>
|
||||
<SET PTR <+ .PTR ,P-LEXELEN>>)>)
|
||||
(<OR <EQUAL? .WORD ,W?THEN ,W?.>
|
||||
<AND <WT? .WORD ,PS?PREPOSITION>
|
||||
<NOT .FIRST??>>>
|
||||
<SETG P-LEN <+ ,P-LEN 1>>
|
||||
<PUT ,P-ITBL
|
||||
<+ .NUM 1>
|
||||
<REST ,P-LEXV <* .PTR 2>>>
|
||||
<RETURN <- .PTR ,P-LEXELEN>>)
|
||||
(<WT? .WORD ,PS?OBJECT>
|
||||
<COND (<AND <WT? .WORD
|
||||
,PS?ADJECTIVE
|
||||
,P1?ADJECTIVE>
|
||||
<NOT <==? .NW 0>>
|
||||
<WT? .NW ,PS?OBJECT>>)
|
||||
(<AND <NOT .ANDFLG>
|
||||
<NOT <EQUAL? .NW ,W?BUT ,W?EXCEPT>>
|
||||
<NOT <EQUAL? .NW ,W?AND ,W?COMMA>>>
|
||||
<PUT ,P-ITBL
|
||||
<+ .NUM 1>
|
||||
<REST ,P-LEXV <* <+ .PTR 2> 2>>>
|
||||
<RETURN .PTR>)
|
||||
(T <SET ANDFLG <>>)>)
|
||||
(<OR <WT? .WORD ,PS?ADJECTIVE>
|
||||
<WT? .WORD ,PS?BUZZ-WORD>>)
|
||||
(<AND .ANDFLG
|
||||
<OR <WT? .WORD ,PS?DIRECTION>
|
||||
<WT? .WORD ,PS?VERB>>>
|
||||
<SET PTR <- .PTR 4>>
|
||||
<PUT ,P-LEXV <+ .PTR 2> ,W?THEN>
|
||||
<SETG P-LEN <+ ,P-LEN 2>>)
|
||||
(T
|
||||
<TELL "I can't use the word '">
|
||||
<PRINTB .WORD>
|
||||
<TELL "' here." CR>
|
||||
<RFALSE>)>)
|
||||
(T <UNKNOWN-WORD .PTR> <RFALSE>)>
|
||||
<SET FIRST?? <>>
|
||||
<SET PTR <+ .PTR ,P-LEXELEN>>>>
|
||||
|
||||
;"Print undefined word in input.
|
||||
PTR points to the unknown word in P-LEXV"
|
||||
|
||||
<ROUTINE WORD-PRINT (CNT BUF)
|
||||
<REPEAT ()
|
||||
<COND (<DLESS? CNT 0> <RETURN>)
|
||||
(ELSE
|
||||
<PRINTC <GETB ,P-INBUF .BUF>>
|
||||
<SET BUF <+ .BUF 1>>)>>>
|
||||
|
||||
<ROUTINE UNKNOWN-WORD (PTR "AUX" BUF)
|
||||
#DECL ((PTR BUF) FIX)
|
||||
<TELL "I don't know the word '">
|
||||
<WORD-PRINT <GETB <REST ,P-LEXV <SET BUF <* .PTR 2>>> 2>
|
||||
<GETB <REST ,P-LEXV .BUF> 3>>
|
||||
<TELL "'." CR>>
|
||||
|
||||
;"Clear out the input table (prior to GROVELing through the input)"
|
||||
|
||||
<ROUTINE CLEAR-ITBL ("AUX" (CNT -1))
|
||||
<REPEAT ()
|
||||
<COND (<IGRTR? CNT ,P-ITBLLEN> <RETURN>)
|
||||
(T <PUT ,P-ITBL .CNT 0>)>>>
|
||||
|
||||
;" Perform syntax matching operations, using P-ITBL as the source of
|
||||
the verb and adjectives for this input. Returns false if no
|
||||
syntax matches, and does it's own orphaning. If return is true,
|
||||
the syntax is saved in P-SYNTAX."
|
||||
|
||||
<GLOBAL P-SLOCBITS 0>
|
||||
|
||||
<CONSTANT P-SYNLEN 8>
|
||||
|
||||
<CONSTANT P-SBITS 0>
|
||||
|
||||
<CONSTANT P-SPREP1 1>
|
||||
|
||||
<CONSTANT P-SPREP2 2>
|
||||
|
||||
<CONSTANT P-SFWIM1 3>
|
||||
|
||||
<CONSTANT P-SFWIM2 4>
|
||||
|
||||
<CONSTANT P-SLOC1 5>
|
||||
|
||||
<CONSTANT P-SLOC2 6>
|
||||
|
||||
<CONSTANT P-SACTION 7>
|
||||
|
||||
<CONSTANT P-SONUMS 3>
|
||||
|
||||
<ROUTINE SYNTAX-CHECK ("AUX" SYN LEN NUM OBJ (DRIVE1 <>) (DRIVE2 <>) PREP VERB TMP)
|
||||
#DECL ((DRIVE1 DRIVE2) <OR FALSE <PRIMTYPE VECTOR>>
|
||||
(SYN) <PRIMTYPE VECTOR> (LEN NUM VERB PREP) FIX
|
||||
(OBJ) <OR FALSE OBJECT>)
|
||||
<COND (<0? <SET VERB <GET ,P-ITBL ,P-VERB>>>
|
||||
<TELL "You must supply a verb!" CR>
|
||||
<RFALSE>)>
|
||||
<SET SYN <GET ,VERBS <- 255 .VERB>>>
|
||||
<SET LEN <GETB .SYN 0>>
|
||||
<SET SYN <REST .SYN>>
|
||||
<REPEAT ()
|
||||
<SET NUM <BAND <GETB .SYN ,P-SBITS> ,P-SONUMS>>
|
||||
<COND (<AND <NOT <L? .NUM 1>>
|
||||
<0? ,P-NCN>
|
||||
<OR <0? <SET PREP <GET ,P-ITBL ,P-PREP1>>>
|
||||
<==? .PREP <GETB .SYN ,P-SPREP1>>>>
|
||||
<SET DRIVE1 .SYN>)
|
||||
(<==? <GETB .SYN ,P-SPREP1> <GET ,P-ITBL ,P-PREP1>>
|
||||
<COND (<AND <==? .NUM 2> <==? ,P-NCN 1>>
|
||||
<SET DRIVE2 .SYN>)
|
||||
(<==? <GETB .SYN ,P-SPREP2>
|
||||
<GET ,P-ITBL ,P-PREP2>>
|
||||
<SYNTAX-FOUND .SYN>
|
||||
<RTRUE>)>)>
|
||||
<COND (<DLESS? LEN 1>
|
||||
<COND (<OR .DRIVE1 .DRIVE2> <RETURN>)
|
||||
(T
|
||||
<TELL "I don't understand that sentence." CR>
|
||||
<RFALSE>)>)
|
||||
(T <SET SYN <REST .SYN ,P-SYNLEN>>)>>
|
||||
<COND (<AND .DRIVE1
|
||||
<SET OBJ
|
||||
<GWIM <GETB .DRIVE1 ,P-SFWIM1>
|
||||
<GETB .DRIVE1 ,P-SLOC1>
|
||||
<GETB .DRIVE1 ,P-SPREP1>>>>
|
||||
<PUT ,P-PRSO ,P-MATCHLEN 1>
|
||||
<PUT ,P-PRSO 1 .OBJ>
|
||||
<SYNTAX-FOUND .DRIVE1>)
|
||||
(<AND .DRIVE2
|
||||
<SET OBJ
|
||||
<GWIM <GETB .DRIVE2 ,P-SFWIM2>
|
||||
<GETB .DRIVE2 ,P-SLOC2>
|
||||
<GETB .DRIVE2 ,P-SPREP2>>>>
|
||||
<PUT ,P-PRSI ,P-MATCHLEN 1>
|
||||
<PUT ,P-PRSI 1 .OBJ>
|
||||
<SYNTAX-FOUND .DRIVE2>)
|
||||
(T
|
||||
<TELL "You must supply a noun!" CR>
|
||||
<RFALSE>)>>
|
||||
|
||||
<ROUTINE SYNTAX-FOUND (SYN)
|
||||
#DECL ((SYN) <PRIMTYPE VECTOR>)
|
||||
<SETG P-SYNTAX .SYN>
|
||||
<SETG PRSA <GETB .SYN ,P-SACTION>>>
|
||||
|
||||
<GLOBAL P-GWIMBIT 0>
|
||||
|
||||
<ROUTINE GWIM (GBIT LBIT PREP "AUX" OBJ)
|
||||
#DECL ((GBIT LBIT) FIX (OBJ) OBJECT)
|
||||
<COND (<==? .GBIT ,RWATERBIT>
|
||||
<RETURN ,ROOMS>)>
|
||||
<SETG P-GWIMBIT .GBIT>
|
||||
<SETG P-SLOCBITS .LBIT>
|
||||
<PUT ,P-MERGE ,P-MATCHLEN 0>
|
||||
<COND (<GET-OBJECT ,P-MERGE <>>
|
||||
<SETG P-GWIMBIT 0>
|
||||
<COND (<==? <GET ,P-MERGE ,P-MATCHLEN> 1>
|
||||
<SET OBJ <GET ,P-MERGE 1>>
|
||||
<TELL "(">
|
||||
<COND (<NOT <0? .PREP>>
|
||||
<PRINTB <PREP-FIND .PREP>>
|
||||
<COND (<==? .OBJ ,HANDS>
|
||||
<TELL " your hands)" CR>)
|
||||
(T
|
||||
<TELL " the ">)>)>
|
||||
<COND (<NOT <==? .OBJ ,HANDS>>
|
||||
<TELL D .OBJ ")" CR>)>
|
||||
.OBJ)>)
|
||||
(T <SETG P-GWIMBIT 0> <RFALSE>)>>
|
||||
|
||||
<ROUTINE PREP-FIND (PREP "AUX" (CNT 0) SIZE)
|
||||
#DECL ((PREP CNT SIZE) FIX)
|
||||
<SET SIZE <* <GET ,PREPOSITIONS 0> 2>>
|
||||
<REPEAT ()
|
||||
<COND (<IGRTR? CNT .SIZE> <RFALSE>)
|
||||
(<==? <GET ,PREPOSITIONS .CNT> .PREP>
|
||||
<RETURN <GET ,PREPOSITIONS <- .CNT 1>>>)>>>
|
||||
|
||||
<ROUTINE SNARF-OBJECTS ("AUX" PTR)
|
||||
#DECL ((PTR) <OR FIX <PRIMTYPE VECTOR>>)
|
||||
<COND (<NOT <==? <SET PTR <GET ,P-ITBL ,P-NC1>> 0>>
|
||||
<SETG P-SLOCBITS <GETB ,P-SYNTAX ,P-SLOC1>>
|
||||
<OR <SNARFEM .PTR <GET ,P-ITBL ,P-NC1L> ,P-PRSO> <RFALSE>>
|
||||
<OR <0? <GET ,P-BUTS ,P-MATCHLEN>>
|
||||
<SETG P-PRSO <BUT-MERGE ,P-PRSO>>>)>
|
||||
<COND (<NOT <==? <SET PTR <GET ,P-ITBL ,P-NC2>> 0>>
|
||||
<SETG P-SLOCBITS <GETB ,P-SYNTAX ,P-SLOC2>>
|
||||
<OR <SNARFEM .PTR <GET ,P-ITBL ,P-NC2L> ,P-PRSI> <RFALSE>>
|
||||
<COND (<NOT <0? <GET ,P-BUTS ,P-MATCHLEN>>>
|
||||
<COND (<==? <GET ,P-PRSI ,P-MATCHLEN> 1>
|
||||
<SETG P-PRSO <BUT-MERGE ,P-PRSO>>)
|
||||
(T <SETG P-PRSI <BUT-MERGE ,P-PRSI>>)>)>)>
|
||||
<RTRUE>>
|
||||
|
||||
<ROUTINE BUT-MERGE (TBL "AUX" LEN BUTLEN (CNT 1) (MATCHES 0) OBJ NTBL)
|
||||
#DECL ((TBL NTBL) TABLE (LEN BUTLEN MATCHES) FIX (OBJ) OBJECT)
|
||||
<SET LEN <GET .TBL ,P-MATCHLEN>>
|
||||
<PUT ,P-MERGE ,P-MATCHLEN 0>
|
||||
<REPEAT ()
|
||||
<COND (<DLESS? LEN 0> <RETURN>)
|
||||
(<ZMEMQ <SET OBJ <GET .TBL .CNT>> ,P-BUTS>)
|
||||
(T
|
||||
<PUT ,P-MERGE <+ .MATCHES 1> .OBJ>
|
||||
<SET MATCHES <+ .MATCHES 1>>)>
|
||||
<SET CNT <+ .CNT 1>>>
|
||||
<PUT ,P-MERGE ,P-MATCHLEN .MATCHES>
|
||||
<SET NTBL ,P-MERGE>
|
||||
<SETG P-MERGE .TBL>
|
||||
.NTBL>
|
||||
|
||||
<GLOBAL P-NAM <>>
|
||||
|
||||
<GLOBAL P-ADJ <>>
|
||||
|
||||
<GLOBAL P-ADJN <>>
|
||||
|
||||
<GLOBAL P-PRSO <ITABLE NONE 20>>
|
||||
|
||||
<GLOBAL P-PRSI <ITABLE NONE 20>>
|
||||
|
||||
<GLOBAL P-BUTS <ITABLE NONE 50>>
|
||||
|
||||
<GLOBAL P-MERGE <ITABLE NONE 50>>
|
||||
|
||||
<GLOBAL P-MATCHLEN 0>
|
||||
|
||||
<GLOBAL P-GETFLAGS 0>
|
||||
|
||||
<CONSTANT P-ALL 1>
|
||||
|
||||
<CONSTANT P-ONE 2>
|
||||
|
||||
<CONSTANT P-INHIBIT 4>
|
||||
|
||||
<ROUTINE SNARFEM (PTR EPTR TBL "AUX" (AND <>) (BUT <>) LEN WV WORD NW)
|
||||
#DECL ((TBL) TABLE (PTR EPTR) <PRIMTYPE VECTOR> (AND) <OR ATOM FALSE>
|
||||
(BUT) <OR FALSE TABLE> (WV) <OR FALSE FIX>)
|
||||
<SETG P-GETFLAGS 0>
|
||||
<PUT ,P-BUTS ,P-MATCHLEN 0>
|
||||
<PUT .TBL ,P-MATCHLEN 0>
|
||||
<SET WORD <GET .PTR 0>>
|
||||
<REPEAT ()
|
||||
<COND (<==? .PTR .EPTR> <RETURN <GET-OBJECT <OR .BUT .TBL>>>)
|
||||
(T
|
||||
<SET NW <GET .PTR ,P-LEXELEN>>
|
||||
<COND (<==? .WORD ,W?ALL>
|
||||
<SETG P-GETFLAGS ,P-ALL>
|
||||
<COND (<==? .NW ,W?OF>
|
||||
<SET PTR <REST .PTR ,P-WORDLEN>>)>)
|
||||
(<EQUAL? .WORD ,W?BUT ,W?EXCEPT>
|
||||
<OR <GET-OBJECT <OR .BUT .TBL>> <RFALSE>>
|
||||
<SET BUT ,P-BUTS>
|
||||
<PUT .BUT ,P-MATCHLEN 0>)
|
||||
(<EQUAL? .WORD ,W?A ,W?ONE>
|
||||
<COND (<NOT ,P-ADJ>
|
||||
<SETG P-GETFLAGS ,P-ONE>
|
||||
<COND (<==? .NW ,W?OF>
|
||||
<SET PTR <REST .PTR ,P-WORDLEN>>)>)
|
||||
(T
|
||||
<SETG P-NAM ,P-ONEOBJ>
|
||||
<OR <GET-OBJECT <OR .BUT .TBL>> <RFALSE>>
|
||||
<AND <0? .NW> <RTRUE>>)>)
|
||||
(<AND <EQUAL? .WORD ,W?AND ,W?COMMA>
|
||||
<NOT <EQUAL? .NW ,W?AND ,W?COMMA>>>
|
||||
<OR <GET-OBJECT <OR .BUT .TBL>> <RFALSE>>
|
||||
T)
|
||||
(<WT? .WORD ,PS?BUZZ-WORD>)
|
||||
(<EQUAL? .WORD ,W?AND ,W?COMMA>)
|
||||
(<==? .WORD ,W?OF>
|
||||
<COND (<0? ,P-GETFLAGS>
|
||||
<SETG P-GETFLAGS ,P-INHIBIT>)>)
|
||||
(<SET WV <WT? .WORD ,PS?ADJECTIVE ,P1?ADJECTIVE>>
|
||||
<SETG P-ADJ .WV>
|
||||
<SETG P-ADJN .WORD>)
|
||||
(<WT? .WORD ,PS?OBJECT ,P1?OBJECT>
|
||||
<SETG P-NAM .WORD>
|
||||
<SETG P-ONEOBJ .WORD>)>)>
|
||||
<COND (<NOT <==? .PTR .EPTR>>
|
||||
<SET PTR <REST .PTR ,P-WORDLEN>>
|
||||
<SET WORD .NW>)>>>
|
||||
|
||||
<CONSTANT SH 128>
|
||||
|
||||
<CONSTANT SC 64>
|
||||
|
||||
<CONSTANT SIR 32>
|
||||
|
||||
<CONSTANT SOG 16>
|
||||
|
||||
<CONSTANT STAKE 8>
|
||||
|
||||
<CONSTANT SMANY 4>
|
||||
|
||||
<CONSTANT SHAVE 2>
|
||||
|
||||
<ROUTINE GET-OBJECT (TBL
|
||||
"OPTIONAL" (VRB T)
|
||||
"AUX" BITS LEN XBITS TLEN (GCHECK <>))
|
||||
#DECL ((TBL) TABLE (XBITS BITS TLEN LEN) FIX (GWIM) <OR FALSE FIX>
|
||||
(VRB GCHECK) <OR ATOM FALSE>)
|
||||
<SET XBITS ,P-SLOCBITS>
|
||||
<SET TLEN <GET .TBL ,P-MATCHLEN>>
|
||||
<COND (<BTST ,P-GETFLAGS ,P-INHIBIT> <RTRUE>)>
|
||||
<COND (<AND <NOT ,P-NAM> ,P-ADJ <WT? ,P-ADJN ,PS?OBJECT ,P1?OBJECT>>
|
||||
<SETG P-NAM ,P-ADJN>
|
||||
<SETG P-ADJ <>>)>
|
||||
<COND (<AND <NOT ,P-NAM>
|
||||
<NOT ,P-ADJ>
|
||||
<NOT <==? ,P-GETFLAGS ,P-ALL>>
|
||||
<0? ,P-GWIMBIT>>
|
||||
<COND (.VRB
|
||||
<TELL "There is a noun missing." CR>)>
|
||||
<RFALSE>)>
|
||||
<COND (<OR <NOT <==? ,P-GETFLAGS ,P-ALL>> <0? ,P-SLOCBITS>>
|
||||
<SETG P-SLOCBITS -1>)>
|
||||
<SETG P-TABLE .TBL>
|
||||
<PROG ()
|
||||
<COND (.GCHECK <GLOBAL-CHECK .TBL>)
|
||||
(T
|
||||
<COND (,LIT <DO-SL ,HERE ,SOG ,SIR>)>
|
||||
<DO-SL ,WINNER ,SH ,SC>)>
|
||||
<SET LEN <- <GET .TBL ,P-MATCHLEN> .TLEN>>
|
||||
<COND (<BTST ,P-GETFLAGS ,P-ALL>)
|
||||
(<OR <G? .LEN 1>
|
||||
<AND <0? .LEN> <NOT <==? ,P-SLOCBITS -1>>>>
|
||||
<COND (<==? ,P-SLOCBITS -1>
|
||||
<SETG P-SLOCBITS .XBITS>
|
||||
<PUT .TBL
|
||||
,P-MATCHLEN
|
||||
<- <GET .TBL ,P-MATCHLEN> .LEN>>
|
||||
<AGAIN>)
|
||||
(T
|
||||
<COND (.VRB
|
||||
<TELL "Specify which ">
|
||||
<PRINTB ,P-NAM>
|
||||
<TELL " you mean." CR>)>
|
||||
<SETG P-NAM <>>
|
||||
<SETG P-ADJ <>>
|
||||
<RFALSE>)>)
|
||||
(<AND <0? .LEN> .GCHECK>
|
||||
<COND (.VRB
|
||||
<COND (,LIT
|
||||
<TELL "I can't see any">
|
||||
<COND (,P-ADJ <TELL " "> <PRINTB ,P-ADJN>)>
|
||||
<COND (,P-NAM <TELL " "> <PRINTB ,P-NAM>)>
|
||||
<TELL " here." CR>)
|
||||
(T
|
||||
<TELL "It's too dark to see." CR>)>)>
|
||||
<SETG P-NAM <>>
|
||||
<SETG P-ADJ <>>
|
||||
<RFALSE>)
|
||||
(<0? .LEN> <SET GCHECK T> <AGAIN>)>
|
||||
<SETG P-ADJ <>>
|
||||
<SETG P-NAM <>>
|
||||
<SETG P-SLOCBITS .XBITS>
|
||||
<RTRUE>>>
|
||||
|
||||
<ROUTINE GLOBAL-CHECK (TBL "AUX" RMG RMGL (CNT 0) OBJ OBITS FOO)
|
||||
#DECL ((TBL) TABLE (RMG) <OR FALSE TABLE> (RMGL CNT) FIX (OBJ) OBJECT)
|
||||
<SET OBITS ,P-SLOCBITS>
|
||||
<COND (<SET RMG <GETPT ,HERE ,P?GLOBAL>>
|
||||
<SET RMGL <- <PTSIZE .RMG> 1>>
|
||||
<REPEAT ()
|
||||
<COND (<THIS-IT? <SET OBJ <GETB .RMG .CNT>> .TBL>
|
||||
<OBJ-FOUND .OBJ .TBL>)>
|
||||
<COND (<IGRTR? CNT .RMGL> <RETURN>)>>)>
|
||||
<COND (<SET RMG <GETPT ,HERE ,P?PSEUDO>>
|
||||
<SET RMGL <- </ <PTSIZE .RMG> 4> 1>>
|
||||
<SET CNT 0>
|
||||
<REPEAT ()
|
||||
<COND (<==? ,P-NAM <GET .RMG <* .CNT 2>>>
|
||||
<PUTP ,PSEUDO-OBJECT
|
||||
,P?ACTION
|
||||
<GET .RMG <+ <* .CNT 2> 1>>>
|
||||
<SET FOO
|
||||
<BACK <GETPT ,PSEUDO-OBJECT ,P?ACTION> 5>>
|
||||
<PUT .FOO 0 <GET ,P-NAM 0>>
|
||||
<PUT .FOO 1 <GET ,P-NAM 1>>
|
||||
<OBJ-FOUND ,PSEUDO-OBJECT .TBL>
|
||||
<RETURN>)
|
||||
(<IGRTR? CNT .RMGL> <RETURN>)>>)>
|
||||
<COND (<0? <GET .TBL ,P-MATCHLEN>>
|
||||
<SETG P-SLOCBITS -1>
|
||||
<SETG P-TABLE .TBL>
|
||||
<DO-SL ,GLOBAL-OBJECTS 1 1>
|
||||
<SETG P-SLOCBITS .OBITS>)>>
|
||||
|
||||
<ROUTINE DO-SL (OBJ BIT1 BIT2 "AUX" BITS)
|
||||
#DECL ((OBJ) OBJECT (BIT1 BIT2 BITS) FIX)
|
||||
<COND (<BTST ,P-SLOCBITS <+ .BIT1 .BIT2>>
|
||||
<SEARCH-LIST .OBJ ,P-TABLE ,P-SRCALL>)
|
||||
(T
|
||||
<COND (<BTST ,P-SLOCBITS .BIT1>
|
||||
<SEARCH-LIST .OBJ ,P-TABLE ,P-SRCTOP>)
|
||||
(<BTST ,P-SLOCBITS .BIT2>
|
||||
<SEARCH-LIST .OBJ ,P-TABLE ,P-SRCBOT>)
|
||||
(T <RTRUE>)>)>>
|
||||
|
||||
<CONSTANT P-SRCBOT 2>
|
||||
|
||||
<CONSTANT P-SRCTOP 0>
|
||||
|
||||
<CONSTANT P-SRCALL 1>
|
||||
|
||||
<ROUTINE SEARCH-LIST (OBJ TBL LVL "AUX" FLS NOBJ)
|
||||
#DECL ((OBJ NOBJ) <OR FALSE OBJECT> (TBL) TABLE (LVL) FIX (FLS) ANY)
|
||||
<COND (<SET OBJ <FIRST? .OBJ>>
|
||||
<REPEAT ()
|
||||
<COND (<AND <NOT <==? .LVL ,P-SRCBOT>>
|
||||
<THIS-IT? .OBJ .TBL>>
|
||||
<OBJ-FOUND .OBJ .TBL>)>
|
||||
<COND (<AND <OR <NOT <==? .LVL ,P-SRCTOP>>
|
||||
<FSET? .OBJ ,SURFACEBIT>>
|
||||
<SET NOBJ <FIRST? .OBJ>>
|
||||
<OR <FSET? .OBJ ,OPENBIT>
|
||||
<FSET? .OBJ ,TRANSBIT>>>
|
||||
<SET FLS
|
||||
<SEARCH-LIST .OBJ
|
||||
.TBL
|
||||
<COND (<FSET? .OBJ ,SURFACEBIT>
|
||||
,P-SRCALL)
|
||||
(T ,P-SRCTOP)>>>)>
|
||||
<COND (<SET OBJ <NEXT? .OBJ>>) (T <RETURN>)>>)>>
|
||||
|
||||
<ROUTINE OBJ-FOUND (OBJ TBL "AUX" PTR)
|
||||
#DECL ((OBJ) OBJECT (TBL) TABLE (PTR) FIX)
|
||||
<SET PTR <GET .TBL ,P-MATCHLEN>>
|
||||
<PUT .TBL <+ .PTR 1> .OBJ>
|
||||
<PUT .TBL ,P-MATCHLEN <+ .PTR 1>>>
|
||||
|
||||
<ROUTINE TAKE-CHECK ()
|
||||
<AND <ITAKE-CHECK ,P-PRSO <GETB ,P-SYNTAX ,P-SLOC1>>
|
||||
<ITAKE-CHECK ,P-PRSI <GETB ,P-SYNTAX ,P-SLOC2>>>>
|
||||
|
||||
|
||||
<ROUTINE ITAKE-CHECK (TBL BITS "AUX" PTR OBJ TAKEN)
|
||||
#DECL ((TBL) TABLE (BITS PTR) FIX (OBJ) OBJECT
|
||||
(TAKEN) <OR FALSE FIX ATOM>)
|
||||
<COND (<AND <SET PTR <GET .TBL ,P-MATCHLEN>> <BTST .BITS ,STAKE>>
|
||||
<REPEAT ()
|
||||
<COND (<L? <SET PTR <- .PTR 1>> 0> <RETURN>)
|
||||
(T
|
||||
<SET OBJ <GET .TBL <+ .PTR 1>>>
|
||||
<COND (<==? .OBJ ,IT> <SET OBJ ,P-IT-OBJECT>)>
|
||||
<COND (<NOT <IN? .OBJ ,WINNER>>
|
||||
<SETG PRSO .OBJ>
|
||||
<COND (<FSET? .OBJ ,TRYTAKEBIT>
|
||||
<SET TAKEN T>)
|
||||
(<==? <ITAKE <>> T>
|
||||
<SET TAKEN <>>)
|
||||
(T <SET TAKEN T>)>
|
||||
<COND (<AND .TAKEN <BTST .BITS ,SHAVE>>
|
||||
<TELL "You don't have the ">
|
||||
<PRINTD .OBJ>
|
||||
<TELL "." CR>
|
||||
<RFALSE>)
|
||||
(<NOT .TAKEN>
|
||||
<TELL "(Taken)" CR>)>)>)>>)
|
||||
(T)>>
|
||||
|
||||
<ROUTINE MANY-CHECK ("AUX" (LOSS <>) TMP)
|
||||
#DECL ((LOSS) <OR FALSE FIX>)
|
||||
<COND (<AND <G? <GET ,P-PRSO ,P-MATCHLEN> 1>
|
||||
<NOT <BTST <GETB ,P-SYNTAX ,P-SLOC1> ,SMANY>>>
|
||||
<SET LOSS 1>)
|
||||
(<AND <G? <GET ,P-PRSI ,P-MATCHLEN> 1>
|
||||
<NOT <BTST <GETB ,P-SYNTAX ,P-SLOC2> ,SMANY>>>
|
||||
<SET LOSS 2>)>
|
||||
<COND (.LOSS
|
||||
<TELL "You can't use multiple objects with '">
|
||||
<SET TMP <GET ,P-ITBL ,P-VERBN>>
|
||||
<COND (,P-OFLAG
|
||||
<PRINTB <GET .TMP 0>>)
|
||||
(T
|
||||
<WORD-PRINT <GETB .TMP 2> <GETB .TMP 3>>)>
|
||||
<TELL "'." CR>
|
||||
<RFALSE>)
|
||||
(T)>>
|
||||
|
||||
<ROUTINE ZMEMQ (ITM TBL "OPTIONAL" (SIZE -1) "AUX" (CNT 1))
|
||||
<COND (<NOT .TBL> <RFALSE>)>
|
||||
<COND (<NOT <L? .SIZE 0>> <SET CNT 0>)
|
||||
(ELSE <SET SIZE <GET .TBL 0>>)>
|
||||
<REPEAT ()
|
||||
<COND (<==? .ITM <GET .TBL .CNT>> <RTRUE>)
|
||||
(<IGRTR? CNT .SIZE> <RFALSE>)>>>
|
||||
|
||||
<ROUTINE ZMEMQB (ITM TBL SIZE "AUX" (CNT 0))
|
||||
#DECL ((ITM) ANY (TBL) TABLE (SIZE CNT) FIX)
|
||||
<REPEAT ()
|
||||
<COND (<==? .ITM <GETB .TBL .CNT>> <RTRUE>)
|
||||
(<IGRTR? CNT .SIZE> <RFALSE>)>>>
|
||||
|
||||
<SETG ALWAYS-LIT <>>
|
||||
|
||||
<ROUTINE LIT? (RM "AUX" OHERE (LIT <>))
|
||||
#DECL ((RM OHERE) OBJECT (LIT) <OR ATOM FALSE>)
|
||||
<SETG P-GWIMBIT ,ONBIT>
|
||||
<SET OHERE ,HERE>
|
||||
<SETG HERE .RM>
|
||||
<COND (<OR <FSET? .RM ,ONBIT> ,ALWAYS-LIT> <SET LIT T>)
|
||||
(T
|
||||
<PUT ,P-MERGE ,P-MATCHLEN 0>
|
||||
<SETG P-TABLE ,P-MERGE>
|
||||
<SETG P-SLOCBITS -1>
|
||||
<COND (<==? .OHERE .RM> <DO-SL ,WINNER 1 1>)>
|
||||
<DO-SL .RM 1 1>
|
||||
<COND (<G? <GET ,P-TABLE ,P-MATCHLEN> 0> <SET LIT T>)>)>
|
||||
<SETG HERE .OHERE>
|
||||
<SETG P-GWIMBIT 0>
|
||||
.LIT>
|
||||
|
|
@ -0,0 +1,467 @@
|
|||
"SUBTITLE VOCABULARY"
|
||||
|
||||
<BUZZ A THE IS AND OF THEN ALL ONE BUT EXCEPT \. \, YES NO Y>
|
||||
|
||||
<SYNONYM WITH USING THROUGH>
|
||||
<SYNONYM IN INSIDE INTO>
|
||||
|
||||
<SYNONYM NORTH N>
|
||||
<SYNONYM SOUTH S>
|
||||
<SYNONYM EAST E>
|
||||
<SYNONYM WEST W>
|
||||
<SYNONYM DOWN D>
|
||||
<SYNONYM UP U>
|
||||
<SYNONYM NW NORTHWEST>
|
||||
<SYNONYM NE NORTHEAST>
|
||||
<SYNONYM SW SOUTHWEST>
|
||||
<SYNONYM SE SOUTHEAST>
|
||||
|
||||
\
|
||||
|
||||
"ZORK game commands"
|
||||
|
||||
<SYNTAX BRIEF = V-BRIEF>
|
||||
|
||||
<SYNTAX SUPER = V-SUPER-BRIEF>
|
||||
<SYNONYM SUPERBRIEF>
|
||||
|
||||
<SYNTAX DIAGNOSE = V-DIAGNOSE>
|
||||
|
||||
<SYNTAX INVENTORY = V-INVENTORY>
|
||||
<SYNONYM INVENTORY I>
|
||||
|
||||
<SYNTAX QUIT = V-QUIT>
|
||||
<SYNONYM QUIT Q>
|
||||
|
||||
<SYNTAX RESTART = V-RESTART>
|
||||
|
||||
<SYNTAX RESTORE = V-RESTORE>
|
||||
|
||||
|
||||
<SYNTAX SAVE = V-SAVE>
|
||||
|
||||
<SYNTAX SCORE = V-SCORE>
|
||||
|
||||
<SYNTAX VERSION = V-VERSION>
|
||||
|
||||
<SYNTAX VERBOSE = V-VERBOSE>
|
||||
|
||||
\
|
||||
|
||||
"SUBTITLE REAL VERBS"
|
||||
|
||||
<SYNTAX AGAIN = V-AGAIN>
|
||||
|
||||
<SYNTAX ATTACK
|
||||
OBJECT (FIND VILLAIN) (ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
|
||||
= V-ATTACK>
|
||||
<SYNONYM ATTACK FIGHT HIT>
|
||||
|
||||
<SYNTAX BOARD OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM)
|
||||
= V-BOARD PRE-BOARD>
|
||||
|
||||
<SYNTAX BURN
|
||||
OBJECT (FIND BURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND FLAMEBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE)
|
||||
= V-BURN PRE-BURN>
|
||||
<SYNTAX BURN
|
||||
DOWN
|
||||
OBJECT (FIND BURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND FLAMEBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE)
|
||||
= V-BURN PRE-BURN>
|
||||
<SYNONYM BURN IGNITE>
|
||||
|
||||
<SYNTAX CLIMB UP OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-UP>
|
||||
<SYNTAX CLIMB DOWN OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
|
||||
<SYNTAX CLIMB OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-FOO>
|
||||
<SYNTAX CLIMB IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
|
||||
<SYNTAX CLIMB ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
|
||||
<SYNONYM CLIMB SIT HATCH>
|
||||
|
||||
<SYNTAX CLOSE
|
||||
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
= V-CLOSE>
|
||||
|
||||
<SYNTAX COUNT OBJECT = V-COUNT>
|
||||
<SYNONYM COUNT>
|
||||
|
||||
<SYNTAX CROSS OBJECT = V-CROSS>
|
||||
<SYNONYM CROSS FORD>
|
||||
|
||||
<SYNTAX CUT OBJECT WITH OBJECT (FIND WEAPONBIT) (CARRIED HELD) = V-CUT>
|
||||
<SYNONYM CUT SLICE PIERCE>
|
||||
|
||||
<SYNTAX DEFLATE OBJECT = V-DEFLATE>
|
||||
|
||||
<SYNTAX DIG
|
||||
OBJECT (ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND TOOLBIT) (HELD CARRIED HAVE) = V-DIG PRE-DIG>
|
||||
<SYNTAX DIG
|
||||
IN
|
||||
OBJECT (ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND TOOLBIT) (HELD CARRIED HAVE)
|
||||
= V-DIG PRE-DIG>
|
||||
|
||||
<SYNTAX DISEMBARK OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM)
|
||||
= V-DISEMBARK>
|
||||
|
||||
<SYNTAX DRINK
|
||||
OBJECT (FIND DRINKBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
= V-DRINK>
|
||||
<SYNONYM DRINK>
|
||||
|
||||
<SYNTAX DROP OBJECT (HELD MANY HAVE) = V-DROP ;*>
|
||||
<SYNTAX DROP OBJECT (HELD MANY HAVE) DOWN OBJECT = V-PUT PRE-PUT>
|
||||
<SYNTAX DROP OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT>
|
||||
<SYNTAX DROP OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT PRE-PUT>
|
||||
<SYNONYM DROP POUR>
|
||||
|
||||
<SYNTAX EAT
|
||||
OBJECT (FIND FOODBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE MANY)
|
||||
= V-EAT>
|
||||
<SYNONYM EAT TASTE>
|
||||
|
||||
<SYNTAX ENTER = V-ENTER>
|
||||
<SYNTAX ENTER OBJECT = V-THROUGH>
|
||||
|
||||
<SYNTAX EXAMINE OBJECT (HELD CARRIED IN-ROOM ON-GROUND MANY) = V-EXAMINE>
|
||||
<SYNTAX EXAMINE IN OBJECT (HELD CARRIED IN-ROOM ON-GROUND MANY)
|
||||
= V-LOOK-INSIDE>
|
||||
<SYNONYM EXAMINE DESCRIBE WHAT WHATS>
|
||||
|
||||
<SYNTAX EXORCISE OBJECT = V-EXORCISE>
|
||||
<SYNTAX EXORCISE OUT OBJECT (FIND VILLAIN) = V-EXORCISE>
|
||||
<SYNTAX EXORCISE AWAY OBJECT (FIND VILLAIN) = V-EXORCISE>
|
||||
<SYNONYM EXORCISE BANISH CAST DRIVE>
|
||||
|
||||
<SYNTAX EXTINGUISH
|
||||
OBJECT (FIND LIGHTBIT) (MANY HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE)
|
||||
= V-LAMP-OFF>
|
||||
<SYNONYM EXTINGUISH DOUSE>
|
||||
|
||||
<SYNTAX FILL
|
||||
OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT
|
||||
= V-FILL>
|
||||
<SYNTAX FILL
|
||||
OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
= V-FILL>
|
||||
|
||||
<SYNTAX FIND OBJECT
|
||||
= V-FIND>
|
||||
<SYNONYM FIND WHERE SEEK SEE>
|
||||
|
||||
<SYNTAX GIVE
|
||||
OBJECT (MANY HELD CARRIED ON-GROUND IN-ROOM)
|
||||
TO
|
||||
OBJECT (FIND VICBIT) (ON-GROUND)
|
||||
= V-GIVE ;*>
|
||||
<SYNTAX GIVE
|
||||
OBJECT (FIND VICBIT) (ON-GROUND)
|
||||
OBJECT (MANY)
|
||||
= V-SGIVE>
|
||||
<SYNONYM GIVE>
|
||||
|
||||
<SYNTAX HELLO = V-HELLO ;*>
|
||||
<SYNTAX HELLO OBJECT = V-HELLO>
|
||||
<SYNONYM HELLO HI>
|
||||
|
||||
<SYNTAX BLOW OUT OBJECT = V-LAMP-OFF>
|
||||
<SYNTAX BLOW UP
|
||||
OBJECT
|
||||
WITH
|
||||
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED)
|
||||
= V-INFLATE ;*>
|
||||
<SYNTAX BLOW UP OBJECT = V-BLAST>
|
||||
<SYNTAX BLOW IN OBJECT = V-BREATHE>
|
||||
|
||||
<SYNTAX INFLAT
|
||||
OBJECT
|
||||
WITH
|
||||
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED)
|
||||
= V-INFLATE>
|
||||
|
||||
<SYNTAX JUMP = V-LEAP>
|
||||
<SYNTAX JUMP OVER OBJECT = V-LEAP>
|
||||
<SYNTAX JUMP ACROSS OBJECT = V-LEAP>
|
||||
<SYNTAX JUMP IN OBJECT = V-LEAP>
|
||||
<SYNONYM JUMP LEAP>
|
||||
|
||||
<SYNTAX KICK OBJECT = V-KICK>
|
||||
<SYNONYM KICK BITE>
|
||||
|
||||
<SYNTAX KILL
|
||||
OBJECT (FIND VILLAIN) (ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
|
||||
= V-KILL>
|
||||
<SYNONYM KILL STAB>
|
||||
|
||||
<SYNTAX KNOCK AT OBJECT = V-KNOCK ;*>
|
||||
<SYNTAX KNOCK ON OBJECT = V-KNOCK>
|
||||
<SYNTAX KNOCK DOWN OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM) = V-ATTACK>
|
||||
<SYNONYM KNOCK>
|
||||
|
||||
<SYNTAX LAUNCH OBJECT (FIND VEHBIT) = V-LAUNCH>
|
||||
|
||||
<SYNTAX LEAVE = V-LEAVE>
|
||||
<SYNTAX LEAVE OBJECT = V-DROP>
|
||||
|
||||
<SYNTAX LIGHT
|
||||
OBJECT (FIND LIGHTBIT)
|
||||
(HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE)
|
||||
= V-LAMP-ON ;*>
|
||||
<SYNTAX LIGHT
|
||||
OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND FLAMEBIT) (HELD CARRIED TAKE HAVE)
|
||||
= V-BURN PRE-BURN>
|
||||
|
||||
<SYNTAX LISTEN TO OBJECT = V-LISTEN>
|
||||
<SYNTAX LISTEN FOR OBJECT = V-LISTEN>
|
||||
|
||||
<SYNTAX LOOK = V-LOOK>
|
||||
<SYNTAX LOOK AROUND OBJECT (FIND RWATERBIT) = V-LOOK>
|
||||
<SYNTAX LOOK UP OBJECT (FIND RWATERBIT) = V-LOOK>
|
||||
<SYNTAX LOOK DOWN OBJECT (FIND RWATERBIT) = V-LOOK>
|
||||
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY) = V-EXAMINE>
|
||||
<SYNTAX LOOK WITH OBJECT = V-LOOK-INSIDE>
|
||||
<SYNTAX LOOK UNDER OBJECT = V-LOOK-UNDER>
|
||||
<SYNTAX LOOK BEHIND OBJECT = V-LOOK-BEHIND>
|
||||
<SYNTAX LOOK IN OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY) = V-LOOK-INSIDE>
|
||||
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY) WITH OBJECT = V-READ PRE-READ>
|
||||
<SYNTAX LOOK FOR OBJECT = V-FIND>
|
||||
<SYNONYM LOOK L STARE GAZE>
|
||||
|
||||
<SYNTAX SEARCH OBJECT = V-SEARCH>
|
||||
<SYNTAX SEARCH IN OBJECT = V-SEARCH>
|
||||
<SYNTAX SEARCH FOR OBJECT = V-FIND>
|
||||
|
||||
<SYNTAX LOWER OBJECT = V-LOWER>
|
||||
|
||||
<SYNTAX MELT
|
||||
OBJECT
|
||||
WITH
|
||||
OBJECT (FIND FLAMEBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
= V-MELT>
|
||||
<SYNONYM MELT>
|
||||
|
||||
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
|
||||
<SYNTAX ROLL UP OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
|
||||
<SYNONYM MOVE>
|
||||
|
||||
<SYNTAX PULL OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE ; *>
|
||||
<SYNTAX PULL ON OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
|
||||
<SYNONYM PULL TUG>
|
||||
|
||||
<SYNTAX MUMBLE = V-MUMBLE>
|
||||
<SYNONYM MUMBLE SIGH>
|
||||
|
||||
<SYNTAX DESTROY
|
||||
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
|
||||
WITH
|
||||
OBJECT (HELD CARRIED TAKE)
|
||||
= V-MUNG PRE-MUNG>
|
||||
<SYNTAX DESTROY
|
||||
DOWN
|
||||
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
|
||||
WITH
|
||||
OBJECT (HELD CARRIED TAKE)
|
||||
= V-MUNG PRE-MUNG>
|
||||
<SYNONYM DESTROY BREAK SMASH>
|
||||
|
||||
<SYNTAX ODYSSEUS = V-ODYSSEUS>
|
||||
<SYNONYM ODYSSEUS ULYSSES>
|
||||
|
||||
<SYNTAX OPEN
|
||||
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
= V-OPEN ;*>
|
||||
<SYNTAX OPEN
|
||||
UP
|
||||
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
= V-OPEN ;*>
|
||||
<SYNTAX OPEN
|
||||
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
|
||||
= V-OPEN>
|
||||
|
||||
<SYNTAX PICK UP
|
||||
OBJECT (FIND TAKEBIT)
|
||||
(ON-GROUND MANY)
|
||||
= V-TAKE PRE-TAKE>
|
||||
|
||||
<SYNTAX POKE
|
||||
OBJECT (FIND VILLAIN) (ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
|
||||
= V-MUNG PRE-MUNG>
|
||||
<SYNONYM POKE BLIND>
|
||||
|
||||
<SYNTAX POUR OBJECT (HELD CARRIED) = V-DROP ;*>
|
||||
<SYNTAX POUR OBJECT (HELD CARRIED) IN OBJECT = V-DROP>
|
||||
<SYNTAX POUR OBJECT (HELD CARRIED) ON OBJECT = V-POUR-ON PRE-POUR-ON>
|
||||
<SYNONYM POUR SPILL>
|
||||
|
||||
<SYNTAX PRAY = V-PRAY>
|
||||
|
||||
<SYNTAX PUMP UP OBJECT = V-PUMP>
|
||||
<SYNTAX PUMP UP OBJECT WITH OBJECT = V-PUMP>
|
||||
|
||||
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
|
||||
<SYNTAX PUSH ON OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
|
||||
<SYNTAX PUSH OBJECT UNDER OBJECT = V-PUT-UNDER>
|
||||
<SYNONYM PUSH PRESS>
|
||||
|
||||
<SYNTAX PUT OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT ;*>
|
||||
<SYNTAX PUT OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT PRE-PUT>
|
||||
<SYNTAX PUT DOWN OBJECT (HELD MANY) = V-DROP>
|
||||
<SYNTAX PUT OBJECT UNDER OBJECT = V-PUT-UNDER>
|
||||
<SYNONYM PUT PLACE>
|
||||
|
||||
<SYNTAX RAISE OBJECT = V-RAISE ;*>
|
||||
<SYNTAX RAISE UP OBJECT = V-RAISE>
|
||||
<SYNONYM RAISE LIFT>
|
||||
|
||||
<SYNTAX READ
|
||||
OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
|
||||
= V-READ PRE-READ ; *>
|
||||
|
||||
<SYNTAX RING OBJECT (TAKE) = V-RING ;*>
|
||||
<SYNTAX RING OBJECT (TAKE) WITH OBJECT = V-RING>
|
||||
<SYNONYM RING PEAL>
|
||||
|
||||
<SYNTAX RUB OBJECT = V-RUB>
|
||||
<SYNTAX RUB OBJECT WITH OBJECT = V-RUB>
|
||||
<SYNONYM RUB TOUCH FEEL>
|
||||
|
||||
<SYNTAX SHAKE OBJECT = V-SHAKE>
|
||||
|
||||
<SYNTAX SLIDE OBJECT UNDER OBJECT = V-PUT-UNDER>
|
||||
|
||||
<SYNTAX SMELL OBJECT = V-SMELL>
|
||||
<SYNONYM SMELL SNIFF>
|
||||
|
||||
<SYNTAX STRIKE
|
||||
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND WEAPONBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE)
|
||||
= V-ATTACK>
|
||||
<SYNTAX STRIKE
|
||||
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
|
||||
= V-ATTACK ;*>
|
||||
<SYNTAX STRIKE OBJECT (ON-GROUND IN-ROOM HELD CARRIED) = V-LAMP-ON>
|
||||
|
||||
<SYNTAX SWIM = V-SWIM>
|
||||
<SYNTAX SWIM IN OBJECT = V-SWIM>
|
||||
<SYNONYM SWIM>
|
||||
|
||||
<SYNTAX SWING
|
||||
OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
|
||||
AT
|
||||
OBJECT (FIND VILLAIN) (ON-GROUND IN-ROOM)
|
||||
= V-SWING>
|
||||
<SYNONYM SWING THRUST>
|
||||
|
||||
<SYNTAX TAKE
|
||||
OBJECT (FIND TAKEBIT)
|
||||
(ON-GROUND MANY)
|
||||
= V-TAKE PRE-TAKE ;*>
|
||||
<SYNTAX TAKE IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
|
||||
<SYNTAX TAKE OUT OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-DISEMBARK>
|
||||
<SYNTAX TAKE ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
|
||||
<SYNTAX TAKE
|
||||
OBJECT (FIND TAKEBIT) (CARRIED IN-ROOM MANY)
|
||||
OUT
|
||||
OBJECT
|
||||
= V-TAKE PRE-TAKE>
|
||||
<SYNTAX TAKE
|
||||
OBJECT (FIND TAKEBIT) (CARRIED IN-ROOM MANY)
|
||||
OFF
|
||||
OBJECT
|
||||
= V-TAKE PRE-TAKE>
|
||||
<SYNTAX TAKE
|
||||
OBJECT (FIND TAKEBIT) (IN-ROOM CARRIED MANY)
|
||||
FROM
|
||||
OBJECT
|
||||
= V-TAKE PRE-TAKE>
|
||||
<SYNONYM TAKE GET HOLD CARRY REMOVE>
|
||||
|
||||
<SYNTAX THROW
|
||||
OBJECT (HELD CARRIED HAVE)
|
||||
AT
|
||||
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
|
||||
= V-THROW ;*>
|
||||
<SYNTAX THROW
|
||||
OBJECT (HELD CARRIED HAVE)
|
||||
WITH
|
||||
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
|
||||
= V-THROW>
|
||||
<SYNTAX THROW OBJECT OBJECT = V-OVERBOARD>
|
||||
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) IN OBJECT = V-PUT PRE-PUT>
|
||||
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) ON OBJECT = V-PUT PRE-PUT>
|
||||
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) OVER OBJECT = V-PUT PRE-PUT>
|
||||
<SYNONYM THROW>
|
||||
|
||||
<SYNTAX TIE OBJECT TO OBJECT = V-TIE PRE-TIE>
|
||||
<SYNTAX TIE UP
|
||||
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
|
||||
= V-TIE-UP>
|
||||
<SYNONYM TIE FASTEN>
|
||||
|
||||
<SYNTAX TURN
|
||||
OBJECT (FIND TURNBIT) ( HELD CARRIED ON-GROUND IN-ROOM)
|
||||
WITH
|
||||
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
|
||||
= V-TURN PRE-TURN ;*>
|
||||
<SYNTAX TURN ON
|
||||
OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE)
|
||||
= V-LAMP-ON>
|
||||
<SYNTAX TURN OFF
|
||||
OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE)
|
||||
= V-LAMP-OFF>
|
||||
<SYNONYM TURN SHUT>
|
||||
|
||||
<SYNTAX UNTIE
|
||||
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
|
||||
= V-UNTIE PRE-UNTIE ;*>
|
||||
<SYNTAX UNTIE
|
||||
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
|
||||
FROM
|
||||
OBJECT
|
||||
= V-UNTIE PRE-UNTIE>
|
||||
<SYNONYM UNTIE>
|
||||
|
||||
<SYNTAX WAIT = V-WAIT>
|
||||
|
||||
<SYNTAX WAKE OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM) = V-ALARM ;*>
|
||||
<SYNTAX WAKE UP OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM) = V-ALARM>
|
||||
<SYNONYM WAKE>
|
||||
|
||||
<SYNTAX WALK AWAY OBJECT = V-WALK> ;"Crock!"
|
||||
<SYNTAX WALK IN OBJECT = V-THROUGH>
|
||||
<SYNTAX WALK WITH OBJECT = V-THROUGH>
|
||||
<SYNTAX WALK AROUND OBJECT = V-WALK-AROUND>
|
||||
<SYNTAX WALK UP OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-UP>
|
||||
<SYNTAX WALK DOWN OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
|
||||
<SYNONYM WALK GO RUN PROCEED>
|
||||
|
||||
<SYNTAX WAVE OBJECT (HELD CARRIED) = V-WAVE>
|
||||
<SYNONYM WAVE BRANDISH>
|
||||
|
||||
<SYNTAX WIND OBJECT = V-WIND>
|
||||
<SYNTAX WIND UP OBJECT = V-WIND>
|
||||
|
||||
<SYNTAX YELL = V-YELL>
|
||||
<SYNONYM YELL SCREAM SHOUT>
|
||||
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
Assembling ZORK.XZAP.1
|
||||
|
||||
Inserting ZORKFREQ.ZAP.8
|
||||
Inserting ZORKDAT.ZAP.2
|
||||
Inserting DUNGEON.ZAP.1
|
||||
Inserting SYNTAX.ZAP.1
|
||||
Inserting MACROS.ZAP.1
|
||||
Inserting CLOCK.ZAP.1
|
||||
Inserting MAIN.ZAP.1
|
||||
Inserting PARSER.ZAP.1
|
||||
Inserting DEMONS.ZAP.1
|
||||
Inserting CRUFTY.XZAP.1
|
||||
CALL LIGHT-INT,CANDLES,I-CANDLES,'CANDLE-TABLE
|
||||
17360 (in I-CANDLES) Bad variable name after value or predicate
|
||||
CALL LIGHT-INT,CANDLES,I-CANDLES,'CANDLE-TABLE
|
||||
17360 (in I-CANDLES) Bad variable name after value or predicate
|
||||
Inserting VERBS.ZAP.1
|
||||
19152 (in RANDOMIZE-OBJECTS) Multiply defined .FUNCT
|
||||
.FUNCT KILL-INTERRUPTS
|
||||
Inserting ACTIONS.ZAP.1
|
||||
Inserting FIGHTS.ZAP.1
|
||||
Inserting MELEE.ZAP.1
|
||||
Inserting ZORKSTR.ZAP.1
|
||||
UNCONSCIOUS global undefined: 0,
|
||||
V?FOLLOW global undefined: 0, 0,
|
||||
SWIMYUKS global undefined: 0,
|
||||
V?PLUG global undefined: 0,
|
||||
YELLOW-BUTTON global undefined: 0,
|
||||
BROWN-BUTTON global undefined: 0,
|
||||
RED-BUTTON global undefined: 0,
|
||||
KEYS global undefined: 0, 0,
|
||||
CLEARING global undefined: 0, 0, 0,
|
||||
V?UNLOCK global undefined: 0, 0,
|
||||
SAILOR global undefined: 0,
|
||||
V-SKIP global undefined: 0, 0,
|
||||
CANDLE-TABLE global undefined:
|
||||
CANDLES global undefined: 0,
|
||||
F-CONSCIOUS global undefined: 0,
|
||||
F-BUSY? global undefined: 0,
|
||||
HANDS global undefined: 0, 0, 0, 0, 0,
|
||||
V-BLAST global undefined: 0,
|
||||
TORCH-ROOM-FCN global undefined: 0,
|
||||
TROPHY-CASE-FCN global undefined: 0,
|
||||
SMELLY-ROOM global undefined: 0,
|
||||
GRANITE global undefined: 0,
|
||||
CLIFF-BOTTOM global undefined: 0,
|
||||
TORCH-ROOM global undefined: 0,
|
||||
RIVR4-ROOM global undefined: 0,
|
||||
ARAGIAN-FALLS global undefined: 0,
|
||||
|
||||
47676 bytes.
|
||||
169 objects.
|
||||
114 globals.
|
|
@ -0,0 +1,45 @@
|
|||
.INSERT "ZORKFREQ"
|
||||
.INSERT "ZORKDAT" ; DATA IS IN THIS FILE
|
||||
|
||||
|
||||
.INSERT "DUNGEON"
|
||||
|
||||
|
||||
.INSERT "SYNTAX"
|
||||
|
||||
|
||||
ENDLOD::
|
||||
|
||||
.INSERT "MACROS"
|
||||
|
||||
|
||||
.INSERT "CLOCK"
|
||||
|
||||
|
||||
.INSERT "MAIN"
|
||||
|
||||
|
||||
.INSERT "PARSER"
|
||||
|
||||
|
||||
.INSERT "DEMONS"
|
||||
|
||||
|
||||
.INSERT "CRUFTY"
|
||||
|
||||
|
||||
.INSERT "VERBS"
|
||||
|
||||
|
||||
.INSERT "ACTIONS"
|
||||
|
||||
|
||||
.INSERT "FIGHTS"
|
||||
|
||||
|
||||
.INSERT "MELEE"
|
||||
|
||||
|
||||
.INSERT "ZORKSTR"
|
||||
|
||||
.END
|
Loading…
Reference in New Issue