|
|
1.1 ! root 1: #include "files.h" ! 2: ! 3: #ifndef INDXFILE ! 4: #define INDXFILE '/usr/games/lib/dunlib/dindx.dat' ! 5: #endif ! 6: #ifndef TEXTFILE ! 7: #define TEXTFILE '/usr/games/lib/dunlib/dtext.dat' ! 8: #endif ! 9: #ifndef WIZARDID ! 10: #define WIZARDID 0 ! 11: #endif ! 12: ! 13: C INIT-- DUNGEON INITIALIZATION SUBROUTINE ! 14: C ! 15: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 ! 16: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED ! 17: C WRITTEN BY R. M. SUPNIK ! 18: C ! 19: C DECLARATIONS ! 20: C ! 21: LOGICAL FUNCTION INIT(X) ! 22: IMPLICIT INTEGER (A-Z) ! 23: #ifndef PDP ! 24: LOGICAL PROTCT ! 25: INTEGER DATARR(3) ! 26: #endif PDP ! 27: #include "parser.h" ! 28: #include "gamestate.h" ! 29: #include "state.h" ! 30: #include "screen.h" ! 31: #include "mindex.h" ! 32: C ! 33: C MISCELLANEOUS VARIABLES ! 34: C ! 35: COMMON /STAR/ MBASE,STRBIT ! 36: COMMON /VERS/ VMAJ,VMIN,VEDIT ! 37: COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC ! 38: #include "io.h" ! 39: #include "debug.h" ! 40: COMMON /HYPER/ HFACTR ! 41: #include "rooms.h" ! 42: #include "rflag.h" ! 43: #include "rindex.h" ! 44: #include "exits.h" ! 45: #include "curxt.h" ! 46: #include "xpars.h" ! 47: #include "objects.h" ! 48: #include "oindex.h" ! 49: #include "clock.h" ! 50: #include "villians.h" ! 51: #include "advers.h" ! 52: #include "flags.h" ! 53: C INIT, PAGE 2 ! 54: C ! 55: #ifndef PDP ! 56: #ifdef SYSV ! 57: C make output unbuffered ! 58: call unbuf ! 59: C ! 60: #endif ! 61: C FIRST CHECK FOR PROTECTION VIOLATION ! 62: C ! 63: IF(PROTCT(X)) GO TO 10000 ! 64: C !PROTECTION VIOLATION? ! 65: PRINT 10100 ! 66: #ifdef NOCC ! 67: 10100 FORMAT('There appears before you a threatening figure clad ' ! 68: & 'all over'/'in heavy black armor. His legs seem like the ' ! 69: & 'massive trunk'/'of the oak tree. His broad shoulders and ' ! 70: & 'helmeted head loom'/'high over your own puny frame, and ' ! 71: & 'you realize that his powerful'/'arms could easily crush the ' ! 72: & 'very life from your body. There'/'hangs from his belt a ' ! 73: & 'veritable arsenal of deadly weapons:'/'sword, mace, ball ' ! 74: & 'and chain, dagger, lance, and trident.'/'He speaks with a ' ! 75: & 'commanding voice:'//20X,'"You shall not pass."'//'As ' ! 76: & 'he grabs you by the neck all grows dim about you.') ! 77: #else NOCC ! 78: 10100 FORMAT(' There appears before you a threatening figure clad ' ! 79: & 'all over'/' in heavy black armor. His legs seem like the ' ! 80: & 'massive trunk'/' of the oak tree. His broad shoulders and ' ! 81: & 'helmeted head loom'/' high over your own puny frame, and ' ! 82: & 'you realize that his powerful'/' arms could easily crush the ' ! 83: & 'very life from your body. There'/' hangs from his belt a ' ! 84: & 'veritable arsenal of deadly weapons:'/' sword, mace, ball ' ! 85: & 'and chain, dagger, lance, and trident.'/' He speaks with a ' ! 86: & 'commanding voice:'//20X,'"You shall not pass."'//' As ' ! 87: & 'he grabs you by the neck all grows dim about you.') ! 88: #endif NOCC ! 89: CALL EXIT ! 90: #endif PDP ! 91: C ! 92: C NOW START INITIALIZATION PROPER ! 93: C ! 94: #ifdef PDP ! 95: C ! 96: C Note: arrays FLAGS & SWITCH are initialized in the following ! 97: C DATA statements, instead of using DO loops and assignments ! 98: C as used before. This saves some code space. ! 99: C ! 100: DATA FLAGS/.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE., ! 101: & .FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE., ! 102: & .FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE., ! 103: & .TRUE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.TRUE., ! 104: & .FALSE.,.FALSE.,.FALSE.,.TRUE.,.FALSE.,.FALSE., ! 105: & .FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE., ! 106: & .FALSE.,.FALSE.,.FALSE.,.TRUE.,.TRUE.,.FALSE., ! 107: & .TRUE.,.FALSE.,.FALSE.,.FALSE./ ! 108: C ! 109: DATA SWITCH/0,0,0,0,0,0,0,0,0, ! 110: & 4,0,270,0,0,0,0,0, ! 111: & 1,1,0,0,10/ ! 112: C ! 113: C Note: SWITCH(13) or MLOC is initialized equal to MRB later. ! 114: C ! 115: C ! 116: DATA LTSHFT/10/ ! 117: DATA EGSCOR/0/ ! 118: DATA EGMXSC/0/ ! 119: DATA MXLOAD/100/ ! 120: DATA RWSCOR/0/ ! 121: DATA DEATHS/0/ ! 122: DATA MOVES/0/ ! 123: DATA PLTIME/0/ ! 124: DATA MUNGRM/0/ ! 125: DATA HS/0/ ! 126: DATA PRSA/0/ ! 127: DATA PRSI/0/ ! 128: DATA PRSO/0/ ! 129: DATA PRSCON/1/ ! 130: DATA OFLAG/0/ ! 131: DATA OACT/0/ ! 132: DATA OSLOT/0/ ! 133: DATA OPREP/0/ ! 134: DATA ONAME/0/ ! 135: DATA THFFLG/.FALSE./ ! 136: DATA THFACT/.TRUE./ ! 137: DATA SWDACT/.FALSE./ ! 138: DATA SWDSTA/0/ ! 139: C ! 140: DATA RECNO/1/ ! 141: DATA MBASE/0/ ! 142: DATA INPCH/5/ ! 143: DATA OUTCH/5/ ! 144: DATA DBCH/2/ ! 145: C ! 146: C INIT, PAGE 3 ! 147: C ! 148: C ! 149: DATA DBGFLG/0/ ! 150: DATA PRSFLG/0/ ! 151: DATA GDTFLG/0/ ! 152: C ! 153: FROMDR=0 ! 154: SCOLRM=0 ! 155: SCOLAC=0 ! 156: INIT=.FALSE. ! 157: MLOC=MRB ! 158: C ! 159: C INIT, PAGE 4 ! 160: C ! 161: C NOW RESTORE FROM EXISTING INDEX FILE. ! 162: C ! 163: call intrd(i) ! 164: call intrd(j) ! 165: call intrd(k) ! 166: IF((I.NE.VMAJ).OR.(J.NE.VMIN)) ! 167: & GO TO 1925 ! 168: C ! 169: call intrd(MXSCOR) ! 170: call intrd(STRBIT) ! 171: call intrd(EGMXSC) ! 172: C ! 173: call intrd(RLNT) ! 174: call intrd(RDESC2) ! 175: call aryrd(200,RDESC1) ! 176: call aryrd(200,REXIT) ! 177: call aryrd(200,RACTIO) ! 178: call aryrd(200,RVAL) ! 179: call aryrd(200,RFLAG) ! 180: C ! 181: call intrd(XLNT) ! 182: call aryrd(900,TRAVEL) ! 183: call intrd(OLNT) ! 184: call aryrd(220,ODESC1) ! 185: call aryrd(220,ODESC2) ! 186: call aryrd(220,ODESCO) ! 187: call aryrd(220,OACTIO) ! 188: call aryrd(220,OFLAG1) ! 189: call aryrd(220,OFLAG2) ! 190: call aryrd(220,OFVAL) ! 191: call aryrd(220,OTVAL) ! 192: call aryrd(220,OSIZE) ! 193: call aryrd(220,OCAPAC) ! 194: call aryrd(220,OROOM) ! 195: call aryrd(220,OADV) ! 196: call aryrd(220,OCAN) ! 197: call aryrd(220,OREAD) ! 198: C ! 199: call intrd(R2LNT) ! 200: call aryrd(20,OROOM2) ! 201: call aryrd(20,RROOM2) ! 202: C ! 203: call intrd(CLNT) ! 204: call aryrd(25,CTICK) ! 205: call aryrd(25,CACTIO) ! 206: C ! 207: do 990 i=1,25 ! 208: cflag(i)=.TRUE. ! 209: call logrd(j) ! 210: if(j.EQ.0) CFLAG(i)=.FALSE. ! 211: 990 continue ! 212: C ! 213: call intrd(VLNT) ! 214: call aryrd(4,VILLNS) ! 215: call aryrd(4,VPROB) ! 216: call aryrd(4,VOPPS) ! 217: call aryrd(4,VBEST) ! 218: call aryrd(4,VMELEE) ! 219: C ! 220: call intrd(ALNT) ! 221: call aryrd(4,AROOM) ! 222: call aryrd(4,ASCORE) ! 223: call aryrd(4,AVEHIC) ! 224: call aryrd(4,AOBJ) ! 225: call aryrd(4,AACTIO) ! 226: call aryrd(4,ASTREN) ! 227: call aryrd(4,AFLAG) ! 228: C ! 229: call intrd(MBASE) ! 230: call intrd(MLNT) ! 231: C ! 232: C The RTEXT array is not used here, and isn't read (it's used ! 233: C in "speak.F") ! 234: C ! 235: call initnd ! 236: C ! 237: C INIT, PAGE 5 ! 238: C ! 239: C THE INTERNAL DATA BASE IS NOW ESTABLISHED. ! 240: C SET UP TO PLAY THE GAME. ! 241: C ! 242: 1025 CALL ITIME(SHOUR,SMIN,SSEC) ! 243: CALL INIRND(or(SHOUR,or(SMIN,SSEC))) ! 244: C ! 245: WINNER=PLAYER ! 246: LASTIT=AOBJ(PLAYER) ! 247: HERE=AROOM(WINNER) ! 248: THFPOS=OROOM(THIEF) ! 249: BLOC=OROOM(BALLO) ! 250: INIT=.TRUE. ! 251: #ifdef debug ! 252: C ! 253: C Normally, PRSFLG is setable in gdt to allow seeing various ! 254: C parse results. Since the pdp version does not have gdt, ! 255: C PRSFLG is set to show full debugging info when debug is enabled. ! 256: C ! 257: PRSFLG=65535 ! 258: #endif debug ! 259: C ! 260: C ! 261: RETURN ! 262: C INIT, PAGE 6 ! 263: C ! 264: C ERRORS-- INIT FAILS. ! 265: C ! 266: 1925 continue ! 267: END ! 268: #else PDP ! 269: 10000 INIT=.FALSE. ! 270: C !ASSUME INIT FAILS. ! 271: MMAX=1050 ! 272: C !SET UP ARRAY LIMITS. ! 273: OMAX=220 ! 274: RMAX=200 ! 275: VMAX=4 ! 276: AMAX=4 ! 277: CMAX=25 ! 278: FMAX=46 ! 279: SMAX=22 ! 280: XMAX=900 ! 281: R2MAX=20 ! 282: DIRMAX=15 ! 283: C ! 284: MLNT=0 ! 285: C !INIT ARRAY COUNTERS. ! 286: OLNT=0 ! 287: RLNT=0 ! 288: VLNT=0 ! 289: ALNT=0 ! 290: CLNT=0 ! 291: XLNT=1 ! 292: R2LNT=0 ! 293: C ! 294: LTSHFT=10 ! 295: C !SET UP STATE VARIABLES. ! 296: MXSCOR=LTSHFT ! 297: EGSCOR=0 ! 298: EGMXSC=0 ! 299: MXLOAD=100 ! 300: RWSCOR=0 ! 301: DEATHS=0 ! 302: MOVES=0 ! 303: PLTIME=0 ! 304: MUNGRM=0 ! 305: HS=0 ! 306: PRSA=0 ! 307: C !CLEAR PARSE VECTOR. ! 308: PRSI=0 ! 309: PRSO=0 ! 310: PRSCON=1 ! 311: OFLAG=0 ! 312: C !CLEAR ORPHANS. ! 313: OACT=0 ! 314: OSLOT=0 ! 315: OPREP=0 ! 316: ONAME=0 ! 317: THFFLG=.FALSE. ! 318: C !THIEF NOT INTRODUCED BUT ! 319: THFACT=.TRUE. ! 320: C !IS ACTIVE. ! 321: SWDACT=.FALSE. ! 322: C !SWORD IS INACTIVE. ! 323: SWDSTA=0 ! 324: C !SWORD IS OFF. ! 325: C ! 326: RECNO=1 ! 327: C !INIT DB FILE POINTER. ! 328: MBASE=0 ! 329: C !INIT MELEE BASE. ! 330: C LOGICAL UNIT NRS: 5=STDIN, 6=STDOUT ! 331: INPCH=5 ! 332: C !TTY INPUT ! 333: OUTCH=6 ! 334: DBCH=2 ! 335: C !DATA BASE. ! 336: C INIT, PAGE 3 ! 337: C ! 338: C INIT ALL ARRAYS. ! 339: C ! 340: DO 5 I=1,CMAX ! 341: C !CLEAR CLOCK EVENTS ! 342: CFLAG(I)=.FALSE. ! 343: CTICK(I)=0 ! 344: CACTIO(I)=0 ! 345: 5 CONTINUE ! 346: C ! 347: DO 10 I=1,FMAX ! 348: C !CLEAR FLAGS. ! 349: FLAGS(I)=.FALSE. ! 350: 10 CONTINUE ! 351: BUOYF=.TRUE. ! 352: C !SOME START AS TRUE. ! 353: EGYPTF=.TRUE. ! 354: CAGETF=.TRUE. ! 355: MR1F=.TRUE. ! 356: MR2F=.TRUE. ! 357: FOLLWF=.TRUE. ! 358: DO 12 I=1,SMAX ! 359: C !CLEAR SWITCHES. ! 360: SWITCH(I)=0 ! 361: 12 CONTINUE ! 362: ORMTCH=4 ! 363: C !NUMBER OF MATCHES. ! 364: LCELL=1 ! 365: PNUMB=1 ! 366: MDIR=270 ! 367: MLOC=MRB ! 368: CPHERE=10 ! 369: C ! 370: DO 15 I=1,R2MAX ! 371: C !CLEAR ROOM 2 ARRAY. ! 372: RROOM2(I)=0 ! 373: OROOM2(I)=0 ! 374: 15 CONTINUE ! 375: C ! 376: DO 20 I=1,XMAX ! 377: C !CLEAR TRAVEL ARRAY. ! 378: TRAVEL(I)=0 ! 379: 20 CONTINUE ! 380: C ! 381: DO 30 I=1,VMAX ! 382: C !CLEAR VILLAINS ARRAYS. ! 383: VOPPS(I)=0 ! 384: VPROB(I)=0 ! 385: VILLNS(I)=0 ! 386: VBEST(I)=0 ! 387: VMELEE(I)=0 ! 388: 30 CONTINUE ! 389: C ! 390: DO 40 I=1,OMAX ! 391: C !CLEAR OBJECT ARRAYS. ! 392: ODESC1(I)=0 ! 393: ODESC2(I)=0 ! 394: ODESCO(I)=0 ! 395: OREAD(I)=0 ! 396: OACTIO(I)=0 ! 397: OFLAG1(I)=0 ! 398: OFLAG2(I)=0 ! 399: OFVAL(I)=0 ! 400: OTVAL(I)=0 ! 401: OSIZE(I)=0 ! 402: OCAPAC(I)=0 ! 403: OCAN(I)=0 ! 404: OADV(I)=0 ! 405: OROOM(I)=0 ! 406: 40 CONTINUE ! 407: C ! 408: RDESC2=0 ! 409: C !CLEAR DESC BASE PTR. ! 410: DO 50 I=1,RMAX ! 411: C !CLEAR ROOM ARRAYS. ! 412: RDESC1(I)=0 ! 413: RACTIO(I)=0 ! 414: RFLAG(I)=0 ! 415: RVAL(I)=0 ! 416: REXIT(I)=0 ! 417: 50 CONTINUE ! 418: C ! 419: DO 60 I=1,MMAX ! 420: C !CLEAR MESSAGE DIRECTORY. ! 421: RTEXT(I)=0 ! 422: 60 CONTINUE ! 423: C ! 424: DO 70 I=1,AMAX ! 425: C !CLEAR ADVENTURER'S ARRAYS. ! 426: AROOM(I)=0 ! 427: ASCORE(I)=0 ! 428: AVEHIC(I)=0 ! 429: AOBJ(I)=0 ! 430: AACTIO(I)=0 ! 431: ASTREN(I)=0 ! 432: AFLAG(I)=0 ! 433: 70 CONTINUE ! 434: C ! 435: DBGFLG=0 ! 436: PRSFLG=0 ! 437: GDTFLG=0 ! 438: C ! 439: C allow setting gdtflg true if user id matches wizard id ! 440: C this way, the wizard doesn't have to recompile to use gdt ! 441: C ! 442: if (getuid() .eq. WIZARDID) gdtflg=1 ! 443: C ! 444: FROMDR=0 ! 445: C !INIT SCOL GOODIES. ! 446: SCOLRM=0 ! 447: SCOLAC=0 ! 448: C INIT, PAGE 4 ! 449: C ! 450: C NOW RESTORE FROM EXISTING INDEX FILE. ! 451: C ! 452: OPEN(UNIT=1,file=INDXFILE,status='OLD', ! 453: #ifdef XELOS ! 454: & FORM='FORMATTED',ACCESS='SEQUENTIAL',ERR=1900,recl=1) ! 455: #else ! 456: & FORM='FORMATTED',ACCESS='SEQUENTIAL',ERR=1900) ! 457: #endif ! 458: rewind(unit=1, err=1900) ! 459: READ(1,130) I,J,K ! 460: C !GET VERSION. ! 461: IF((I.NE.VMAJ).OR.(J.NE.VMIN)) ! 462: & GO TO 1925 ! 463: ! 464: OPEN(UNIT=DBCH,file=TEXTFILE,status='OLD', ! 465: & FORM='UNFORMATTED',ACCESS='DIRECT', ! 466: & recl=76,ERR=1950) ! 467: rewind(unit=dbch, err=1950) ! 468: ! 469: #ifdef debug ! 470: PRINT 150 ! 471: #ifdef NOCC ! 472: 150 FORMAT('RESTORING FROM "dindx.dat"') ! 473: #else NOCC ! 474: 150 FORMAT(' RESTORING FROM "dindx.dat"') ! 475: #endif NOCC ! 476: #endif debug ! 477: READ(1,130) MXSCOR,STRBIT,EGMXSC ! 478: READ(1,130) RLNT,RDESC2,RDESC1,REXIT,RACTIO,RVAL,RFLAG ! 479: READ(1,130) XLNT,TRAVEL ! 480: READ(1,130) OLNT,ODESC1,ODESC2,ODESCO,OACTIO,OFLAG1,OFLAG2, ! 481: & OFVAL,OTVAL,OSIZE,OCAPAC,OROOM,OADV,OCAN, ! 482: & OREAD ! 483: READ(1,130) R2LNT,OROOM2,RROOM2 ! 484: READ(1,130) CLNT,CTICK,CACTIO ! 485: READ(1,135) CFLAG ! 486: READ(1,130) VLNT,VILLNS,VPROB,VOPPS,VBEST,VMELEE ! 487: READ(1,130) ALNT,AROOM,ASCORE,AVEHIC,AOBJ,AACTIO,ASTREN,AFLAG ! 488: READ(1,130) MBASE,MLNT,RTEXT ! 489: C ! 490: CLOSE(1) ! 491: GO TO 1025 ! 492: C !INIT DONE. ! 493: C ! 494: C 130 FORMAT(I8) ! 495: 130 FORMAT(I6) ! 496: 135 FORMAT(L4) ! 497: C INIT, PAGE 5 ! 498: C ! 499: C THE INTERNAL DATA BASE IS NOW ESTABLISHED. ! 500: C SET UP TO PLAY THE GAME. ! 501: C ! 502: 1025 CALL ITIME(SHOUR,SMIN,SSEC) ! 503: C !GET TIME AND DATE. ! 504: C CALL IDATE(I,J,K) ! 505: CALL IDATE(DATARR(1)) ! 506: CALL INIRND(or(DATARR(1),or(DATARR(2),DATARR(3))), ! 507: & or(SHOUR,or(SMIN,SSEC))) ! 508: C ! 509: WINNER=PLAYER ! 510: LASTIT=AOBJ(PLAYER) ! 511: HERE=AROOM(WINNER) ! 512: THFPOS=OROOM(THIEF) ! 513: BLOC=OROOM(BALLO) ! 514: INIT=.TRUE. ! 515: C ! 516: #ifdef debug ! 517: PRINT 1050,RLNT,RMAX,XLNT,XMAX,OLNT,OMAX,MLNT,MMAX, ! 518: & VLNT,VMAX,ALNT,AMAX,CLNT,CMAX,R2LNT,R2MAX ! 519: #ifdef NOCC ! 520: 1050 FORMAT('USED:'/I5,' OF',I5,' ROOMS'/ ! 521: & I5,' OF',I5,' EXITS'/ ! 522: & I5,' OF',I5,' OBJECTS'/ ! 523: & I5,' OF',I5,' MESSAGES'/ ! 524: & I5,' OF',I5,' VILLAINS'/ ! 525: & I5,' OF',I5,' ADVENTURERS'/ ! 526: & I5,' OF',I5,' CLOCK EVENTS'/ ! 527: & I5,' OF',I5,' ROOM2 SLOTS') ! 528: #else NOCC ! 529: 1050 FORMAT(' USED:'/1X,I5,' OF',I5,' ROOMS'/ ! 530: & 1X,I5,' OF',I5,' EXITS'/ ! 531: & 1X,I5,' OF',I5,' OBJECTS'/ ! 532: & 1X,I5,' OF',I5,' MESSAGES'/ ! 533: & 1X,I5,' OF',I5,' VILLAINS'/ ! 534: & 1X,I5,' OF',I5,' ADVENTURERS'/ ! 535: & 1X,I5,' OF',I5,' CLOCK EVENTS'/ ! 536: & 1X,I5,' OF',I5,' ROOM2 SLOTS') ! 537: #endif NOCC ! 538: PRINT 1150,MXSCOR,EGMXSC,RECNO,RDESC2,MBASE,STRBIT ! 539: #ifdef NOCC ! 540: 1150 FORMAT('MAX SCORE=',I5/'EG SCORE=',I5/ ! 541: & 'MAX RECNO=',I5/'RDESC2 BASE=',I5/ ! 542: & 'MELEE START=',I5/'STAR MASK=',I7) ! 543: #else NOCC ! 544: 1150 FORMAT(' MAX SCORE=',I5/' EG SCORE=',I5/ ! 545: & ' MAX RECNO=',I5/' RDESC2 BASE=',I5/ ! 546: & ' MELEE START=',I5/' STAR MASK=',I7) ! 547: #endif NOCC ! 548: PAUSE 1 ! 549: #endif debug ! 550: C ! 551: RETURN ! 552: C INIT, PAGE 6 ! 553: C ! 554: C ERRORS-- INIT FAILS. ! 555: C ! 556: 1900 PRINT 910 ! 557: PRINT 980 ! 558: RETURN ! 559: 1925 PRINT 920,I,J,K,VMAJ,VMIN,VEDIT ! 560: PRINT 980 ! 561: RETURN ! 562: 1950 PRINT 960 ! 563: PRINT 980 ! 564: RETURN ! 565: #ifdef NOCC ! 566: 910 FORMAT('I can''t open ',INDXFILE,'.') ! 567: 920 FORMAT('"dindx.dat" is version ',I1,'.',I1,A1,'.'/ ! 568: & 'I require version ',I1,'.',I1,A1,'.') ! 569: 960 FORMAT('I can''t open ',TEXTFILE,'.') ! 570: 980 FORMAT('Suddenly a sinister, wraithlike figure appears before ' ! 571: & 'you,'/'seeming to float in the air. In a low, sorrowful voice' ! 572: & ' he says,'/'"Alas, the very nature of the world has changed, ' ! 573: & 'and the dungeon'/'cannot be found. All must now pass away."' ! 574: & ' Raising his oaken staff'/'in farewell, he fades into the ' ! 575: & 'spreading darkness. In his place'/'appears a tastefully ' ! 576: & 'lettered sign reading:'//23X,'INITIALIZATION FAILURE'// ! 577: & 'The darkness becomes all encompassing, and your vision fails.') ! 578: #else NOCC ! 579: 910 FORMAT(' I can''t open ',INDXFILE,'.') ! 580: 920 FORMAT(' "dindx.dat" is version ',I1,'.',I1,A1,'.'/ ! 581: & ' I require version ',I1,'.',I1,A1,'.') ! 582: 960 FORMAT(' I can''t open ',TEXTFILE,'.') ! 583: 980 FORMAT(' Suddenly a sinister, wraithlike figure appears before ' ! 584: & 'you,'/' seeming to float in the air. In a low, sorrowful voice' ! 585: & ' he says,'/' "Alas, the very nature of the world has changed, ' ! 586: & 'and the dungeon'/' cannot be found. All must now pass away."' ! 587: & ' Raising his oaken staff'/' in farewell, he fades into the ' ! 588: & 'spreading darkness. In his place'/' appears a tastefully ' ! 589: & 'lettered sign reading:'//23X,'INITIALIZATION FAILURE'// ! 590: & ' The darkness becomes all encompassing, and your vision fails.') ! 591: #endif NOCC ! 592: C ! 593: END ! 594: C PROTCT-- CHECK FOR USER VIOLATION ! 595: C ! 596: C THIS ROUTINE SHOULD BE MODIFIED IF YOU WISH TO ADD SYSTEM ! 597: C DEPENDANT PROTECTION AGAINST ABUSE. ! 598: C ! 599: C AT THE MOMENT, PLAY IS PERMITTED UNDER ALL CIRCUMSTANCES. ! 600: C ! 601: LOGICAL FUNCTION PROTCT(X) ! 602: IMPLICIT INTEGER(A-Z) ! 603: C ! 604: PROTCT=.TRUE. ! 605: RETURN ! 606: END ! 607: #endif PDP
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.