home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / compsrcs / apple2 / 72 < prev    next >
Encoding:
Internet Message Format  |  1991-06-01  |  48.0 KB

  1. From: jac@yoko.rutgers.edu (Jonathan A. Chandross)
  2. Newsgroups: comp.sources.apple2
  3. Subject: v001SRC051:  Inmate Parser -- ATN Based, Part01/05
  4. Message-ID: <May.31.22.39.39.1991.10987@yoko.rutgers.edu>
  5. Date: 1 Jun 91 02:39:40 GMT
  6. Approved: jac@paul.rutgers.edu
  7.  
  8.  
  9. Submitted-by: Phil Goetz (goetz@cs.buffalo.EDU)
  10. Posting-number: Volume 1, Source:51
  11. Archive-name: util/parser/inmate/part01
  12. Architecture: ANY_2
  13. Version-number: 1.00
  14.  
  15. This is the ATN-based parser for Phil Goetz's text adventure "Inmate".
  16.  
  17. It isn't a stand-alone piece of code, and will likely require some
  18. judicious study before it can be used.
  19.  
  20. Enjoy.
  21.  
  22.  
  23. =Document
  24. -
  25. -
  26. -
  27. -
  28. -
  29. -
  30. -                                 Inmate Parser
  31. -
  32. -
  33. -
  34. -
  35. -     ENGLISH COMMAND PARSING
  36. -
  37. -          Inmate is an adventure game.  Its parser handles objects,
  38. -     sources, destinations, adjectives, prepositions, adverbs, and adver-
  39. -     bial phrases.[1]
  40. -
  41. -
  42. -          The Inmate parser runs on an Apple ][+ in 6502 machine language
  43. -     and currently occupies about 4K of memory, and is an augmented transi-
  44. -     tion network (ATN).  It is supported by an input routine, a lexical
  45. -     analysis routine with 700-word dictionary, 50 verbs, 150 objects, 15
  46. -     adjectives, and about 300 edges indicating properties of objects or
  47. -     relationships between objects.  It has 4 phases: lexical analysis,
  48. -     pre-ATN grammatical transformations, the ATN, and command handlers to
  49. -     manipulate the game world.
  50. -
  51. -
  52. -          If you aren't familiar with ATNs, a good tutorial can be found
  53. -     in:
  54. -
  55. -
  56. -          Author:     Madeleine Bates
  57. -          Title:      "The Theory And Practice of Augmented Transition
  58. -                      Network Grammars"
  59. -          Book Title: Natural Language Communications With Computers
  60. -          Series:     Lecture Notes In Computer Science
  61. -          Number:     63
  62. -          Publisher:  Springer-Verlag
  63. -          City:       New York, NY
  64. -          Date:       1987
  65. -          Editor:     Leonard Bole
  66. -
  67. -
  68. -     Lexical Analysis
  69. -
  70. -          Every word in the dictionary has at least 1 type, and often 2 or
  71. -     3.  Some types have a number associated with them:  nouns, for
  72. -     instance, have an object number.  Analysis produces one word number
  73. -     and 1 to 3 word types for each word, stored in parallel arrays.  There
  74. -     are 3 special types: synonyms, transformationals, and nulls.  Synonyms
  75. -     take the types AND word number of another word in the dictionary.
  76. -     This is so a word and all its synonyms can be identified by the same
  77. -     _________________________
  78. -
  79. -       [1] Note: I removed the adverbial phrases and adverbs
  80. -     because  they  seemed  to  have no purpose in an adven-
  81. -     ture.]  The files in this distribution  contain  every-
  82. -     thing  needed for the parser except for some of the se-
  83. -     mantic network.
  84. -
  85. -
  86. -
  87. -
  88. -
  89. -
  90. -
  91. -
  92. -
  93. -                                - 2 -
  94. -
  95. -
  96. -     word number.  Transformationals are marked for pre-ATN transformation
  97. -     (see below).  Nulls are deleted.  Articles (a, the), demonstratives
  98. -     (i.e. these, those) and intensifiers (i.e. very, extremely) are
  99. -     currently classified as nulls.
  100. -
  101. -
  102. -     Pre-ATN Grammatical Transformation
  103. -
  104. -
  105. -          The transformer scans the parallel arrays of word number and word
  106. -     type for patterns which should be transformed to simpler forms using
  107. -     the basic transformational operations of movement, copying, insertion,
  108. -     and deletion.  These include specific quirks of the language as well
  109. -     as general grammatical transformations.  For instance, you would want
  110. -     to transform VT NP1 NP2 to VT NP2 "TO" NP1 so the ATN can pick up NP2
  111. -     as the object.
  112. -
  113. -
  114. -          Note that the transformer will make a transformation if each word
  115. -     in the input matches sequential words in the pattern using ANY of the
  116. -     3 possible types.  So it is possible that a transformation could be
  117. -     made with a mistaken type assumption.  In practice, this has not been
  118. -     a problem.
  119. -
  120. -
  121. -          Each transformation has a priority level assigned to it.  So
  122. -     high-level priority transforms are tried first.  This prevents an
  123. -     uncommon transformation from taking effect where a common one should
  124. -     have been used.
  125. -
  126. -
  127. -     ATN
  128. -
  129. -
  130. -          A transition network is a set of transitions from one state, or
  131. -     node, to another based on the section of input currently being exam-
  132. -     ineid.  In a nondeterministic net such as this one, there is more than
  133. -     one possible choice at some nodes.  If the program takes the wrong
  134. -     transition and winds up at a dead end, it must be able to trace back
  135. -     to its last decision branch and try another path.  If the input is
  136. -     unparsable, the proram will trace all possible nodes of the network
  137. -     and eventually back out of the original node.  The only other way to
  138. -     leave a transition network is to succeed in parsing the input.  Suc-
  139. -     cess is achieved by reaching the end of the input while in an "accept-
  140. -     ing" node.
  141. -
  142. -
  143. -          A recursive transition network is one that can call entire net-
  144. -     works, including itself, as a node.  An augmented transition network
  145. -     (ATN) is one which can perform special actions during each transition
  146. -     and have special (i.e. semantic) requirements for a transition.  For
  147. -     example, the transition from node 7 to node 8 in my network is invoked
  148. -     if the current word is a preposition of instrument such as "with" or
  149. -     "using".  The transition checks the verb's case frame to see if it
  150. -
  151. -
  152. -
  153. -
  154. -
  155. -
  156. -
  157. -
  158. -
  159. -                                - 3 -
  160. -
  161. -
  162. -     allows an instrument (verbs which do include "hit" and "wash").  If
  163. -     so, it stores the current word in the Prep of Instrument slot, goes on
  164. -     to the next word, and enters node 8.  If not, it returns to node 7.
  165. -     Some transitions leave flags to be checked/used later.  The word "his"
  166. -     in "Get his book" (if Ed is the only man in the room) should be used
  167. -     when finding objects to remove all books from the object list that are
  168. -     not either owned by or presently "in" (carried by) Ed.  It doesn't
  169. -     now.
  170. -
  171. -          This network is not truly recursive in that it cannot normally
  172. -     call independent networks as a node.  It fakes recursive calling of
  173. -     noun phrases (NPs) through tricky manipulations when entering and
  174. -     leaving NPs and by using a special stack to keep track of NP calls.
  175. -     The difficulty of implementing this in machine language is just one of
  176. -     many reasons not to write your parser in machine language.
  177. -
  178. -          Backtracking is handled by associating a node and a transition
  179. -     index with each word.  When a node is entered, its number is stored in
  180. -     an array parallel to the word arrays.  When it is left by a successful
  181. -     transition, the index pointing to the next branch that would have been
  182. -     examined from that node is saved in another parallel array.  If the
  183. -     program fails at the next node, it decrements the word counter,
  184. -     reenters the node it came from, loads the index, and resumes where it
  185. -     left off.
  186. -
  187. -          One great difficulty with this is that ALL data created/changed
  188. -     by the unsuccessful link of transitions must be undone.  This might be
  189. -     one reason to write your parser in ProLog.  It would be better to have
  190. -     registers which are associated with a particular parse path through
  191. -     the network which are then copied into global registers, than to use
  192. -     the same global registers throughout (which I did).
  193. -
  194. -          Jumps are special cases because they involve a transition, yet
  195. -     are not associated with a word.  However, since jumps are always the
  196. -     last transition tested within a node, the node jumped from can be
  197. -     removed from the backtracking list and thus the parallel arrays are
  198. -     not thrown out of sync.
  199. -
  200. -          The purpose of this ATN is to fill in certain slots for the com-
  201. -     mand handler.  These slots contain the verb, object list, preposition
  202. -     of instrument, instrument, prep of destination (ie into, onto), desti-
  203. -     nation, and place (ie "north", "bed" when used in ungrammatical but
  204. -     popular sentence "go bed").
  205. -
  206. -          Say you enter
  207. -          PUT THE BAG IN THE BACKPACK IN THE BIG BLUE BOX
  208. -     The first word is always the verb.  Lexical analysis deletes the THEs:
  209. -          PUT BAG IN BACKPACK IN BIG BLUE BOX
  210. -     Now, a listing of the ATN looks like this (X! means that node X is an
  211. -     accepting node; that is, if the sentence ends when it reaches that
  212. -     node, it is accepted):
  213. -
  214. -
  215. -
  216. -
  217. -
  218. -
  219. -
  220. -
  221. -
  222. -
  223. -
  224. -
  225. -                                - 4 -
  226. -
  227. -
  228. -
  229. -               Current node           Input            Next node
  230. -               _________________________________________________
  231. -                    0         Verb of place                1
  232. -                              Transitive verb              2
  233. -                              Intransitive verb            7
  234. -                    1         Preposition of motion        6
  235. -                              Place                        7
  236. -                    2         Noun Phrase (object)         3
  237. -                    3!        Exclusionary                 4
  238. -                              Jump                         5
  239. -                    4         NP (excluded from obj)       5
  240. -                    5!        Preposition of motion        6
  241. -                              Jump                         7
  242. -                    6         NP (destination)             7
  243. -                    7!        Prep of instrument           8
  244. -
  245. -
  246. -     The noun phrase network looks like this:
  247. -
  248. -                          9    Noun group            10
  249. -                         10!   Prep of no motion     11
  250. -                         11    Noun group            12
  251. -                         12!   Conjunction ("and")   9
  252. -
  253. -
  254. -     The noun group network looks (I think) like this:
  255. -
  256. -                        13    Possessive (ie "his")   14
  257. -                              Jump                    14
  258. -                        14    Number ("7", "all")     15
  259. -                              Jump                    15
  260. -                        15    Adjective               15
  261. -                              Classifier              16
  262. -                              Noun                    17
  263. -                        16    Classifier              16
  264. -                              Noun                    17
  265. -                        17!   Conjunction             14
  266. -
  267. -
  268. -
  269. -          (A classifier is very similar to an adjective, i.e. "sleeping" is
  270. -     a classifier for "sleeping bag".  The only difference to the program
  271. -     is that adjectives are handled using edges, and classifiers modifying
  272. -     an object never change.)
  273. -
  274. -
  275. -          PUT is a transitive verb, and so the ATN enters node 2 and looks
  276. -     for a noun phrase.  The noun phrase network identifies BAG IN BACKPACK
  277. -     IN BOX as a noun phrase in 3 recursive passes.  On the first pass, it
  278. -     identifies BAG as a noun and tries to put it in the object list.  It
  279. -     sees that BAG is a superset containing BAG1 (the plastic bag) and BAG2
  280. -     (the sleeping bag), so it puts both in the object list.  IN tells the
  281. -     NP to call itself using the next NP as a source for the last NP.  When
  282. -     it finds BACKPACK, it removes any bags that are not IN the backpack
  283. -
  284. -
  285. -
  286. -
  287. -
  288. -
  289. -
  290. -
  291. -                                - 5 -
  292. -
  293. -
  294. -     from the object list.  Again, IN instructs the program to reenter the
  295. -     NP network and look for a source for BAG.  (This should really look
  296. -     for a source for BACKPACK, but if a BOX contains the proper BAG and
  297. -     the BACKPACK contains the proper BAG, the BACKPACK is probably in the
  298. -     BOX.  I haven't tried GET BACK IN BOX IN BACKPACK yet; my computer is
  299. -     dismantled.) The NP network places BIG and BLUE in the adjective list.
  300. -     (The adjective list is not used after parsing.)  When it reaches BOX,
  301. -     it puts all boxes in the known world in the object list, then removes
  302. -     all boxes that are not BIG and BLUE.  Then it removes all bags from
  303. -     the object list that are not in the big blue box, and finds it has no
  304. -     objects left.  It concludes that IN BOX must specify the destination
  305. -     of the bag in the object list, and so puts the bags back in the object
  306. -     list and puts BOX1 (big and blue) in the destination slot and IN in
  307. -     the preposition of destination slot (used by the command handler).
  308. -
  309. -
  310. -     Errors, Ellipsis:
  311. -
  312. -
  313. -          If the network is unable to parse a sentence, it tries to inter-
  314. -     pret the sentence as a sentence fragment by inserting it into the last
  315. -     sentence parsed.  So if you say "Take the book" and them "examine", it
  316. -     replaces "take" in "Take the book" with "examine" and tries (success-
  317. -     fully) to parse that.
  318. -
  319. -
  320. -     Pronouns:
  321. -
  322. -
  323. -          The only pronoun with any meaning is "it".  "It" refers to the
  324. -     last single object referenced.  I might also have a "them" for the
  325. -     last group of objects referred to, but I forget.
  326. -
  327. -
  328. -     Post-ATN Processing
  329. -
  330. -
  331. -          I thought of having a post-ATN processor create conceptual depen-
  332. -     dency representations from the information passed on by the ATN, using
  333. -     something like Wilks' semantic primitives or Schanks' primitive ACTS
  334. -     and inferences.  Instead of writing a command handler for each verb,
  335. -     more general handlers could deal with similar verbs (i.e. give, take,
  336. -     sell, buy; eat, drink).  Ideally, this construction should be used
  337. -     during ATN analysis for semantic interpretation and disambiguation of
  338. -     the sentence, but commands in adventures are almost always unambiguous
  339. -     and simple enough for correct parsing by the ATN.
  340. -
  341. -
  342. -          Using semantic primitives is something I think IF requires, but
  343. -     it is not practical until we can write IF which does not depend on
  344. -     ad-hoc rules that are applied to individual verb-object-etc. combina-
  345. -     tions.  It would be, I think, difficult to apply such ad-hoc rules to
  346. -     a conceptual dependency representation of a sentence - not for the
  347. -     computer, but for the human who would have to translate all his ad-hoc
  348. -
  349. -
  350. -
  351. -
  352. -
  353. -
  354. -
  355. -
  356. -
  357. -                                - 6 -
  358. -
  359. -
  360. -     situations into conceptual dependency representations while program-
  361. -     ming.
  362. -
  363. -
  364. -     Command Handlers
  365. -
  366. -
  367. -          The command handlers might be designed for use with a processor
  368. -     as mentioned above.  Currently, however, they are verb-specific com-
  369. -     mand handlers as in most adventure games.  They manipulate the game
  370. -     world by adding and/or deleting edges in the database.  They can also
  371. -     trigger actions/messages/etc under certain conditions.
  372. -
  373. -
  374. -          If a list of more than one object is provided with an action, the
  375. -     action is repeated once for each object.
  376. -
  377. -
  378. -     Source Code
  379. -
  380. -
  381. -          To read the source, first read "inmate" .  That is the root file,
  382. -     which is assembled, and includes all the other files.  The comments in
  383. -     it explain what each file does.  So you can just read the files you're
  384. -     interested in.
  385. -
  386. -
  387. -          The list of files is:
  388. -
  389. -         File                             Contents
  390. -       __________________________________________________________________
  391. -       atn         Augmented transition network (parser)
  392. -       caseframe   Verb case frames
  393. -       cndact      Defines interpreted adventrue language used by verb
  394. -                   handlers and other routines.
  395. -       display30   Print location & happenings each turn
  396. -       edges       Routines for altering
  397. -       handler     Verb handler jumped to after parse completed
  398. -       gennum      ???
  399. -       inmate      the game; glues together all the modules
  400. -       io          Save
  401. -       lex         Lexical analysis: Examine raw string & find words
  402. -       macros      macro definitions
  403. -       monitor2    Call monitor routines in other RAM bank
  404. -       print22     Print messages, strings; including compression routine
  405. -       start       Initialization
  406. -       transform   Grammatical transformations
  407. -       transit     Transitions for the ATN
  408. -       tsub        Subroutines called by the transitions
  409. -       verbs       Verb execution routines
  410. -       voca        Vocabulary, A-I
  411. -       vocj        Vocabulary, J-Z
  412. -
  413. -
  414. -
  415. -
  416. -
  417. -
  418. -
  419. -
  420. -
  421. -
  422. -
  423. -                                - 7 -
  424. -
  425. -
  426. -          The Inmate parser source is for the S-C Macro Assembler.  It
  427. -     includes a lot of assembly directives.  The VOCab files have lines
  428. -     like:
  429. -           .AS -/ORT/
  430. -     which probably means "negative (hi-bit set) ASCII for "ORT".  I think
  431. -     .AT is for terminated ASCII (last character has hi-bit reversed).
  432. -     More directives:
  433. -
  434. -              .DA     Data
  435. -              .OR     Set object code origin address
  436. -              .TF     Set target file name
  437. -              .IN     Include
  438. -              .BS     Data block of certain size
  439. -              .US     User-defined directive, in this case meaning
  440. -                      "write out the compressed version of the ASCII text
  441. -                      given, using my text-compression algorithm".
  442. -              .HS     Hexadecimal string.
  443. -            #SYMBOL   Low byte of symbol's value
  444. -                      SYMBOL
  445. -
  446. -
  447. -
  448. -
  449. -     Phil Goetz
  450. -     4023 Huckleberry Row
  451. -     Ellicott City, MD 21043
  452. -
  453. -     goetz@cs.buffalo.EDU
  454. -
  455. -
  456. =Manifest
  457. -Document
  458. -atn
  459. -caseframe
  460. -cndact
  461. -display30
  462. -edges
  463. -gennum
  464. -handler
  465. -inmate
  466. -io
  467. -lex
  468. -macros
  469. -monitor2
  470. -print22
  471. -start
  472. -transform
  473. -transit
  474. -tsub
  475. -verbs
  476. -voca
  477. -vocj
  478. =atn
  479. -*
  480. -SAVEATN16.1,S6,D1
  481. -*--------------------------------
  482. -* AUGMENTED TRANSITION NETWORK
  483. -*--------------------------------
  484. -* ON ENTRY: WORDS=# OF WORDS
  485. -TNPNT  .EQ $C
  486. -ATN    JSR CHKEY
  487. -       BIT DBGFLG   ? "ATN:"?
  488. -       BPL .4
  489. -       JSR FD8E
  490. -       LDX #0
  491. -.1     LDA WTYPE,X  NUM IS ALWAYS 1ST TYPE
  492. -       CMP #NUM
  493. -       BNE .2
  494. -       LDA WNOUN,X
  495. -       JSR FDDA
  496. -       JMP .3
  497. -.2     LDA WLO,X
  498. -       LDY WHI,X
  499. -       JSR PRWRD
  500. -.3     LDA #$A0
  501. -       JSR FDF0
  502. -       INX
  503. -       CPX WORDS
  504. -       BCC .1
  505. -       LDY /ATNS
  506. -       LDA #ATNS
  507. -       JSR PS
  508. -.4     LDX #33
  509. -       LDA #0
  510. -       STA UCONJ    CONJ NOT USED YET
  511. -       STA JUCONJ
  512. -.5     STA SDEST-1,X  ZERO SLOTS & OBJLIST
  513. -       DEX
  514. -       BNE .5
  515. -       STX WORDNODE
  516. -       STX CURWORD
  517. -       STX NPSP
  518. -       STX PFND
  519. -       LDA #NODE0
  520. -       STA TNPNT
  521. -       LDA /NODE0
  522. -       STA TNPNT+1
  523. -A1     LDY #0
  524. -A2     LDA (TNPNT),Y
  525. -       BEQ A4     END OF NODE
  526. -       STA TEMP     SAVE IN CASE IT'S A JMP
  527. -       BMI A61      JMP
  528. -       CMP WTYPE,X
  529. -       BEQ A6
  530. -       CMP WTYPE2,X
  531. -       BEQ A6
  532. -       CMP WTYPE3,X
  533. -       BEQ A6
  534. -       INY
  535. -       INY
  536. -       INY
  537. -A3     INY
  538. -       BNE A2       ALWAYS
  539. -A4     DEX        FAIL,BACK TO LAST NODE
  540. -       DEC CURWORD
  541. -       BMI ASSUME   NO NODES LEFT=ALL OPTIONS EXPLORED
  542. -       LDA WORDNODE,X  CONTINUE WI NODE X
  543. -       JSR INTONP   IF GOING INTO MIDDLE OF NP, NPSP=NPSP+2
  544. -       JSR GETNODE
  545. -       LDY WORDINDEX,X
  546. -       JMP A2
  547. -A6     STA WTFIN,X  SUCCESS
  548. -A61    INY
  549. -       LDA (TNPNT),Y
  550. -       STA .7+1
  551. -       INY
  552. -       LDA (TNPNT),Y
  553. -       STA .7+2
  554. -       INY
  555. -       LDA (TNPNT),Y  NEXT NODE
  556. -       CMP #EN      ENDNODE
  557. -       BNE .65
  558. -       BIT DBGFLG   PRINT "E"?
  559. -       BPL .63
  560. -       LDA #$A0
  561. -       JSR FDF0
  562. -       LDA #"E
  563. -       JSR FDF0
  564. -.63    INX
  565. -       CPX WORDS
  566. -       DEX
  567. -       BCC A3
  568. -       JMP CHECKSENT  ENDNODE ALWAYS ACCEPTS
  569. -.65    BIT TEMP
  570. -       BMI .67      IF A JMP, SAVE NEXT NODE IN CURRENT NODE
  571. -       PHA
  572. -       INY
  573. -       TYA
  574. -       STA WORDINDEX,X  LIKEWISE SAVE CURRENT INDEX
  575. -       PLA
  576. -       INC CURWORD
  577. -       INX
  578. -.67    STA WORDNODE,X  SAVE NEXT NODE IN CASE YOU MUST COME BACK LATER
  579. -       JSR GETNODE
  580. -.7     JSR 0
  581. -A8     LDX CURWORD
  582. -       CPX WORDS    DONE?
  583. -       BCS .9
  584. -       JMP A1
  585. -.9     LDA WORDNODE,X
  586. -       TAX
  587. -       LDA ACCEPT,X  DOES THIS NODE ACCEPT EOL?
  588. -       PHP
  589. -       LDX CURWORD
  590. -       PLP
  591. -       BEQ A4       NO,BACK UP
  592. -       JMP CHECKSENT  YES,PARSED!
  593. -* ASSUME: TRY TO FIND OBJ,PLACE,OR INSTR FROM ROOM
  594. -ASTRIED .BS 1       1=ALREADY TRIED
  595. -RETRY  .BS 1        1-FF=TRY ATN AGAIN
  596. -ASSUME LDA DQ       IN QUOTES?
  597. -       BEQ .0       NO
  598. -       LDA #0       NOT COMMAND, CHAR NOW DOES THINGS OF OWN WILL
  599. -       STA DQ
  600. -       JMP SPEAK
  601. -.0     LDY ASTRIED
  602. -       BNE .12      ALREADY TRIED
  603. -       LDA LIGHT
  604. -       BEQ .12      NO LIGHT, NO ASSUME
  605. -       STY RETRY
  606. -       STY TNPNT    FOR VT OBJ
  607. -       INC ASTRIED  MARK AS TRIED
  608. -       BIT DBGFLG
  609. -       BPL .8
  610. -       LDY /AS
  611. -       LDA #AS
  612. -       JSR PS
  613. -.8     LDA WTFIN    VERB TYPE
  614. -       CMP #VT+1    VERB?
  615. -       BCC .11      YES
  616. -.12    JMP ELLIPSIS
  617. -.11    CMP #VP
  618. -       BNE .4
  619. -       LDA SDEST
  620. -       BNE .39      AS5
  621. -*VP GIVEN BUT NO PLACE
  622. -       LDA LOC
  623. -       LDX #HOLDS
  624. -       JSR GETOBJ
  625. -.1     DEX
  626. -       BMI .2
  627. -       PLA
  628. -       CMP #LP+1    IS IT A PLACE?
  629. -       BCS .1       NO
  630. -       LDY SDEST
  631. -       BEQ .15
  632. -       JMP .47      MORE THAN 1 PLACE IN THIS LOC,FAILURE
  633. -.15    STA SDEST
  634. -       BEQ .1       ALWAYS
  635. -.2     LDA SDEST
  636. -       BEQ .12      NO PLACE FOUND
  637. -       JMP .48
  638. -.39    JMP AS5
  639. -.4     CMP #VT
  640. -       BNE .39
  641. -       LDX OBJLIST
  642. -.41    BNE .39
  643. -       STX TNPNT    X MUST BE 0 IF GETOBJ ISN'T CALLED
  644. -       STX OBJS     DON'T RETURN FROM ELIM USING STEMP
  645. -       TXA
  646. -       LDX #20
  647. -.98    STA NOUNLIST-1,X
  648. -       DEX
  649. -       BNE .98
  650. -*VT GIVEN BUT NO OBJ
  651. -       LDA CASEFRAME
  652. -       AND #$20
  653. -       BEQ .42      CAN'T BE IN INVEN
  654. -       LDA WVERB
  655. -       CMP #GET     GET ALLOWS PICKING UP OBJS IN INVEN
  656. -       BEQ .42
  657. -       LDA #ME
  658. -       LDX #HOLDS
  659. -       JSR GETOBJ   INVEN
  660. -       STX TNPNT
  661. -.42    BIT CASEFRAME
  662. -       BVC .44      OBJS IN LOC NOT ALLOWED
  663. -       LDA LOC
  664. -       LDX #HOLDS
  665. -       JSR GETOBJ
  666. -       TXA
  667. -       CLC
  668. -       ADC TNPNT
  669. -       TAX
  670. -.44    CPX #20      MAX
  671. -       BCC .45
  672. -       PLA
  673. -       DEX
  674. -       BNE .44
  675. -.45    DEX
  676. -       BMI .46
  677. -       PLA
  678. -       JSR FF4A
  679. -       LDA $45
  680. -       JSR PNTOBJ
  681. -       LDY #5
  682. -       LDA (MISC),Y
  683. -       PHP          WORKS SINCE N IS N-BIT
  684. -       JSR FF3F
  685. -       PLP          PLA WOULD DESTROY #
  686. -       BMI .45      CAN'T ASSUME OBJS WHICH ARE INVISIBLE
  687. -       STA NOUNLIST,X
  688. -       JMP .45
  689. -.46    STX NMSG     DON'T PRINT
  690. -       JSR COMP     CHL ALSO JSRs COMP (AT END)
  691. -       JSR CHL-2
  692. -       INC NMSG
  693. -       LDA NOUNLIST+1    MORE THAN 1 OBJ LEFT?
  694. -.47    BNE ELLIPSIS      YES
  695. -       LDA NOUNLIST
  696. -       BEQ ELLIPSIS
  697. -*      BNE .48
  698. -*      BIT CASEFRAME
  699. -*      BVC ELLIPSIS OBJS IN LOC FORBIDDEN
  700. -*      LDA #ME      ADD ME IF NOTHING ELSE IN LOC
  701. -.48    JSR INSWRD
  702. -       LDA #CN
  703. -*CHANGE TO #PROPER IF HUMAN/ANIMATE
  704. -       STA WTYPE+1
  705. -       STA RETRY
  706. -*AS5    LDA CASEFRAME+1
  707. -*       AND #4
  708. -*       BEQ .9       NO INSTR REQD
  709. -*       LDA SINSTR
  710. -*       BNE .9
  711. -** INSTR REQD,NOT GIVEN
  712. -* CURRENTLY HANDLED BY CHECKSENT
  713. -*.9
  714. -AS5    LDA RETRY
  715. -       BEQ ELLIPSIS NO SUCCESS
  716. -       JMP ATN
  717. -* ELLIPSIS
  718. -* IF UNABLE TO PARSE LINE, TAKE EACH WORD AND SUBSTITUTE IT FOR A WORD
  719. -* OF THE SAME TYPE IN THE LAST SENTENCE, THEN RETRY ATN.
  720. -* NOUN PHRASES CAUSE TROUBLE: MUST SUBSTITUTE ONE NOUN PHRASE OF LENGTH X
  721. -* FOR OLD NOUN PHRASE OF LENGTH Y
  722. -ELTRIED .BS 1       1=ELLIPSIS ALREADY TRIED ON THIS INPUT
  723. -       .MA PN
  724. -       SEC
  725. -       SBC #NUM
  726. -       CMP #EXC+1-NUM    C=0 IF TYPE IN A IS PART OF A NOUN
  727. -       .EM
  728. -SF     JMP SENTFAIL
  729. -ELLIPSIS LDY ELTRIED
  730. -       BNE SF        ALREADY TRIED ELLIPSIS
  731. -       BIT DBGFLG
  732. -       BPL .1
  733. -       LDY /EL
  734. -       LDA #EL
  735. -       JSR PS
  736. -       LDY #0
  737. -.1     LDX #0
  738. -E1     LDA WTYPE,X
  739. -       >PN
  740. -       BCC .3
  741. -       LDA WTYPE2,X
  742. -       >PN
  743. -       BCC .2
  744. -       LDA WTYPE3,X
  745. -       >PN
  746. -       BCC .2
  747. -       JMP NOTNT
  748. -.2     ADC #NUM     RESTORE TYPE
  749. -       STA WTYPE,X
  750. -.3     LDA LWTFIN,Y
  751. -       >PN
  752. -       BCC .35
  753. -       INY
  754. -       CPY LWORDS
  755. -       BCC .3
  756. -       BCS SF       NT NOT FOUND
  757. -.35    STY MISC     POINTS TO 1ST NT
  758. -.4     INY
  759. -       CPY LWORDS
  760. -       BCS .5
  761. -       LDA LWTFIN,Y
  762. -       >PN
  763. -       BCC .4
  764. -.5     TYA          POINTS TO 1ST NON-NT OLD WORD
  765. -       DEY
  766. -       STY TNPNT+1
  767. -       SBC MISC     A=LENGTH OF OLD NT GROUP
  768. -       STA TNPNT
  769. -       STX MISC+1   POINTS TO 1ST NEW NT
  770. -.6     INX
  771. -       CPX WORDS
  772. -       BCS .7
  773. -       LDA WTYPE,X
  774. -       >PN
  775. -       BCC .6
  776. -       LDA WTYPE2,X
  777. -       >PN
  778. -       BCC .65
  779. -       LDA WTYPE3,X
  780. -       >PN
  781. -       BCS .7
  782. -.65    ADC #NUM     RESTORE
  783. -       STA WTYPE,X
  784. -       BCC .6       ALWAYS
  785. -* X POINTS TO 1ST NON-NT NEW WORD
  786. -.7     TXA
  787. -       SBC MISC+1   A=LEN OF NEW NT GROUP
  788. -       SEC
  789. -       SBC TNPNT
  790. -       PHP
  791. -       PHA
  792. -       CLC
  793. -       ADC LWORDS   + OR -
  794. -       STA LWORDS   ADJUST #OLD WORDS
  795. -       PLA
  796. -       PLP
  797. -       BEQ EMOVED
  798. -       BCS .9
  799. -* OLD NTG > NEW NTG
  800. -       SBC #0       SUBTRACTS 1
  801. -       EOR #$FF     CHANGE A FROM - TO +
  802. -       CLC
  803. -       ADC MISC     POINTER TO OLD NT
  804. -       TAY
  805. -       LDX MISC     X POINTS TO 1ST NT
  806. -.8     JSR EMOVE
  807. -       INX
  808. -       INY
  809. -       CPX LWORDS   LWORDS HAS BEEN DECREASED
  810. -       BCC .8
  811. -       BCS EMOVED
  812. -* NEW NTG > OLD NTG
  813. -.9     CLC
  814. -       ADC LWORDS
  815. -       TAX
  816. -       DEX
  817. -       DEX
  818. -       LDY LWORDS
  819. -       DEY
  820. -       DEY
  821. -.10    JSR EMOVE
  822. -       DEX
  823. -       DEY
  824. -       CPY TNPNT+1
  825. -       BCS .10
  826. -EMOVED LDX MISC+1
  827. -       LDY MISC
  828. -.1     LDA WTYPE,X
  829. -       STA LWTFIN,Y
  830. -       JSR NW.OW
  831. -       INX
  832. -       CPX WORDS
  833. -       BCS DONE
  834. -       INY
  835. -       LDA WTYPE,X
  836. -       >PN
  837. -       BCC .1
  838. -NOTNT  LDA LWTFIN,Y
  839. -       CMP WTYPE,X
  840. -       BEQ .2
  841. -       CMP WTYPE2,X
  842. -       BEQ .2
  843. -       CMP WTYPE3,X
  844. -       BNE .3
  845. -.2     CPY LWORDS
  846. -       BCS SENTFAIL
  847. -       JSR NW.OW
  848. -       INX
  849. -       CPX WORDS    DONE?
  850. -       BCS DONE
  851. -.3     INY          NEXT OLD WORD
  852. -       CPY LWORDS
  853. -       BCS SENTFAIL
  854. -       JMP E1
  855. -DONE   LDY #30*4+1  DON'T COPY LWTFIN
  856. -.5     LDA LWLO-1,Y
  857. -       STA WLO-1,Y
  858. -       DEY
  859. -       BNE .5
  860. -       LDX #29
  861. -.6     LDA LWTFIN,X
  862. -       STA WTYPE,X
  863. -       TYA          0
  864. -       STA WTYPE2,X
  865. -       STA WTYPE3,X
  866. -       DEX
  867. -       BPL .6
  868. -       DEC ELTRIED  MARK ELLIPSIS AS ALREADY TRIED
  869. -       JMP ATN
  870. -SENTFAIL LDA #0
  871. -       STA WORDS    DON'T TRY FAILED SENTENCE IN ELLIPSIS
  872. -       BIT DBGFLG
  873. -       BPL .1
  874. -       JSR FD8E     DON'T PRINT ON SAME LINE AS DEBUGGING MESSAGES
  875. -.1     LDY /.2
  876. -       LDA #.2
  877. -       JSR PS
  878. -       JMP PARSE
  879. -.2     .US /I DON'T UNDERSTAND THAT SENTENCE.@=/
  880. -AS     .US /@ASSUMPTION=/
  881. -EL     .US /@ELLIPSIS=/
  882. -INSWRD PHA
  883. -       LDA #"(
  884. -       JSR FDF0
  885. -       LDA WORDS
  886. -       TAX
  887. -       TAY
  888. -       DEY
  889. -       BEQ .3       1 WORD:VP
  890. -.25    JSR TMOVE    MOVE SENT. UP
  891. -       DEX
  892. -       DEY
  893. -       BNE .25      DON'T MOVE VERB
  894. -.3     STY SDEST
  895. -       STY WVERB+1
  896. -       STY WTYPE2+1
  897. -       STY WTYPE3+1
  898. -       PLA
  899. -       STA WNOUN+1  PLACE AFTER VERB
  900. -       DEY
  901. -       STY WHI+1    #$FF
  902. -       INC WORDS
  903. -       JSR PROBJ
  904. -       LDA #")
  905. -       JSR FDF0
  906. -       JMP FD8E
  907. -NW.OW  LDA WLO,X   NEW WORD->OLD SENTENCE
  908. -       STA LWLO,Y
  909. -       LDA WHI,X
  910. -       STA LWHI,Y
  911. -       LDA WVERB,X
  912. -       STA LWVERB,Y
  913. -       LDA WNOUN,X
  914. -       STA LWNOUN,Y
  915. -       RTS
  916. -EMOVE  LDA LWLO,Y
  917. -       STA LWLO,X
  918. -       LDA LWHI,Y
  919. -       STA LWHI,X
  920. -       LDA LWVERB,Y
  921. -       STA LWVERB,X
  922. -       LDA LWNOUN,Y
  923. -       STA LWNOUN,X
  924. -       LDA LWTFIN,Y
  925. -       STA LWTFIN,X
  926. -       RTS
  927. -GETNODE BIT DBGFLG  PRINT NODE?
  928. -       BPL .1
  929. -       PHA
  930. -       LDA #$A0
  931. -       JSR FDF0
  932. -       PLA
  933. -       PHA
  934. -       JSR FDDA
  935. -       PLA
  936. -.1     STA CURNODE
  937. -       ASL
  938. -       TAY
  939. -       LDA NODETAB,Y
  940. -       STA TNPNT
  941. -       LDA NODETAB+1,Y
  942. -       STA TNPNT+1
  943. -       JMP CHKEY
  944. -CURNODE .BS 1       ONLY USED BY INTONP
  945. -INTONP CMP #NP
  946. -       BCC .5
  947. -       CMP #15
  948. -       BCS .5
  949. -       LDY CURNODE  ONLY USE OF CURNODE
  950. -       CPY #NP
  951. -       BCC .45
  952. -       CPY #15
  953. -       BCC .5       UNLESS ALREADY IN NP
  954. -.45    INC NPSP     IF GOING BACK INTO NP,
  955. -       INC NPSP     GIVE IT AN EXIT ROUTINE
  956. -.5     RTS
  957. -*--------------------------------
  958. -ATNS   .US /@A%T%N:=/
  959. -*-------------------------------
  960. -WTYPE  .BS 30
  961. -WTYPE2 .BS 30
  962. -WTYPE3 .BS 30
  963. -OLO    .BS 30       ORIGINAL WORD#: USED FOR STRING SUBST
  964. -OHI    .BS 30       WHEN A CHARACTER REPEATS STRING
  965. -* NEXT 6 MUST BE TOGETHER
  966. -WLO    .BS 30       UP TO 30 WORDS
  967. -WHI    .BS 30
  968. -WVERB  .BS 30
  969. -WNOUN  .BS 30
  970. -WORDS  .BS 1        # OF WORDS
  971. -WTFIN  .BS 30
  972. -WORDNODE .BS 30
  973. -WORDINDEX .BS 30
  974. -* LAST SENTENCE PARSED, USED IN ELLIPSIS
  975. -LWLO   .BS 30
  976. -LWHI   .BS 30
  977. -LWVERB .BS 30
  978. -LWNOUN .BS 30
  979. -LWORDS .BS 1
  980. -LWTFIN .BS 30
  981. -* SLOTS FILLED BY ATN & PASSED TO VERB HANDLERS
  982. -* MODIFY ATN ENTRY IF YOU CHANGE THESE
  983. -SDEST  .BS 1
  984. -SINSTR .BS 1
  985. -SPLACE .BS 1
  986. -SNUM   .BS 1
  987. -SADV   .BS 1
  988. -STIME  .BS 2
  989. -SPI    .BS 2
  990. -SPT    .BS 2
  991. -SPM    .BS 1       USED BY HANDLER
  992. -SPN    .BS 1       USED BY ATN
  993. -OBJLIST .BS 21      1 EXTRA FOR BUFFER
  994. -NOUNLIST .BS 20
  995. -LNL    .BS 20
  996. -SOURCELIST .BS 20
  997. -LOCLIST .BS 20
  998. -CASEFRAME .BS 6
  999. -NPSP   .BS 1        POINTER INTO NP STACK
  1000. -NPSTACK .BS 20
  1001. -ADJLIST .BS 8
  1002. -*
  1003. -* ACCEPT:00=LINE CAN'T END IN THIS NODE
  1004. -ACCEPT .HS 000000FF00FF00FF00FF0000000000FF00
  1005. -*
  1006. -*      .DA #PART OF SPEECH REQD FOR TRANSITION,TRANSITION SUBROUTINE,#DEST NODE
  1007. -JMP    .EQ $80
  1008. -NODE0  .DA #VI,TV,#7
  1009. -       .DA #VP,TV,#1
  1010. -       .DA #VT,TV,#2
  1011. -       .DA #VI,TV,16
  1012. -NP     .EQ 11
  1013. -NODETAB .DA NODE0,.1,.2,.3,.4,.5,.6,.7,.8,.9,0,.11,.12,.13,.14,.15,.16
  1014. -.1     .DA #PLACE,TPLACE,#7
  1015. -       .DA #PM,TPM,#6
  1016. -       .DA #PRT,TPRT,#1
  1017. -       .DA #JMP,TPOBJ,NP
  1018. -.2     .DA #PRT,TPRT,#2
  1019. -       .DA #JMP,TOBJ,NP  NP OBJ & SOURCE
  1020. -.3     .DA #EXC,TRTS,#4
  1021. -       .DA #JMP,TRTS,5
  1022. -.4     .DA #JMP,TEXC,NP  NP.EXC
  1023. -.5     .DA #PM,TPM,#6
  1024. -       .DA #PRT,TPRT,#5
  1025. -       .DA #JMP,TRTS,7
  1026. -.6     .DA #JMP,T6.7,NP  NP.DEST
  1027. -*7     .DA #ADJ,TADV,#9
  1028. -.7     .DA #PI,T7.8,8
  1029. -*      .DA #JMP,TRTS,9
  1030. -.8     .DA #JMP,TINSTR,NP  NP.INSTRUMENT
  1031. -.9     .DA #0
  1032. -*9     .DA #PT,T9.10,#10
  1033. -*      .DA #TB,T9.E,EN
  1034. -*10    .DA #TIME,T9.E,EN
  1035. -.11    .DA #POS,TRTS,#12  POSSESSIVE IGNORED
  1036. -       .DA #JMP,TRTS,12
  1037. -.12    .DA #NUM,TNUM,#13
  1038. -       .DA #JMP,TRTS,13
  1039. -.13    .DA #ADJ,TADJ,#13
  1040. -       .DA #CN,TNOUN,#14
  1041. -       .DA #CNP,TNOUN,#14
  1042. -       .DA #PRN,TPRN,#14
  1043. -       .DA #PROPER,TNOUN,14
  1044. -.14    .DA #PN,TPN,#NP
  1045. -       .DA #CONJ,TCONJ,#NP
  1046. -       .DA #JMP,TLEAVENP,15
  1047. -.15    .DA #0       FAKE NODE FOR NP TO END AT
  1048. -.16    .DA #PRT,TPRT,7  ACTUALLY RESTARTS ATN
  1049. -EN     .EQ 17
  1050. =caseframe
  1051. -*
  1052. -SAVECASEFRAME
  1053. -*      .DA CASEFRAME,DATA TABLE
  1054. -* CASEFRAME:
  1055. -*   7=OBJ MAY BE ABSENT
  1056. -*   6=OBJ MAY BE ROOM/IN ROOM
  1057. -*   5=OBJ MAY BE IN/ON PERSON
  1058. -*   4=PERMISSIBLE OBJLIST GIVEN
  1059. -*   3=FORBIDDEN OBJLIST GIVEN
  1060. -*   2=HUMAN OBJ ALLOWED
  1061. -*   1=ANIMATE OBJ ALLOWED
  1062. -*   0=INANIMATE OBJ ALLOWED
  1063. -*   7=SIZE MUST BE <X
  1064. -*   6=SIZE MUST BE >=Y
  1065. -*   5=OBJ MUST HAVE PROPERTIES F
  1066. -*   4=CAN HAVE BURNT/BROKEN OBJ
  1067. -*   3=INSTR ALLOWED,LIST GIVEN
  1068. -*   2=INSTR REQUIRED
  1069. -*   1=DEST ALLOWED
  1070. -*   0=DEST REQ'D
  1071. -*   7=DEST LIST GIVEN
  1072. -*   6=PREP LIST GIVEN
  1073. -*   5=VERB PART PERMITTED
  1074. -*   4=VERB PART REQUIRED
  1075. -*   3=CHAR WILL DO VERB IF TOLD
  1076. -*   0=FAILURE IF OBJ NOT GOTTEN
  1077. -*   7=GET OBJ IF POSSIBLE AND NOT CARRIED
  1078. -*   6=SPECIAL ACTIONS
  1079. -*   5=JSR
  1080. -*   4=ADD EDGE
  1081. -*   3=DELETE EDGE
  1082. -*   2=REPLACE EDGE
  1083. -*   1=ZERO OBJ BITS
  1084. -*   0=SET OBJ BITS
  1085. -*
  1086. -* FOR VP SUBST PLACE FOR OBJ
  1087. -* WHEN PLACE IS NOUN (NOT NSEW..)
  1088. -* VP WON'T PARSE IF NO DEST
  1089. -* GIVEN, SO DON'T REQUIRE DEST
  1090. -* FOR VP WHICH PERMIT SPLACE
  1091. -*
  1092. -* PARTS
  1093. -* DON'T REUSE # ANOTHER PART MAY HAVE IN DATA, IE ON=4
  1094. -FOR    .EQ 40
  1095. -OFF    .EQ 41
  1096. -OUT    .EQ 42
  1097. -AWAY   .EQ 43
  1098. -* UP prt# = UV
  1099. -*
  1100. -VERBS
  1101. -ATT    .EQ 0
  1102. -       .DA $371,$4C8,TATT
  1103. -BRE    .EQ 1
  1104. -       .DA $BC61,$4500,TBRE 
  1105. -BRU    .EQ 2
  1106. -       .DA $C71,$4000,TBRU
  1107. -BUR    .EQ 3
  1108. -       .DA $3C61,$500,TBUR
  1109. -CHEC   .EQ 4
  1110. -       .DA $1071,$C030,TCHEC
  1111. -CHEOUT .EQ 5
  1112. -       .DA $1071,$C100,TCHEOUT
  1113. -CHEW   .EQ 6
  1114. -       .DA $2061,$4000,TCHEW
  1115. -CLE    .EQ 7
  1116. -       .DA $8C71,$400,TCLE
  1117. -CLI    .EQ 8
  1118. -       .DA $300,$4440,TCLI
  1119. -CLOS   .EQ 9
  1120. -       .DA $2061,$2208,TCLOS
  1121. -CLOT   .EQ 10
  1122. -       .DA $C66,$4000,TCLOT
  1123. -COM    .EQ 11
  1124. -       .DA $C66,$4000,TCOM
  1125. -CUT    .EQ 12
  1126. -       .DA $C71,$500,TCUT
  1127. -DV     .EQ 13
  1128. -       .DA 0,$2000,TD
  1129. -DAM    .EQ 14
  1130. -       .DA $1077,$4000,TDAM
  1131. -DEB    .EQ 15
  1132. -       .DA 0,$2000,TDEB
  1133. -DEV    .EQ 16
  1134. -       .DA $71,$4000,TDEV
  1135. -DIE    .EQ 17
  1136. -       .DA 0,$4000,TDIE
  1137. -DRIB   .EQ 18
  1138. -       .DA $71,$8008,TDRIB
  1139. -DRI    .EQ 19
  1140. -       .DA $2061,$6000,TDRI
  1141. -DRO    .EQ 20
  1142. -       .DA $1227,$4000,TDRO
  1143. -DRY    .EQ 21
  1144. -       .DA $9C6F,$4800,TDRY
  1145. -DUM    .EQ 22
  1146. -       .DA $8061,$4000,TDUM
  1147. -DUN    .EQ 23
  1148. -       .DA $8271,$40C8,TDUN
  1149. -EV     .EQ 24
  1150. -       .DA 0,$2000,TE
  1151. -EAT    .EQ 25
  1152. -       .DA $2061,$E001,TEAT
  1153. -ELL    .EQ 26
  1154. -       .DA 0,$4000,TELL
  1155. -END    .EQ 27
  1156. -       .DA $F1,$4000,TEND
  1157. -ERA    .EQ 28
  1158. -       .DA $1071,$4008,TERA
  1159. -EXA    .EQ 29
  1160. -       .DA $1067,$E008,TEXA
  1161. -EXI    .EQ 30
  1162. -       .DA $1041,$2000,TEXI
  1163. -EXT    .EQ 31
  1164. -       .DA $1861,$4000,TEXT
  1165. -FAS    .EQ 32
  1166. -       .DA 0,$2000,TFAS
  1167. -FIL    .EQ 33
  1168. -       .DA $2C67,$408,TFIL
  1169. -FIN    .EQ 34
  1170. -       .DA $10E7,$4008,TFIN
  1171. -FLU    .EQ 35
  1172. -       .DA $71,$4200,TFLU
  1173. -FOL    .EQ 36
  1174. -       .DA $46,$4008,TFOL
  1175. -GET    .EQ 37       GET, TAKE OFF
  1176. -       .DA $9063,$C221,TGET SPECIAL ACTION ELIMINATES OBJS IN ME
  1177. -GIV    .EQ 38
  1178. -       .DA $9321,$C40,TGIV
  1179. -GO     .EQ 39
  1180. -       .DA $4041,$2440,TGO
  1181. -HEA    .EQ 40
  1182. -       .DA $67,$6000,THEA
  1183. -HEL    .EQ 41
  1184. -       .DA $1856,$2008,THEL
  1185. -HIT    .EQ 42
  1186. -       .DA #%01100111,%00011100,#$40,THIT
  1187. -IV     .EQ 43
  1188. -       .DA 0,$2000,TI
  1189. -JUM    .EQ 44
  1190. -       .DA 0,$4000,TJUM
  1191. -KIL    .EQ 45
  1192. -       .DA #%01000110,#%00001100,#0,#$40,TKIL
  1193. -LIG    .EQ 46
  1194. -       .DA $2061,$C500,TLIG
  1195. -LOA    .EQ 47
  1196. -       .DA #%11110111,#$10,#0,#$20,TLOA
  1197. -LOCV   .EQ 48       SYMBOL LOC TAKEN
  1198. -       .DA $2C69,$4208,TLOC
  1199. -LOI    .EQ 49
  1200. -       .DA 0,0,0
  1201. -LOO    .EQ 50
  1202. -       .DA $12E7,$2048,TLOO  LOOK NORTH?
  1203. -LOW    .EQ 51
  1204. -       .DA 0,$4000,TLOW
  1205. -MOV    .EQ 52
  1206. -       .DA $9263,$4000,TMOV
  1207. -NV     .EQ 53
  1208. -       .DA 0,$2000,TN
  1209. -NOD    .EQ 54
  1210. -       .DA 0,$2000,TNOD
  1211. -NOE    .EQ 55
  1212. -       .DA 0,$4000,TNOE
  1213. -OPE    .EQ 56
  1214. -       .DA $3861,$6100,TOPE
  1215. -PIC    .EQ 57       PICK UP
  1216. -       .DA #$E7,#$10,#%00111000,#0,TPIC
  1217. -PLA    .EQ 58
  1218. -       .DA $A71,$40C8,TPLA
  1219. -PHO    .EQ 59
  1220. -       .DA $C67,$4000,TPHO
  1221. -POK    .EQ 60
  1222. -       .DA $1866,$4000,TPOK
  1223. -POU    .EQ 61
  1224. -       .DA #%01100001,#%00110010,$4048,TPOU
  1225. -PRY    .EQ 62
  1226. -       .DA #$71,#$1C,#$20,#$A,TPRY
  1227. -* PULL=MOVE
  1228. -PUS    .EQ 63
  1229. -       .DA $9061,$4000,TPUS
  1230. -PUT    .EQ 64
  1231. -       .DA $9363,$C428,TPUT  PUT,PUT DOWN,PUT OUT
  1232. -REA    .EQ 65
  1233. -       .DA $2061,$C001,TREA
  1234. -REC    .EQ 66
  1235. -       .DA $300,$40C8,TREC
  1236. -REM    .EQ 67
  1237. -       .DA $8067,$C400,TREM  DOESN'T GET IN GET ROUTINE, JUST CHECKS FOR SPCACT
  1238. -RET    .EQ 68
  1239. -       .DA #$71,$100,#%11000010,TRET
  1240. -REW    .EQ 69
  1241. -       .DA $C71,$4100,TREW
  1242. -RIP    .EQ 70
  1243. -       .DA $71,$820,TRIP
  1244. -SV     .EQ 71
  1245. -       .DA 0,$2000,TS
  1246. -SAL    .EQ 72
  1247. -       .DA $1C71,$8,TSAL
  1248. -SAU    .EQ 73
  1249. -       .DA 0,$4000,TSAU
  1250. -SAV    .EQ 74
  1251. -       .DA #%11110111,#$10,#0,#$20,TSAV
  1252. -SAY    .EQ 75
  1253. -       .DA $3F7,$6040,TSAY
  1254. -SCO    .EQ 76
  1255. -       .DA 0,$2000,TSCO
  1256. -SCR    .EQ 77       SCREW
  1257. -       .DA $F71,#$C0,#%01010101,TSCR
  1258. -SHOO   .EQ 78
  1259. -       .DA #%01000111,#%10011100,$4000,TSHOO
  1260. -SHOW   .EQ 79
  1261. -       .DA $200,$4CC0,TSHO
  1262. -SIT    .EQ 80
  1263. -       .DA $300,$4C0,TSIT
  1264. -SLE    .EQ 81
  1265. -       .DA 0,$4400,TSLE
  1266. -SLOW   .EQ 82
  1267. -       .DA 0,$2000,TSLO
  1268. -SME    .EQ 83
  1269. -       .DA $67,$E008,TSME
  1270. -SPR    .EQ 84
  1271. -       .DA 0,8,0
  1272. -STA    .EQ 85
  1273. -       .DA #$71,0,#$40,TSTA
  1274. -STI    .EQ 86
  1275. -       .DA #$71,#$13,#$C1,#$84,TSTI
  1276. -STO    .EQ 87
  1277. -       .DA $77,$4008,TSTO
  1278. -SWA    .EQ 88
  1279. -       .DA $A061,$6000,TSWA
  1280. -SWI    .EQ 89
  1281. -       .DA $200,$2000,TSWI
  1282. -THR    .EQ 90
  1283. -       .DA $9221,$4060,TTHR
  1284. -TAW    .EQ 91       THROW AWAY
  1285. -       .DA $9221,$40C0,TTAW
  1286. -TIC    .EQ 92
  1287. -       .DA $66,$4000,TTIC
  1288. -TUR    .EQ 93
  1289. -       .DA #$61,#0,#%00110000,#0,TTUR
  1290. -TUROFF .EQ 94
  1291. -       .DA #$61,0,#$40,TOF
  1292. -TURNON .EQ 95
  1293. -       .DA #$61,0,#$40,TON
  1294. -TYP    .EQ 96
  1295. -       .DA $13F1,$40C8,TTYP
  1296. -UV     .EQ 97
  1297. -       .DA 0,$2000,TU
  1298. -UNLI   .EQ 98
  1299. -       .DA $2061,$4A00,TUNLI
  1300. -UNLO   .EQ 99
  1301. -       .DA $2C69,$4100,TUNLO
  1302. -UNS    .EQ 100
  1303. -       .DA $C71,#0,#%01001000,TUNS
  1304. -USE    .EQ 101
  1305. -       .DA $71,$4000,TUSE
  1306. -VOC    .EQ 102
  1307. -       .DA 0,$2000,TVOC
  1308. -WV     .EQ 103
  1309. -       .DA 0,$2000,TW
  1310. -WEA    .EQ 104
  1311. -       .DA $2061,$D00,TWEA
  1312. -WIN    .EQ 105
  1313. -       .DA $F1,$4000,TWIN
  1314. -WIND   .EQ 106
  1315. -       .DA $71,$4000,TWIND
  1316. -YEL    .EQ 107
  1317. -       .DA 0,$4000,TYEL
  1318. -PV     .EQ 108      FAKE VERB FOR PUTTING INTO VENT
  1319. -       .DA $63,$4000,TPV
  1320. -SCRI   .EQ 109      SCRIPT
  1321. -       .DA 0,$4000,TSCRI
  1322. -NOSC   .EQ 110
  1323. -       .DA 0,$2000,TNOSC
  1324. -*--------------------------------
  1325. -* IN MOST ADVENTURES,SOME VERBS SHOULD SPECIFY THAT THE SCREEN NOT BE
  1326. -* UPDATED AFTER THEM. NOT SO HERE,BECAUSE OBJS CAN WANDER AROUND
  1327. -* INDEPENDENT OF THE PLAYER.
  1328. =cndact
  1329. -*
  1330. -SAVECNDACT26
  1331. -* CONDITION#,COND PARMS,[AND,COND,CP]/[ACTION#,ACT PARMS,0(/,#$80,CND,..)]
  1332. -* CONDITIONS AND ACTIONS
  1333. -* OBJWASIN,ISEDG,ITIN CAN BIND VAR IN FINAL BYTE
  1334. -NULL   .EQ 1
  1335. -OBJIS  .EQ 2
  1336. -LOCIS  .EQ 3
  1337. -PEEK   .EQ 4
  1338. -SLOTIS .EQ 5
  1339. -INROOM .EQ 6
  1340. -OBJIN  .EQ 7
  1341. -OBJWASIN .EQ 8
  1342. -PRIMED .EQ 9
  1343. -ZERO   .EQ 10
  1344. -BITSET .EQ 11
  1345. -JSR    .EQ 12
  1346. -ISEDG  .EQ 13
  1347. -ITIN   .EQ 14
  1348. -ACTME  .EQ 15
  1349. -CZ     .EQ 16
  1350. -INME   .EQ 17
  1351. -CNDTAB .DA .0,.5,.10,.15,.20,.25,.30,.35,.40,.45,.50,.55,.60,.65,.70,CA75,CA80
  1352. -* CONDITIONS ENTERED WI 1ST PARM IN A
  1353. -* ON EXIT:Z=1 IF SUCCESS
  1354. -* NO CONDITION
  1355. -.0     LDA VDAT+1
  1356. -       BNE .1
  1357. -       DEC VDAT+2
  1358. -.1     DEC VDAT+1   NO PARMS
  1359. -       LDA #0       SUCCESS
  1360. -       RTS
  1361. -* OBJ=X
  1362. -.5     JSR GEDGE+3
  1363. -       CMP CUROBJ
  1364. -       RTS
  1365. -* ACLOC=X
  1366. -.10    CMP ACLOC
  1367. -       RTS
  1368. -* MEMLOC=X
  1369. -.15    JSR RDADR+3
  1370. -       JSR VDAT
  1371. -       CMP (MISC),Y
  1372. -       RTS
  1373. -* SLOT=X
  1374. -.20    JSR GEDGE+3
  1375. -       STA MISC
  1376. -       JSR VDAT
  1377. -       CMP MISC
  1378. -       RTS
  1379. -* ITEM IN ROOM
  1380. -.25    JSR GEDGE+3
  1381. -       LDX #0
  1382. -       STX ILOC
  1383. -       JSR CHECKLOC
  1384. -       LDA ILOC
  1385. -       CMP ACLOC
  1386. -       RTS
  1387. -* OBJ IN X
  1388. -.30    JSR GEDGE+3
  1389. -       STA $1A
  1390. -       LDA CUROBJ
  1391. -       LDX #IN
  1392. -       JSR GETOBJ
  1393. -       DEX
  1394. -       BMI .31
  1395. -       PLA
  1396. -       CMP $1A
  1397. -.31    RTS
  1398. -* OBJ WAS IN X BEFORE GOTTEN
  1399. -.35    JSR GEDGE+3
  1400. -       CMP #$FF     UNBOUND VAR
  1401. -       BNE .37
  1402. -       LDA OLDLOC
  1403. -       JSR BIND
  1404. -.37    CMP OLDLOC
  1405. -       RTS
  1406. -* OBJ PRIMED
  1407. -.40    JSR .0       DEC VDAT
  1408. -       LDA CUROBJ
  1409. -       JSR PNTOBJ
  1410. -       LDY #4
  1411. -       LDA (MISC),Y
  1412. -       AND #$10
  1413. -       EOR #$10
  1414. -       RTS
  1415. -* PEEK (X) = 0
  1416. -.45    JSR RDADR+3
  1417. -       LDA (MISC),Y
  1418. -       RTS
  1419. -* ITEM BIT SET
  1420. -.50    JSR GEDGE+3
  1421. -       JSR PNTOBJ
  1422. -       JMP TBIT
  1423. -* MACHINE-LANGUAGE SUB WHICH DETERMINES Z
  1424. -.55    JSR RDADR+3
  1425. -       JMP (MISC)
  1426. -* EDGE V V _ V EXISTS
  1427. -.60    JSR GEDGE+3
  1428. -       PHA
  1429. -       JSR GEDGE
  1430. -       TAX
  1431. -       JSR GEDGE
  1432. -       STA TEMP+1
  1433. -       PLA
  1434. -       JSR GETOBJ
  1435. -.61    DEX
  1436. -       BMI .64      FAIL
  1437. -       PLA
  1438. -       CMP TEMP+1
  1439. -       BEQ .63      SUCCEED
  1440. -       LDY TEMP+1
  1441. -       CPY #$FF     UNBOUND VAR
  1442. -       BNE .61
  1443. -       JSR BIND     BIND,SUCCEED
  1444. -       .HS A9       (LDA #$68) PULL REST OFF STACK
  1445. -.62    PLA
  1446. -.63    DEX
  1447. -       BPL .62
  1448. -       INX          Z=1
  1449. -.64    RTS
  1450. -* ITEM IN X
  1451. -.65    JSR GEDGE+3
  1452. -       LDX #IN
  1453. -       JSR GETOBJ
  1454. -       JSR GEDGE    DOESN'T CHANGE X
  1455. -       DEX
  1456. -       BMI .67      NOT IN ANYTHING,FAIL
  1457. -       STA TEMP+1
  1458. -       PLA
  1459. -       STA MISC
  1460. -       LDA TEMP+1
  1461. -       CMP #$FF     UNBOUND VAR
  1462. -       BNE .66      NO
  1463. -       LDA MISC
  1464. -       JSR BIND     BIND,SUCCEED
  1465. -.66    CMP MISC
  1466. -.67    RTS
  1467. -* I'M ACTOR
  1468. -.70    JSR .0
  1469. -       LDA ACTOR
  1470. -       CMP #ME
  1471. -       RTS
  1472. -* ITEM COUNTER 0
  1473. -CA75   JSR GEDGE+3
  1474. -       JSR PNTOBJ
  1475. -       LDY #4
  1476. -       LDA (MISC),Y
  1477. -       AND #7
  1478. -       RTS
  1479. -* ITEM IN ME
  1480. -CA80   JSR GEDGE+3
  1481. -CINME  LDX #IN
  1482. -       JSR GETOBJ
  1483. -       DEX
  1484. -       BMI .1
  1485. -       PLA
  1486. -       CMP #ME
  1487. -       BNE CINME
  1488. -.1     RTS
  1489. -OLDLOC .BS 1
  1490. -RDADR  JSR VDAT
  1491. -       STA MISC
  1492. -       JSR VDAT
  1493. -       STA MISC+1
  1494. -       LDY #0
  1495. -       RTS
  1496. -AMSG   .EQ 1
  1497. -ARPL   .EQ 2
  1498. -AJSR   .EQ 3
  1499. -SKIP   .EQ 4
  1500. -POKE   .EQ 5
  1501. -AINC   .EQ 6
  1502. -NOTH   .EQ 7
  1503. -GOTO   .EQ 8
  1504. -MAKVIS .EQ 9
  1505. -ASBIT  .EQ 10
  1506. -AZBIT  .EQ 11
  1507. -MOVETO .EQ 12
  1508. -ADEC   .EQ 13
  1509. -DECC   .EQ 14
  1510. -DO     .EQ 15
  1511. -CHMAP  .EQ 16
  1512. -AREP   .EQ 17
  1513. -AMAK   .EQ 18
  1514. -ADEL   .EQ 19
  1515. -SPAWN  .EQ 20
  1516. -TRANS  .EQ 21
  1517. -ADIE   .EQ 22
  1518. -DELIT  .EQ 23
  1519. -UPSCR  .EQ 24
  1520. -DESTR  .EQ 25
  1521. -ASWI   .EQ 26
  1522. -UNBIND .EQ 27
  1523. -CGO    .EQ 28       CONVERSATION GOTO
  1524. -ACTLEN .DA #1,#1,#2,#0,#3,#2,#0,#2,#1,#4,#4,#1,#2,#1,#7,#3,#3,#3,#3,#3,#3,#0,#1,#1,#1,#2,#0,#1
  1525. -ACTTAB .DA .0,.3,.5,.10,.15,.20,.25,.30,.35,.40,.45,.50,.55,.60,.65,CA1,DOREP,MAK,DEL,SPW,TRN,ADI,DLO,UPS,DES,SW,UB,CG
  1526. -* PRINT MESSAGE
  1527. -.0     JSR NOK
  1528. -       JSR VDAT
  1529. -       JMP PMSG
  1530. -* PRINT REPLY
  1531. -.3     JSR NOK
  1532. -       JSR VDAT
  1533. -       JMP PRPL
  1534. -* JSR
  1535. -.5     JSR RDADR
  1536. -       JMP (MISC)
  1537. -* SKIP OBJECT
  1538. -* WHEN CALLED FROM INLINE, SKIPS THE REST OF THE AL CODE INLINE
  1539. -* & RETURNS TO THE GIVEN INLINE ADDRESS (IE DRT)
  1540. -.10    PLA          POP SPCACT
  1541. -       PLA
  1542. -       PLA          POP ROUTINE WITH JSR SPCACT
  1543. -       PLA
  1544. -       RTS
  1545. -* POKE
  1546. -.15    JSR RDADR
  1547. -       JSR GEDGE    NOTE YOU CAN'T POKE A VALUE = A VAR#
  1548. -       LDY #0
  1549. -       STA (MISC),Y
  1550. -       RTS
  1551. -* INC
  1552. -.20    JSR VDAT
  1553. -       STA .21+1
  1554. -       JSR VDAT
  1555. -       STA .21+2
  1556. -.21    INC $FFF
  1557. -* NOTHING:NORMALLY FOLLOWED BY AN ELSE
  1558. -.25    RTS
  1559. -* GOTO
  1560. -.30    JSR RDADR
  1561. -       LDA MISC
  1562. -       STA VDAT+1
  1563. -       LDA MISC+1
  1564. -       STA VDAT+2
  1565. -       RTS
  1566. -* MAKE OBJ VISIBLE
  1567. -.35    JSR GEDGE
  1568. -       JSR PNTOBJ
  1569. -       LDY #5
  1570. -       LDA (MISC),Y
  1571. -       AND #$7F
  1572. -       STA (MISC),Y
  1573. -       RTS
  1574. -* SET BITS OF ITEM
  1575. -.40    JSR GEDGE
  1576. -       JMP SBIT
  1577. -* ZERO BITS
  1578. -.45    JSR GEDGE
  1579. -       JMP ZBIT
  1580. -* MOVE ME INTO X
  1581. -.50    JSR GEDGE
  1582. -       TAY
  1583. -       LDA #ME
  1584. -       LDX #IN
  1585. -       JMP REPEDG
  1586. -* DEC BYTE
  1587. -.55    JSR VDAT
  1588. -       STA .57+1
  1589. -       JSR VDAT
  1590. -       STA .57+2
  1591. -.57    DEC $FFF
  1592. -       RTS
  1593. -* DEC ITEM COUNTER
  1594. -.60    JSR GEDGE
  1595. -       JSR PNTOBJ
  1596. -       LDY #4
  1597. -       LDA (MISC),Y
  1598. -       SEC
  1599. -       SBC #1
  1600. -       STA (MISC),Y
  1601. -       RTS
  1602. -* EXECUTE SENTENCE AFTER THIS EXECUTION IS DONE
  1603. -* WON'T WORK IF OBJ IS SKIPd
  1604. -.65    LDX #6
  1605. -.67    JSR GEDGE
  1606. -       >PHA DOSTK,DOPNT
  1607. -       DEX
  1608. -       BPL .67
  1609. -NOK    LDY /.1
  1610. -       LDA #.1
  1611. -       JMP OMSG     DON'T PRINT OK
  1612. -.1     .AS -/=/
  1613. -* VERB,OBJ,PM,DEST,INSTR,PLACE
  1614. -DOSTK  .BS 6*8
  1615. -DOPNT  .BS 1
  1616. -* CHANGE MAP: LOC DIR->LOC
  1617. -CA1    JSR VDAT
  1618. -       PHA
  1619. -       JSR VDAT
  1620. -       TAY
  1621. -       JSR VDAT
  1622. -       TAX
  1623. -       PLA
  1624. -* CHANGE MAP:A Y X = LOC DIR->LOC
  1625. -CHM    STA ALOC
  1626. -       TXA
  1627. -       PHA
  1628. -       LDA ALOC
  1629. -       JSR PNTALOC
  1630. -       PLA
  1631. -       STA (TEMP),Y
  1632. -       RTS
  1633. -* REPLACE EDGE
  1634. -DOREP  JSR GEDGE
  1635. -       PHA
  1636. -       JSR GEDGE
  1637. -       TAX
  1638. -       JSR GEDGE
  1639. -       TAY
  1640. -       PLA
  1641. -       JMP REPEDG
  1642. -* MAKE EDGE (FOR WHEN AREP WOULD COVER DIFFERENT EDGE, IE OWNING
  1643. -MAK    JSR GEDGE
  1644. -       PHA
  1645. -       JSR GEDGE
  1646. -       PHA
  1647. -       TAX
  1648. -       JSR CLCPNT
  1649. -       PHA
  1650. -       JSR GEDGE
  1651. -       PHA
  1652. -       JSR MAKEDG   CAN'T JMP
  1653. -       RTS
  1654. -* DELETE EDGE
  1655. -DEL    LDX #3
  1656. -.1     JSR GEDGE
  1657. -       PHA
  1658. -       DEX
  1659. -       BNE .1
  1660. -       STX GCALLD   FOR GETEDG
  1661. -       TAX          DEF Z
  1662. -       BNE DE2
  1663. -       PLA
  1664. -       PLA
  1665. -       TAX
  1666. -       PLA
  1667. -* DELETE LAST EDGE A X _ _
  1668. -DELAX  STA EDGCMP+1
  1669. -       JSR JG
  1670. -       BCS DE3      NO EDGE
  1671. -       LDA #DE3
  1672. -       STA MISC     RETURN TO .3 FROM DEL EXIT
  1673. -       LDA /DE3
  1674. -       STA MISC+1
  1675. -       JMP DELEXT
  1676. -DE2    JSR DELEDG   DON'T JMP SINCE DATA IS ON STACK
  1677. -DE3    RTS
  1678. -* SPAWN PLAN
  1679. -SPW    >CRL NXTPLN,#2    USE PNTR FOR ACTOR
  1680. -       LDA #1
  1681. -       STA SPWD     CALLED BY SPAWN
  1682. -SP1    JSR GEDGE    ACTOR
  1683. -       PHA
  1684. -       LDY #$FE
  1685. -       STA (TEMP),Y
  1686. -       JSR GEDGE    PLAN#
  1687. -       LDY #$FD     GEDGE WIPES Y
  1688. -       STA (TEMP),Y
  1689. -       JSR GEDGE    OBJ
  1690. -       LDY #$FC
  1691. -       STA (TEMP),Y
  1692. -       PLA
  1693. -       LDY SPWD
  1694. -       BEQ .4       TRANS WORKS EVEN IF PERSON BUSY
  1695. -* SPWD HOLDS 1, SO DOES Y
  1696. -.2     CMP PATBUS,Y
  1697. -       BEQ .5       BUSY
  1698. -       DEY
  1699. -       BPL .2
  1700. -.4     JSR PNTOBJ   WIPES TEMP
  1701. -       LDY #5
  1702. -       LDA (MISC),Y
  1703. -       AND #$10     ANIMATE (ALIVE)?
  1704. -       BEQ .5       NO
  1705. -       JSR FNPN     FANCY INC NXTPLN
  1706. -       CLC
  1707. -       RTS
  1708. -.5     LDA NXTPLN   PLAN MADE
  1709. -       JSR DELLST
  1710. -       SEC
  1711. -       RTS
  1712. -SPWD   .BS 1        1=SP1 CALLED BY SPAWN
  1713. -* TRANSFER CONTROL TO NEW PLAN
  1714. -TRN    >CRL NXTPLN,#3
  1715. -       LDA #0
  1716. -       STA SPWD     CALLED BY TRN
  1717. -       LDY #$FB
  1718. -       LDA CURPLN   RETURN TO PLAN#
  1719. -       ORA #$40     WILL BE SUSPENDED
  1720. -       STA (TEMP),Y
  1721. -       JSR SP1
  1722. -       BCS .5       CHAR DEAD
  1723. -       LDA CURPLN   RETURN TO PLAN#
  1724. -       PHA
  1725. -       JSR LL       SETS Y
  1726. -       PLA
  1727. -       ORA #$40     SUSPEND CURRENT PLAN
  1728. -       STA EDGETOP,Y
  1729. -.5     RTS
  1730. -* KILL CURPLN
  1731. -ADI    LDA CURPLN
  1732. -       PHA
  1733. -       JSR LLL
  1734. -       CMP #3       LEN
  1735. -       BCC .3       SPAWNED; NO PLAN TO REACTIVATE
  1736. -       LDY #$FB
  1737. -       LDA (TEMP),Y PLAN TO REACTIVATE
  1738. -       JSR LL
  1739. -       LDA EDGETOP,Y
  1740. -       AND #%10111111    REACTIVATE
  1741. -       STA EDGETOP,Y
  1742. -.3     PLA
  1743. -       JMP DELLST
  1744. -* DELETE ITEM: DELETE ALL EDGES INVOLVING IT
  1745. -* DELETE ALL ITEMS PART OF IT
  1746. -* CAN'T DELETE EVERY EDGE WI. OBJ#,
  1747. -* SINCE OBJ#S ARE ALSO ADJ#S.
  1748. -DLO    LDA CUROBJ
  1749. -       PHA
  1750. -       JSR GEDGE
  1751. -       STA CUROBJ
  1752. -       JSR INLINE
  1753. -       .DA .5,#NULL,#ADEL,#VOBJ,IN,#ADEL,#VOBJ,ON,#ADEL,#VOBJ,PARTOF
  1754. -.1     .DA #$80,#ISEDG,#VOBJ,#HOLDS,#VX,#$80,#ISEDG,#VOBJ,#PART,#VX,#DELIT,#VX,#GOTO,.1
  1755. -.2     .DA #$80,#ISEDG,#VOBJ,#UNDER,#VX,#ADEL,#VX,#ON,#VOBJ,#GOTO,.2,#0
  1756. -.5     PLA
  1757. -       STA CUROBJ
  1758. -       RTS
  1759. -UPS    JSR VDAT     SCORE #:0-255
  1760. -UP2    TAY
  1761. -       LDA #$FF
  1762. -       EOR KSC,Y
  1763. -       BEQ .3       POINTS ALREADY GIVEN
  1764. -       STA KSC,Y     MARK AS GIVEN
  1765. -       LDA .7,Y
  1766. -       CLC
  1767. -       ADC SCORE
  1768. -       STA SCORE
  1769. -.3     RTS
  1770. -.7     .DA #2,#5,#1,#1,#5,#4,#5,#5,#4,#4,#5,#5,#5,#5,#4,#5,#5,#10,#5,#5
  1771. -* SCREAM,GUARD DRINK,BRUSH TEETH,CLIMB SHELF,PUSH PANEL,REMOVE BAR,PHOT MARK,PLAY TAPE2,TYPE "SESAME",REMOVE VENT,READ ID,SHOOT BULB,BURN OUT BATTERY,LEAVE,REMOVE HINGE,PUT SUGAR IN PAIL,KILL PROF,LEAVE WI PROF,OPEN TC,TOWEL
  1772. -* DESTROY AN OBJECT: DON'T REMOVE FROM ROOM,
  1773. -* BUT SET & ZERO A BUNCH OF BITS, ADD ADJEC DEAD/BROKEN
  1774. -* LIQUID SPILLS OUT IF IN IT
  1775. -DES    JSR GEDGE
  1776. -       STA CUROBJ   NOTE!! CHANGES VOBJ
  1777. -       JSR INLINE
  1778. -       .DA TRTS,#BITSET+$40,#VOBJ,#$80,0,#SKIP,#$80,#OBJIS,#ME,#AINC,GAMOVR,#$80,#OBJIS,#PROF,#$80,#OBJIS,#INT,#UPSCR,#16,#$80,#BITSET,#VOBJ,0,#$10,#AREP,#VOBJ,#ADJEC,#DEAD,#ELSE,#AREP,#VOBJ,#ADJEC,#BROKEN
  1779. -       .DA #$80,#NULL,#ASBIT,VOBJ,$4000,#AZBIT,#VOBJ,#$FF,#%10110111,%11100110
  1780. -* SWITCH OBJ X WITH Y: MAKE Y LIKE X: BROKEN, CONTENTS, ETC, & AREP IT IN LOCATION
  1781. -SW     JSR GEDGE
  1782. -       STA .3+1
  1783. -       JSR PNTOBJ
  1784. -       LDY #5
  1785. -.0     LDA (MISC),Y
  1786. -       STA .8,Y
  1787. -       DEY
  1788. -       BPL .0
  1789. -       JSR GEDGE
  1790. -       STA .5+1
  1791. -       JSR PNTOBJ
  1792. -       LDY #5
  1793. -       LDA (MISC),Y SAVE ONLY Y's NOUN TYPE
  1794. -       AND #6
  1795. -       STA .9
  1796. -.1     LDA .8,Y
  1797. -       STA (MISC),Y
  1798. -       DEY
  1799. -       BPL .1
  1800. -       LDY #5
  1801. -       LDA (MISC),Y
  1802. -       AND #%11111001
  1803. -       ORA .9
  1804. -       STA (MISC),Y
  1805. -* REPLACE ALL X WITH Y IN EDGES
  1806. -       LDA #2
  1807. -       STA .9       COUNTER
  1808. -       LDA #EDGES
  1809. -       LDY /EDGES
  1810. -.2     STA MISC
  1811. -       STY MISC+1
  1812. -       LDY #0
  1813. -.3     LDA #1       X
  1814. -       CMP (MISC),Y
  1815. -       BNE .6
  1816. -.5     LDA #2       Y
  1817. -       STA (MISC),Y REP X WITH Y
  1818. -.6     JSR IM       NOT INY FOR COMPARE TO (VB)
  1819. -       JSR IM
  1820. -       JSR IM
  1821. -       JSR IM
  1822. -       LDA MISC
  1823. -       CMP VB
  1824. -       LDA MISC+1
  1825. -       SBC VB+1
  1826. -       BCC .3       (MISC)<(VB)
  1827. -       DEC .9
  1828. -       BEQ .7       DONE BOTH PASSES
  1829. -       LDA #EDGES+3 2ND PASS, GET OTHER END OF EDGES
  1830. -       LDY /EDGES+3
  1831. -       BNE .2
  1832. -.7     RTS
  1833. -.8     .BS 6        TEMP STORAGE OF OBJ X ATTRIBUTES
  1834. -.9     .BS 1
  1835. -* UNBIND X
  1836. -UB     LDA #$FF
  1837. -       STA VAR
  1838. -       RTS
  1839. -* CONVERSATION GOTO: SET DEFAULT STARTING PATTERN FOR CHAR Y TO A
  1840. -CG     JSR GEDGE
  1841. -       TAY
  1842. -       JSR VDAT
  1843. -CGO2   STA MME+1    COUNTER USED IN FKN
  1844. -       PHA
  1845. -       STY LISNR
  1846. -       JSR FCN
  1847. -       JSR FKN      FIND KEY #
  1848. -       JSR INY      POINT TO BEG OF PATTERN
  1849. -       TYA
  1850. -       CLC
  1851. -       ADC MISC
  1852. -       BCC .5
  1853. -       INC MISC+1
  1854. -.5     PHA
  1855. -       LDA CHRNUM
  1856. -       TAX
  1857. -       ASL
  1858. -       TAY
  1859. -       PLA
  1860. -       STA KEYSTRT,Y
  1861. -       LDA MISC+1
  1862. -       STA KEYSTRT+1,Y
  1863. -       PLA
  1864. -       STA RNSTRT,X
  1865. -       LDA #$FF
  1866. -       STA CHRNUM   DON'T FALSELY THINK WE'VE LOADED XXX.RPL
  1867. -       RTS
  1868. -*--------------------------------
  1869. -* BIND 1ST UNBOUND VAR
  1870. -* ONLY CALLED IF AT LEAST 1 VAR IS UNBOUND
  1871. -BIND   LDY VAR
  1872. -       INY
  1873. -       BEQ .1       1ST VAR UNBOUND
  1874. -       LDY #1       BIND 2ND VAR
  1875. -.1     STA VAR,Y    BIND APPROPRIATE VAR
  1876. -       RTS
  1877. + END OF ARCHIVE
  1878.