home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol002 / advinit3.for < prev    next >
Encoding:
Text File  |  1984-04-29  |  28.6 KB  |  687 lines

  1. C REV. 22
  2. C  ADVENTURES
  3.         SUBROUTINE INIT
  4. C
  5. C MODIFIED BY KENT BLACKETT
  6. C             ENGINEERING SYSTEMS GROUP
  7. C             DIGITAL EQUIPMENT CORP.
  8. C             15-JUL-77
  9. C ORIGINAL VERSION WAS FOR DECSYSTEM-10
  10. C THIS VERSION IS FOR FORTRAN IV-PLUS UNDER
  11. C THE IAS OPERATING SYSTEM ON THE PDP-11/70
  12. C NOTE THAT IT MUST BE COMPILED WITH THE
  13. C /WF:3/I4 SWITCHES...
  14. C
  15. C  CURRENT LIMITS:
  16. C       750 TRAVEL OPTIONS (TRAVEL, TRVSIZ).
  17. C       300 VOCABULARY WORDS (KTAB, ATAB, TABSIZ).
  18. C       150 LOCATIONS (LTEXT, STEXT, KEY, COND, ABB, ATLOC, LOCSIZ).
  19. C       100 OBJECTS (PLAC, PLACE, FIXD, FIXED, LINK (TWICE), PTEXT, PROP).
  20. C        35 "ACTION" VERBS (ACTSPK, VRBSIZ).
  21. C       205 RANDOM MESSAGES (RTEXT, RTXSIZ).
  22. C        12 DIFFERENT PLAYER CLASSIFICATIONS (CTEXT, CVAL, CLSMAX).
  23. C        20 HINTS, LESS 3 (HINTLC, HINTED, HINTS, HNTSIZ).
  24. C        35 MAGIC MESSAGES (MTEXT, MAGSIZ).
  25. C  THERE ARE ALSO LIMITS WHICH CANNOT BE EXCEEDED DUE TO THE STRUCTURE OF
  26. C  THE DATABASE.  (E.G., THE VOCABULARY USES N/1000 TO DETERMINE WORD TYPE,
  27. C  SO THERE CAN'T BE MORE THAN 1000 WORDS.)  THESE UPPER LIMITS ARE:
  28. C       1000 NON-SYNONYMOUS VOCABULARY WORDS
  29. C       300 LOCATIONS
  30. C       100 OBJECTS
  31.       INTEGER VRBSIZ
  32.        INTEGER*2 KTAB,LTEXT,STEXT,KEY,COND,ABB,ATLOC,PLAC,
  33.      1 PLACE,FIXD,FIXED,LINK,PTEXT,PROP,ACTSPK,RTEXT,CTEXT,CVAL,
  34.      2 HINTLC,HINTS,MTEXT,DLOC,ODLOC,ASCVAR,ASC2,ASC3
  35.         LOGICAL DSEEN,BLKLIN,HINTED,YES,START
  36.         LOGICAL TOTING,HERE,AT,BITSET,DARK,WZDARK,LMWARN,CLOSNG,PANIC,
  37.      1       CLOSED,GAVEUP,SCORNG,DEMO,YEA
  38.       INTEGER PBOTL,DUMMY
  39.       INTEGER RTEXT,ASCVAR
  40.       INTEGER KTAB,TABSIZ
  41.       INTEGER ATLOC,LINK,PLACE,FIXED,HOLDNG
  42.       LOGICAL BUF(128)
  43.       INTEGER ITK(20)
  44.       INTEGER MTEXT
  45.       INTEGER PTEXT
  46.       INTEGER ABB
  47.       INTEGER WKDAY,WKEND,HOLID,HBEGIN,HEND,HNAME,
  48.      1       SHORT,MAGIC,MAGNM,LATNCY,SAVED,SAVET,SETUP
  49.       INTEGER LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,NEWLOC,
  50.      1 KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,
  51.      2 HINTLC,CHLOC,CHLOC2,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE,
  52.      3 CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,
  53.      4 CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,
  54.      5 PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,
  55.      6 BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM,
  56.      7 PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,
  57.      8 THROW,FIND,INVENT,TURNS,IWEST,KNFLOC,DETAIL,ABBNUM,
  58.      9 NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2
  59.       INTEGER I,RTXSIZ,CLSMAX,MAGSIZ,LOCSIZ,CTEXT,STEXT,LTEXT,
  60.      1 SECT,TRAVEL,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,MAXTRS,
  61.      2 HNTLOC,KK
  62.         REAL LINES(15),LINES2(15,2)
  63.       LOGICAL TK,LIQ2,LIQ,LIQLOC,FORCED,PCT
  64.       LOGICAL LTMP
  65.         INTEGER TRAVEL(3,750)
  66.       INTEGER VOCAB,RAN
  67.         INTEGER KTAB(300)
  68.       REAL ATAB(300)
  69.     INTEGER LOC2(2)
  70. C
  71.       LOGICAL LLINES(60),CR,BL
  72. C
  73.         INTEGER LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150),
  74.      1        ATLOC(150)
  75.         INTEGER PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200),
  76.      1        PTEXT(100),PROP(100)
  77.         INTEGER ACTSPK(35)
  78.         INTEGER RTEXT(205)
  79.         INTEGER CTEXT(12),CVAL(12)
  80.         DIMENSION HINTLC(20),HINTED(20),HINTS(20,4)
  81.         INTEGER MTEXT(35)
  82.         DIMENSION TK(20),DSEEN(6),DLOC(6),ODLOC(6),HNAME(4)
  83. C
  84.       COMMON /INCOM/ TRAVEL
  85.         COMMON /TXTCOM/ RTEXT,LINES,ASCVAR
  86.         COMMON /BLKCOM/ BLKLIN
  87.         COMMON /VOCCOM/ KTAB,ATAB,TABSIZ
  88.         COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG
  89.         COMMON /MTXCOM/ MTEXT
  90.         COMMON /PTXCOM/ PTEXT
  91.         COMMON /ABBCOM/ ABB
  92.         COMMON /WIZCOM/ WKDAY,WKEND,HOLID,HBEGIN,HEND,HNAME,
  93.      1       SHORT,MAGIC,MAGNM,LATNCY,SAVED,SAVET,SETUP
  94.         COMMON /MISCOM/ LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,
  95.      1 KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,
  96.      2 HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE,
  97.      3 CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,
  98.      4 CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,
  99.      5 PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,
  100.      6 BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM,
  101.      7 PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,
  102.      8 THROW,FIND,INVENT,TURNS,LMWARN,IWEST,KNFLOC,DETAIL,ABBNUM,
  103.      9 NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,
  104.      1 CLOSNG,PANIC,CLOSED,GAVEUP,SCORNG
  105.         COMMON /MISC2/ I,RTXSIZ,CLSMAX,MAGSIZ,LOCSIZ,CTEXT,STEXT,LTEXT,
  106.      1 SECT,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,MAXTRS,
  107.      2 HINTED,HNTLOC,KK
  108. C
  109.       EQUIVALENCE(LINES(1),LLINES(1))
  110.       DATA CR/X'0D'/,BL/' '/
  111.       DATA KEY/150*0/
  112. C
  113. C  STATEMENT FUNCTIONS
  114. C
  115. C
  116. C  TOTING(OBJ)  = TRUE IF THE OBJ IS BEING CARRIED
  117. C  HERE(OBJ)    = TRUE IF THE OBJ IS AT "LOC" (OR IS BEING CARRIED)
  118. C  AT(OBJ)      = TRUE IF ON EITHER SIDE OF TWO-PLACED OBJECT
  119. C  LIQ(DUMMY)   = OBJECT NUMBER OF LIQUID IN BOTTLE
  120. C  LIQLOC(LOC)  = OBJECT NUMBER OF LIQUID (IF ANY) AT LOC
  121. C  BITSET(L,N)  = TRUE IF COND(L) HAS BIT N SET (BIT 0 IS UNITS BIT)
  122. C  FORCED(LOC)  = TRUE IF LOC MOVES WITHOUT ASKING FOR INPUT (COND=2)
  123. C  DARK(DUMMY)  = TRUE IF LOCATION "LOC" IS DARK
  124. C  PCT(N)       = TRUE N% OF THE TIME (N INTEGER FROM 0 TO 100)
  125. C
  126. C  WZDARK SAYS WHETHER THE LOC HE'S LEAVING WAS DARK
  127. C  LMWARN SAYS WHETHER HE'S BEEN WARNED ABOUT LAMP GOING DIM
  128. C  CLOSNG SAYS WHETHER ITS CLOSING TIME YET
  129. C  PANIC SAYS WHETHER HE'S FOUND OUT HE'S TRAPPED IN THE CAVE
  130. C  CLOSED SAYS WHETHER WE'RE ALL THE WAY CLOSED
  131. C  GAVEUP SAYS WHETHER HE EXITED VIA "QUIT"
  132. C  SCORNG INDICATES TO THE SCORE ROUTINE WHETHER WE'RE DOING A "SCORE" COMMAND
  133. C  DEMO IS TRUE IF THIS IS A PRIME-TIME DEMONSTRATION GAME
  134. C  YEA IS RANDOM YES/NO REPLY
  135.         TOTING(OBJ)=PLACE(OBJ).EQ.-1
  136.         HERE(OBJ)=PLACE(OBJ).EQ.LOC.OR.TOTING(OBJ)
  137.         AT(OBJ)=PLACE(OBJ).EQ.LOC.OR.FIXED(OBJ).EQ.LOC
  138.         LIQ2(PBOTL)=(1-PBOTL)*WATER+(PBOTL/2)*(WATER+OIL)
  139.         LIQ(DUMMY)=LIQ2(MAX0(PROP(BOTTLE),-1-PROP(BOTTLE)))
  140.         LIQLOC(LOC)=LIQ2((MOD(COND(LOC)/2*2,8)-5)*MOD(COND(LOC)/4,2)+1)
  141.       BITSET(L,N)=MOD(COND(L),2**(N+1))/(2**N)
  142.         FORCED(LOC)=COND(LOC).EQ.2
  143.         DARK(DUMMY)=MOD(COND(LOC),2).EQ.0.AND.(PROP(LAMP).EQ.0.OR.
  144.      1       .NOT.HERE(LAMP))
  145.         PCT(N)=RAN(100).LT.N
  146. C  DESCRIPTION OF THE DATABASE FORMAT
  147. C
  148. C
  149. C  THE DATA FILE CONTAINS SEVERAL SECTIONS.  EACH BEGINS WITH A LINE CONTAINING
  150. C  A NUMBER IDENTIFYING THE SECTION, AND ENDS WITH A LINE CONTAINING "-1".
  151. C
  152. C  SECTION 1: LONG FORM DESCRIPTIONS.  EACH LINE CONTAINS A LOCATION NUMBER,
  153. C       A COMMA, AND A LINE OF TEXT.  THE SET OF (NECESSARILY ADJACENT) LINES
  154. C       WHOSE NUMBERS ARE X FORM THE LONG DESCRIPTION OF LOCATION X.
  155. C  SECTION 2: SHORT FORM DESCRIPTIONS.  SAME FORMAT AS LONG FORM.  NOT ALL
  156. C       PLACES HAVE SHORT DESCRIPTIONS.
  157. C  SECTION 3: TRAVEL TABLE.  EACH LINE CONTAINS A LOCATION NUMBER (X), A SECOND
  158. C       LOCATION NUMBER (Y), AND A LIST OF MOTION NUMBERS (SEE SECTION 4).
  159. C       EACH MOTION REPRESENTS A VERB WHICH WILL GO TO Y IF CURRENTLY AT X.
  160. C       Y, IN TURN, IS INTERPRETED AS FOLLOWS.  LET M=Y/1000, N=Y MOD 1000.
  161. C               IF N<=300       IT IS THE LOCATION TO GO TO.
  162. C               IF 300<N<=500   N-300 IS USED IN A COMPUTED GOTO TO
  163. C                                       A SECTION OF SPECIAL CODE.
  164. C               IF N>500        MESSAGE N-500 FROM SECTION 6 IS PRINTED,
  165. C                                       AND HE STAYS WHEREVER HE IS.
  166. C       MEANWHILE, M SPECIFIES THE CONDITIONS ON THE MOTION.
  167. C               IF M=0          IT'S UNCONDITIONAL.
  168. C               IF 0<M<100      IT IS DONE WITH M% PROBABILITY.
  169. C               IF M=100        UNCONDITIONAL, BUT FORBIDDEN TO DWARVES.
  170. C               IF 100<M<=200   HE MUST BE CARRYING OBJECT M-100.
  171. C               IF 200<M<=300   MUST BE CARRYING OR IN SAME ROOM AS M-200.
  172. C               IF 300<M<=400   PROP(M MOD 100) MUST *NOT* BE 0.
  173. C               IF 400<M<=500   PROP(M MOD 100) MUST *NOT* BE 1.
  174. C               IF 500<M<=600   PROP(M MOD 100) MUST *NOT* BE 2, ETC.
  175. C       IF THE CONDITION (IF ANY) IS NOT MET, THEN THE NEXT *DIFFERENT*
  176. C       "DESTINATION" VALUE IS USED (UNLESS IT FAILS TO MEET *ITS* CONDITIONS,
  177. C       IN WHICH CASE THE NEXT IS FOUND, ETC.).  TYPICALLY, THE NEXT DEST WILL
  178. C       BE FOR ONE OF THE SAME VERBS, SO THAT ITS ONLY USE IS AS THE ALTERNATE
  179. C       DESTINATION FOR THOSE VERBS.  FOR INSTANCE:
  180. C               15      110022  29      31      34      35      23      43
  181. C               15      14      29
  182. C       THIS SAYS THAT, FROM LOC 15, ANY OF THE VERBS 29, 31, ETC., WILL TAKE
  183. C       HIM TO 22 IF HE'S CARRYING OBJECT 10, AND OTHERWISE WILL GO TO 14.
  184. C               11      303008  49
  185. C               11      9       50
  186. C       THIS SAYS THAT, FROM 11, 49 TAKES HIM TO 8 UNLESS PROP(3)=0, IN WHICH
  187. C       CASE HE GOES TO 9.  VERB 50 TAKES HIM TO 9 REGARDLESS OF PROP(3).
  188. C  SECTION 4: VOCABULARY.  EACH LINE CONTAINS A NUMBER (N), A TAB, AND A
  189. C       FIVE-LETTER WORD.  CALL M=N/1000.  IF M=0, THEN THE WORD IS A MOTION
  190. C       VERB FOR USE IN TRAVELLING (SEE SECTION 3).  ELSE, IF M=1, THE WORD IS
  191. C       AN OBJECT.  ELSE, IF M=2, THE WORD IS AN ACTION VERB (SUCH AS "CARRY"
  192. C       OR "ATTACK").  ELSE, IF M=3, THE WORD IS A SPECIAL CASE VERB (SUCH AS
  193. C       "DIG") AND N MOD 1000 IS AN INDEX INTO SECTION 6.  OBJECTS FROM 50 TO
  194. C       (CURRENTLY, ANYWAY) 79 ARE CONSIDERED TREASURES (FOR PIRATE, CLOSEOUT).
  195. C  SECTION 5: OBJECT DESCRIPTIONS.  EACH LINE CONTAINS A NUMBER (N), A TAB,
  196. C       AND A MESSAGE.  IF N IS FROM 1 TO 100, THE MESSAGE IS THE "INVENTORY"
  197. C       MESSAGE FOR OBJECT N.  OTHERWISE, N SHOULD BE 000, 100, 200, ETC., AND
  198. C       THE MESSAGE SHOULD BE THE DESCRIPTION OF THE PRECEDING OBJECT WHEN ITS
  199. C       PROP VALUE IS N/100.  THE N/100 IS USED ONLY TO DISTINGUISH MULTIPLE
  200. C       MESSAGES FROM MULTI-LINE MESSAGES; THE PROP INFO ACTUALLY REQUIRES ALL
  201. C       MESSAGES FOR AN OBJECT TO BE PRESENT AND CONSECUTIVE.  PROPERTIES WHICH
  202. C       PRODUCE NO MESSAGE SHOULD BE GIVEN THE MESSAGE ">$<".
  203. C  SECTION 6: ARBITRARY MESSAGES.  SAME FORMAT AS SECTIONS 1, 2, AND 5, EXCEPT
  204. C       THE NUMBERS BEAR NO RELATION TO ANYTHING (EXCEPT FOR SPECIAL VERBS
  205. C       IN SECTION 4).
  206. C  SECTION 7: OBJECT LOCATIONS.  EACH LINE CONTAINS AN OBJECT NUMBER AND ITS
  207. C       INITIAL LOCATION (ZERO (OR OMITTED) IF NONE).  IF THE OBJECT IS
  208. C       IMMOVABLE, THE LOCATION IS FOLLOWED BY A "-1".  IF IT HAS TWO LOCATIONS
  209. C       (E.G. THE GRATE) THE FIRST LOCATION IS FOLLOWED WITH THE SECOND, AND
  210. C       THE OBJECT IS ASSUMED TO BE IMMOVABLE.
  211. C  SECTION 8: ACTION DEFAULTS.  EACH LINE CONTAINS AN "ACTION-VERB" NUMBER AND
  212. C       THE INDEX (IN SECTION 6) OF THE DEFAULT MESSAGE FOR THE VERB.
  213. C  SECTION 9: LIQUID ASSETS, ETC.  EACH LINE CONTAINS A NUMBER (N) AND UP TO 20
  214. C       LOCATION NUMBERS.  BIT N (WHERE 0 IS THE UNITS BIT) IS SET IN COND(LOC)
  215. C       FOR EACH LOC GIVEN.  THE COND BITS CURRENTLY ASSIGNED ARE:
  216. C               0       LIGHT
  217. C               1       IF BIT 2 IS ON: ON FOR OIL, OFF FOR WATER
  218. C               2       LIQUID ASSET, SEE BIT 1
  219. C               3       PIRATE DOESN'T GO HERE UNLESS FOLLOWING PLAYER
  220. C       OTHER BITS ARE USED TO INDICATE AREAS OF INTEREST TO "HINT" ROUTINES:
  221. C               4       TRYING TO GET INTO CAVE
  222. C               5       TRYING TO CATCH BIRD
  223. C               6       TRYING TO DEAL WITH SNAKE
  224. C               7       LOST IN MAZE
  225. C               8       PONDERING DARK ROOM
  226. C               9       AT WITT'S END
  227. C       COND(LOC) IS SET TO 2, OVERRIDING ALL OTHER BITS, IF LOC HAS FORCED
  228. C       MOTION.
  229. C  SECTION 10: CLASS MESSAGES.  EACH LINE CONTAINS A NUMBER (N), A TAB, AND A
  230. C       MESSAGE DESCRIBING A CLASSIFICATION OF PLAYER.  THE SCORING SECTION
  231. C       SELECTS THE APPROPRIATE MESSAGE, WHERE EACH MESSAGE IS CONSIDERED TO
  232. C       APPLY TO PLAYERS WHOSE SCORES ARE HIGHER THAN THE PREVIOUS N BUT NOT
  233. C       HIGHER THAN THIS N.  NOTE THAT THESE SCORES PROBABLY CHANGE WITH EVERY
  234. C       MODIFICATION (AND PARTICULARLY EXPANSION) OF THE PROGRAM.
  235. C  SECTION 11: HINTS.  EACH LINE CONTAINS A HINT NUMBER (CORRESPONDING TO A
  236. C       COND BIT, SEE SECTION 9), THE NUMBER OF TURNS HE MUST BE AT THE RIGHT
  237. C       LOC(S) BEFORE TRIGGERING THE HINT, THE POINTS DEDUCTED FOR TAKING THE
  238. C       HINT, THE MESSAGE NUMBER (SECTION 6) OF THE QUESTION, AND THE MESSAGE
  239. C       NUMBER OF THE HINT.  THESE VALUES ARE STASHED IN THE "HINTS" ARRAY.
  240. C       HNTMAX IS SET TO THE MAX HINT NUMBER (<= HNTSIZ).  NUMBERS 1-3 ARE
  241. C       UNUSABLE SINCE COND BITS ARE OTHERWISE ASSIGNED, SO 2 IS USED TO
  242. C       REMEMBER IF HE'S READ THE CLUE IN THE REPOSITORY, AND 3 IS USED TO
  243. C       REMEMBER WHETHER HE ASKED FOR INSTRUCTIONS (GETS MORE TURNS, BUT LOSES
  244. C       POINTS).
  245. C  SECTION 12: MAGIC MESSAGES. IDENTICAL TO SECTION 6 EXCEPT PUT IN A SEPARATE
  246. C       SECTION FOR EASIER REFERENCE.  MAGIC MESSAGES ARE USED BY THE STARTUP,
  247. C       MAINTENANCE MODE, AND RELATED ROUTINES.
  248. C  SECTION 0: END OF DATABASE.
  249. C  READ THE DATABASE IF WE HAVE NOT YET DONE SO
  250.         IF(SETUP.NE.0)GOTO 1100
  251.         RTXSIZ = 205
  252.         HNTSIZ = 20
  253.         MAGSIZ = 35
  254.         TRVSIZ = 750
  255.       VRBSIZ=35
  256.         CLSMAX = 12
  257.       WRITE(3,1000)
  258. 1000    FORMAT(' Have patience.  It takes a while to initialize...')
  259. C  CLEAR OUT THE VARIOUS TEXT-POINTER ARRAYS.  ALL TEXT IS STORED IN DISK
  260. C  FILE (RANDOM ACCESS ON UNIT 2).  THE TEXT-POINTER ARRAYS CONTAIN RECORD
  261. C  NUMBERS IN THE FILE.  STEXT(N) IS SHORT DESCRIPTION OF LOCATION N.
  262. C  LTEXT(N) IS LONG DESCRIPTION.  PTEXT(N) POINTS TO MESSAGE FOR PROP(N)=0.
  263. C  SUCCESSIVE PROP MESSAGES ARE FOUND BY CHASING POINTERS.  RTEXT CONTAINS
  264. C  SECTION 6'S STUFF.  CTEXT(N) POINTS TO A PLAYER-CLASS MESSAGE.  MTEXT IS FOR
  265. C  SECTION 12.  WE ALSO CLEAR COND.  SEE DESCRIPTION OF SECTION 9 FOR DETAILS.
  266.         DO 1001 I=1,300
  267.         IF(I.LE.100)PTEXT(I)=0
  268.         IF(I.LE.RTXSIZ)RTEXT(I)=0
  269.         IF(I.LE.CLSMAX)CTEXT(I)=0
  270.         IF(I.LE.MAGSIZ)MTEXT(I)=0
  271.         IF(I.GT.LOCSIZ)GOTO 1001
  272.         STEXT(I)=0
  273.         LTEXT(I)=0
  274.         COND(I)=0
  275. 1001    CONTINUE
  276.       DO 5001 IJ=1,100
  277.       FIXD(IJ)=0
  278. 5001  PLAC(IJ)=0
  279.       CALL OPEN(6,'ADVENTURMSG',1)
  280.       CALL OPEN(7,'ADVENTURDAT',2)
  281.         ASCVAR = 1
  282.         SETUP=1
  283.         LINUSE=1
  284.         TRVS=1
  285.         CLSSES=1
  286. C  START NEW DATA SECTION.  SECT IS THE SECTION NUMBER.
  287. 1002    READ(7,1003)SECT
  288. 1003    FORMAT(1X,I7)
  289.        WRITE(3,10030) SECT
  290. 10030  FORMAT(' NOW LOADING SECTION',I3)
  291.         OLDLOC=-1
  292.       IGOTO=SECT+1
  293.         GOTO(1100,1004,1004,1030,1040,1004,1004,1050,1060,1070,1004,
  294.      1    1080,1004),IGOTO
  295. C             (0)  (1)  (2)  (3)  (4)  (5)  (6)  (7)  (8)  (9)  (10)
  296. C            (11) (12)
  297.         CALL BUG(9)
  298. C  SECTIONS 1, 2, 5, 6, 10, 12.  READ MESSAGES AND SET UP POINTERS.
  299. 1004    READ(7,1005) LOC,LINES
  300. 1005    FORMAT(1X,I4,15A4)
  301. C     DO 3005 IJ=1,2
  302.     ASC2=MOD((ASCVAR-1),2)+1
  303.     LOC2(ASC2)=LOC
  304.     DO 3006 IJ=1,15
  305. 3006    LINES2(IJ,ASC2)=LINES(IJ)
  306.     ASC3=(ASCVAR-1)/2+1
  307. 3005    IF (ASC2.EQ.2) WRITE(6,REC=ASC3) LOC2,LINES2
  308.       ASCVAR=ASCVAR+1
  309.       DO 2004 I=1,60
  310.       IF (LLINES(I) .EQ. CR) LLINES(I)=BL
  311. 2004  CONTINUE
  312.         LINUSE = ASCVAR-1
  313.         IF(LOC .EQ. -1) GO TO 1002
  314.         IF(LOC .EQ. OLDLOC) GO TO 1020
  315.         IF(SECT.EQ.12)GOTO 1013
  316.         IF(SECT.EQ.10)GOTO 1012
  317.         IF(SECT.EQ.6)GOTO 1011
  318.         IF(SECT.EQ.5)GOTO 1010
  319.         IF(SECT.EQ.1)GOTO 1008
  320.         STEXT(LOC)=LINUSE
  321.         GOTO 1020
  322. 1008    LTEXT(LOC)=LINUSE
  323.         GOTO 1020
  324. 1010    IF(LOC.GT.0.AND.LOC.LE.100)PTEXT(LOC)=LINUSE
  325.         GOTO 1020
  326. 1011    IF(LOC .GT. RTXSIZ) WRITE(3,2000)LOC,RTXSIZ
  327. 2000  FORMAT(1X,2I7)
  328.         IF(LOC .GT. RTXSIZ) CALL BUG(6)
  329.         RTEXT(LOC)=LINUSE
  330.         GOTO 1020
  331. 1012    CTEXT(CLSSES)=LINUSE
  332.         CVAL(CLSSES)=LOC
  333.         CLSSES=CLSSES+1
  334.         GOTO 1020
  335. 1013    IF(LOC.GT.MAGSIZ)CALL BUG(6)
  336.         MTEXT(LOC)=LINUSE
  337. 1020    OLDLOC = LOC
  338.         IF(LINUSE .GE. 2100) CALL BUG(2)
  339.         GOTO 1004
  340. C  THE STUFF FOR SECTION 3 IS ENCODED HERE.  EACH "FROM-LOCATION" GETS A
  341. C  CONTIGUOUS SECTION OF THE "TRAVEL" ARRAY.  EACH ENTRY IN TRAVEL IS
  342. C  NEWLOC*1000 + KEYWORD (FROM SECTION 4, MOTION VERBS), AND IS NEGATED IF
  343. C  THIS IS THE LAST ENTRY FOR THIS LOCATION.  KEY(N) IS THE INDEX IN TRAVEL
  344. C  OF THE FIRST OPTION AT LOCATION N.
  345. 1030    READ(7,2031)LOC,ANWLOC,ITK
  346. 2031  FORMAT(1X,I10,F10.0,99I10)
  347. 1031    FORMAT(1X,99I10)
  348.         IF(LOC.EQ.-1)GOTO 1002
  349.         IF(KEY(LOC).NE.0)GOTO 1033
  350.         KEY(LOC)=TRVS
  351.         GOTO 1035
  352. 1033    TRAVEL(2,TRVS-1)=-TRAVEL(2,TRVS-1)
  353. 1035    DO 1037 L=1,20
  354.         IF(ITK(L).EQ.0)GO TO 1039
  355.       TRAVEL(1,TRVS)=ANWLOC/1000.
  356.       TRAVEL(2,TRVS)=AMOD(ANWLOC,1000.)
  357.       TRAVEL(3,TRVS)=ITK(L)
  358.         TRVS=TRVS+1
  359.         IF(TRVS.EQ.TRVSIZ)CALL BUG(3)
  360. 1037    CONTINUE
  361. 1039    TRAVEL(2,TRVS-1)=-TRAVEL(2,TRVS-1)
  362.         GOTO 1030
  363. C  HERE WE READ IN THE VOCABULARY.  KTAB(N) IS THE WORD NUMBER, ATAB(N) IS
  364. C  THE CORRESPONDING WORD.  THE -1 AT THE END OF SECTION 4 IS LEFT IN KTAB
  365. C  AS AN END-MARKER.
  366. 1040    DO 1042 TABNDX=1,TABSIZ
  367. 1043    READ(7,1041)KTAB(TABNDX),ATAB(TABNDX)
  368. 1041    FORMAT(1X,I10,A4)
  369.         IF(KTAB(TABNDX).EQ.-1)GOTO 1002
  370. 1042    CONTINUE
  371.         CALL BUG(4)
  372. C  READ IN THE INITIAL LOCATIONS FOR EACH OBJECT.  ALSO THE IMMOVABILITY INFO.
  373. C  PLAC CONTAINS INITIAL LOCATIONS OF OBJECTS.  FIXD IS -1 FOR IMMOVABLE
  374. C  OBJECTS (INCLUDING THE SNAKE), OR = SECOND LOC FOR TWO-PLACED OBJECTS.
  375. 1050    READ(7,1031)OBJ,J,K
  376. C     WRITE(3,1031)OBJ,J,K
  377.         IF(OBJ.EQ.-1)GOTO 1002
  378.         PLAC(OBJ)=J
  379.         FIXD(OBJ)=K
  380.         GOTO 1050
  381. C  READ DEFAULT MESSAGE NUMBERS FOR ACTION VERBS, STORE IN ACTSPK.
  382. 1060    READ(7,1031)VERB,J
  383.         IF(VERB.EQ.-1)GOTO 1002
  384.         ACTSPK(VERB)=J
  385.         GOTO 1060
  386. C  READ INFO ABOUT AVAILABLE LIQUIDS AND OTHER CONDITIONS, STORE IN COND.
  387. 1070    READ(7,1031)K,ITK
  388. C      WRITE(2,2070)K,TK
  389. C2070  FORMAT(1X,I3,3X,20I3)
  390.         IF(K.EQ.-1)GOTO 1002
  391.         DO 1071 I=1,20
  392.         LOC=ITK(I)
  393.         IF(LOC.EQ.0)GOTO 1070
  394. C      LTMP=BITSET(LOC,K)
  395. C      ITMP=COND(LOC)+2**K
  396. C      WRITE(2,2071)K,I,LOC,COND(LOC),LTMP,ITMP
  397. C2071  FORMAT(1X,'K=',I2,'  I=',I3,'  LOC=',I3,'  COND(LOC)=',
  398. C     1  I6,'   BITSET(LOC,K)=',L7,'   NEW COND(LOC)=',I6)
  399.         IF(BITSET(LOC,K))CALL BUG(8)
  400. 1071    COND(LOC)=COND(LOC)+2**K
  401.         GOTO 1070
  402. C  READ DATA FOR HINTS.
  403. 1080    HNTMAX=0
  404. 1081    READ(7,1031)K,ITK
  405.         IF(K.EQ.-1)GOTO 1002
  406.         IF(K.EQ.0)GOTO 1081
  407.         IF(K.LT.0.OR.K.GT.HNTSIZ)CALL BUG(7)
  408.         DO 1083 I=1,4
  409. 1083    HINTS(K,I)=ITK(I)
  410.         HNTMAX=MAX0(HNTMAX,K)
  411.         GOTO 1081
  412. C  FINISH CONSTRUCTING INTERNAL DATA FORMAT
  413. C  IF SETUP=2 WE DON'T NEED TO DO THIS.  IT'S ONLY NECESSARY IF WE HAVEN'T DONE
  414. C  IT AT ALL OR IF THE PROGRAM HAS BEEN RUN SINCE THEN.
  415. 1100  CONTINUE
  416. C     WRITE(3,1031)PLAC(3),FIXD(3),PLAC(13),FIXD(13)
  417.         IF(SETUP.EQ.2)GOTO 1
  418.         IF(SETUP.EQ.-1) GOTO1
  419. C  HAVING READ IN THE DATABASE, CERTAIN THINGS ARE NOW CONSTRUCTED.  PROPS ARE
  420. C  SET TO ZERO.  WE FINISH SETTING UP COND BY CHECKING FOR FORCED-MOTION TRAVEL
  421. C  ENTRIES.  THE PLAC AND FIXD ARRAYS ARE USED TO SET UP ATLOC(N) AS THE FIRST
  422. C  OBJECT AT LOCATION N, AND LINK(OBJ) AS THE NEXT OBJECT AT THE SAME LOCATION
  423. C  AS OBJ.  (OBJ>100 INDICATES THAT FIXED(OBJ-100)=LOC; LINK(OBJ) IS STILL THE
  424. C  CORRECT LINK TO USE.)  ABB IS ZEROED; IT CONTROLS WHETHER THE ABBREVIATED
  425. C  DESCRIPTION IS PRINTED.  COUNTS MOD 5 UNLESS "LOOK" IS USED.
  426.         DO 1101 I=1,100
  427.         PLACE(I)=0
  428.         PROP(I)=0
  429.         LINK(I)=0
  430. 1101    LINK(I+100)=0
  431. C     PAUSE 1101
  432.         DO 1102 I=1,LOCSIZ
  433.         ABB(I)=0
  434.         IF(LTEXT(I).EQ.0.OR.KEY(I).EQ.0)GOTO 1102
  435.         K=KEY(I)
  436.         IF (TRAVEL(3,K) .EQ. 1)COND(I)=2
  437. 1102    ATLOC(I)=0
  438. C     PAUSE 1102
  439. C  SET UP THE ATLOC AND LINK ARRAYS AS DESCRIBED ABOVE.  WE'LL USE THE DROP
  440. C  SUBROUTINE, WHICH PREFACES NEW OBJECTS ON THE LISTS.  SINCE WE WANT THINGS
  441. C  IN THE OTHER ORDER, WE'LL RUN THE LOOP BACKWARDS.  IF THE OBJECT IS IN TWO
  442. C  LOCS, WE DROP IT TWICE.  THIS ALSO SETS UP "PLACE" AND "FIXED" AS COPIES OF
  443. C  "PLAC" AND "FIXD".  ALSO, SINCE TWO-PLACED OBJECTS ARE TYPICALLY BEST
  444. C  DESCRIBED LAST, WE'LL DROP THEM FIRST.
  445.         DO 1106 I=1,100
  446.         K=101-I
  447.         IF(FIXD(K).LE.0)GOTO 1106
  448.         CALL DROP(K+100,FIXD(K))
  449.         CALL DROP(K,PLAC(K))
  450. 1106    CONTINUE
  451. C     PAUSE 1106
  452. C     WRITE(3,1031)PLAC(3),FIXD(3),PLAC(13),FIXD(13)
  453.         DO 1107 I=1,100
  454.         K=101-I
  455.         FIXED(K)=FIXD(K)
  456.         IF(PLAC(K).NE.0.AND.FIXD(K).LE.0)CALL DROP(K,PLAC(K))
  457. 1107  CONTINUE
  458. C     PAUSE 1107
  459. C     WRITE(3,1031)PLAC(3),FIXD(3),PLAC(13),FIXD(13)
  460. C  TREASURES, AS NOTED EARLIER, ARE OBJECTS 50 THROUGH MAXTRS (CURRENTLY 79).
  461. C  THEIR PROPS ARE INITIALLY -1, AND ARE SET TO 0 THE FIRST TIME THEY ARE
  462. C  DESCRIBED.  TALLY KEEPS TRACK OF HOW MANY ARE NOT YET FOUND, SO WE KNOW
  463. C  WHEN TO CLOSE THE CAVE.  TALLY2 COUNTS HOW MANY CAN NEVER BE FOUND (E.G. IF
  464. C  LOST BIRD OR BRIDGE).
  465.         MAXTRS=79
  466.         TALLY=0
  467.         TALLY2=0
  468.         DO 1200 I=50,MAXTRS
  469.         IF(PTEXT(I).NE.0)PROP(I)=-1
  470. 1200    TALLY=TALLY-PROP(I)
  471. C     PAUSE 1200
  472. C  CLEAR THE HINT STUFF.  HINTLC(I) IS HOW LONG HE'S BEEN AT LOC WITH COND BIT
  473. C  I.  HINTED(I) IS TRUE IFF HINT I HAS BEEN USED.
  474.         DO 1300 I=1,HNTMAX
  475.         HINTED(I)=.FALSE.
  476. 1300    HINTLC(I)=0
  477. C     PAUSE 1300
  478. C  DEFINE SOME HANDY MNEMONICS.  THESE CORRESPOND TO OBJECT NUMBERS.
  479.         KEYS=VOCAB('keys',1)
  480.         LAMP=VOCAB('lamp',1)
  481.         GRATE=VOCAB('grat',1)
  482.         CAGE=VOCAB('cage',1)
  483.         ROD=VOCAB('rod ',1)
  484.         ROD2=ROD+1
  485.         STEPS=VOCAB('step',1)
  486.         BIRD=VOCAB('bird',1)
  487.         DOOR=VOCAB('door',1)
  488.         PILLOW=VOCAB('pill',1)
  489.         SNAKE=VOCAB('snak',1)
  490.         FISSUR=VOCAB('fiss',1)
  491.         TABLET=VOCAB('tabl',1)
  492.         CLAM=VOCAB('clam',1)
  493.         OYSTER=VOCAB('oyst',1)
  494.         MAGZIN=VOCAB('maga',1)
  495.         DWARF=VOCAB('dwar',1)
  496.         KNIFE=VOCAB('knif',1)
  497.         FOOD=VOCAB('food',1)
  498.         BOTTLE=VOCAB('bott',1)
  499.         WATER=VOCAB('wate',1)
  500.         OIL=VOCAB('oil ',1)
  501.         PLANT=VOCAB('plan',1)
  502.         PLANT2=PLANT+1
  503.         AXE=VOCAB('axe ',1)
  504.         MIRROR=VOCAB('mirr',1)
  505.         DRAGON=VOCAB('drag',1)
  506.         CHASM=VOCAB('chas',1)
  507.         TROLL=VOCAB('trol',1)
  508.         TROLL2=TROLL+1
  509.         BEAR=VOCAB('bear',1)
  510.         MESSAG=VOCAB('mess',1)
  511.         VEND=VOCAB('vend',1)
  512.         BATTER=VOCAB('batt',1)
  513. C  OBJECTS FROM 50 THROUGH WHATEVER ARE TREASURES.  HERE ARE A FEW.
  514.         NUGGET=VOCAB('gold',1)
  515.         COINS=VOCAB('coin',1)
  516.         CHEST=VOCAB('ches',1)
  517.         EGGS=VOCAB('eggs',1)
  518.         TRIDNT=VOCAB('trid',1)
  519.         VASE=VOCAB('vase',1)
  520.         EMRALD=VOCAB('emer',1)
  521.         PYRAM=VOCAB('pyra',1)
  522.         PEARL=VOCAB('pear',1)
  523.         RUG=VOCAB('rug ',1)
  524.         CHAIN=VOCAB('chai',1)
  525. C  THESE ARE MOTION-VERB NUMBERS.
  526.         BACK=VOCAB('back',0)
  527.         LOOK=VOCAB('look',0)
  528.         CAVE=VOCAB('cave',0)
  529.         NULL=VOCAB('null',0)
  530.         ENTRNC=VOCAB('entr',0)
  531.         DPRSSN=VOCAB('depr',0)
  532. C  AND SOME ACTION VERBS.
  533.         SAY=VOCAB('say ',2)
  534.         LOCK=VOCAB('lock',2)
  535.         THROW=VOCAB('thro',2)
  536.         FIND=VOCAB('find',2)
  537.         INVENT=VOCAB('inve',2)
  538. C  INITIALISE THE DWARVES.  DLOC IS LOC OF DWARVES, HARD-WIRED IN.  ODLOC IS
  539. C  PRIOR LOC OF EACH DWARF, INITIALLY GARBAGE.  DALTLC IS ALTERNATE INITIAL LOC
  540. C  FOR DWARF, IN CASE ONE OF THEM STARTS OUT ON TOP OF THE ADVENTURER.  (NO 2
  541. C  OF THE 5 INITIAL LOCS ARE ADJACENT.)  DSEEN IS TRUE IF DWARF HAS SEEN HIM.
  542. C  DFLAG CONTROLS THE LEVEL OF ACTIVATION OF ALL THIS:
  543. C       0       NO DWARF STUFF YET (WAIT UNTIL REACHES HALL OF MISTS)
  544. C       1       REACHED HALL OF MISTS, BUT HASN'T MET FIRST DWARF
  545. C       2       MET FIRST DWARF, OTHERS START MOVING, NO KNIVES THROWN YET
  546. C       3       A KNIFE HAS BEEN THROWN (FIRST SET ALWAYS MISSES)
  547. C       3+      DWARVES ARE MAD (INCREASES THEIR ACCURACY)
  548. C  SIXTH DWARF IS SPECIAL (THE PIRATE).  HE ALWAYS STARTS AT HIS CHEST'S
  549. C  EVENTUAL LOCATION INSIDE THE MAZE.  THIS LOC IS SAVED IN CHLOC FOR REF.
  550. C  THE DEAD END IN THE OTHER MAZE HAS ITS LOC STORED IN CHLOC2.
  551.         CHLOC=114
  552.         CHLOC2=140
  553.         DO 1700 I=1,6
  554. 1700    DSEEN(I)=.FALSE.
  555. C     PAUSE 1700
  556.         DFLAG=0
  557.         DLOC(1)=19
  558.         DLOC(2)=27
  559.         DLOC(3)=33
  560.         DLOC(4)=44
  561.         DLOC(5)=64
  562.         DLOC(6)=CHLOC
  563.         DALTLC=18
  564. C  OTHER RANDOM FLAGS AND COUNTERS, AS FOLLOWS:
  565. C       TURNS   TALLIES HOW MANY COMMANDS HE'S GIVEN (IGNORES YES/NO)
  566. C       LIMIT   LIFETIME OF LAMP (NOT SET HERE)
  567. C       IWEST   HOW MANY TIMES HE'S SAID "WEST" INSTEAD OF "W"
  568. C       KNFLOC  0 IF NO KNIFE HERE, LOC IF KNIFE HERE, -1 AFTER CAVEAT
  569. C       DETAIL  HOW OFTEN WE'VE SAID "NOT ALLOWED TO GIVE MORE DETAIL"
  570. C       ABBNUM  HOW OFTEN WE SHOULD PRINT NON-ABBREVIATED DESCRIPTIONS
  571. C       MAXDIE  NUMBER OF REINCARNATION MESSAGES AVAILABLE (UP TO 5)
  572. C       NUMDIE  NUMBER OF TIMES KILLED SO FAR
  573. C       HOLDNG  NUMBER OF OBJECTS BEING CARRIED
  574. C       DKILL   NUMBER OF DWARVES KILLED (UNUSED IN SCORING, NEEDED FOR MSG)
  575. C       FOOBAR  CURRENT PROGRESS IN SAYING "FEE FIE FOE FOO".
  576. C       BONUS   USED TO DETERMINE AMOUNT OF BONUS IF HE REACHES CLOSING
  577. C       CLOCK1  NUMBER OF TURNS FROM FINDING LAST TREASURE TILL CLOSING
  578. C       CLOCK2  NUMBER OF TURNS FROM FIRST WARNING TILL BLINDING FLASH
  579. C       LOGICALS WERE EXPLAINED EARLIER
  580.         TURNS=0
  581.         LMWARN=.FALSE.
  582.         IWEST=0
  583.         KNFLOC=0
  584.         DETAIL=0
  585.         ABBNUM=5
  586.         DO 1800 I2=1,5
  587.       I=I2-1
  588.       IF(RTEXT(2*I+81).NE.0)MAXDIE=I+1
  589. 1800  CONTINUE
  590. C     PAUSE 1800
  591.         NUMDIE=0
  592.         HOLDNG=0
  593.         DKILL=0
  594.         FOOBAR=0
  595.         BONUS=0
  596.         CLOCK1=30
  597.         CLOCK2=50
  598.         SAVED=0
  599.         CLOSNG=.FALSE.
  600.         PANIC=.FALSE.
  601.         CLOSED=.FALSE.
  602.         GAVEUP=.FALSE.
  603.         SCORNG=.FALSE.
  604. C  IF SETUP=1, REPORT ON AMOUNT OF ARRAYS ACTUALLY USED, TO PERMIT REDUCTIONS.
  605.         IF(SETUP.NE.1)GOTO 1
  606.         SETUP=2
  607.         DO 1998 K=1,LOCSIZ
  608.         KK=LOCSIZ+1-K
  609.         IF(LTEXT(KK).NE.0)GOTO 1997
  610. 1998    CONTINUE
  611. C     PAUSE 1998
  612.         OBJ=0
  613. 1997  CONTINUE
  614.         DO 1996 K=1,100
  615. 1996    IF(PTEXT(K).NE.0)OBJ=OBJ+1
  616. C     PAUSE 1996
  617.         DO 1995 K=1,TABNDX
  618. 1995    IF(KTAB(K)/1000.EQ.2)VERB=KTAB(K)-2000
  619. C     PAUSE 1995
  620.         DO 1994 K=1,RTXSIZ
  621.         J=RTXSIZ+1-K
  622.         IF(RTEXT(J).NE.0)GOTO 1993
  623. 1994    CONTINUE
  624. C     PAUSE 1994
  625. 1993  CONTINUE
  626.         DO 1992 K=1,MAGSIZ
  627.         I=MAGSIZ+1-K
  628.         IF(MTEXT(I).NE.0)GOTO 1991
  629. 1992    CONTINUE
  630. C     PAUSE 1992
  631. 1991  CONTINUE
  632.         K=100
  633.        WRITE(3,1999)LINUSE,TRVS,TRVSIZ,TABNDX,TABSIZ,KK
  634.      1       ,LOCSIZ,OBJ,K,VERB,VRBSIZ,J,RTXSIZ,CLSSES,CLSMAX
  635.      2       ,HNTMAX,HNTSIZ,I,MAGSIZ
  636. 1999    FORMAT (' TABLE SPACE USED:'/
  637.      1       ' ',6X,'    ',I6,' LINES OF MESSAGES'/
  638.      2       ' ',I6,' OF ',I6,' TRAVEL OPTIONS'/
  639.      3       ' ',I6,' OF ',I6,' VOCABULARY WORDS'/
  640.      4       ' ',I6,' OF ',I6,' LOCATIONS'/
  641.      5       ' ',I6,' OF ',I6,' OBJECTS'/
  642.      6       ' ',I6,' OF ',I6,' ACTION VERBS'/
  643.      7       ' ',I6,' OF ',I6,' RTEXT MESSAGES'/
  644.      8       ' ',I6,' OF ',I6,' CLASS MESSAGES'/
  645.      9       ' ',I6,' OF ',I6,' HINTS'/
  646.      1       ' ',I6,' OF ',I6,' MAGIC MESSAGES'/
  647.      2       )
  648. C  FINALLY, SINCE WE'RE CLEARLY SETTING THINGS UP FOR THE FIRST TIME...
  649.         LOC = 1
  650. C       PAUSE 'INIT DONE'
  651.    1  ENDFILE 7
  652.     ASC3=(ASCVAR-1)/2+1
  653.     IF (MOD(ASCVAR,2).EQ.0)WRITE(6,REC=ASC3) LOC2,LINES2
  654.       ENDFILE 6
  655. C
  656.       CALL INSUB
  657. C     WRITE(3,1031)PLAC(3),FIXD(3),PLAC(13),FIXD(13)
  658. C
  659. C
  660. C        WRITE COMMON STUFF FROM INITIALIZATION
  661. C
  662.       CALL OPEN(6,'COMMON  DAT',1)
  663. C
  664.       WRITE(6) LINES,ASCVAR,BLKLIN,TABSIZ,ATLOC,LINK,PLACE,
  665.      1  FIXED,HOLDNG,MTEXT,PTEXT,ABB,WKDAY,WKEND,HOLID,HBEGIN,
  666.      2  HEND,HNAME,SHORT,MAGIC,MAGNM,LATNCY,SAVED,SAVET,SETUP,
  667.      3  LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,KEY,PLAC,
  668.      4  FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,
  669.      5  HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,
  670.      6  GRATE,CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,
  671.      7  FISSUR,TABLET,CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,
  672.      8  BOTTLE,WATER,OIL,PLANT,PLANT2,AXE,MIRROR,DRAGON,CHASM,
  673.      9  TROLL,TROLL2,BEAR,MESSAG,VEND,BATTER,NUGGET,COINS,
  674.      A  CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM,PEARL,RUG,CHAIN,
  675.      B  BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,THROW,FIND,
  676.      C  INVENT,TURNS,LMWARN,IWEST,KNFLOC,DETAIL,ABBNUM,NUMDIE,
  677.      D  MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,CLOSNG,PANIC,
  678.      E  CLOSED,GAVEUP,SCORNG,I,RTXSIZ,CLSMAX,MAGSIZ,LOCSIZ,
  679.      F  CTEXT,SECT,TRVSIZ,TABNDX,OBJ,J,K,VERB,
  680.      G  HNTSIZ,MAXTRS,HINTED,HNTLOC,KK
  681. C
  682.       ENDFILE 6
  683. C
  684. C     WRITE(3,1031)PLAC(3),FIXD(3),PLAC(13),FIXD(13)
  685.         RETURN
  686.         END
  687.