home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / vmsnet / funadv / part06 < prev    next >
Internet Message Format  |  1992-03-07  |  48KB

  1. Path: uunet!think.com!yale.edu!heifetz!emory!dragon.com!cts
  2. From: cts@dragon.com
  3. Newsgroups: vmsnet.sources.games
  4. Subject: funadv Part 06/08
  5. Message-ID: <1992Mar7.222233.829@dragon.com>
  6. Date: 8 Mar 92 03:22:32 GMT
  7. Organization: Computer Projects Unlimited
  8. Lines: 1463
  9.  
  10. -+-+-+-+-+-+-+-+ START OF PART 6 -+-+-+-+-+-+-+-+
  11. X*        MESSAGE FOR OBJECT N.  OTHERWISE, N SHOULD BE 000, 100, 200, ETC.,
  12. V AND
  13. X*        THE MESSAGE SHOULD BE THE DESCRIPTION OF THE PRECEDING OBJECT WHEN
  14. V ITS
  15. X*        PROP VALUE IS N/100.  THE N/100 IS USED ONLY TO DISTINGUISH MULTIPL
  16. VE
  17. X*        MESSAGES FROM MULTI-LINE MESSAGES; THE PROP INFO ACTUALLY REQUIRES
  18. V ALL
  19. X*        ME SSAGES FOR AN OBJECT TO BE PRESENT AND CONSECUTIVE. PROPERTIES W
  20. VHICH
  21. X*        PRODUCE NO MESSAGE SHOULD BE GIVEN THE MESSAGE '>$<'.`20
  22. X*
  23. X*
  24. X*     SECTION 6: ARBITRARY MESSAGES.  SAME FORMAT AS SECTIONS 1, 2, AND 5,`2
  25. V0
  26. X*        EXCEPTTHE NUMBERS BEAR NO RELATION TO ANYTHING (EXCEPT FOR SPECIAL`
  27. V20
  28. X*        VERBS IN SECTION 4).
  29. X*
  30. X*
  31. X*     SECTION 7: ACTION DEFAULTS.  EACH LINE CONTAINS AN 'ACTION-VERB' NUMBE
  32. VR
  33. X*       AND THE INDEX (IN SECTION 6) OF THE DEFAULT MESSAGE FOR THE VERB.`20
  34. X*
  35. X*
  36. X*     SECTION 8: LIQUID ASSETS, ETC. EACH LINE CONTAINS A NUMBER (N) AND UP
  37. V TO
  38. X*        20 LOCATION NUMBERS. BIT N (WHERE 0 IS THE UNITS BIT) IS SET IN`20
  39. X*        COND(LOC) FOR EACH LOC GIVEN.  THE COND BITS CURRENTLY ASSIGNED ARE
  40. V: `20
  41. X*
  42. X*               0       LIGHT`20
  43. X*               1       IF BIT 2 IS ON: ON FOR OIL, OFF FOR WATER`20
  44. X*               2       LIQUID ASSET, SEE BIT 1`20
  45. X*               3       PIRATE DOESN'T GO HERE UNLESS FOLLOWING PLAYER
  46. X*
  47. X*        OTHER BITS ARE USED TO INDICATE AREAS OF INTEREST TO 'HINT' ROUTINE
  48. VS:`20
  49. X*
  50. X*               4       TRYING TO GET INTO CAVE`20
  51. X*               5       TRYING TO CATCH MONGOOS`20
  52. X*               6       TRYING TO DEAL WITH SNAKE`20
  53. X*               7       LOST IN MAZE
  54. X*               8       PONDERING DARK ROOM`20
  55. X*               9       AT WITT'S END`20
  56. X*
  57. X*        COND(LOC) IS SET TO 2, OVERRIDING ALL OTHER BITS, IF LOC HAS FORCED
  58. V`20
  59. X*        MOTION.`20
  60. X*
  61. X*
  62. X*     SECTION 9: CLASS MESSAGES.  EACH LINE CONTAINS A NUMBER (N), A TAB, AN
  63. VD A
  64. X*        MESSAGE DESCRIBING A CLASSIFICATION OF PLAYER.  THE SCORING SECTION
  65. V`20
  66. X*        SELECTS THE APPROPRIATE MESSAGE, WHERE EACH MESSAGE IS CONSIDERED T
  67. VO
  68. X*        APPLY TO PLAYERS WHOSE SCORES ARE HIGHER THAN THE PREVIOUS N BUT NO
  69. VT
  70. X*        HIGHER THAN THIS N.  NOTE THAT THESE SCORES PROBABLY CHANGE WITH EV
  71. VERY
  72. X*        MODIFICATION (AND PARTICULARLY EXPANSION) OF THE PROGRAM.`20
  73. X*    SECTION 10: HINTS.  EACH LINE CONTAINS A HINT NUMBER (CORRESPONDING TO
  74. V A`20
  75. X*        COND BIT, SEE SECTION 9), THE NUMBER OF TURNS HE MUST BE AT THE RIG
  76. VHT`20
  77. X*        LOC(S) BEFORE TRIGGERING THE HINT, THE POINTS DEDUCTED FOR TAKING T
  78. VHE`20
  79. X*        HINT, THE MESSAGE NUMBER (SECTION 6) OF THE QUESTION, AND THE MESSA
  80. VGE`20
  81. X*        NUMBER OF THE HINT.  THESE VALUES ARE STASHED IN THE 'HINTS' ARRAY.
  82. V`20
  83. X*        HNTMAX IS SET TO THE MAX HINT NUMBER (<= HNTSIZ).  NUMBERS 1-3 ARE
  84. X*        UNUSABLE SINCE COND BITS ARE OTHERWISE ASSIGNED, SO 2 IS USED TO
  85. X*        REMEMBER IF HE'S READ THE CLUE IN THE REPOSITORY, AND 3 IS USED TO
  86. X*        REMEMBER WHETHER HE ASKED FOR INSTRUCTIONS (GETS MORE TURNS, BUT LO
  87. VSES
  88. X*        POINTS).
  89. X*
  90. X*
  91. X*     SECTION 0: END OF DATABASE.
  92. X*`20
  93. X
  94. X
  95. X      WRITE(6,1000)`20
  96. X 1000 FORMAT(/,' Initializing...')
  97. X `20
  98. X***CLEAR OUT THE VARIOUS TEXT-POINTER ARRAYS.  ALL TEXT IS STORED IN ARRAY
  99. X*  LINES; EACH LINE IS PRECEDED BY A WORD POINTING TO THE NEXT POINTER (I.E.
  100. X*  THE WORD FOLLOWING THE END OF THE LINE). THE POINTER IS NEGATIVE IF THIS
  101. V IS
  102. X*  FIRST LINE OF A MESSAGE.  THE TEXT-POINTER ARRAYS CONTAIN INDICES OF`20
  103. X*  POINTER-WORDS IN LINES.  STEXT(N) IS SHORT DESCRIPTION OF LOCATION N.
  104. X*  LTEXT(N) IS LONG DESCRIPTION.  PTEXT(N) POINTS TO MESSAGE FOR PROP(N)=0.`
  105. V20
  106. X*  SUCCESSIVE PROP MESSAGES ARE FOUND BY CHASING POINTERS.  RTEXT CONTAINS
  107. X*  SECTION 6'S STUFF.CTEXT(N) POINTS TO A PLAYER-CLASS MESSAGE.  MTEXT IS FO
  108. VR`20
  109. X*  SECTION 12.  WE ALSO CLEAR COND.  SEE DESCRIPTION OF SECTION 9 FOR DETAIL
  110. VS`20
  111. X
  112. X      call image_dir (filedir)
  113. X
  114. X      open (Unit=1, err=201,
  115. X     +      file=filedir//'funadv.dat',
  116. X     +      carriagecontrol='none', status='old')
  117. X      goto 300
  118. X  201 WRITE(6,200)
  119. X  200 FORMAT(' Data base not found.'/' See program maintainer.')
  120. X  300 LIT=.FALSE.`20
  121. X      BLKLIN=.FALSE.
  122. X `20
  123. X      TABSIZ=400
  124. X      SETUP=1`20
  125. X      LINUSE=1
  126. X      TRVS=1
  127. X      CLSSES=1
  128. X `20
  129. X***START NEW DATA SECTION.  SECT IS THE SECTION NUMBER.`20
  130. X `20
  131. X 1002 READ(1,1003)SECT
  132. X 1003 FORMAT(I8)
  133. X      OLDLOC=-1`20
  134. X      SECT1=SECT+1
  135. X      IF(SECT1.LT.1.OR.SECT1.GT.11) CALL BUG(9)`20
  136. X      GOTO(1100,1004,1004,1030,1040,1004,1004,1060,1070,1004,1080),SECT1
  137. X*           (0)  (1)  (2)  (3)  (4)  (5)  (6)  (7)  (8)  (9)  (10)
  138. X `20
  139. X*  SECTIONS 1, 2, 5, 6, 9.  READ MESSAGES AND SET UP POINTERS.
  140. X `20
  141. X 1004 READ(1,1005)LOC,TEXT,INCHECK
  142. X 1005 FORMAT(1I8,80A,80A)
  143. X      IF(INCHECK.NE.' ') WRITE(6,310) LOC,TEXT
  144. X  310 FORMAT(' *Line is over 80 char. long* CALL BUG(0)',/,I8,80A)`20
  145. X      IF(LOC.EQ.-1)GOTO 1002
  146. X      DO 1006 LOOP=1,80
  147. X      KK=81-LOOP`20
  148. X      IF (TEXT(KK:KK).NE.' ')GOTO 1007
  149. X 1006 CONTINUE
  150. X      CALL BUG(1)`20
  151. X 1007 Lines(LINUSE).STRING = text
  152. X
  153. X 1008 CONTINUE
  154. X      KK=LINUSE+KK
  155. X      LINES(LINUSE).COUNT=linuse+1
  156. X      IF(LOC.EQ.OLDLOC)GOTO 1020
  157. X      LINES(LINUSE).COUNT=-linuse-1
  158. X      IF(SECT.EQ.9)GOTO 1012
  159. X      IF(SECT.EQ.6)GOTO 1011
  160. X      IF(SECT.EQ.5)GOTO 1010
  161. X      IF(SECT.EQ.1)GOTO 1009
  162. X `20
  163. X      STEXT(LOC)=LINUSE`20
  164. X      GOTO 1020`20
  165. X `20
  166. X 1009 LTEXT(LOC)=LINUSE`20
  167. X      GOTO 1020`20
  168. X `20
  169. X 1010 IF(LOC.GT.0.AND.LOC.LE.100)PTEXT(LOC)=LINUSE
  170. X      GOTO 1020`20
  171. X `20
  172. X 1011 IF(LOC.GT.RTXSIZ)CALL BUG(6)
  173. X      RTEXT(LOC)=LINUSE`20
  174. X      GOTO 1020`20
  175. X `20
  176. X 1012 CTEXT(CLSSES)=LINUSE
  177. X      CVAL(CLSSES)=LOC
  178. X      CLSSES=CLSSES+1`20
  179. X `20
  180. X 1020 LINUSE=LINUSE+1`20
  181. X      LINES(LINUSE).COUNT=-1
  182. X      OLDLOC=LOC
  183. X      IF(LINUSE+1.GT.LINSIZ)CALL BUG(2)
  184. X      GOTO 1004`20
  185. X `20
  186. X***THE STUFF FOR SECTION 3 IS ENCODED HERE.  EACH 'FROM-LOCATION' GETS A
  187. X*  CONTIGUOUS SECTION OF THE 'TRAVEL' ARRAY.  EACH ENTRY IN TRAVEL IS`20
  188. X*  NEWLOC*1000 + KEYWORD (FROM SECTION 4, MOTION VERBS), AND IS NEGATED IF
  189. X*  THIS IS THE LAST ENTRY FOR THIS LOCATION.  KEY(N) IS THE INDEX IN TRAVEL`
  190. V20
  191. X*  OF THE FIRST OPTION AT LOCATION N.`20
  192. X `20
  193. X 1030 READ(1,1031)LOC,NEWLOC,(TK(I),I=1,8)
  194. X 1031 FORMAT(10I8)
  195. X      IF(LOC.EQ.-1)GOTO 1002
  196. X      IF(KEY(LOC).NE.0)GOTO 1033
  197. X      KEY(LOC)=TRVS`20
  198. X      GOTO 1035`20
  199. X 1033 TRAVEL(TRVS-1)=-TRAVEL(TRVS-1)
  200. X 1035 DO 1037 LOOP=1,8
  201. X      IF(TK(LOOP).EQ.0)GOTO 1039
  202. X      TRAVEL(TRVS)=NEWLOC*1000+TK(LOOP)`20
  203. X      TRVS=TRVS+1`20
  204. X      IF(TRVS.EQ.TRVSIZ)CALL BUG(3)`20
  205. X 1037 CONTINUE
  206. X 1039 TRAVEL(TRVS-1)=-TRAVEL(TRVS-1)
  207. X      GOTO 1030`20
  208. X `20
  209. X***HERE WE READ IN THE VOCABULARY.  KTAB(N) IS THE WORD NUMBER, ATAB(N) IS
  210. X*  THE CORRESPONDING WORD.  THE -1 AT THE END OF SECTION 4 IS LEFT IN KTAB
  211. X*  AS AN END-MARKER.  THE WORDS ARE GIVEN A MINIMAL HASH TO MAKE READING THE
  212. X*  CORE-IMAGE HARDER.`20
  213. X `20
  214. X 1040 DO 1042 LOOP=1,TABSIZ`20
  215. X      TABNDX=LOOP`20
  216. X      READ(1,1041)KTAB(TABNDX),TEXT(1:10), J, K
  217. X 1041 FORMAT(I8,1A10,2I8)`20
  218. X      OBJ=KTAB(LOOP)
  219. X      IF(OBJ.EQ.-1)GOTO 1002
  220. X `20
  221. X***READ IN THE INITIAL LOCATIONS FOR EACH OBJECT.  ALSO THE IMMOVABILITY INF
  222. VO.
  223. X*  PLAC CONTAINS INITIAL LOCATIONS OF OBJECTS.  FIXD IS -1 FOR IMMOVABLE
  224. X*  OBJECTS (INCLUDING THE SNAKE), OR = SECOND LOC FOR TWO-PLACED OBJECTS.`20
  225. X `20
  226. X      IF((OBJ/1000) .NE. 1) GOTO 1042`20
  227. X      OBJ=OBJ-1000
  228. X      PLAC(OBJ)=J`20
  229. X      FIXD(OBJ)=K`20
  230. X 1042 ATAB(TABNDX) = text(1:10)
  231. X      CALL BUG(4)`20
  232. X `20
  233. X*  READ DEFAULT MESSAGE NUMBERS FOR ACTION VERBS, STORE IN ACTSPK.
  234. X `20
  235. X 1060 READ(1,1031)VERB,J
  236. X      IF(VERB.EQ.-1)GOTO 1002`20
  237. X      ACTSPK(VERB)=J
  238. X      GOTO 1060`20
  239. X `20
  240. X*  READ INFO ABOUT AVAILABLE LIQUIDS AND OTHER CONDITIONS, STORE IN COND.`20
  241. X `20
  242. X 1070 READ(1,1031)K,(TK(I),I=1,9)`20
  243. X      IF(K.EQ.-1)GOTO 1002
  244. X      DO 1071 LOOP=1,9
  245. X      LOC=TK(LOOP)
  246. X      IF(LOC.EQ.0)GOTO 1070`20
  247. X      IF(BITSET(LOC,K))CALL BUG(8)
  248. X 1071 COND(LOC)=COND(LOC)+SHIFT(1,K)
  249. X      GOTO 1070`20
  250. X `20
  251. X*  READ DATA FOR HINTS.`20
  252. X `20
  253. X 1080 HNTMAX=0
  254. X 1081 READ(1,1031)K,(TK(I),I=1,8)`20
  255. X      IF(K.EQ.-1)GOTO 1002
  256. X      IF(K.EQ.0)GOTO 1081`20
  257. X      IF(K.LT.0.OR.K.GT.HNTSIZ)CALL BUG(7)
  258. X      DO 1083 LOOP=1,4
  259. X 1083 HINTS(K,LOOP)=TK(LOOP)
  260. X      HNTMAX=MAX0(HNTMAX,K)`20
  261. X      GOTO 1081`20
  262. X***`20
  263. X*  FINISH CONSTRUCTING INTERNAL DATA FORMAT`20
  264. X*`20
  265. X*  IF SETUP=2 WE DON'T NEED TO DO THIS.  IT'S ONLY NECESSARY IF WE HAVEN'T
  266. X*  DONE IT AT ALL OR IF THE PROGRAM HAS BEEN RUN SINCE THEN.
  267. X 1100 close (1) `20
  268. X      IF(SETUP.EQ.2)GOTO 1
  269. X      IF(SETUP.NE.-1)GOTO 8305
  270. X      SETUP=3`20
  271. X      K=NULL
  272. X      GOTO 2900`20
  273. X `20
  274. X***HAVING READ IN THE DATABASE, CERTAIN THINGS ARE NOW CONSTRUCTED.  PROPS A
  275. VRE
  276. X*  SET TO ZERO.  WE FINISH SETTING UP COND BY CHECKING FOR FORCED-MOTION TRA
  277. VVEL`20
  278. X*  ENTRIES.  THE PLAC AND FIXD ARRAYS ARE USED TO SET UP ATLOC(N) AS THE FIR
  279. VST
  280. X*  OBJECT AT LOCATION N, AND LINK(OBJ) AS THE NEXT OBJECT AT THE SAME LOCATI
  281. VON
  282. X*  AS OBJ.  (OBJ>100 INDICATES THAT FIXED(OBJ-100)=LOC; LINK(OBJ) IS STILL T
  283. VHE
  284. X*  CORRECT LINK TO USE.)  ABB IS ZEROED; IT CONTROLS WHETHER THE ABBREVIATED
  285. X*  DESCRIPTION IS PRINTED.  COUNTS MOD 5 UNLESS 'LOOK' IS USED.`20
  286. X `20
  287. X 8305 DO 1102 LOOP=1,LOCSIZ`20
  288. X      IF(LTEXT(LOOP).EQ.0.OR.KEY(LOOP).EQ.0)GOTO 1102`20
  289. X      K=KEY(LOOP)`20
  290. X      IF(MOD(IABS(TRAVEL(K)),1000).EQ.1)COND(LOOP)=2
  291. X 1102 CONTINUE
  292. X `20
  293. X***SET UP THE ATLOC AND LINK ARRAYS AS DESCRIBED ABOVE.  WE'LL USE THE DROP`
  294. V20
  295. X*  SUBROUTINE, WHICH PREFACES NEW OBJECTS ON THE LISTS.  SINCE WE WANT THING
  296. VS`20
  297. X*  IN THE OTHER ORDER, WE'LL RUN THE LOOP BACKWARDS.  IF THE OBJECT IS IN TW
  298. VO`20
  299. X*  LOCS, WE DROP IT TWICE.  THIS ALSO SETS UP 'PLACE' AND 'FIXED' AS COPIES
  300. V OF
  301. X*  'PLAC' AND 'FIXD'.  ALSO, SINCE TWO-PLACED OBJECTS ARE TYPICALLY BEST
  302. X*  DESCRIBED LAST, WE'LL DROP THEM FIRST.`20
  303. X `20
  304. X      DO 1106 LOOP=1,100
  305. X      K=101-LOOP
  306. X      IF(FIXD(K).LE.0)GOTO 1106`20
  307. X      CALL DROP(K+100,FIXD(K))
  308. X      CALL DROP(K,PLAC(K))
  309. X 1106 CONTINUE
  310. X `20
  311. X      DO 1107 LOOP=1,100
  312. X      K=101-LOOP
  313. X      FIXED(K)=FIXD(K)
  314. X      IF(PLAC(K).NE.0.AND.FIXD(K).LE.0)CALL DROP(K,PLAC(K))`20
  315. X 1107 CONTINUE
  316. X `20
  317. X***CLEAR THE HINT STUFF.  HINTLC(I) IS HOW LONG HE'S BEEN AT LOC WITH COND B
  318. VIT
  319. X*  I.  HINTED(I) IS TRUE IFF HINT I HAS BEEN USED.
  320. X `20
  321. X      DO 1300 LOOP=1,HNTMAX`20
  322. X      HINTED(LOOP)=.FALSE.
  323. X 1300 CONTINUE
  324. X `20
  325. X*  DEFINE SOME HANDY MNEMONICS.  THESE CORRESPOND TO OBJECT NUMBERS.
  326. X `20
  327. X      KEYS=   VOCAB('KEYS      ',1)`20
  328. X      LAMP=   VOCAB('LAMP      ',1)`20
  329. X      GRATE=  VOCAB('GRATE     ',1)`20
  330. X      SACK=   VOCAB('SACK      ',1)`20
  331. X      ROD=    VOCAB('ROD       ',1)`20
  332. X      ROD2=   ROD+1`20
  333. X      STEPS=  VOCAB('STEPS     ',1)`20
  334. X      MONGOOS=VOCAB('MONGOOSE  ',1)`20
  335. X      DOOR=   VOCAB('DOOR      ',1)`20
  336. X      PILLOW= VOCAB('PILLOW    ',1)`20
  337. X      SNAKE=  VOCAB('SNAKE     ',1)`20
  338. X      FISSUR= VOCAB('FISSURE   ',1)`20
  339. X      TABLET= VOCAB('TABLET    ',1)`20
  340. X      CLAM=   VOCAB('CLAM      ',1)`20
  341. X      OYSTER= VOCAB('OYSTER    ',1)`20
  342. X      MAGZIN= VOCAB('MAGAZINES ',1)`20
  343. X      PIRATE= VOCAB('PIRATE    ',1)`20
  344. X      DWARF=  VOCAB('DWARF     ',1)`20
  345. X      KNIFE=  VOCAB('KNIFE     ',1)`20
  346. X      FOOD=   VOCAB('FOOD      ',1)`20
  347. X      BOTTLE= VOCAB('BOTTLE    ',1)`20
  348. X      WATER=  VOCAB('WATER     ',1)`20
  349. X      OIL=    VOCAB('OIL       ',1)`20
  350. X      PLANT=  VOCAB('PLANT     ',1)`20
  351. X      PLANT2= PLANT+1`20
  352. X      AXE=    VOCAB('AXE       ',1)`20
  353. X      MIRROR= VOCAB('MIRROR    ',1)`20
  354. X      DRAGON= VOCAB('DRAGON    ',1)`20
  355. X      CHASM=  VOCAB('CHASM     ',1)`20
  356. X      TROLL=  VOCAB('TROLL     ',1)`20
  357. X      TROLL2= TROLL+1`20
  358. X      BEAR=   VOCAB('BEAR      ',1)`20
  359. X      MESSAG= VOCAB('MESSAGE   ',1)`20
  360. X      VEND=   VOCAB('MACHINE   ',1)`20
  361. X      BATTER= VOCAB('BATTERIES ',1)`20
  362. X      RUNES=  VOCAB('RUNES     ',1)`20
  363. X      ROPE=   VOCAB('ROPE      ',1)`20
  364. X      COAL=   VOCAB('COAL      ',1)`20
  365. X      BOOK=   VOCAB('BOOK      ',1)`20
  366. X      FOUNTN= VOCAB('FOUNTAIN  ',1)`20
  367. X      POTION= VOCAB('POTION    ',1)`20
  368. X      SWITCH= VOCAB('SWITCH    ',1)`20
  369. X      SHIT=   VOCAB('SHIT      ',1)`20
  370. X      BOAT=   VOCAB('BOAT      ',1)`20
  371. X      TRAP=   VOCAB('TRAP      ',1)`20
  372. X      chair=  vocab('CHAIR     ',1)
  373. X `20
  374. X*  OBJECTS FROM TRSURE THROUGH WHATEVER ARE TREASURES.  HERE ARE A FEW.`20
  375. X `20
  376. X      NUGGET= VOCAB('GOLD      ',1)`20
  377. X      COINS=  VOCAB('COINS     ',1)`20
  378. X      CHEST=  VOCAB('CHEST     ',1)`20
  379. X      EGGS=   VOCAB('EGGS      ',1)`20
  380. X      TRIDNT= VOCAB('TRIDENT   ',1)`20
  381. X      VASE=   VOCAB('VASE      ',1)`20
  382. X      EMRALD= VOCAB('EMERALD   ',1)`20
  383. X      PYRAM=  VOCAB('PYRAMID   ',1)`20
  384. X      PEARL=  VOCAB('PEARL     ',1)`20
  385. X      RUG=    VOCAB('RUG       ',1)`20
  386. X      CHAIN=  VOCAB('CHAIN     ',1)`20
  387. X      SPICES= VOCAB('SPICES    ',1)`20
  388. X      MAIL=   VOCAB('MAIL      ',1)`20
  389. X      LISTING=VOCAB('LISTINGS  ',1)`20
  390. X      RING=   VOCAB('RING      ',1)`20
  391. X `20
  392. X*  THESE ARE MOTION-VERB NUMBERS.`20
  393. X `20
  394. X      BACK=   VOCAB('BACK      ',0)`20
  395. X      LOOK=   VOCAB('LOOK      ',0)`20
  396. X      CAVE=   VOCAB('CAVE      ',0)`20
  397. X      NULL=   VOCAB('NULL      ',0)`20
  398. X      ENTRNC= VOCAB('ENTRANCE  ',0)`20
  399. X      DPRSSN= VOCAB('DEPRE     ',0)`20
  400. X      GO2=    VOCAB('GOTO      ',0)`20
  401. X      SIT=    VOCAB('SIT       ',0)`20
  402. X `20
  403. X*  AND SOME ACTION VERBS.`20
  404. X `20
  405. X      SAY=    VOCAB('SAY       ',2)`20
  406. X      LOCK=   VOCAB('LOCK      ',2)`20
  407. X      THROW=  VOCAB('THROW     ',2)`20
  408. X      FIND=   VOCAB('FIND      ',2)`20
  409. X      INVENT= VOCAB('INVEN     ',2)`20
  410. X      SUSPND= VOCAB('SUSPE     ',2)`20
  411. X      ON=     VOCAB('ON        ',2)`20
  412. X      OFF=    VOCAB('OFF       ',2)`20
  413. X `20
  414. X***TREASURES, AS NOTED EARLIER, ARE OBJECTS TRSURE THROUGH MAXTRS (CURRENTLY
  415. V 79).`20
  416. X*  THEIR PROPS ARE INITIALLY -1, AND ARE SET TO 0 THE FIRST TIME THEY ARE`20
  417. X*  DESCRIBED.  TALLY KEEPS TRACK OF HOW MANY ARE NOT YET FOUND, SO WE KNOW
  418. X*  WHEN TO CLOSE THE CAVE.  TALLY2 COUNTS HOW MANY CAN NEVER BE FOUND (E.G.
  419. V IF
  420. X*  LOST MONGOOS OR BRIDGE).`20
  421. X `20
  422. X      TRSURE=NUGGET`20
  423. X      MAXTRS=RING`20
  424. X      TALLY=0`20
  425. X      TALLY2=0
  426. X      DO 1200 LOOP=TRSURE,MAXTRS
  427. X      IF(PTEXT(LOOP).NE.0)PROP(LOOP)=-1`20
  428. X      TALLY=TALLY-PROP(LOOP)
  429. X 1200 CONTINUE
  430. X `20
  431. X***PUT THE MONGOOSE IN THE SACK.
  432. X `20
  433. X      CALL CARRY(MONGOOS,PLAC(MONGOOS))`20
  434. X      PROP(MONGOOS)=1`20
  435. X      PROP(SACK)=1
  436. X      CALL DROP(MONGOOS,PLAC(SACK))`20
  437. X `20
  438. X***HIDE THE RING.`20
  439. X `20
  440. X      RINGLOC=PLAC(RING)
  441. X      CALL MOVE(RING,0)`20
  442. X      PLAC(RING)=0
  443. X `20
  444. X***INITIALIZE THE DWARVES.  DLOC IS LOC OF DWARVES, HARD-WIRED IN.  ODLOC IS
  445. X*  PRIOR LOC OF EACH DWARF, INITIALLY GARBAGE.  DALTLC IS ALTERNATE INITIAL
  446. V LOC`20
  447. X*  FOR DWARF, IN CASE ONE OF THEM STARTS OUT ON TOP OF THE ADVENTURER.  (NO
  448. V TWO`20
  449. X*  OF THE 7 INITIAL LOCS ARE ADJACENT.)  DSEEN IS TRUE IF DWARF HAS SEEN HIM
  450. V.`20
  451. X*  DFLAG CONTROLS THE LEVEL OF ACTIVATION OF ALL THIS: `20
  452. X*       0       NO DWARF STUFF YET (WAIT UNTIL REACHES HALL OF MISTS)`20
  453. X*       1       REACHED HALL OF MISTS, BUT HASN'T MET FIRST DWARF`20
  454. X*       2       MET FIRST DWARF, OTHERS START MOVING, NO KNIVES THROWN YET
  455. X*       3       A KNIFE HAS BEEN THROWN (FIRST SET ALWAYS MISSES)`20
  456. X*       3+      DWARVES ARE MAD (INCREASES THEIR ACCURACY)
  457. X*  EIGHTH DWARF IS SPECIAL (THE PIRATE).  HE ALWAYS STARTS AT HIS CHEST'S`20
  458. X*  EVENTUAL LOCATION INSIDE THE MAZE.  THIS LOC IS SAVED IN CHLOC FOR REF.
  459. X*  THE DEAD END IN THE OTHER MAZE HAS ITS LOC STORED IN CHLOC2.`20
  460. X `20
  461. X      CHLOC=PLAC(CHEST)`20
  462. X      CALL MOVE(CHEST,0)
  463. X      PLAC(CHEST)=0`20
  464. X      CHLOC2=PLAC(VEND)`20
  465. X      DO 1700 LOOP=1,8
  466. X 1700 DSEEN(LOOP)=.FALSE.`20
  467. X      DFLAG=0`20
  468. X      MISTS = 24
  469. X      DLOC(1)=MISTS`20
  470. X      DLOC(2)=31
  471. X      DLOC(3)=42
  472. X      DLOC(4)=50
  473. X      DLOC(5)=53
  474. X      DLOC(6)=65
  475. X      DLOC(7)=113`20
  476. X      DLOC(8)=CHLOC`20
  477. X      DALTLC=97`20
  478. X `20
  479. X***OTHER RANDOM FLAGS AND COUNTERS, AS FOLLOWS:`20
  480. X*       TURNS   TALLIES HOW MANY COMMANDS HE'S GIVEN (IGNORES YES/NO)`20
  481. X*       LIMIT   LIFETIME OF LAMP (NOT SET HERE)`20
  482. X*       IWEST   HOW MANY TIMES HE'S SAID 'WEST' INSTEAD OF 'W'
  483. X*       KNFLOC  0 IF NO KNIFE HERE, LOC IF KNIFE HERE, -1 AFTER CAVEAT
  484. X*       DETAIL  HOW OFTEN WE'VE SAID 'NOT ALLOWED TO GIVE MORE DETAIL'
  485. X*       ABBNUM  HOW OFTEN WE SHOULD PRINT NON-ABBREVIATED DESCRIPTIONS
  486. X*       MAXDIE  NUMBER OF REINCARNATION MESSAGES AVAILABLE (UP TO 5)
  487. X*       NUMDIE  NUMBER OF TIMES KILLED SO FAR`20
  488. X*       HOLDNG  NUMBER OF OBJECTS BEING CARRIED`20
  489. X*       DKILL   NUMBER OF DWARVES KILLED (UNUSED IN SCORING, NEEDED FOR MSG)
  490. X*       FOOBAR  CURRENT PROGRESS IN SAYING 'FEE FIE FOE FOO'.`20
  491. X*       BONUS   USED TO DETERMINE AMOUNT OF BONUS IF HE REACHES CLOSING`20
  492. X*       CLOCK1  NUMBER OF TURNS FROM FINDING LAST TREASURE TILL CLOSING`20
  493. X*       CLOCK2  NUMBER OF TURNS FROM FIRST WARNING TILL BLINDING FLASH
  494. X*`20
  495. X*  WZDARK SAYS WHETHER THE LOC HE'S LEAVING WAS DARK
  496. X*  LMWARN SAYS WHETHER HE'S BEEN WARNED ABOUT LAMP GOING DIM
  497. X*  CLOSNG SAYS WHETHER ITS CLOSING TIME YET`20
  498. X*  PANIC SAYS WHETHER HE'S FOUND OUT HE'S TRAPPED IN THE CAVE`20
  499. X*  CLOSED SAYS WHETHER WE'RE ALL THE WAY CLOSED`20
  500. X*  GAVEUP SAYS WHETHER HE EXITED VIA 'QUIT'`20
  501. X*  SCORNG INDICATES TO THE SCORE ROUTINE WHETHER WE'RE DOING A 'SCORE' COMMA
  502. VND
  503. X*  BFULL INDICATES WEITHER HIS BLADDER IS FULL.`20
  504. X*  LOOSE TELLS IF THE MONGOOSE IS LOOSE.
  505. X `20
  506. X      TURNS=0`20
  507. X      IWEST=0`20
  508. X      KNFLOC=0
  509. X      DETAIL=0
  510. X      ABBNUM=5
  511. X      WCOUNT=0
  512. X      MAXDIE=10`20
  513. X      NUMDIE=0
  514. X      HOLDNG=0
  515. X      HLDMAX=7
  516. X      DKILL=0`20
  517. X      FOOBAR=0
  518. X      BONUS=0`20
  519. X      CLOCK1=40`20
  520. X      CLOCK2=50`20
  521. X      SAVED=0`20
  522. X      WAITNG=9999999
  523. X      OOPS=9999999
  524. X      LMWARN=.FALSE.
  525. X      CLOSNG=.FALSE.
  526. X      PANIC=.FALSE.`20
  527. X      CLOSED=.FALSE.
  528. X      GAVEUP=.FALSE.
  529. X      SCORNG=.FALSE.
  530. X      BFULL=.FALSE.`20
  531. X      LOOSE=.FALSE.`20
  532. X      ROW=.FALSE.`20
  533. X      YESCALL=.FALSE.`20
  534. X `20
  535. X***IF SETUP=1, REPORT ON AMOUNT OF ARRAYS ACTUALLY USED, TO PERMIT REDUCTION
  536. VS.
  537. X `20
  538. X      IF(SETUP.NE.1)GOTO 19990
  539. X      SETUP=2`20
  540. X `20
  541. X      DO 1998 LOOP=1,LOCSIZ`20
  542. X      KK=LOCSIZ+1-LOOP
  543. X      IF(LTEXT(KK).NE.0)GOTO 1997`20
  544. X 1998 CONTINUE
  545. X `20
  546. X      OBJ=0`20
  547. X 1997 DO 1996 LOOP=1,100
  548. X 1996 IF(PTEXT(LOOP).NE.0)OBJ=OBJ+1`20
  549. X `20
  550. X      DO 1995 LOOP=1,TABNDX`20
  551. X 1995 IF(KTAB(LOOP)/1000.EQ.2)VERB=KTAB(LOOP)-2000
  552. X `20
  553. X      DO 1994 LOOP=1,RTXSIZ`20
  554. X      J=RTXSIZ+1-LOOP`20
  555. X      IF(RTEXT(J).NE.0)GOTO 1991
  556. X 1994 CONTINUE
  557. X `20
  558. X 1991 K=100`20
  559. X      WRITE(6,1999)LINUSE,LINSIZ,TRVS,TRVSIZ,TABNDX,TABSIZ,KK`20
  560. X     $,LOCSIZ,OBJ,K,VERB,VRBSIZ,J,RTXSIZ,CLSSES,CLSMAX
  561. X     $,HNTMAX,HNTSIZ
  562. X 1999 FORMAT (' Table space used:',/
  563. X     $' ',I6,' OF ',I6,' Lines of messages',/`20
  564. X     $' ',I6,' OF ',I6,' Travel options',/
  565. X     $' ',I6,' OF ',I6,' Vocabulary words',/
  566. X     $' ',I6,' OF ',I6,' Locations',/`20
  567. X     $' ',I6,' OF ',I6,' Objects',/`20
  568. X     $' ',I6,' OF ',I6,' Action verbs',/
  569. X     $' ',I6,' OF ',I6,' Rtext messages',/
  570. X     $' ',I6,' OF ',I6,' Class messages',/
  571. X     $' ',I6,' OF ',I6,' Hints')
  572. X `20
  573. X***FINALLY, SINCE WE'RE CLEARLY SETTING THINGS UP FOR THE FIRST TIME...`20
  574. X `20
  575. X19990 CONTINUE
  576. X `20
  577. X**
  578. X*      MAKE SURE HE DOESN'T TERMINATE ACCIDENTALLY.`20
  579. X*`20
  580. X      WRITE(6,19991)
  581. X19991 FORMAT(' Initialization completed.')
  582. X `20
  583. X***START-UP`20
  584. X*`20
  585. X    1 seed = ifix (secnds (0.0))
  586. X!CALL RANSET(SECOND(I))
  587. X      I=random(1)
  588. X      WIZKID=WIZARD(0)
  589. X      IF(.NOT.WIZKID) HINTED(3)=YES(65,1,0,WCOUNT)
  590. X      NEWLOC=1
  591. X      SETUP=3`20
  592. X      LIMIT=400`20
  593. X      IF(HINTED(3))LIMIT=1000`20
  594. X `20
  595. X***CAN'T LEAVE CAVE ONCE IT'S CLOSING (EXCEPT BY MAIN OFFICE).
  596. X `20
  597. X    2 IF(NEWLOC.GE.13.OR.NEWLOC.EQ.0.OR..NOT.CLOSNG)GOTO 71`20
  598. X      CALL RSPEAK(130)
  599. X      NEWLOC=LOC
  600. X      IF(.NOT.PANIC)CLOCK2=15`20
  601. X      PANIC=.TRUE.
  602. X `20
  603. X***                      *******************
  604. X*                        ***** DWARVES *****
  605. X*                        *******************
  606. X*`20
  607. X*  SEE IF A DWARF HAS SEEN HIM AND HAS COME FROM WHERE HE WANTS TO GO.  IF S
  608. VO,
  609. X*  THE DWARF'S BLOCKING HIS WAY.  IF COMING FROM PLACE FORBIDDEN TO PIRATE
  610. X*  (DWARVES ROOTED IN PLACE) LET HIM GET OUT (AND ATTACKED).
  611. X `20
  612. X   71 IF(NEWLOC.EQ.LOC.OR.FORCED(LOC).OR.BITSET(LOC,3))GOTO 74
  613. X      DO 73 LOOP=1,7
  614. X      IF(ODLOC(LOOP).NE.NEWLOC.OR..NOT.DSEEN(LOOP))GOTO 73
  615. X      NEWLOC=LOC
  616. X      CALL RSPEAK(2)
  617. X      GOTO 74`20
  618. X   73 CONTINUE
  619. X   74 LOC=NEWLOC
  620. X `20
  621. X***DWARF STUFF.  SEE EARLIER COMMENTS FOR DESCRIPTION OF VARIABLES.  REMEMBE
  622. VR`20
  623. X*  EIGHTH DWARF IS PIRATE AND IS THUS VERY DIFFERENT EXCEPT FOR MOTION RUN.`
  624. V20
  625. X*`20
  626. X*  FIRST OFF, DON'T LET THE DWARVES FOLLOW HIM INTO A PIT OR A WALL.  ACTIVA
  627. VTE
  628. X*  THE WHOLE MESS THE FIRST TIME HE GETS AS FAR AS THE HALL OF MISTS.`20
  629. X*  IF NEWLOC IS FORBIDDEN TO PIRATE (IN PARTICULAR, IF IT'S BEYOND THE TROLL
  630. X*  BRIDGE), BYPASS DWARF STUFF.  THAT WAY PIRATE CAN'T STEAL RETURN TOLL AND
  631. X*  DWARVES CAN'T MEET THE BEAR.  ALSO MEANS DWARVES WON'T FOLLOW HIM INTO DE
  632. VAD
  633. X*  END IN MAZE, BUT C'EST LA VIE.  THEY'LL WAIT FOR HIM OUTSIDE THE DEAD END
  634. V.`20
  635. X `20
  636. X      IF(LOC.EQ.0.OR.FORCED(LOC).OR.BITSET(NEWLOC,3))GOTO 2000
  637. X      IF(DFLAG.NE.0)GOTO 6000`20
  638. X      IF(LOC.GE.MISTS)DFLAG=1`20
  639. X      GOTO 2000`20
  640. X `20
  641. X***WHEN WE ENCOUNTER THE FIRST DWARF, WE KILL 0, 1, OR 2 OF THE 5 DWARVES. I
  642. VF`20
  643. X*  ANY OF THE SURVIVORS IS AT LOC, REPLACE HIM WITH THE ALTERNATE.
  644. X `20
  645. X 6000 IF(DFLAG.NE.1)GOTO 6010`20
  646. X      IF(LOC.LT.MISTS.OR.PCT(95))GOTO 2000
  647. X      DFLAG=2`20
  648. X      DO 6001 LOOP=1,2
  649. X      J=1+random(5)
  650. X `20
  651. X*  IF SAVED NOT = -1, HE BYPASSED THE 'START' CALL.`20
  652. X `20
  653. X      IF(PCT(50).AND.SAVED.EQ.-1)DLOC(J)=0
  654. X 6001 CONTINUE
  655. X      DO 6002 LOOP=1,7
  656. X      IF(DLOC(LOOP).EQ.LOC)DLOC(LOOP)=DALTLC
  657. X 6002 ODLOC(LOOP)=DLOC(LOOP)
  658. X      CALL RSPEAK(3)
  659. X      CALL DROP(AXE,LOC)
  660. X      GOTO 2000`20
  661. X `20
  662. X***THINGS ARE IN FULL SWING.  MOVE EACH DWARF AT RANDOM, EXCEPT IF HE'S BEEN
  663. V SEEN`20
  664. X*  HE STICKS WITH US.  DWARVES NEVER GO TO LOCS <MISTS.  IF WANDERING AT RAN
  665. VDOM`20
  666. X*  THEY DON'T BACK UP UNLESS THERE'S NO ALTERNATIVE.  IF THEY DON'T HAVE TO`
  667. V20
  668. X*  MOVE, THEY ATTACK.  AND, OF COURSE, DEAD DWARVES DON'T DO MUCH OF ANYTHIN
  669. VG.
  670. X `20
  671. X 6010 DTOTAL=0
  672. X      ATTACK=0
  673. X      STICK=0`20
  674. X      DO 6030 LOOP=1,8
  675. X      IF(DLOC(LOOP).EQ.0)GOTO 6030
  676. X      J=1`20
  677. X      KK=DLOC(LOOP)`20
  678. X      KK=KEY(KK)
  679. X      IF(KK.EQ.0)GOTO 6016
  680. X 6012 NEWLOC=MOD(IABS(TRAVEL(KK))/1000,1000)
  681. X      IF(NEWLOC.GT.300.OR.NEWLOC.LT.MISTS.OR.NEWLOC.EQ.ODLOC(LOOP)
  682. X     $.OR.(J.GT.1.AND.NEWLOC.EQ.TK(J-1)).OR.J.GE.20`20
  683. X     $.OR.NEWLOC.EQ.DLOC(LOOP).OR.FORCED(NEWLOC)
  684. X     $.OR.(LOOP.EQ.8.AND.BITSET(NEWLOC,3))
  685. X     $.OR.IABS(TRAVEL(KK))/1000000.EQ.100)GOTO 6014`20
  686. X      TK(J)=NEWLOC
  687. X      J=J+1`20
  688. X 6014 KK=KK+1`20
  689. X      IF(TRAVEL(KK-1).GE.0)GOTO 6012
  690. X 6016 TK(J)=ODLOC(LOOP)`20
  691. X      IF(J.GE.2)J=J-1`20
  692. X      J=1+random(J)
  693. X      ODLOC(LOOP)=DLOC(LOOP)
  694. X      DLOC(LOOP)=TK(J)
  695. X      DSEEN(LOOP)=(DSEEN(LOOP).AND.LOC.GE.MISTS)
  696. X     $.OR.(DLOC(LOOP).EQ.LOC.OR.ODLOC(LOOP).EQ.LOC)`20
  697. X      IF(.NOT.DSEEN(LOOP))GOTO 6030`20
  698. X      DLOC(LOOP)=LOC
  699. X      IF(LOOP.NE.8)GOTO 6027
  700. X `20
  701. X***THE PIRATE'S SPOTTED HIM.  HE LEAVES HIM ALONE ONCE WE'VE FOUND CHEST.`20
  702. X*  K COUNTS IF A TREASURE IS HERE.  IF NOT, AND TALLY=TALLY2 PLUS ONE FOR`20
  703. X*  AN UNSEEN CHEST, LET THE PIRATE BE SPOTTED.
  704. X `20
  705. X      IF(LOC.EQ.CHLOC.OR.PROP(CHEST).GE.0)GOTO 6030`20
  706. X      K=0`20
  707. X      DO 6020 LOOP2=TRSURE,MAXTRS`20
  708. X `20
  709. X***PIRATE WON'T TAKE PYRAMID FROM PLOVER ROOM OR DARK ROOM (TOO EASY!).`20
  710. X `20
  711. X      IF(LOOP2.EQ.PYRAM.AND.(LOC.EQ.PLAC(PYRAM)`20
  712. X     $.OR.LOC.EQ.PLAC(EMRALD)))GOTO 6020
  713. X      IF (LOOP2.EQ.RING.OR.LOOP2.EQ.MAIL) GOTO 6020`20
  714. X      IF(TOTING(LOOP2))GOTO 6022
  715. X 6020 IF(HERE(LOOP2))K=1
  716. X      IF(TALLY.EQ.TALLY2+1.AND.K.EQ.0.AND.PLACE(CHEST).EQ.0`20
  717. X     $.AND.HERE(LAMP).AND.PROP(LAMP).EQ.1)GOTO 6025`20
  718. X      IF(ODLOC(8).NE.DLOC(8).AND.PCT(20))CALL RSPEAK(127)`20
  719. X      GOTO 6030`20
  720. X `20
  721. X 6022 CALL RSPEAK(128)
  722. X `20
  723. X***DON'T STEAL CHEST BACK FROM TROLL!`20
  724. X `20
  725. X      IF(PLACE(MESSAG).EQ.0)CALL MOVE(CHEST,CHLOC)
  726. X      CALL MOVE(MESSAG,CHLOC2)
  727. X      DO 6023 LOOP2=TRSURE,MAXTRS`20
  728. X      IF(LOOP2.EQ.PYRAM.AND.(LOC.EQ.PLAC(PYRAM)`20
  729. X     $.OR.LOC.EQ.PLAC(EMRALD)))GOTO 6023
  730. X      IF (LOOP2.EQ.RING.OR.LOOP2.EQ.MAIL) GOTO 6023`20
  731. X      IF(AT(LOOP2).AND.FIXED(LOOP2).EQ.0)CALL CARRY(LOOP2,LOC)
  732. X      IF(TOTING(LOOP2))CALL DROP(LOOP2,CHLOC)`20
  733. X 6023 CONTINUE
  734. X 6024 DLOC(8)=CHLOC`20
  735. X      ODLOC(8)=CHLOC
  736. X      DSEEN(8)=.FALSE.
  737. X      GOTO 6030`20
  738. X `20
  739. X 6025 CALL RSPEAK(186)
  740. X      CALL MOVE(CHEST,CHLOC)
  741. X      CALL MOVE(MESSAG,CHLOC2)
  742. X      GOTO 6024`20
  743. X `20
  744. X***THIS THREATENING LITTLE DWARF IS IN THE ROOM WITH HIM!`20
  745. X `20
  746. X 6027 DTOTAL=DTOTAL+1`20
  747. X      IF(ODLOC(LOOP).NE.DLOC(LOOP))GOTO 6030
  748. X      ATTACK=ATTACK+1`20
  749. X      IF(KNFLOC.GE.0)KNFLOC=LOC`20
  750. X `20
  751. X***IF A DWARF GETS HIM, THE DWARF RUNS AWAY.
  752. X `20
  753. X      IF(random(1000).GE.95*(DFLAG-2)) GOTO 6030`20
  754. X      STICK=STICK+1`20
  755. X      DLOC(LOOP)=random(8)+MISTS`20
  756. X      IF(WIZKID) DLOC(LOOP)=0`20
  757. X 6030 CONTINUE
  758. X `20
  759. X***NOW WE KNOW WHAT'S HAPPENING.  LET'S TELL THE POOR SUCKER ABOUT IT.
  760. X `20
  761. X      IF(DTOTAL.EQ.0)GOTO 2000
  762. X      IF(DTOTAL.EQ.1)GOTO 75
  763. X      WRITE(6,67)DTOTAL`20
  764. X   67 FORMAT(/,' There are ',I1,' threatening little dwarves in the'
  765. X     $,' room with you.')`20
  766. X      GOTO 77`20
  767. X   75 CALL RSPEAK(4)
  768. X   77 IF(ATTACK.EQ.0)GOTO 2000
  769. X      IF(DFLAG.EQ.2)DFLAG=3`20
  770. X `20
  771. X***IF SAVED NOT = -1, HE BYPASSED THE 'START' CALL.  DWARVES GET *VERY* MAD.
  772. X `20
  773. X      IF(SAVED.NE.-1)DFLAG=20`20
  774. X      IF(ATTACK.EQ.1)GOTO 79
  775. X      WRITE(6,78)ATTACK`20
  776. X   78 FORMAT(/,' ',I1,' of them throw knives at you!')
  777. X      K=6`20
  778. X   82 IF (WIZKID) GOTO 88`20
  779. X      IF(WEARING(1).OR.WEARING(2)) STICK=0
  780. X      IF(STICK.GT.1)GOTO 83`20
  781. X      CALL RSPEAK(K+STICK)
  782. X      IF(STICK.EQ.0)GOTO 2000`20
  783. X      GOTO 84`20
  784. X   83 WRITE(6,68)STICK
  785. X   68 FORMAT(/,' ',I1,' of them get you!')
  786. X   84 OLDLC2=LOC
  787. X      GOTO 99`20
  788. X `20
  789. X   88 IF(STICK .NE. 0) WRITE(6,89) STICK
  790. X   89 FORMAT(/' ',I2,' of the dwarves just died for attacking',
  791. X     $' a wizard!')
  792. X      GOTO 2000`20
  793. X `20
  794. X   79 CALL RSPEAK(5)
  795. X      K=52
  796. X      GOTO 82`20
  797. X***                      *******************
  798. X*                        ***** REPEAT ******
  799. X*                        *******************
  800. X*`20
  801. X*  DESCRIBE THE CURRENT LOCATION AND (MAYBE) GET NEXT COMMAND.
  802. X*`20
  803. X*  PRINT TEXT FOR CURRENT LOC.
  804. X `20
  805. X 2000 IF(LOC.EQ.0)GOTO 99`20
  806. X      IF(ROW) CALL MOVE(BOAT,LOC)`20
  807. X      ROW=.FALSE.`20
  808. X      KK=STEXT(LOC)`20
  809. X      IF(MOD(ABB(LOC),ABBNUM).EQ.0.OR.KK.EQ.0)KK=LTEXT(LOC)`20
  810. X      IF(FORCED(LOC).OR..NOT.DARK(0))GOTO 2001
  811. X      IF(WZDARK.AND.PCT(35))GOTO 90`20
  812. X      KK=RTEXT(16)
  813. X 2001 IF(TOTING(BEAR))CALL RSPEAK(141)
  814. X      CALL SPEAK(KK)
  815. X      K=1`20
  816. X      IF(FORCED(LOC))GOTO 3000
  817. X      IF(LOC.EQ.42.AND.DARK(0).AND..NOT.CLOSNG)CALL RSPEAK(8)`20
  818. X `20
  819. X***PRINT OUT DESCRIPTIONS OF OBJECTS AT THIS LOCATION.  IF NOT CLOSING AND
  820. X*  PROPERTY VALUE IS NEGATIVE, TALLY OFF ANOTHER TREASURE.  RUG IS SPECIAL
  821. X*  CASE; ONCE SEEN, ITS PROP IS 1 (DRAGON ON IT) TILL DRAGON IS KILLED.`20
  822. X*  SIMILARLY FOR CHAIN; PROP IS INITIALLY 1 (LOCKED TO BEAR).  THESE HACKS
  823. X*  ARE BECAUSE PROP=0 IS NEEDED TO GET FULL SCORE.
  824. X `20
  825. X      IF(DARK(0))GOTO 2012
  826. X      ABB(LOC)=ABB(LOC)+1`20
  827. X      I=ATLOC(LOC)
  828. X 2004 IF(I.EQ.0)GOTO 2012`20
  829. X      OBJ=I`20
  830. X      IF(OBJ.GT.100)OBJ=OBJ-100`20
  831. X      IF(OBJ.EQ.STEPS.AND.TOTING(NUGGET))GOTO 2008
  832. X      IF(PROP(OBJ).GE.0)GOTO 2006`20
  833. X      IF(CLOSED)GOTO 2008`20
  834. X      PROP(OBJ)=0`20
  835. X      IF(OBJ.EQ.RUG.OR.OBJ.EQ.CHAIN)PROP(OBJ)=1`20
  836. X      TALLY=TALLY-1`20
  837. X `20
  838. X*  IF REMAINING TREASURES TOO ELUSIVE, ZAP HIS LAMP.
  839. X `20
  840. X      IF(TALLY.EQ.TALLY2.AND.TALLY.NE.0)LIMIT=MIN0(35,LIMIT)
  841. X 2006 KK=PROP(OBJ)
  842. X      IF(OBJ.EQ.STEPS.AND.LOC.EQ.FIXED(STEPS))KK=1
  843. X      CALL PSPEAK(OBJ,KK)`20
  844. X 2008 I=LINK(I)`20
  845. X      GOTO 2004`20
  846. X `20
  847. X 2009 K=54
  848. X 2010 SPK=K`20
  849. X 2011 CALL RSPEAK(SPK)
  850. X 2012 VERB=0
  851. X      OBJ=0`20
  852. X `20
  853. X***MOVE MONGOOSE IF HE'S LOOSE.`20
  854. X `20
  855. X      IF(.NOT.LOOSE) GOTO 2600
  856. X 2550 IF(PLACE(TRAP).NE.PLACE(MONGOOS)) GOTO 2525`20
  857. X      LOOSE=.FALSE.`20
  858. X      IF(LOC.EQ.PLACE(TRAP)) CALL RSPEAK(229)`20
  859. X      PROP(MONGOOS)=1`20
  860. X      PROP(TRAP)=1
  861. X      GOTO 2600`20
  862. X 2525 CALL MOVE(MONGOOS,(random(18)+15))`20
  863. X      IF(.NOT.HERE(MONGOOS)) GOTO 2600
  864. X      CALL RSPEAK(60)`20
  865. X `20
  866. X***THE QUICK MONGOOSE RUNS AWAY...     90% OF THE TIME.`20
  867. X `20
  868. X 2500 IF(PCT(10)) GOTO 2550`20
  869. X      CALL MOVE(MONGOOS,(random(18)+15))`20
  870. X      CALL RSPEAK(61)`20
  871. X `20
  872. X***CHECK IF THIS LOC IS ELIGIBLE FOR ANY HINTS.  IF BEEN HERE LONG ENOUGH`20
  873. X*  BRANCH TO HELP SECTION (ON LATER PAGE).  HINTS ALL COME BACK HERE EVERY T
  874. VIME`20
  875. X*  TO FINISH THE LOOP.  IGNORE 'HINTS' < 4 (SPECIAL STUFF, SEE DATABASE DESC
  876. VRIPTION)
  877. X `20
  878. X 2600 DO 2601 LOOP=4,HNTMAX`20
  879. X      HINT=LOOP`20
  880. X      IF(HINTED(HINT))GOTO 2602`20
  881. X      IF(.NOT.BITSET(LOC,HINT))HINTLC(HINT)=-1
  882. X      HINTLC(HINT)=HINTLC(HINT)+1`20
  883. X      IF(HINTLC(HINT).GE.HINTS(HINT,1))GOTO 40000`20
  884. X 2601 CONTINUE
  885. X 2602 CONTINUE
  886. X `20
  887. X***KICK THE RANDOM NUMBER GENERATOR JUST TO ADD VARIETY TO THE CHASE.  AND
  888. X*  IF CLOSING TIME, CHECK FOR ANY OBJECTS BEING TOTED WITH PROP < 0 AND SET`
  889. V20
  890. X*  THE PROP TO -1-PROP.  THIS WAY OBJECTS WON'T BE DESCRIBED UNTIL THEY'VE
  891. X*  BEEN PICKED UP AND PUT DOWN SEPARATE FROM THEIR RESPECTIVE PILES.  DON'T`
  892. V20
  893. X*  TICK CLOCK1 UNLESS WELL INTO CAVE (AND NOT AT Y2).`20
  894. X `20
  895. X      IF(.NOT.CLOSED)GOTO 2605
  896. X      IF(PROP(OYSTER).LT.0.AND.TOTING(OYSTER))
  897. X     $CALL PSPEAK(OYSTER,1)`20
  898. X      DO 2604 LOOP=1,100
  899. X 2604 IF(TOTING(LOOP).AND.PROP(LOOP).LT.0)PROP(LOOP)=-1-PROP(LOOP)
  900. X 2605 WZDARK=DARK(0)
  901. X      IF(KNFLOC.GT.0.AND.KNFLOC.NE.LOC)KNFLOC=0`20
  902. X      I=random(1)
  903. X      CALL GETIN(WD1,WD2,WCOUNT)
  904. X***EVERY INPUT, CHECK 'FOOBAR' FLAG.  IF ZERO, NOTHING'S GOING ON.  IF POS
  905. X*  MAKE NEG.  IF NEG, HE SKIPPED A WORD, SO MAKE IT ZERO.`20
  906. X `20
  907. X 2608 FOOBAR=MIN0(0,-FOOBAR)
  908. X `20
  909. X***THIS IS WHERE RESTORE WOULD COME, IF IT WAS WORKING.`20
  910. X      IF(TURNS.EQ.0.AND.WD1.EQ.'RESTORE   ')GOTO 8400`20
  911. X `20
  912. X 2606 TURNS=TURNS+1`20
  913. X `20
  914. X      IF(TURNS.LT.WAITNG) GOTO 2607`20
  915. X      IF(TURNS.LT.OOPS) CALL RSPEAK(220)
  916. X      IF(TURNS.LT.OOPS) GOTO 2607`20
  917. X      CALL RSPEAK(221)
  918. X      BFULL=.FALSE.`20
  919. X      WAITNG=9999999
  920. X      OOPS=9999999
  921. X 2607 IF(TURNS.EQ.3) XXM=MINPMID(0)`20
  922. X      IF(TURNS.NE.45)GOTO 2609
  923. X `20
  924. X***CHECK IF PLAYER HAS ZAPPED TIMING ROUTINE;  IF SO, HE'S CHEATING.
  925. X `20
  926. X      YYM=MINPMID(0)
  927. X      IF(XXM.EQ.YYM) SAVED=0
  928. X `20
  929. X 2609 IF(VERB.EQ.SAY.AND.WD2.NE.' ')VERB=0
  930. X      IF(VERB.EQ.SAY)GOTO 4090
  931. X      IF(TALLY.EQ.0.AND.LOC.GE.MISTS.AND.LOC.NE.42)CLOCK1=CLOCK1-1
  932. X      IF(CLOCK1.EQ.0)GOTO 10000`20
  933. X      IF(CLOCK1.LT.0)CLOCK2=CLOCK2-1
  934. X      IF(CLOCK2.EQ.0)GOTO 11000`20
  935. X      IF(PROP(LAMP).EQ.1)LIMIT=LIMIT-1
  936. X      IF(LIMIT.LE.30.AND.HERE(BATTER).AND.PROP(BATTER).EQ.0`20
  937. X     $.AND.HERE(LAMP))GOTO 12000
  938. X      IF(LIMIT.EQ.0)GOTO 12400
  939. X      IF(LIMIT.LT.0.AND.LOC.LE.8)GOTO 12600`20
  940. X      IF(LIMIT.LE.30)GOTO 12200`20
  941. X19999 IF(WD1.EQ.'ENTER     '.AND.
  942. X     $  (WD2.EQ.'STREAM    '.OR.WD2.EQ.'WATER     '.OR.
  943. X     $   WD2.EQ.'RIVER     ')) WD1='SWIM      '
  944. X      IF(WD1.EQ.'ENTER     '.AND.WD2.NE.' ')GOTO 2800`20
  945. X      IF((WD1.NE.'WATER     '.AND.WD1.NE.'OIL       ')
  946. X     $.OR.(WD2.NE.'PLANT     '.AND.WD2.NE.'DOOR      ')) GOTO 2610`20
  947. X      IF(AT(VOCAB(WD2,1)))WD2='POUR      '
  948. X 2610 IF(WD1.NE.'WEST      ')GOTO 2630
  949. X      IWEST=IWEST+1`20
  950. X      IF(IWEST.EQ.10)CALL RSPEAK(17)
  951. X 2630 I=VOCAB(WD1,-1)`20
  952. X      text (1:10) = wd1
  953. X      IF(I.EQ.-1)GOTO 2900
  954. X      K=MOD(I,1000)`20
  955. X      KQ=I/1000+1`20
  956. X      GOTO (3000,5000,4000,2010), KQ
  957. X***       LOC,OBJ.,VERB,REPEAT
  958. X      CALL BUG(22)
  959. X `20
  960. X***GET SECOND WORD FOR ANALYSIS.
  961. X `20
  962. X 2800 WD1=WD2`20
  963. X      WD2=' '`20
  964. X      GOTO 2610`20
  965. X `20
  966. X***GEE, I DON'T UNDERSTAND.`20
  967. X `20
  968. X 2900 WRITE(6,2910) WD1`20
  969. X 2910 FORMAT(/,' I don''t understand ''',A10,'''.')`20
  970. X      GOTO 2600`20
  971. X `20
  972. X***                      *******************
  973. X*                        **** LOCATIONS ****
  974. X*                        *******************
  975. X*  FIGURE OUT THE NEW LOCATION
  976. X*`20
  977. X*  GIVEN THE CURRENT LOCATION IN 'LOC', AND A MOTION VERB NUMBER IN 'K', AND
  978. X*  THE NEW LOCATION IN 'NEWLOC'.  THE CURRENT LOC IS SAVED IN 'OLDLOC' IF`20
  979. X*  HE WANTS TO RETREAT.  THE CURRENT OLDLOC IS SAVED IN OLDLC2, IN CASE HE
  980. X*  DIES.  (IF HE DOES, NEWLOC WILL BE LIMBO, AND OLDLOC WILL BE WHAT KILLED`
  981. V20
  982. X*  HIM, SO WE NEED OLDLC2, WHICH IS THE LAST PLACE HE WAS SAFE.)
  983. X `20
  984. X 3000 KK=KEY(LOC)`20
  985. X      NEWLOC=LOC
  986. X      IF(KK.EQ.0)CALL BUG(26)`20
  987. X      IF(K.EQ.NULL)GOTO 2`20
  988. X      IF(K.EQ.BACK)GOTO 20
  989. X      IF(K.EQ.LOOK)GOTO 30
  990. X      IF(K.EQ.SIT)GOTO 35`20
  991. X      IF(K.EQ.CAVE)GOTO 40
  992. X      IF(K.EQ.GO2)GOTO 45`20
  993. X      OLDLC2=OLDLOC`20
  994. X      OLDLOC=LOC
  995. X `20
  996. X    9 LL=IABS(TRAVEL(KK))`20
  997. X      IF(MOD(LL,1000).EQ.1.OR.MOD(LL,1000).EQ.K)GOTO 10`20
  998. X      IF(TRAVEL(KK).LT.0)GOTO 50
  999. X      KK=KK+1`20
  1000. X      GOTO 9
  1001. X `20
  1002. X   10 LL=LL/1000
  1003. X   11 NEWLOC=LL/1000
  1004. X      K=MOD(NEWLOC,100)`20
  1005. X      IF(NEWLOC.LE.300)GOTO 13
  1006. X      IF(PROP(K).NE.NEWLOC/100-3)GOTO 16
  1007. X   12 IF(TRAVEL(KK).LT.0)CALL BUG(25)`20
  1008. X      KK=KK+1`20
  1009. X      NEWLOC=IABS(TRAVEL(KK))/1000
  1010. X      IF(NEWLOC.EQ.LL)GOTO 12`20
  1011. X      LL=NEWLOC`20
  1012. X      GOTO 11`20
  1013. X `20
  1014. X   13 IF(NEWLOC.LE.100)GOTO 14
  1015. X      IF(TOTING(K).OR.(NEWLOC.GT.200.AND.AT(K)))GOTO 16`20
  1016. X      GOTO 12`20
  1017. X `20
  1018. X   14 IF(NEWLOC.NE.0.AND..NOT.PCT(NEWLOC))GOTO 12`20
  1019. X   16 NEWLOC=MOD(LL,1000)`20
  1020. X      IF(NEWLOC.LE.300)GOTO 2`20
  1021. X      IF(NEWLOC.LE.500)GOTO 30000`20
  1022. X      CALL RSPEAK(NEWLOC-500)`20
  1023. X      NEWLOC=LOC
  1024. X      GOTO 2
  1025. X `20
  1026. X***SPECIAL MOTIONS COME HERE.  LABELLING CONVENTION: STATEMENT NUMBERS N
  1027. X*  (XX=00-99) ARE USED FOR SPECIAL CASE NUMBER NNN (NNN=301-500).`20
  1028. X `20
  1029. X30000 NEWLOC=NEWLOC-300`20
  1030. X      IF(NEWLOC.LE.0.OR.NEWLOC.GT.5) CALL BUG(20)`20
  1031. X      GOTO(30100,30200,30300,30400,30500),NEWLOC
  1032. X `20
  1033. X***TRAVEL 301.  PLOVER-ALCOVE PASSAGE.  CAN CARRY ONLY EMERALD.  NOTE: T
  1034. X*  TABLE MUST INCLUDE 'USELESS' ENTRIES GOING THROUGH PASSAGE, WHICH CAN
  1035. X*  BE USED FOR ACTUAL MOTION, BUT CAN BE SPOTTED BY 'GO BACK'.
  1036. X `20
  1037. X30100 NEWLOC = (2 * PLAC(EMERALD) - 1 ) - LOC`20
  1038. X      IF(HOLDNG.EQ.0.OR.(HOLDNG.EQ.1.AND.TOTING(EMRALD)))GOTO 2`20
  1039. X      NEWLOC=LOC
  1040. X      CALL RSPEAK(117)
  1041. X      GOTO 2
  1042. X `20
  1043. X***TRAVEL 302.  PLOVER TRANSPORT.  DROP THE EMERALD (ONLY USE SPECIAL TR
  1044. X*  TOTING IT), SO HE'S FORCED TO USE THE PLOVER-PASSAGE TO GET IT OUT.
  1045. X*  DROPPED IT, GO BACK AND PRETEND HE WASN'T CARRYING IT AFTER ALL.`20
  1046. X `20
  1047. X30200 CALL DROP(EMRALD,LOC)`20
  1048. X      GOTO 12`20
  1049. X `20
  1050. X***TRAVEL 303.  TROLL BRIDGE.  MUST BE DONE ONLY AS SPECIAL MOTION SO TH
  1051. X*  DWARVES WON'T WANDER ACROSS AND ENCOUNTER THE BEAR.  (THEY WON'T FOLL
  1052. X*  PLAYER THERE BECAUSE THAT REGION IS FORBIDDEN TO THE PIRATE.)  IF
  1053. X*  PROP(TROLL)=1, HE'S CROSSED SINCE PAYING, SO STEP OUT AND BLOCK HIM.`20
  1054. X*  (STANDARD TRAVEL ENTRIES CHECK FOR PROP(TROLL)=0.)  SPECIAL STUFF FOR
  1055. X `20
  1056. X30300 IF(PROP(TROLL).NE.1)GOTO 30310
  1057. X      CALL PSPEAK(TROLL,1)
  1058. X      PROP(TROLL)=0`20
  1059. X      CALL MOVE(TROLL2,0)`20
  1060. X      CALL MOVE(TROLL2+100,0)`20
  1061. X      CALL MOVE(TROLL,PLAC(TROLL))
  1062. X      CALL MOVE(TROLL+100,FIXD(TROLL))
  1063. X      CALL JUGGLE(CHASM)
  1064. X      NEWLOC=LOC
  1065. X      GOTO 2
  1066. X `20
  1067. X30310 NEWLOC=PLAC(TROLL)+FIXD(TROLL)-LOC
  1068. X      IF(PROP(TROLL).EQ.0)PROP(TROLL)=1`20
  1069. X      IF(.NOT.TOTING(BEAR))GOTO 2`20
  1070. X      CALL RSPEAK(162)
  1071. X      PROP(CHASM)=1`20
  1072. X      PROP(TROLL)=2`20
  1073. X      CALL DROP(BEAR,NEWLOC)
  1074. X      FIXED(BEAR)=-1
  1075. X      PROP(BEAR)=3
  1076. X      IF(PROP(SPICES).LT.0)TALLY2=TALLY2+1
  1077. X      OLDLC2=NEWLOC`20
  1078. X      GOTO 99`20
  1079. X `20
  1080. X***TRAVEL 304.  ROWING THE BOAT.  SINCE HE CAN'T CARRY THE BOAT HIMSELF,
  1081. X*  (IT'S TOO HEAVY) WE MUST MOVE THE BOAT FOR HIM.
  1082. X `20
  1083. X30400 ROW=.TRUE.
  1084. X      GOTO 12`20
  1085. X `20
  1086. X***TRAVEL 305.  CROSSING THE FRAYED ROPE... IT MIGHT BREAK.`20
  1087. X `20
  1088. X30500 IF(PROP(ROPE).EQ.1) GOTO 30510
  1089. X      IF(PCT(60)) GOTO 30510
  1090. X      PROP(ROPE)=2
  1091. X      CALL RSPEAK(225)
  1092. X      NEWLOC=20`20
  1093. X      GOTO 2
  1094. X `20
  1095. X30510 OLDLC2=OLDLOC`20
  1096. X      OLDLOC=LOC
  1097. X      NEWLOC=PLAC(ROPE)+FIXD(ROPE)-OLDLOC`20
  1098. X      GOTO 2
  1099. X `20
  1100. X***END OF SPECIALS.`20
  1101. X `20
  1102. X***HANDLE 'GO BACK'.  LOOK FOR VERB WHICH GOES FROM LOC TO OLDLOC, OR TO
  1103. X*  IF OLDLOC HAS FORCED-MOTION.  K2 SAVES ENTRY -> FORCED LOC -> PREVIOU
  1104. X `20
  1105. X   20 K=OLDLOC
  1106. X      IF(FORCED(K))K=OLDLC2`20
  1107. X      OLDLC2=OLDLOC`20
  1108. X      OLDLOC=LOC
  1109. X      K2=0
  1110. X      IF(K.NE.LOC)GOTO 21`20
  1111. X      CALL RSPEAK(91)`20
  1112. X      GOTO 2
  1113. X `20
  1114. X   21 LL=MOD((IABS(TRAVEL(KK))/1000),1000)
  1115. X      IF(LL.EQ.K)GOTO 25
  1116. X      IF(LL.GT.300)GOTO 22
  1117. X      J=KEY(LL)`20
  1118. X      IF(FORCED(LL).AND.MOD((IABS(TRAVEL(J))/1000),1000).EQ.K)K2=KK`20
  1119. X   22 IF(TRAVEL(KK).LT.0)GOTO 23
  1120. X      KK=KK+1`20
  1121. X      GOTO 21`20
  1122. X `20
  1123. X   23 KK=K2`20
  1124. X      IF(KK.NE.0)GOTO 25
  1125. X      CALL RSPEAK(140)
  1126. X      GOTO 2
  1127. X `20
  1128. X   25 K=MOD(IABS(TRAVEL(KK)),1000)
  1129. X      KK=KEY(LOC)`20
  1130. X      GOTO 9
  1131. X `20
  1132. X***LOOK.  CAN'T GIVE MORE DETAIL.  PRETEND IT WASN'T DARK (THOUGH IT MAY
  1133. X*  BE DARK) SO HE WON'T FALL INTO A PIT WHILE STARING INTO THE GLOOM.`20
  1134. X `20
  1135. X   30 IF(DETAIL.LT.3)CALL RSPEAK(15)
  1136. X      DETAIL=DETAIL+1`20
  1137. X      WZDARK=.FALSE.
  1138. X      ABB(LOC)=0
  1139. X      GOTO 2
  1140. X `20
  1141. X***    SIT. HE SITS ON THE GROUND,
  1142. X*      OR IF HE TRIES THE CHAIR,
  1143. X*      HE DIES.`20
  1144. X*`20
  1145. X   35 IF ( WIZKID ) GOTO 37`20
  1146. X      IF ( HERE(CHAIR) ) GOTO 36
  1147. X      SPK = 232`20
  1148. X      GOTO 2011`20
  1149. X `20
  1150. X   36 CALL RSPEAK (233)`20
  1151. X      NUMDIE = MAXDIE`20
  1152. X      GOTO 99`20
  1153. X `20
  1154. X   37 SPK = 54
  1155. X      GOTO 2011`20
  1156. X `20
  1157. X***CAVE.  DIFFERENT MESSAGES DEPENDING ON WHETHER ABOVE GROUND.`20
  1158. X `20
  1159. X   40 IF(LOC.LT.8)CALL RSPEAK(57)`20
  1160. X      IF(LOC.GE.8)CALL RSPEAK(58)`20
  1161. X      GOTO 2
  1162. X `20
  1163. X***GOTO. LETS A WIZARD GO ANYWHERE HE WANTS.
  1164. X `20
  1165. X   45 IF(.NOT.WIZKID) GOTO 2900`20
  1166. X      IF(WD2.EQ.' ') GOTO 2900
  1167. X      WD1=WD2`20
  1168. X      WD2=' '
  1169. X      WHERE=0`20
  1170. X      DO 46 LOOP=1,3
  1171. X      IF(WD1(LOOP:LOOP).LT.'0'.OR.WD1(LOOP:LOOP).GT.'9') GOTO 46
  1172. X      WHERE=(WHERE*10)+(ICHAR(WD1(LOOP:LOOP)) - ICHAR('0'))
  1173. X   46 CONTINUE
  1174. X      IF(WHERE.GT.0.AND.WHERE.LE.LOCSIZ) GOTO 47
  1175. X      I=VOCAB(WD1,-1)`20
  1176. X `20
  1177. X***IF LOCATION IS NOT A ROOM NUMBER THE WORD MUST BE AN OBJECT.`20
  1178. X `20
  1179. X      IF(I/1000.NE.1) GOTO 2900`20
  1180. X      IF(I-1000 .EQ. PIRATE) GOTO 48
  1181. X      IF(PLACE(I-1000).EQ.0) GOTO 2900
  1182. X      WHERE=PLACE(I-1000)`20
  1183. X   47 OLDLC2=OLDLOC`20
  1184. X      OLDLOC=LOC
  1185. X      NEWLOC=WHERE
  1186. X      GOTO 2
  1187. X `20
  1188. X   48 WHERE=DLOC(8)`20
  1189. X      IF(WHERE .NE. 0) GOTO 47
  1190. X      WRITE(6,49)`20
  1191. X   49 FORMAT (' The pirate is dead!')`20
  1192. X      GOTO 2600`20
  1193. X `20
  1194. X***NON-APPLICABLE MOTION.  VARIOUS MESSAGES DEPENDING ON WORD GIVEN.
  1195. X `20
  1196. X   50 SPK=12
  1197. X      IF(K.GE.43.AND.K.LE.50)SPK=9
  1198. X      IF(K.EQ.29.OR.K.EQ.30)SPK=9`20
  1199. X      IF(K.EQ.7.OR.K.EQ.36.OR.K.EQ.37)SPK=10
  1200. X      IF(K.EQ.11.OR.K.EQ.19)SPK=11
  1201. X      IF(VERB.EQ.FIND.OR.VERB.EQ.INVENT)SPK=59
  1202. X      IF(K.EQ.62.OR.K.EQ.65)SPK=42
  1203. X      IF(K.EQ.17)SPK=80`20
  1204. X      CALL RSPEAK(SPK)
  1205. X      GOTO 2
  1206. X***`20
  1207. X* YOU ARE NOW SLIGHTLY DEAD.
  1208. X*`20
  1209. X*  IF THE CURRENT LOC IS ZERO, IT MEANS THE CLOWN GOT HIMSELF KILLED.  We
  1210. X*  ALLOW THIS MAXDIE TIMES.  MAXDIE IS AUTOMATICALLY SET BASED ON THE NUMBER
  1211. X*  SNIDE MESSAGES AVAILABLE.  EACH DEATH RESULTS IN A MESSAGE (81, 83, E
  1212. X*  WHICH OFFERS REINCARNATION; IF ACCEPTED, THIS RESULTS IN MESSAGE 82,`20
  1213. X*  ETC.  THE LAST TIME, IF HE WANTS ANOTHER CHANCE, HE GETS A SNIDE REMA
  1214. X*  WE EXIT.  WHEN REINCARNATED, ALL OBJECTS BEING CARRIED GET DROPPED AT
  1215. X*  (PRESUMABLY THE LAST PLACE PRIOR TO BEING KILLED) WITHOUT CHANGE OF P
  1216. X*  THE LOOP RUNS BACKWARDS TO ASSURE THAT THE MONGOOS IS DROPPED BEFORE THE`
  1217. V20
  1218. X*  (THIS KLUGE COULD BE CHANGED ONCE WE'RE SURE ALL REFERENCES TO MONGOOS A`
  1219. V20
  1220. X*  ARE DONE BY KEYWORDS.)  THE LAMP IS A SPECIAL CASE (IT WOULDN'T DO TO
  1221. X*  IT IN THE CAVE).  IT IS TURNED OFF AND LEFT OUTSIDE THE BUILDING (ONL
  1222. X*  WAS CARRYING IT, OF COURSE).  HE HIMSELF IS LEFT INSIDE THE BUILDING`20
  1223. X*  HEAVEN HELP HIM IF HE TRIES TO ZZZZADV BACK INTO THE CAVE WITHOUT THE L
  1224. X*  OLDLOC IS ZAPPED SO HE CAN'T JUST 'RETREAT'.`20
  1225. X*`20
  1226. X*  THE EASIEST WAY TO GET KILLED IS TO FALL INTO A PIT IN PITCH DARKNESS
  1227. X `20
  1228. X   90 CALL RSPEAK(23)`20
  1229. X      OLDLC2=LOC
  1230. X `20
  1231. X***OKAY, HE'S DEAD.  LET'S GET ON WITH IT.
  1232. X `20
  1233. X   99 IF (.NOT.WIZKID) GOTO 91
  1234. X      CALL RSPEAK(224)
  1235. X      LOC=OLDLC2
  1236. X      GOTO 2000`20
  1237. X `20
  1238. X   91 IF(CLOSNG)GOTO 95`20
  1239. X      NUMDIE=NUMDIE+1`20
  1240. X      I=83
  1241. X      J=84
  1242. X      IF(NUMDIE.NE.1) GOTO 92`20
  1243. X      I=81
  1244. X      J=82
  1245. X   92 IF(NUMDIE.LE.MAXDIE) GOTO 93
  1246. X      I=85
  1247. X      J=86
  1248. X   93 IF(NUMDIE.EQ.MAXDIE.OR..NOT.YES(I,J,54,WCOUNT)) GOTO 20000
  1249. X      IF(OLDLOC.EQ.FIXD(TROLL)) OLDLC2=PLAC(TROLL)
  1250. X      DO 98 LOOP=1,100
  1251. X      I=101-LOOP
  1252. X      IF(.NOT.TOTING(I))GOTO 98`20
  1253. X      K=OLDLC2
  1254. X      CALL DROP(I,K)
  1255. X      IF(I.EQ.MONGOOS) LOOSE=.TRUE.`20
  1256. X   98 CONTINUE
  1257. X      IF(LOC.LT.MISTS) GOTO 100`20
  1258. X      LOC=OLDLC2
  1259. X      OLDLOC=LOC
  1260. X      GOTO 2000`20
  1261. X `20
  1262. X  100 LOC=3`20
  1263. X      OLDLOC=LOC
  1264. X      IF(PLACE(LAMP).NE.OLDLC2) GOTO 2000`20
  1265. X      CALL MOVE(LAMP,1)`20
  1266. X      PROP(LAMP)=0
  1267. X      GOTO 2000`20
  1268. X `20
  1269. X***HE DIED DURING CLOSING TIME.  NO RESURRECTION.  TALLY UP A DEATH AND`20
  1270. X `20
  1271. X   95 CALL RSPEAK(131)
  1272. X      NUMDIE=NUMDIE+1`20
  1273. X      GOTO 20000
  1274. X `20
  1275. X***                      *******************
  1276. X*                        ****** VERBS ******
  1277. X*                        *******************
  1278. X*  ANALYSE A VERB.  REMEMBER WHAT IT WAS, GO BACK FOR OBJECT IF SECOND W
  1279. X*  UNLESS VERB IS 'SAY' OR 'SUSPEND', WHICH SNARFS ARBITRARY SECOND WORD
  1280. X `20
  1281. X 4000 VERB=K
  1282. X      SPK=ACTSPK(VERB)
  1283. X      IF(WD2.NE.' '.AND.
  1284. X     $      (VERB.NE.SAY.AND.VERB.NE.SUSPND))GOTO 2800
  1285. X      IF(VERB.EQ.SAY.OR.VERB.EQ.SUSPND)OBJ=-1
  1286. X***IF HE WANTS LIGHT, LET HIM TRY TO FLIP THE SWITCH.`20
  1287. X `20
  1288. X      IF(OBJ.EQ.SWITCH) GOTO 5150`20
  1289. X      IF(OBJ.NE.0)GOTO 4090`20
  1290. X `20
  1291. X***ANALYSE AN INTRANSITIVE VERB (IE, NO OBJECT GIVEN YET).
  1292. X `20
  1293. X      GOTO(8010,8000,8000,8040,2009,8040,9070,9080,8000,8000,`20
  1294. X     $2011,9120,9130,8140,9150,8000,8000,8180,8000,8200,
  1295. X     $8000,9220,9230,8240,8250,8260,8270,8000,8000,8300,
  1296. X     $8310,8320,8330),VERB
  1297. X*          TAKE DROP  SAY OPEN NOTH LOCK   ON  OFF WAVE CALM
  1298. X*     WALK KILL POUR  EAT DRNK  RUB TOSS QUIT FIND INVN`20
  1299. X*     FEED FILL BLST SCOR  FOO  BRF READ BREK WAKE SUSP`20
  1300. X*     WEAR PISS SWIM
  1301. X      CALL BUG(23)
  1302. X `20
  1303. X***ANALYSE A TRANSITIVE VERB.`20
  1304. X `20
  1305. X 4090 GOTO(9010,9020,9030,9040,2009,9040,9070,9080,9090,2011,`20
  1306. X     $2011,9120,9130,9140,9150,9160,9170,2011,9190,9190,
  1307. X     $9210,9220,9230,2011,2011,2011,9270,9280,9290,8300,
  1308. X     $9310,9320,9330),VERB
  1309. X*          TAKE DROP  SAY OPEN NOTH LOCK   ON  OFF WAVE CALM
  1310. X*     WALK KILL POUR  EAT DRNK  RUB TOSS QUIT FIND INVN`20
  1311. X*     FEED FILL BLST SCOR  FOO  BRF READ BREK WAKE SUSP`20
  1312. X*     WEAR PISS SWIM
  1313. X      CALL BUG(24)
  1314. X `20
  1315. X***ROUTINES FOR PERFORMING THE VARIOUS ACTION VERBS`20
  1316. X `20
  1317. X***STATEMENT NUMBERS IN THIS SECTION ARE 8000 FOR INTRANSITIVE VERBS, 90
  1318. X*  TRANSITIVE, PLUS TEN TIMES THE VERB NUMBER.  MANY INTRANSITIVE VERBS`20
  1319. X*  TRANSITIVE CODE, AND SOME VERBS USE CODE FOR OTHER VERBS, AS NOTED BE
  1320. X `20
  1321. XC  RANDOM INTRANSITIVE VERBS COME HERE.  CLEAR OBJ JUST IN CASE (SEE 'AT
  1322. X `20
  1323. X 8000  WRITE(6,8002) WD1
  1324. X 8002 FORMAT(/,' ',A10,x,'What?')
  1325. X      GOTO 2600`20
  1326. X `20
  1327. X***CARRY, NO OBJECT GIVEN YET.  OK IF ONLY ONE OBJECT PRESENT.
  1328. X `20
  1329. X 8010 IDUMY=ATLOC(LOC)
  1330. X      IF(IDUMY.EQ.0.OR.LINK(IDUMY).NE.0) GOTO 8000
  1331. X      DO 8012 LOOP=1,7
  1332. X      IF(DLOC(LOOP).EQ.LOC.AND.DFLAG.GE.2)GOTO 8000`20
  1333. X 8012 CONTINUE
  1334. X      OBJ=ATLOC(LOC)
  1335. X `20
  1336. X***CARRY AN OBJECT.  SPECIAL CASES FOR MONGOOS AND SACK (IF MONGOOS IN SACK,
  1337. V C
  1338. X*  TAKE ONE WITHOUT THE OTHER.  LIQUIDS ALSO SPECIAL, SINCE THEY DEPEND`20
  1339. X*  STATUS OF BOTTLE.  ALSO VARIOUS SIDE EFFECTS, ETC.`20
  1340. X `20
  1341. X 9010 IF(TOTING(OBJ))GOTO 2011
  1342. X      TEM=LOC`20
  1343. X      IF(.NOT.WIZKID.OR.FIXED(OBJ).NE.0.OR.OBJ.EQ.WATER.OR.OBJ.EQ.OIL)
  1344. X     $GOTO 9011`20
  1345. X      CALL MOVE(OBJ,LOC)
  1346. X      IF((OBJ.EQ.SACK.OR.OBJ.EQ.MONGOOS).AND.PROP(SACK).EQ.1)`20
  1347. X     $CALL MOVE(SACK+MONGOOS-OBJ,LOC)`20
  1348. X 9011 SPK=25
  1349. X      IF(OBJ.EQ.PLANT.AND.PROP(PLANT).LE.0)SPK=115
  1350. X      IF(OBJ.EQ.BEAR.AND.PROP(BEAR).EQ.1)SPK=169
  1351. X      IF(OBJ.EQ.CHAIN.AND.PROP(BEAR).NE.0)SPK=170`20
  1352. X      IF(PLAC(OBJ).EQ.PLAC(BOOK)) SPK=234`20
  1353. X      IF(FIXED(OBJ).NE.0)GOTO 2011
  1354. X      IF(OBJ.NE.WATER.AND.OBJ.NE.OIL)GOTO 9017
  1355. X      IF(HERE(BOTTLE).AND.LIQ(0).EQ.OBJ)GOTO 9018`20
  1356. X      OBJ=BOTTLE
  1357. X      IF(TOTING(BOTTLE).AND.PROP(BOTTLE).EQ.1)GOTO 9220`20
  1358. X      IF(PROP(BOTTLE).NE.1)SPK=105
  1359. X      IF(.NOT.TOTING(BOTTLE))SPK=104
  1360. X      GOTO 2011`20
  1361. X 9018 OBJ=BOTTLE
  1362. X 9017 IF(HOLDNG.LT.HLDMAX.OR.WIZKID)GOTO 9016`20
  1363. X      CALL RSPEAK(92)`20
  1364. X      GOTO 2012`20
  1365. X 9016 IF(OBJ.NE.MONGOOS)GOTO 9014`20
  1366. X      IF(PROP(MONGOOS).NE.0)GOTO 9014`20
  1367. X      IF(TOTING(SACK))GOTO 9015`20
  1368. X      CALL RSPEAK(27)`20
  1369. X      GOTO 2012`20
  1370. X 9015 PROP(MONGOOS)=1`20
  1371. X      PROP(SACK)=1
  1372. X      LOOSE=.FALSE.`20
  1373. X 9014 IF((OBJ.EQ.MONGOOS.OR.OBJ.EQ.SACK).AND.PROP(MONGOOS).NE.0)
  1374. X     $CALL CARRY(MONGOOS+SACK-OBJ,LOC)
  1375. X      IF(HERE(TRAP)) PROP(TRAP)=0`20
  1376. X      CALL CARRY(OBJ,LOC)`20
  1377. X      IF(HERE(TRAP)) PROP(TRAP)=0`20
  1378. X      K=LIQ(0)
  1379. X      IF(OBJ.EQ.BOTTLE.AND.K.NE.0)PLACE(K)=-1`20
  1380. X      GOTO 2009`20
  1381. X `20
  1382. X***DISCARD OBJECT.  'THROW' ALSO COMES HERE FOR MOST OBJECTS.  SPECIAL C
  1383. X*  MONGOOS (MIGHT ATTACK SNAKE OR DRAGON) AND SACK (MIGHT CONTAIN MONGOOS) A
  1384. VND
  1385. X*  DROP COINS AT VENDING MACHINE FOR EXTRA BATTERIES.`20
  1386. X `20
  1387. X 9020 IF(TOTING(ROD2).AND.OBJ.EQ.ROD.AND..NOT.TOTING(ROD))OBJ=ROD2
  1388. X      IF(.NOT.TOTING(OBJ))GOTO 2011`20
  1389. X      IF(OBJ.EQ.RING) PROP(RING)=0
  1390. X      IF(OBJ.EQ.RING) WEARING(1)=.FALSE.
  1391. X      IF(OBJ.EQ.MAIL) PROP(MAIL)=0
  1392. X      IF(OBJ.EQ.MAIL) WEARING(2)=.FALSE.
  1393. X      IF(OBJ.NE.MONGOOS)GOTO 9024`20
  1394. X      PROP(MONGOOS)=0`20
  1395. X      PROP(SACK)=0
  1396. X      LOOSE=.TRUE.
  1397. X      IF(.NOT.HERE(SNAKE)) GOTO 9024
  1398. X      CALL RSPEAK(30)`20
  1399. X      IF(CLOSED)GOTO 19000
  1400. X      CALL MOVE(SNAKE,0)
  1401. X `20
  1402. X***SET PROP FOR USE BY TRAVEL OPTIONS`20
  1403. X `20
  1404. X      PROP(SNAKE)=1`20
  1405. X 9021 K=LIQ(0)
  1406. X      IF(K.EQ.OBJ)OBJ=BOTTLE
  1407. X      IF(OBJ.EQ.BOTTLE.AND.K.NE.0)PLACE(K)=0
  1408. X      IF(OBJ.EQ.SACK.AND.PROP(MONGOOS).NE.0)CALL DROP(MONGOOS,LOC)
  1409. X      CALL DROP(OBJ,LOC)
  1410. X      IF(OBJ.EQ.MONGOOS) CALL RSPEAK(61)
  1411. X      IF(LOC.GE.117 .AND. LOC.LE.126)CALL MOVE(OBJ,125)`20
  1412. X      GOTO 2012`20
  1413. X `20
  1414. X 9024 IF(OBJ.NE.COINS.OR..NOT.HERE(VEND))GOTO 9025
  1415. X      CALL MOVE(COINS,0)
  1416. X      CALL DROP(BATTER,LOC)`20
  1417. X      CALL PSPEAK(BATTER,0)`20
  1418. X      GOTO 2012`20
  1419. X `20
  1420. X 9025 IF(OBJ.NE.MONGOOS.OR..NOT.AT(DRAGON).OR.PROP(DRAGON).NE.0)
  1421. X     $GOTO 9026`20
  1422. X      CALL RSPEAK(154)
  1423. X      CALL MOVE(MONGOOS,0)
  1424. X      PROP(MONGOOS)=0`20
  1425. X      IF(PLACE(SNAKE).EQ.PLAC(SNAKE))TALLY2=TALLY2+1
  1426. X      GOTO 2012`20
  1427. X `20
  1428. X 9026 IF(OBJ.NE.BEAR.OR..NOT.AT(TROLL))GOTO 9027
  1429. X      CALL RSPEAK(163)
  1430. X      CALL MOVE(TROLL,0)
  1431. X      CALL MOVE(TROLL+100,0)
  1432. X      CALL MOVE(TROLL2,PLAC(TROLL))`20
  1433. X      CALL MOVE(TROLL2+100,FIXD(TROLL))`20
  1434. X      CALL JUGGLE(CHASM)
  1435. X      PROP(TROLL)=2`20
  1436. X      GOTO 9021`20
  1437. X `20
  1438. X 9027 IF(OBJ.EQ.VASE.AND.LOC.NE.PLAC(PILLOW))GOTO 9028
  1439. X      CALL RSPEAK(54)`20
  1440. X      GOTO 9021`20
  1441. X `20
  1442. X 9028 PROP(VASE)=2
  1443. X      IF(AT(PILLOW))PROP(VASE)=0
  1444. X      CALL PSPEAK(VASE,PROP(VASE)+1)
  1445. X      IF(PROP(VASE).NE.0)FIXED(VASE)=-1`20
  1446. X      GOTO 9021`20
  1447. X `20
  1448. X***SAY.  ECHO WD2 (OR WD1 IF NO WD2 (SAY WHAT?, ETC.).)  MAGIC WORDS OVE
  1449. X `20
  1450. X 9030 IF(WD2.NE.'QUESTION  ') GOTO 9031`20
  1451. X      WIZKID=WIZARD(0)
  1452. X      GOTO 2012`20
  1453. X 9031 IF(.NOT.WIZKID) GOTO 9032`20
  1454. X      IF(WD2.EQ.'WHERE') WRITE(6,9034) LOC`20
  1455. X 9034 FORMAT(' You are currently at location',I4,'.')`20
  1456. X      IF(WD2.NE.'CLOSING    ') GOTO 9032
  1457. X      CLOSNG=.TRUE.`20
  1458. X      PANIC=.TRUE.
  1459. X      CLOSED=.TRUE.`20
  1460. X      GOTO 2012`20
  1461. X 9032 IF(WD2.NE.' ')WD1=WD2`20
  1462. X      I=VOCAB(WD1,-1)`20
  1463. X      IF(I.EQ.62.OR.I.EQ.65.OR.I.EQ.71.OR.I.EQ.2025)GOTO 9035`20
  1464. X      WRITE(6,9033) WD1
  1465. X 9033 FORMAT(/,' Okay, ',A10,'.')`20
  1466. X      GOTO 2012`20
  1467. X `20
  1468. X 9035 WD2=' '`20
  1469. X      OBJ=0`20
  1470. X      GOTO 2630`20
  1471. X `20
  1472. +-+-+-+-+-+-+-+-  END  OF PART 6 +-+-+-+-+-+-+-+-
  1473.