billr@tekred.UUCP (Bill Randle) (01/10/87)
# The rest of this file is a shell script which will extract: # Makefile README act.1 actors.ftn.f ballop.for.f clockr.ftn.f demons.ftn.f dgame.f echo x - Makefile cat >Makefile <<'!Funky!Stuff!' # Makefile for creating dungeon .c.o: cc -c -O $*.c .f.o: f77 -c -O $*.f .F.o: f77 -c $(FFLAGS) $*.F # f77 compiler flags for files run thru C preprocessor FFLAGS = -O -Dvax # -Ddebug # Directory path for data files - default is /usr/games/lib/dunlib DDIR = . OBJS = actors.ftn.o ballop.for.o clockr.ftn.o demons.ftn.o\ dgame.o dinit.ftn.o dmain.ftn.o dso1.for.o dso2.for.o\ dso3.for.o dso4.for.o dso5.for.o dso6.for.o dso7.o\ dsub.ftn.o dverb1.o dverb2.o gdt.ftn.o lightp.for.o\ nobjs.for.o np.o np1.o np2.o np3.for.o nrooms.for.o objcts.o\ rooms.for.o rtim.o sobjs.o sverbs.ftn.o verbs.o villns.for.o dungeon: $(OBJS) f77 -o dungeon $(OBJS) dinit.ftn.o: dinit.ftn.F ### to use other than default directory, uncomment following line ### ### f77 -O -DINDXFILE=\'$(DDIR)/dindx.dat\' -DTEXTFILE=\'$(DDIR)/dtext.dat\' -c dinit.ftn.F install: dungeon cp dungeon /usr/games/dungeon -mkdir /usr/games/lib/dunlib cp dindx.dat dtext.dat /usr/games/lib/dunlib !Funky!Stuff! echo x - README cat >README <<'!Funky!Stuff!' .../dungeon/vax This directory contains the files to build a vax version of the dungeon game. The vax version requires large addressing capability (the object size is 151.5K stripped). This version has full save/restore as well as the game debugging tool. Files that end in '.f' are standard f77 files; files that end in '.F' have C-preprocessor #ifdefs in them (handled automatically by the f77 compiler). Of the '.F' files, only one actually has an "#ifdef vax" in it; the others have debugging #ifdefs in them. The "#ifdef vax" is used in the file "dsub.ftn.F" and is used to change the byte ordering from pdp to vax when reading the data file. !Funky!Stuff! echo x - act.1 cat >act.1 <<'!Funky!Stuff!' Usage: uuencode [infile] remotefile !Funky!Stuff! echo x - actors.ftn.f cat >actors.ftn.f <<'!Funky!Stuff!' C AAPPLI- APPLICABLES FOR ADVENTURERS C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C LOGICAL FUNCTION AAPPLI(RI) IMPLICIT INTEGER (A-Z) LOGICAL F,MOVETO C C PARSER OUTPUT C LOGICAL PRSWON COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C COMMON /RINDEX/ WHOUS,LROOM,CELLA COMMON /RINDEX/ MTROL,MAZE1 COMMON /RINDEX/ MGRAT,MAZ15 COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER COMMON /RINDEX/ STREA,EGYPT,ECHOR COMMON /RINDEX/ TSHAF COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC COMMON /RINDEX/ CAROU COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4 COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL COMMON /RINDEX/ CPANT,CPOUT,CPUZZ C C EXITS C COMMON /XSRCH/ XMIN,XMAX,XDOWN,XUP, & XNORTH,XSOUTH,XENTER,XEXIT,XEAST,XWEST C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C CLOCK INTERRUPTS C LOGICAL CFLAG COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25) C COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND, & CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG, & CEVGNO,CEVBUC,CEVSPH,CEVEGH, & CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE, & CEVMRS,CEVPIN,CEVINQ,CEVFOL C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C C VERBS C COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW COMMON /VINDEX/ WALKIW,FIGHTW,FOOW COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C AAPPLI, PAGE 2 C IF(RI.EQ.0) GO TO 10 AAPPLI=.TRUE. GO TO (1000,2000),RI CALL BUG(11,RI) C C COMMON FALSE RETURN. C 10 AAPPLI=.FALSE. RETURN C C A1-- ROBOT. PROCESS MOST COMMANDS GIVEN TO ROBOT. C 1000 IF((PRSA.NE.RAISEW).OR.(PRSO.NE.RCAGE)) GO TO 1200 CFLAG(CEVSPH)=.FALSE. WINNER=PLAYER F=MOVETO(CAGER,WINNER) CALL NEWSTA(CAGE,567,CAGER,0,0) CALL NEWSTA(ROBOT,0,CAGER,0,0) AROOM(AROBOT)=CAGER CAGESF=.TRUE. OFLAG1(ROBOT)=and(OFLAG1(ROBOT),not(NDSCBT)) OFLAG1(SPHER)=or(OFLAG1(SPHER),TAKEBT) RETURN C 1200 IF((PRSA.NE.DRINKW).AND.(PRSA.NE.EATW)) GO TO 1300 CALL RSPEAK(568) RETURN C 1300 IF(PRSA.NE.READW) GO TO 1400 CALL RSPEAK(569) RETURN C 1400 IF((PRSA.EQ.WALKW).OR.(PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW) & .OR.(PRSA.EQ.PUTW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.THROWW) & .OR.(PRSA.EQ.TURNW).OR.(PRSA.EQ.LEAPW)) GO TO 10 CALL RSPEAK(570) RETURN C AAPPLI, PAGE 3 C C A2-- MASTER. PROCESS MOST COMMANDS GIVEN TO MASTER. C 2000 IF(and(OFLAG2(QDOOR),OPENBT).NE.0) GO TO 2100 CALL RSPEAK(783) RETURN C 2100 IF(PRSA.NE.WALKW) GO TO 2200 I=784 IF(((HERE.EQ.SCORR).AND. & ((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XENTER))).OR. & ((HERE.EQ.NCORR).AND. & ((PRSO.EQ.XSOUTH).OR.(PRSO.EQ.XENTER)))) & I=785 CALL RSPEAK(I) RETURN C 2200 IF((PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW).OR.(PRSA.EQ.PUTW).OR. & (PRSA.EQ.THROWW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.TURNW).OR. & (PRSA.EQ.SPINW).OR.(PRSA.EQ.TRNTOW).OR.(PRSA.EQ.FOLLOW).OR. & (PRSA.EQ.STAYW).OR.(PRSA.EQ.OPENW).OR.(PRSA.EQ.CLOSEW).OR. & (PRSA.EQ.KILLW)) GO TO 10 CALL RSPEAK(786) RETURN C END C THIEFD- INTERMOVE THIEF DEMON C C DECLARATIONS C SUBROUTINE THIEFD IMPLICIT INTEGER (A-Z) LOGICAL DFLAG,ONCE,PROB,QHERE,QSTILL,LIT,WINNIN C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG C COMMON /DEBUG/ DBGFLG,PRSFLG C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C COMMON /RINDEX/ WHOUS,LROOM,CELLA COMMON /RINDEX/ MTROL,MAZE1 COMMON /RINDEX/ MGRAT,MAZ15 COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER COMMON /RINDEX/ STREA,EGYPT,ECHOR COMMON /RINDEX/ TSHAF COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC COMMON /RINDEX/ CAROU COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4 COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL COMMON /RINDEX/ CPANT,CPOUT,CPUZZ C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C VILLAINS AND DEMONS C LOGICAL THFFLG,SWDACT,THFACT COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C C FUNCTIONS AND DATA C QSTILL(R)=(QHERE(STILL,R).OR.(OADV(STILL).EQ.-THIEF)) C THIEFD, PAGE 2 C C D DFLAG=(PRSFLG.AND."100000).NE.0 ONCE=.FALSE. 1025 RHERE=OROOM(THIEF) IF(RHERE.NE.0) THFPOS=RHERE C IF(THFPOS.EQ.HERE) GO TO 1100 IF(THFPOS.NE.TREAS) GO TO 1400 C C THIEF IS IN TREASURE ROOM, AND WINNER IS NOT. C C D IF(DFLAG) TYPE 10 C D10 FORMAT(' THIEFD-- IN TREASURE ROOM') IF(RHERE.EQ.0) GO TO 1050 CALL NEWSTA(THIEF,0,0,0,0) RHERE=0 IF(QSTILL(TREAS)) CALL NEWSTA(STILL,0,0,THIEF,0) 1050 I=ROBADV(-THIEF,THFPOS,0,0) IF(QHERE(EGG,THFPOS)) OFLAG2(EGG)=or(OFLAG2(EGG),OPENBT) GO TO 1700 C C THIEF AND WINNER IN SAME ROOM. C 1100 IF(THFPOS.EQ.TREAS) GO TO 1700 IF(and(RFLAG(THFPOS),RLIGHT).NE.0) GO TO 1400 C D IF(DFLAG) TYPE 20 C D20 FORMAT(' THIEFD-- IN ADV ROOM') IF(THFFLG) GO TO 1300 IF((RHERE.NE.0).OR.PROB(70,70)) GO TO 1150 IF(OCAN(STILL).NE.THIEF) GO TO 1700 CALL NEWSTA(THIEF,583,THFPOS,0,0) THFFLG=.TRUE. RETURN C 1150 IF((RHERE.EQ.0).OR.(and(OFLAG2(THIEF),FITEBT).EQ.0)) & GO TO 1200 IF(WINNIN(THIEF,WINNER)) GO TO 1175 CALL NEWSTA(THIEF,584,0,0,0) OFLAG2(THIEF)=and(OFLAG2(THIEF), not(FITEBT)) IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0) RETURN C 1175 IF(PROB(90,90)) GO TO 1700 C 1200 IF((RHERE.EQ.0).OR.PROB(70,70)) GO TO 1250 CALL NEWSTA(THIEF,585,0,0,0) IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0) RETURN C 1300 IF(RHERE.EQ.0) GO TO 1700 1250 IF(PROB(70,70)) RETURN THFFLG=.TRUE. NR=ROBRM(THFPOS,100,0,0,-THIEF)+ROBADV(WINNER,0,0,-THIEF) I=586 IF(RHERE.NE.0) I=588 IF(NR.NE.0) I=I+1 CALL NEWSTA(THIEF,I,0,0,0) IF(QSTILL(THFPOS)) & CALL NEWSTA(STILL,0,0,THIEF,0) IF((NR.NE.0).AND..NOT.LIT(THFPOS)) CALL RSPEAK(406) RHERE=0 GO TO 1700 C C NOT IN ADVENTURERS ROOM. C 1400 CALL NEWSTA(THIEF,0,0,0,0) RHERE=0 C D IF(DFLAG) TYPE 30,THFPOS C D30 FORMAT(' THIEFD-- IN ROOM ',I4) IF(QSTILL(THFPOS)) & CALL NEWSTA(STILL,0,0,THIEF,0) IF(and(RFLAG(THFPOS),RSEEN).EQ.0) GO TO 1700 I=ROBRM(THFPOS,75,0,0,-THIEF) IF((THFPOS.LT.MAZE1).OR.(THFPOS.GT.MAZ15).OR. & (HERE.LT.MAZE1).OR.(HERE.GT.MAZ15)) GO TO 1500 DO 1450 I=1,OLNT IF(.NOT.QHERE(I,THFPOS).OR.PROB(60,60).OR. & (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT))) & GO TO 1450 CALL RSPSUB(590,ODESC2(I)) IF(PROB(40,20)) GO TO 1700 CALL NEWSTA(I,0,0,0,-THIEF) OFLAG2(I)=or(OFLAG2(I),TCHBT) GO TO 1700 1450 CONTINUE GO TO 1700 C 1500 DO 1550 I=1,OLNT IF(.NOT.QHERE(I,THFPOS).OR.(OTVAL(I).NE.0).OR.PROB(80,60).OR. & (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT))) & GO TO 1550 CALL NEWSTA(I,0,0,0,-THIEF) OFLAG2(I)=or(OFLAG2(I),TCHBT) GO TO 1700 1550 CONTINUE C C NOW MOVE TO NEW ROOM. C 1700 IF(OADV(ROPE).EQ.-THIEF) DOMEF=.FALSE. IF(ONCE) GO TO 1800 ONCE=.NOT.ONCE 1750 THFPOS=THFPOS-1 IF(THFPOS.LE.0) THFPOS=RLNT IF(and(RFLAG(THFPOS),(RLAND+RSACRD+REND)).NE.RLAND) & GO TO 1750 THFFLG=.FALSE. GO TO 1025 C C ALL DONE. C 1800 IF(THFPOS.EQ.TREAS) RETURN J=591 IF(THFPOS.NE.HERE) J=0 DO 1850 I=1,OLNT IF((OADV(I).NE.-THIEF).OR.PROB(70,70).OR. & (OTVAL(I).GT.0)) GO TO 1850 CALL NEWSTA(I,J,THFPOS,0,0) J=0 1850 CONTINUE RETURN C END !Funky!Stuff! echo x - ballop.for.f cat >ballop.for.f <<'!Funky!Stuff!' C BALLOP- BALLOON FUNCTION C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C LOGICAL FUNCTION BALLOP(ARG) IMPLICIT INTEGER (A-Z) LOGICAL FINDXT,QEMPTY C C PARSER OUTPUT C LOGICAL PRSWON COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C C EXITS C COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ EQUIVALENCE (XFLAG,XOBJ) C COMMON /XPARS/ XRMASK,XDMASK,XFMASK,XFSHFT,XASHFT, & XELNT(4),XNORM,XNO,XCOND,XDOOR,XLFLAG C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C CLOCK INTERRUPTS C LOGICAL CFLAG COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25) C COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND, & CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG, & CEVGNO,CEVBUC,CEVSPH,CEVEGH, & CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE, & CEVMRS,CEVPIN,CEVINQ,CEVFOL C C VERBS C COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW COMMON /VINDEX/ WALKIW,FIGHTW,FOOW COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C BALLOP, PAGE 2 C BALLOP=.TRUE. IF(ARG.NE.2) GO TO 200 IF(PRSA.NE.LOOKW) GO TO 10 IF(BINFF.NE.0) GO TO 50 CALL RSPEAK(543) GO TO 100 50 CALL RSPSUB(544,ODESC2(BINFF)) 100 IF(BTIEF.NE.0) CALL RSPEAK(545) RETURN C 200 IF(ARG.NE.1) GO TO 500 IF(PRSA.NE.WALKW) GO TO 300 IF(FINDXT(PRSO,HERE)) GO TO 250 CALL RSPEAK(546) RETURN C 250 IF(BTIEF.EQ.0) GO TO 275 CALL RSPEAK(547) RETURN C 275 IF(XTYPE.NE.XNORM) GO TO 10 IF(and(RFLAG(XROOM1),RMUNG).EQ.0) BLOC=XROOM1 10 BALLOP=.FALSE. RETURN C 300 IF((PRSA.NE.TAKEW).OR.(PRSO.NE.BINFF)) GO TO 350 CALL RSPSUB(548,ODESC2(BINFF)) RETURN C 350 IF((PRSA.NE.PUTW).OR.(PRSI.NE.RECEP).OR.QEMPTY(RECEP)) & GO TO 10 CALL RSPEAK(549) RETURN C 500 IF((PRSA.NE.UNBOAW).OR.(and(RFLAG(HERE),RLAND).EQ.0)) & GO TO 600 IF(BINFF.NE.0) CTICK(CEVBAL)=3 GO TO 10 C 600 IF((PRSA.NE.BURNW).OR.(OCAN(PRSO).NE.RECEP)) GO TO 700 CALL RSPSUB(550,ODESC2(PRSO)) CTICK(CEVBRN)=OSIZE(PRSO)*20 OFLAG1(PRSO)=or(OFLAG1(PRSO), & and((ONBT+FLAMBT+LITEBT), not(TAKEBT+READBT))) IF(BINFF.NE.0) RETURN IF(.NOT.BLABF) CALL NEWSTA(BLABE,0,0,BALLO,0) BLABF=.TRUE. BINFF=PRSO CTICK(CEVBAL)=3 CALL RSPEAK(551) RETURN C 700 IF((PRSA.EQ.UNBOAW).AND.(BINFF.NE.0).AND. & (and(RFLAG(HERE),RLAND).NE.0)) & CTICK(CEVBAL)=3 GO TO 10 C END !Funky!Stuff! echo x - clockr.ftn.f cat >clockr.ftn.f <<'!Funky!Stuff!' C CEVAPP- CLOCK EVENT APPLICABLES C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C SUBROUTINE CEVAPP(RI) IMPLICIT INTEGER (A-Z) INTEGER CNDTCK(10),LMPTCK(12) LOGICAL FINDXT,LIT,RMDESC,QOPEN,MOVETO LOGICAL F,QLEDGE,QVAIR,QHERE,PROB C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C COMMON /RINDEX/ WHOUS,LROOM,CELLA COMMON /RINDEX/ MTROL,MAZE1 COMMON /RINDEX/ MGRAT,MAZ15 COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER COMMON /RINDEX/ STREA,EGYPT,ECHOR COMMON /RINDEX/ TSHAF COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC COMMON /RINDEX/ CAROU COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4 COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL COMMON /RINDEX/ CPANT,CPOUT,CPUZZ C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C CLOCK INTERRUPTS C LOGICAL CFLAG COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25) C COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND, & CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG, & CEVGNO,CEVBUC,CEVSPH,CEVEGH, & CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE, & CEVMRS,CEVPIN,CEVINQ,CEVFOL C C EXITS C COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ EQUIVALENCE (XFLAG,XOBJ) C COMMON /XSRCH/ XMIN,XMAX,XDOWN,XUP, & XNORTH,XSOUTH,XENTER,XEXIT,XEAST,XWEST C C VILLAINS AND DEMONS C LOGICAL THFFLG,SWDACT,THFACT COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C C FUNCTIONS AND DATA C QOPEN(R)=(and(OFLAG2(R),OPENBT)).NE.0 QLEDGE(R)=(R.EQ.LEDG2).OR.(R.EQ.LEDG3).OR.(R.EQ.LEDG4).OR. & (R.EQ.VLBOT) QVAIR(R)=(R.EQ.VAIR1).OR.(R.EQ.VAIR2).OR.(R.EQ.VAIR3).OR. & (R.EQ.VAIR4) DATA CNDTCK/50,20,10,5,0,156,156,156,157,0/ DATA LMPTCK/50,30,20,10,4,0,154,154,154,154,155,0/ C CEVAPP, PAGE 2 C IF(RI.EQ.0) RETURN GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000, & 11000,12000,13000,14000,15000,16000,17000,18000,19000, & 20000,21000,22000,23000,24000),RI CALL BUG(3,RI) C C CEV1-- CURE CLOCK. LET PLAYER SLOWLY RECOVER. C 1000 ASTREN(PLAYER)=MIN0(0,ASTREN(PLAYER)+1) IF(ASTREN(PLAYER).GE.0) RETURN CTICK(CEVCUR)=30 RETURN C C CEV2-- MAINT-ROOM WITH LEAK. RAISE THE WATER LEVEL. C 2000 IF(HERE.EQ.MAINT) CALL RSPEAK(71+(RVMNT/2)) RVMNT=RVMNT+1 IF(RVMNT.LE.16) RETURN CTICK(CEVMNT)=0 RFLAG(MAINT)=or(RFLAG(MAINT),RMUNG) RRAND(MAINT)=80 IF(HERE.EQ.MAINT) CALL JIGSUP(81) RETURN C C CEV3-- LANTERN. DESCRIBE GROWING DIMNESS. C 3000 CALL LITINT(LAMP,ORLAMP,CEVLNT,LMPTCK,12) RETURN C C CEV4-- MATCH. OUT IT GOES. C 4000 CALL RSPEAK(153) OFLAG1(MATCH)=and(OFLAG1(MATCH), not(ONBT)) RETURN C C CEV5-- CANDLE. DESCRIBE GROWING DIMNESS. C 5000 CALL LITINT(CANDL,ORCAND,CEVCND,CNDTCK,10) RETURN C CEVAPP, PAGE 3 C C CEV6-- BALLOON C 6000 CTICK(CEVBAL)=3 F=AVEHIC(WINNER).EQ.BALLO IF(BLOC.EQ.VLBOT) GO TO 6800 IF(QLEDGE(BLOC)) GO TO 6700 IF(QOPEN(RECEP).AND.(BINFF.NE.0)) & GO TO 6500 C C BALLOON IS IN MIDAIR AND IS DEFLATED (OR HAS RECEPTACLE CLOSED). C FALL TO NEXT ROOM. C IF(BLOC.NE.VAIR1) GO TO 6300 BLOC=VLBOT CALL NEWSTA(BALLO,0,BLOC,0,0) IF(F) GO TO 6200 IF(QLEDGE(HERE)) CALL RSPEAK(530) RETURN C 6200 F=MOVETO(BLOC,WINNER) IF(BINFF.EQ.0) GO TO 6250 CALL RSPEAK(531) F=RMDESC(0) RETURN C 6250 CALL NEWSTA(BALLO,532,0,0,0) CALL NEWSTA(DBALL,0,BLOC,0,0) AVEHIC(WINNER)=0 CFLAG(CEVBAL)=.FALSE. CFLAG(CEVBRN)=.FALSE. BINFF=0 BTIEF=0 RETURN C 6300 BLOC=BLOC-1 CALL NEWSTA(BALLO,0,BLOC,0,0) IF(F) GO TO 6400 IF(QLEDGE(HERE)) CALL RSPEAK(533) RETURN C 6400 F=MOVETO(BLOC,WINNER) CALL RSPEAK(534) F=RMDESC(0) RETURN C C BALLOON IS IN MIDAIR AND IS INFLATED, UP-UP-AND-AWAY C 6500 IF(BLOC.NE.VAIR4) GO TO 6600 CTICK(CEVBRN)=0 CTICK(CEVBAL)=0 BINFF=0 BTIEF=0 BLOC=VLBOT CALL NEWSTA(BALLO,0,0,0,0) CALL NEWSTA(DBALL,0,BLOC,0,0) IF(F) GO TO 6550 IF(QLEDGE(HERE)) CALL RSPEAK(535) RETURN C 6550 CALL JIGSUP(536) RETURN C 6600 BLOC=BLOC+1 CALL NEWSTA(BALLO,0,BLOC,0,0) IF(F) GO TO 6650 IF(QLEDGE(HERE)) CALL RSPEAK(537) RETURN C 6650 F=MOVETO(BLOC,WINNER) CALL RSPEAK(538) F=RMDESC(0) RETURN C C ON LEDGE, GOES TO MIDAIR ROOM WHETHER INFLATED OR NOT. C 6700 BLOC=BLOC+(VAIR2-LEDG2) CALL NEWSTA(BALLO,0,BLOC,0,0) IF(F) GO TO 6750 IF(QLEDGE(HERE)) CALL RSPEAK(539) CTICK(CEVVLG)=10 RETURN C 6750 F=MOVETO(BLOC,WINNER) CALL RSPEAK(540) F=RMDESC(0) RETURN C C AT BOTTOM, GO UP IF INFLATED, DO NOTHING IF DEFLATED. C 6800 IF((BINFF.EQ.0).OR..NOT.QOPEN(RECEP)) RETURN BLOC=VAIR1 CALL NEWSTA(BALLO,0,BLOC,0,0) IF(F) GO TO 6850 IF(QLEDGE(HERE)) CALL RSPEAK(541) RETURN C 6850 F=MOVETO(BLOC,WINNER) CALL RSPEAK(542) F=RMDESC(0) RETURN C CEVAPP, PAGE 4 C C CEV7-- BALLOON BURNUP C 7000 DO 7100 I=1,OLNT IF((RECEP.EQ.OCAN(I)).AND.((and(OFLAG1(I),FLAMBT)).NE.0)) & GO TO 7200 7100 CONTINUE CALL BUG(4,0) C 7200 CALL NEWSTA(I,0,0,0,0) BINFF=0 IF(HERE.EQ.BLOC) CALL RSPSUB(292,ODESC2(I)) RETURN C C CEV8-- FUSE FUNCTION C 8000 IF(OCAN(FUSE).NE.BRICK) GO TO 8500 BR=OROOM(BRICK) BC=OCAN(BRICK) IF((BR.EQ.0).AND.(BC.NE.0)) BR=OROOM(BC) CALL NEWSTA(FUSE,0,0,0,0) CALL NEWSTA(BRICK,0,0,0,0) IF((BR.NE.0).AND.(BR.NE.HERE)) GO TO 8100 C RFLAG(HERE)=or(RFLAG(HERE),RMUNG) RRAND(HERE)=114 CALL JIGSUP(150) RETURN C 8100 CALL RSPEAK(151) MUNGRM=BR CTICK(CEVSAF)=5 IF(BR.NE.MSAFE) GO TO 8200 IF(BC.NE.SSLOT) RETURN CALL NEWSTA(SSLOT,0,0,0,0) OFLAG2(SAFE)=or(OFLAG2(SAFE),OPENBT) SAFEF=.TRUE. RETURN C 8200 DO 8250 I=1,OLNT IF(QHERE(I,BR) .AND. ((and(OFLAG1(I),TAKEBT)).NE.0)) & CALL NEWSTA(I,0,0,0,0) 8250 CONTINUE IF(BR.NE.LROOM) RETURN DO 8300 I=1,OLNT IF(OCAN(I).EQ.TCASE) CALL NEWSTA(I,0,0,0,0) 8300 CONTINUE RETURN C 8500 IF(QHERE(FUSE,HERE).OR.(OADV(FUSE).EQ.WINNER)) & CALL RSPEAK(152) CALL NEWSTA(FUSE,0,0,0,0) RETURN C CEVAPP, PAGE 5 C C CEV9-- LEDGE MUNGE. C 9000 RFLAG(LEDG4)=or(RFLAG(LEDG4),RMUNG) RRAND(LEDG4)=109 IF(HERE.EQ.LEDG4) GO TO 9100 CALL RSPEAK(110) RETURN C 9100 IF(AVEHIC(WINNER).NE.0) GO TO 9200 CALL JIGSUP(111) RETURN C 9200 IF(BTIEF.NE.0) GO TO 9300 CALL RSPEAK(112) RETURN C 9300 BLOC=VLBOT CALL NEWSTA(BALLO,0,0,0,0) CALL NEWSTA(DBALL,0,BLOC,0,0) BTIEF=0 BINFF=0 CFLAG(CEVBAL)=.FALSE. CFLAG(CEVBRN)=.FALSE. CALL JIGSUP(113) RETURN C C CEV10-- SAFE MUNG. C 10000 RFLAG(MUNGRM)=or(RFLAG(MUNGRM),RMUNG) RRAND(MUNGRM)=114 IF(HERE.EQ.MUNGRM) GO TO 10100 CALL RSPEAK(115) IF(MUNGRM.EQ.MSAFE) CTICK(CEVLED)=8 RETURN C 10100 I=116 IF((and(RFLAG(HERE),RHOUSE)).NE.0) I=117 CALL JIGSUP(I) RETURN C CEVAPP, PAGE 6 C C CEV11-- VOLCANO GNOME C 11000 IF(QLEDGE(HERE)) GO TO 11100 CTICK(CEVVLG)=1 RETURN C 11100 CALL NEWSTA(GNOME,118,HERE,0,0) RETURN C C CEV12-- VOLCANO GNOME DISAPPEARS C 12000 CALL NEWSTA(GNOME,149,0,0,0) RETURN C C CEV13-- BUCKET. C 13000 IF(OCAN(WATER).EQ.BUCKE) & CALL NEWSTA(WATER,0,0,0,0) RETURN C C CEV14-- SPHERE. IF EXPIRES, HE'S TRAPPED. C 14000 RFLAG(CAGER)=or(RFLAG(CAGER),RMUNG) RRAND(CAGER)=147 CALL JIGSUP(148) RETURN C C CEV15-- END GAME HERALD. C 15000 ENDGMF=.TRUE. CALL RSPEAK(119) RETURN C CEVAPP, PAGE 7 C C CEV16-- FOREST MURMURS C 16000 CFLAG(CEVFOR)=(HERE.EQ.MTREE).OR. & ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR)) IF(CFLAG(CEVFOR).AND.PROB(10,10)) CALL RSPEAK(635) RETURN C C CEV17-- SCOL ALARM C 17000 IF(HERE.EQ.BKTWI) CFLAG(CEVZGI)=.TRUE. IF(HERE.EQ.BKVAU) CALL JIGSUP(636) RETURN C C CEV18-- ENTER GNOME OF ZURICH C 18000 CFLAG(CEVZGO)=.TRUE. CALL NEWSTA(ZGNOM,0,BKTWI,0,0) IF(HERE.EQ.BKTWI) CALL RSPEAK(637) RETURN C C CEV19-- EXIT GNOME C 19000 CALL NEWSTA(ZGNOM,0,0,0,0) IF(HERE.EQ.BKTWI) CALL RSPEAK(638) RETURN C CEVAPP, PAGE 8 C C CEV20-- START OF ENDGAME C 20000 IF(SPELLF) GO TO 20200 IF(HERE.NE.CRYPT) RETURN IF(.NOT.LIT(HERE)) GO TO 20100 CTICK(CEVSTE)=3 RETURN C 20100 CALL RSPEAK(727) 20200 DO 20300 I=1,OLNT CALL NEWSTA(I,0,OROOM(I),OCAN(I),0) 20300 CONTINUE CALL NEWSTA(LAMP,0,0,0,PLAYER) CALL NEWSTA(SWORD,0,0,0,PLAYER) C OFLAG1(LAMP)=and((or(OFLAG1(LAMP),LITEBT)), not(ONBT)) OFLAG2(LAMP)=or(OFLAG2(LAMP),TCHBT) CFLAG(CEVLNT)=.FALSE. CTICK(CEVLNT)=350 ORLAMP=0 OFLAG2(SWORD)=or(OFLAG2(SWORD),TCHBT) SWDACT=.TRUE. SWDSTA=0 C THFACT=.FALSE. ENDGMF=.TRUE. CFLAG(CEVMAT)=.FALSE. CFLAG(CEVCND)=.FALSE. C CALL SCRUPD(RVAL(CRYPT)) RVAL(CRYPT)=0 F=MOVETO(TSTRS,WINNER) F=RMDESC(3) RETURN C C CEV21-- MIRROR CLOSES. C 21000 MRPSHF=.FALSE. MROPNF=.FALSE. IF(HERE.EQ.MRANT) CALL RSPEAK(728) IF((HERE.EQ.INMIR).OR.(MRHERE(HERE).EQ.1)) & CALL RSPEAK(729) RETURN C CEVAPP, PAGE 9 C C CEV22-- DOOR CLOSES. C 22000 IF(WDOPNF) CALL RSPEAK(730) WDOPNF=.FALSE. RETURN C C CEV23-- INQUISITOR'S QUESTION C 23000 IF(AROOM(PLAYER).NE.FDOOR) RETURN CALL RSPEAK(769) CALL RSPEAK(770+QUESNO) CTICK(CEVINQ)=2 RETURN C C CEV24-- MASTER FOLLOWS C 24000 IF(AROOM(AMASTR).EQ.HERE) RETURN IF((HERE.NE.CELL).AND.(HERE.NE.PCELL)) GO TO 24100 IF(FOLLWF) CALL RSPEAK(811) FOLLWF=.FALSE. RETURN C 24100 FOLLWF=.TRUE. I=812 DO 24200 J=XMIN,XMAX,XMIN IF(FINDXT(J,AROOM(AMASTR)).AND.(XROOM1.EQ.HERE)) & I=813 24200 CONTINUE CALL RSPEAK(I) CALL NEWSTA(MASTER,0,HERE,0,0) AROOM(AMASTR)=HERE RETURN C END C LITINT- LIGHT INTERRUPT PROCESSOR C C DECLARATIONS C SUBROUTINE LITINT(OBJ,CTR,CEV,TICKS,TICKLN) IMPLICIT INTEGER (A-Z) INTEGER TICKS(TICKLN) C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C C CLOCK INTERRUPTS C LOGICAL CFLAG COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25) C CTR=CTR+1 CTICK(CEV)=TICKS(CTR) IF(CTICK(CEV).NE.0) GO TO 100 OFLAG1(OBJ)=and(OFLAG1(OBJ), not(LITEBT+FLAMBT+ONBT)) IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER)) & CALL RSPSUB(293,ODESC2(OBJ)) RETURN C 100 IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER)) & CALL RSPEAK(TICKS(CTR+(TICKLN/2))) RETURN C END !Funky!Stuff! echo x - demons.ftn.f cat >demons.ftn.f <<'!Funky!Stuff!' C FIGHTD- INTERMOVE FIGHT DEMON C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C SUBROUTINE FIGHTD IMPLICIT INTEGER (A-Z) LOGICAL PROB,OAPPLI C C PARSER OUTPUT C LOGICAL PRSWON COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C VILLAINS AND DEMONS C COMMON /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4) C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C COMMON /AFLAGS/ ASTAG C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C C VERBS C COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW COMMON /VINDEX/ WALKIW,FIGHTW,FOOW COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C LOGICAL F C C FUNCTIONS AND DATA C DATA ROUT/1/ C FIGHTD, PAGE 2 C DO 2400 I=1,VLNT VOPPS(I)=0 OBJ=VILLNS(I) RA=OACTIO(OBJ) IF(HERE.NE.OROOM(OBJ)) GO TO 2200 IF((OBJ.EQ.THIEF).AND.THFENF) GO TO 2400 IF(OCAPAC(OBJ).GE.0) GO TO 2050 IF((VPROB(I).EQ.0).OR..NOT.PROB(VPROB(I),VPROB(I))) & GO TO 2025 OCAPAC(OBJ)=IABS(OCAPAC(OBJ)) VPROB(I)=0 IF(RA.EQ.0) GO TO 2400 PRSA=INXW F=OAPPLI(RA,0) GO TO 2400 C 2025 VPROB(I)=VPROB(I)+10 GO TO 2400 C 2050 IF((and(OFLAG2(OBJ),FITEBT)).EQ.0) GO TO 2100 VOPPS(I)=OBJ GO TO 2400 C 2100 IF(RA.EQ.0) GO TO 2400 PRSA=FRSTQW IF(.NOT.OAPPLI(RA,0)) GO TO 2400 OFLAG2(OBJ)=or(OFLAG2(OBJ),FITEBT) VOPPS(I)=OBJ GO TO 2400 C 2200 IF((and(OFLAG2(OBJ),FITEBT).EQ.0).OR.(RA.EQ.0)) & GO TO 2300 PRSA=FIGHTW F=OAPPLI(RA,0) 2300 IF(OBJ.EQ.THIEF) THFENF=.FALSE. AFLAG(PLAYER)=and(AFLAG(PLAYER), not(ASTAG)) OFLAG2(OBJ)=and(OFLAG2(OBJ), not(STAGBT+FITEBT)) IF((OCAPAC(OBJ).GE.0).OR.(RA.EQ.0)) & GO TO 2400 PRSA=INXW F=OAPPLI(RA,0) OCAPAC(OBJ)=IABS(OCAPAC(OBJ)) 2400 CONTINUE C FIGHTD, PAGE 3 C C NOW DO ACTUAL COUNTERBLOWS. C OUT=0 2600 DO 2700 I=1,VLNT J=VOPPS(I) IF(J.EQ.0) GO TO 2700 PRSCON=1 RA=OACTIO(J) IF(RA.EQ.0) GO TO 2650 PRSA=FIGHTW IF(OAPPLI(RA,0)) GO TO 2700 2650 RES=BLOW(PLAYER,J,VMELEE(I),.FALSE.,OUT) IF(RES.LT.0) RETURN IF(RES.EQ.ROUT) OUT=2+RND(3) 2700 CONTINUE OUT=OUT-1 IF(OUT.GT.0) GO TO 2600 RETURN C END C BLOW- STRIKE BLOW C C DECLARATIONS C INTEGER FUNCTION BLOW(H,V,RMK,HFLG,OUT) IMPLICIT INTEGER (A-Z) LOGICAL HFLG,OAPPLI,PROB INTEGER DEF1R(3),DEF2R(4),DEF3R(5) INTEGER RVECTR(66),RSTATE(45) C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG C C PARSE VECTOR C LOGICAL PRSWON COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON C C MISCELLANEOUS VARIABLES C COMMON /STAR/ MBASE,STRBIT C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C C C CLOCK INTERRUPTS C LOGICAL CFLAG COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25) C COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND, & CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG, & CEVGNO,CEVBUC,CEVSPH,CEVEGH, & CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE, & CEVMRS,CEVPIN,CEVINQ,CEVFOL C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C COMMON /AFLAGS/ ASTAG C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C C VERBS C COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW COMMON /VINDEX/ WALKIW,FIGHTW,FOOW C LOGICAL F C C FUNCTIONS AND DATA C DATA RMISS/0/,ROUT/1/,RKILL/2/,RLIGHT/3/ DATA RSER/4/,RSTAG/5/,RLOSE/6/,RHES/7/,RSIT/8/ DATA DEF1R/1,2,3/ DATA DEF2R/13,23,24,25/ DATA DEF3R/35,36,46,47,57/ C DATA RVECTR/0,0,0,0,5,5,1,1,2,2,2,2, & 0,0,0,0,0,5,5,3,3,1, & 0,0,0,5,5,3,3,3,1,2,2,2, & 0,0,0,0,0,5,5,3,3,4,4, & 0,0,0,5,5,3,3,3,4,4,4, & 0,5,5,3,3,3,3,4,4,4/ DATA RSTATE/5000,3005,3008,4011,3015,3018,1021,0,0, & 5022,3027,3030,4033,3037,3040,1043,0,0, & 4044,2048,4050,4054,5058,4063,4067,3071,1074, & 4075,1079,4080,4084,4088,4092,4096,4100,1104, & 4105,2109,4111,4115,4119,4123,4127,3131,3134/ C BLOW, PAGE 3 C RA=OACTIO(V) DV=ODESC2(V) BLOW=RMISS C D TYPE 10,H,V,RMK,HFLG,OUT C D10 FORMAT(' BLOW 10-- ',3I7,L7,I7) IF(.NOT.HFLG) GO TO 1000 C C HERO IS ATTACKER, VILLAIN IS DEFENDER. C PBLOSE=10 OFLAG2(V)=or(OFLAG2(V),FITEBT) IF(and(AFLAG(H),ASTAG).EQ.0) GO TO 100 CALL RSPEAK(591) AFLAG(H)=and(AFLAG(H), not(ASTAG)) RETURN C 100 ATT=FIGHTS(H,.TRUE.) OA=ATT DEF=VILSTR(V) OD=DEF DWEAP=0 DO 200 I=1,OLNT IF((OCAN(I).EQ.V).AND.(and(OFLAG2(I),WEAPBT).NE.0)) & DWEAP=I 200 CONTINUE IF(V.EQ.AOBJ(PLAYER)) GO TO 300 IF(DEF.NE.0) GO TO 2000 CALL RSPSUB(592,DV) RETURN C 300 CALL JIGSUP(593) RETURN C C VILLAIN IS ATTACKER, HERO IS DEFENDER. C 1000 PBLOSE=50 AFLAG(H)=and(AFLAG(H),not(ASTAG)) IF(and(OFLAG2(V),STAGBT).EQ.0) GO TO 1200 OFLAG2(V)=and(OFLAG2(V), not(STAGBT)) CALL RSPSUB(594,DV) RETURN C 1200 ATT=VILSTR(V) OA=ATT DEF=FIGHTS(H,.TRUE.) IF(DEF.LE.0) RETURN OD=FIGHTS(H,.FALSE.) DWEAP=IABS(FWIM(0,WEAPBT,0,0,H,.TRUE.)) C BLOW, PAGE 4 C C PARTIES ARE NOW EQUIPPED. DEF CANNOT BE ZERO. C ATT MUST BE > 0. C 2000 CONTINUE C D TYPE 2050,ATT,OA,DEF,OD,DWEAP C D2050 FORMAT(' BLOW 2050-- ',5I7) IF(DEF.GT.0) GO TO 2100 RES=RKILL IF(HFLG) CALL RSPSUB(595,DV) GO TO 3000 C 2100 IF(DEF-2) 2200,2300,2400 2200 ATT=MIN0(ATT,3) TBL=DEF1R(ATT) GO TO 2500 C 2300 ATT=MIN0(ATT,4) TBL=DEF2R(ATT) GO TO 2500 C 2400 ATT=ATT-DEF ATT=MIN0(2,MAX0(-2,ATT))+3 TBL=DEF3R(ATT) C 2500 RES=RVECTR(TBL+RND(10)) IF(OUT.EQ.0) GO TO 2600 IF(RES.EQ.RSTAG) GO TO 2550 RES=RSIT GO TO 2600 2550 RES=RHES 2600 IF((RES.EQ.RSTAG).AND.(DWEAP.NE.0).AND.PROB(25,PBLOSE)) & RES=RLOSE C MI=RSTATE(((RMK-1)*9)+RES+1) IF(MI.EQ.0) GO TO 3000 I=(MOD(MI,1000)+RND(MI/1000))+MBASE+1 J=DV IF(.NOT.HFLG .AND.(DWEAP.NE.0)) J=ODESC2(DWEAP) C D TYPE 2650,RES,MI,I,J,MBASE C D2650 FORMAT(' BLOW 2650-- ',5I7) CALL RSPSUB(I,J) C BLOW, PAGE 5 C C NOW APPLY RESULT C 3000 GO TO (4000,3100,3200,3300,3400,3500,3600,4000,3200),RES+1 C 3100 IF(HFLG) DEF=-DEF GO TO 4000 C 3200 DEF=0 GO TO 4000 C 3300 DEF=MAX0(0,DEF-1) GO TO 4000 C 3400 DEF=MAX0(0,DEF-2) GO TO 4000 C 3500 IF(HFLG) GO TO 3550 AFLAG(H)=or(AFLAG(H),ASTAG) GO TO 4000 C 3550 OFLAG2(V)=or(OFLAG2(V),STAGBT) GO TO 4000 C 3600 CALL NEWSTA(DWEAP,0,HERE,0,0) DWEAP=0 IF(HFLG) GO TO 4000 DWEAP=IABS(FWIM(0,WEAPBT,0,0,H,.TRUE.)) IF(DWEAP.NE.0) CALL RSPSUB(605,ODESC2(DWEAP)) C BLOW, PAGE 6 C 4000 BLOW=RES IF(.NOT.HFLG) GO TO 4500 OCAPAC(V)=DEF IF(DEF.NE.0) GO TO 4100 OFLAG2(V)=and(OFLAG2(V), not(FITEBT)) CALL RSPSUB(572,DV) CALL NEWSTA(V,0,0,0,0) IF(RA.EQ.0) RETURN PRSA=DEADXW F=OAPPLI(RA,0) RETURN C 4100 IF((RES.NE.ROUT).OR.(RA.EQ.0)) RETURN PRSA=OUTXW F=OAPPLI(RA,0) RETURN C 4500 ASTREN(H)=-10000 IF(DEF.NE.0) ASTREN(H)=DEF-OD IF(DEF.GE.OD) GO TO 4600 CTICK(CEVCUR)=30 CFLAG(CEVCUR)=.TRUE. 4600 IF(FIGHTS(H,.TRUE.).GT.0) RETURN ASTREN(H)=1-FIGHTS(H,.FALSE.) CALL JIGSUP(596) BLOW=-1 RETURN C END C SWORDD- SWORD INTERMOVE DEMON C C DECLARATIONS C SUBROUTINE SWORDD IMPLICIT INTEGER(A-Z) LOGICAL INFEST,FINDXT C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG C C EXITS C COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ EQUIVALENCE (XFLAG,XOBJ) C COMMON /XSRCH/ XMIN,XMAX,XDOWN,XUP, & XNORTH,XSOUTH,XENTER,XEXIT,XEAST,XWEST C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C VILLAINS AND DEMONS C LOGICAL THFFLG,SWDACT,THFACT COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA C C ADVENTURERS C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C SWORDD, PAGE 2 C IF(OADV(SWORD).NE.PLAYER) GO TO 500 NG=2 IF(INFEST(HERE)) GO TO 300 NG=1 DO 200 I=XMIN,XMAX,XMIN IF(.NOT.FINDXT(I,HERE)) GO TO 200 GO TO (50,200,50,50),XTYPE 50 IF(INFEST(XROOM1)) GO TO 300 200 CONTINUE NG=0 C 300 IF(NG.EQ.SWDSTA) RETURN CALL RSPEAK(NG+495) SWDSTA=NG RETURN C 500 SWDACT=.FALSE. RETURN END C INFEST- SUBROUTINE TO TEST FOR INFESTED ROOM C C DECLARATIONS C LOGICAL FUNCTION INFEST(R) IMPLICIT INTEGER(A-Z) C C ROOMS C COMMON /RINDEX/ WHOUS,LROOM,CELLA COMMON /RINDEX/ MTROL,MAZE1 COMMON /RINDEX/ MGRAT,MAZ15 COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER COMMON /RINDEX/ STREA,EGYPT,ECHOR COMMON /RINDEX/ TSHAF COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC COMMON /RINDEX/ CAROU COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4 COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL COMMON /RINDEX/ CPANT,CPOUT,CPUZZ C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C VILLAINS AND DEMONS C LOGICAL THFFLG,SWDACT,THFACT COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C IF(.NOT.ENDGMF) INFEST=(OROOM(CYCLO).EQ.R).OR. & (OROOM(TROLL).EQ.R).OR. & ((OROOM(THIEF).EQ.R).AND.THFACT) IF(ENDGMF) INFEST=(R.EQ.MRG).OR.(R.EQ.MRGE).OR. & (R.EQ.MRGW).OR. & ((R.EQ.INMIR).AND.(MLOC.EQ.MRG)) RETURN END !Funky!Stuff! echo x - dgame.f cat >dgame.f <<'!Funky!Stuff!' C GAME- MAIN COMMAND LOOP FOR DUNGEON C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C SUBROUTINE GAME IMPLICIT INTEGER (A-Z) LOGICAL RMDESC,VAPPLI,RAPPLI,AAPPLI LOGICAL F,PARSE,FINDXT,XVEHIC,LIT CHARACTER SECHO(4) CHARACTER GDTSTR(3) C C PARSER OUTPUT C LOGICAL PRSWON COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC C C MISCELLANEOUS VARIABLES C CHARACTER INLINE(78) COMMON /INPUT/ INLNT,INLINE COMMON /CHAN/ INPCH,OUTCH,DBCH C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RINDEX/ WHOUS,LROOM,CELLA COMMON /RINDEX/ MTROL,MAZE1 COMMON /RINDEX/ MGRAT,MAZ15 COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER COMMON /RINDEX/ STREA,EGYPT,ECHOR COMMON /RINDEX/ TSHAF COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC COMMON /RINDEX/ CAROU COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4 COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL COMMON /RINDEX/ CPANT,CPOUT,CPUZZ C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C C VERBS C COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW COMMON /VINDEX/ WALKIW,FIGHTW,FOOW COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C C FUNCTIONS AND DATA C DATA SECHO/'E','C','H','O'/ DATA GDTSTR/'G','D','T'/ C GAME, PAGE 2 C C START UP, DESCRIBE CURRENT LOCATION. C CALL RSPEAK(1) F=RMDESC(3) C C NOW LOOP, READING AND EXECUTING COMMANDS. C 100 WINNER=PLAYER TELFLG=.FALSE. IF(PRSCON.LE.1) CALL RDLINE(INLINE,INLNT,1) DO 150 I=1,3 IF(INLINE(I+PRSCON-1).NE.GDTSTR(I)) GO TO 200 150 CONTINUE CALL GDT GO TO 100 C 200 MOVES=MOVES+1 PRSWON=PARSE(INLINE,INLNT,.TRUE.) IF(.NOT.PRSWON) GO TO 400 IF(XVEHIC(1)) GO TO 400 C IF(PRSA.EQ.TELLW) GO TO 2000 300 IF((PRSO.EQ.VALUA).OR.(PRSO.EQ.EVERY)) GO TO 900 IF(.NOT.VAPPLI(PRSA)) GO TO 400 350 IF(.NOT.ECHOF.AND.(HERE.EQ.ECHOR)) GO TO 1000 F=RAPPLI(RACTIO(HERE)) C 400 CALL XENDMV(TELFLG) IF(.NOT.LIT(HERE)) PRSCON=1 GO TO 100 C 900 CALL VALUAC(VALUA) GO TO 350 C GAME, PAGE 3 C C SPECIAL CASE-- ECHO ROOM. C IF INPUT IS NOT 'ECHO' OR A DIRECTION, JUST ECHO. C 1000 CALL RDLINE(INLINE,INLNT,0) MOVES=MOVES+1 DO 1100 I=1,4 IF(INLINE(I).NE.SECHO(I)) GO TO 1300 1100 CONTINUE C C Note: the following DO loop was changed from DO 1200 I=5,78 C The change was necessary because the RDLINE function was changed, C and no longer provides a 78 character buffer padded with blanks. C DO 1200 I=5,INLNT IF(INLINE(I).NE.' ') GO TO 1300 1200 CONTINUE C CALL RSPEAK(571) ECHOF=.TRUE. OFLAG2(BAR)=and(OFLAG2(BAR), not(SCRDBT)) PRSWON=.TRUE. PRSCON=1 GO TO 400 C 1300 PRSWON=PARSE(INLINE,INLNT,.FALSE.) IF(.NOT.PRSWON .OR. (PRSA.NE.WALKW)) & GO TO 1400 IF(FINDXT(PRSO,HERE)) GO TO 300 C 1400 WRITE(OUTCH,1410) (INLINE(J),J=1,INLNT) 1410 FORMAT(1X,78A1) TELFLG=.TRUE. GO TO 1000 C GAME, PAGE 4 C C SPECIAL CASE-- TELL <ACTOR>, NEW COMMAND C NOTE THAT WE CANNOT BE IN THE ECHO ROOM. C 2000 IF(and(OFLAG2(PRSO),ACTRBT).NE.0) GO TO 2100 CALL RSPEAK(602) GO TO 350 C 2100 WINNER=OACTOR(PRSO) HERE=AROOM(WINNER) IF(PRSCON.LE.1) GO TO 2700 IF(PARSE(INLINE,INLNT,.TRUE.)) GO TO 2150 2700 I=341 IF(TELFLG) I=604 CALL RSPEAK(I) 2600 WINNER=PLAYER HERE=AROOM(WINNER) GO TO 350 C 2150 IF(AAPPLI(AACTIO(WINNER))) GO TO 2400 IF(XVEHIC(1)) GO TO 2400 IF((PRSO.EQ.VALUA).OR.(PRSO.EQ.EVERY)) GO TO 2900 IF(.NOT.VAPPLI(PRSA)) GO TO 2400 2350 F=RAPPLI(RACTIO(HERE)) C 2400 CALL XENDMV(TELFLG) GO TO 2600 C 2900 CALL VALUAC(VALUA) GO TO 350 C END C XENDMV- EXECUTE END OF MOVE FUNCTIONS. C C DECLARATIONS C SUBROUTINE XENDMV(FLAG) IMPLICIT INTEGER(A-Z) LOGICAL F,CLOCKD,FLAG,XVEHIC C C PARSER OUTPUT C LOGICAL PRSWON COMMON /PRSVEC/ PRSA,PRSO,PRSI,PRSWON,PRSCON C C VILLAINS AND DEMONS C LOGICAL THFFLG,SWDACT,THFACT COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA C IF(.NOT.FLAG) CALL RSPEAK(341) IF(THFACT) CALL THIEFD IF(PRSWON) CALL FIGHTD IF(SWDACT) CALL SWORDD IF(PRSWON) F=CLOCKD(X) IF(PRSWON) F=XVEHIC(2) RETURN END C XVEHIC- EXECUTE VEHICLE FUNCTION C C DECLARATIONS C LOGICAL FUNCTION XVEHIC(N) IMPLICIT INTEGER(A-Z) LOGICAL OAPPLI C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C XVEHIC=.FALSE. AV=AVEHIC(WINNER) IF(AV.NE.0) XVEHIC=OAPPLI(OACTIO(AV),N) RETURN END !Funky!Stuff! exit 0 -- -Bill Randle Tektronix, Inc. billr@tekred.TEK.COM
billr@tekred.UUCP (Bill Randle) (01/10/87)
# The rest of this file is a shell script which will extract: # dinit.ftn.F dmain.ftn.f dso1.for.f dso2.for.f dso3.for.f dso4.for.f dso5.for.f dso6.for.f dso7.f echo x - dinit.ftn.F cat >dinit.ftn.F <<'!Funky!Stuff!' #ifndef INDXFILE #define INDXFILE '/usr/games/lib/dunlib/dindx.dat' #endif #ifndef TEXTFILE #define TEXTFILE '/usr/games/lib/dunlib/dtext.dat' #endif C INIT-- DUNGEON INITIALIZATION SUBROUTINE C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C LOGICAL FUNCTION INIT(X) IMPLICIT INTEGER (A-Z) LOGICAL PROTCT INTEGER DATARRY(3) C C PARSER OUTPUT C LOGICAL PRSWON COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON C C PARSER STATE C COMMON /SYNFLG/ SDIR COMMON /ORPHS/ OFLAG,OACT,OSLOT,OPREP,ONAME COMMON /LAST/ LASTIT C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC C C SCREEN OF LIGHT C COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC C C MESSAGE INDEX C COMMON /RMSG/ MLNT,RTEXT(1050) C C MISCELLANEOUS VARIABLES C COMMON /STAR/ MBASE,STRBIT COMMON /VERS/ VMAJ,VMIN,VEDIT COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC COMMON /CHAN/ INPCH,OUTCH,DBCH COMMON /DEBUG/ DBGFLG,PRSFLG,GDTFLG COMMON /HYPER/ HFACTR C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C COMMON /RINDEX/ WHOUS,LROOM,CELLA COMMON /RINDEX/ MTROL,MAZE1 COMMON /RINDEX/ MGRAT,MAZ15 COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER COMMON /RINDEX/ STREA,EGYPT,ECHOR COMMON /RINDEX/ TSHAF COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC COMMON /RINDEX/ CAROU COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4 COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL COMMON /RINDEX/ CPANT,CPOUT,CPUZZ C C EXITS C COMMON /EXITS/ XLNT,TRAVEL(900) C COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ EQUIVALENCE (XFLAG,XOBJ) C COMMON /XPARS/ XRMASK,XDMASK,XFMASK,XFSHFT,XASHFT, & XELNT(4),XNORM,XNO,XCOND,XDOOR,XLFLAG C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OROOM2/ R2LNT,O2(20),R2(20) C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C CLOCK INTERRUPTS C LOGICAL CFLAG COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25) C C VILLAINS AND DEMONS C LOGICAL THFFLG,SWDACT,THFACT COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA COMMON /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4) C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE LOGICAL FLAGS(46) INTEGER SWITCH(22) EQUIVALENCE (FLAGS(1),TROLLF) EQUIVALENCE (SWITCH(1),BTIEF) C INIT, PAGE 2 C C FIRST CHECK FOR PROTECTION VIOLATION C IF(PROTCT(X)) GO TO 10000 PRINT 10100 10100 FORMAT(' There appears before you a threatening figure clad & all over'/' in heavy black armor. His legs seem like the & massive trunk'/' of the oak tree. His broad shoulders and & helmeted head loom'/' high over your own puny frame, and & you realize that his powerful'/' arms could easily crush the & very life from your body. There'/' hangs from his belt a & veritable arsenal of deadly weapons:'/' sword, mace, ball & and chain, dagger, lance, and trident.'/' He speaks with a & commanding voice:'//20X,'"You shall not pass."'//' As & he grabs you by the neck all grows dim about you.') CALL EXIT C C NOW START INITIALIZATION PROPER C 10000 INIT=.FALSE. MMAX=1050 OMAX=220 RMAX=200 VMAX=4 AMAX=4 CMAX=25 FMAX=46 SMAX=22 XMAX=900 R2MAX=20 DIRMAX=15 C MLNT=0 OLNT=0 RLNT=0 VLNT=0 ALNT=0 CLNT=0 XLNT=1 R2LNT=0 C LTSHFT=10 MXSCOR=LTSHFT EGSCOR=0 EGMXSC=0 MXLOAD=100 RWSCOR=0 DEATHS=0 MOVES=0 PLTIME=0 MUNGRM=0 HS=0 PRSA=0 PRSI=0 PRSO=0 PRSCON=1 OFLAG=0 OACT=0 OSLOT=0 OPREP=0 ONAME=0 THFFLG=.FALSE. THFACT=.TRUE. SWDACT=.FALSE. SWDSTA=0 C RECNO=1 MBASE=0 C LOGICAL UNIT NRS: 5=STDIN, 6=STDOUT INPCH=5 OUTCH=6 DBCH=2 C INIT, PAGE 3 C C INIT ALL ARRAYS. C DO 5 I=1,CMAX CFLAG(I)=.FALSE. CTICK(I)=0 CACTIO(I)=0 5 CONTINUE C DO 10 I=1,FMAX FLAGS(I)=.FALSE. 10 CONTINUE BUOYF=.TRUE. EGYPTF=.TRUE. CAGETF=.TRUE. MR1F=.TRUE. MR2F=.TRUE. FOLLWF=.TRUE. DO 12 I=1,SMAX SWITCH(I)=0 12 CONTINUE ORMTCH=4 LCELL=1 PNUMB=1 MDIR=270 MLOC=MRB CPHERE=10 C DO 15 I=1,R2MAX R2(I)=0 O2(I)=0 15 CONTINUE C DO 20 I=1,XMAX TRAVEL(I)=0 20 CONTINUE C DO 30 I=1,VMAX VOPPS(I)=0 VPROB(I)=0 VILLNS(I)=0 VBEST(I)=0 VMELEE(I)=0 30 CONTINUE C DO 40 I=1,OMAX ODESC1(I)=0 ODESC2(I)=0 ODESCO(I)=0 OREAD(I)=0 OACTIO(I)=0 OFLAG1(I)=0 OFLAG2(I)=0 OFVAL(I)=0 OTVAL(I)=0 OSIZE(I)=0 OCAPAC(I)=0 OCAN(I)=0 OADV(I)=0 OROOM(I)=0 40 CONTINUE C RDESC2=0 DO 50 I=1,RMAX RDESC1(I)=0 RACTIO(I)=0 RFLAG(I)=0 RVAL(I)=0 REXIT(I)=0 50 CONTINUE C DO 60 I=1,MMAX RTEXT(I)=0 60 CONTINUE C DO 70 I=1,AMAX AROOM(I)=0 ASCORE(I)=0 AVEHIC(I)=0 AOBJ(I)=0 AACTIO(I)=0 ASTREN(I)=0 AFLAG(I)=0 70 CONTINUE C DBGFLG=0 PRSFLG=0 GDTFLG=0 C FROMDR=0 SCOLRM=0 SCOLAC=0 C INIT, PAGE 4 C C NOW RESTORE FROM EXISTING INDEX FILE. C OPEN(UNIT=1,file=INDXFILE,status='OLD', & FORM='FORMATTED',ACCESS='SEQUENTIAL',ERR=1900) READ(1,130) I,J,K IF((I.NE.VMAJ).OR.(J.NE.VMIN)) & GO TO 1925 OPEN(UNIT=DBCH,file=TEXTFILE,status='OLD', & FORM='UNFORMATTED',ACCESS='DIRECT', & recl=76,ERR=1950) C D PRINT 150 C D150 FORMAT(' RESTORING FROM "dindx.dat"') READ(1,130) MXSCOR,STRBIT,EGMXSC READ(1,130) RLNT,RDESC2,RDESC1,REXIT,RACTIO,RVAL,RFLAG READ(1,130) XLNT,TRAVEL READ(1,130) OLNT,ODESC1,ODESC2,ODESCO,OACTIO,OFLAG1,OFLAG2, & OFVAL,OTVAL,OSIZE,OCAPAC,OROOM,OADV,OCAN, & OREAD READ(1,130) R2LNT,O2,R2 READ(1,130) CLNT,CTICK,CACTIO READ(1,135) CFLAG READ(1,130) VLNT,VILLNS,VPROB,VOPPS,VBEST,VMELEE READ(1,130) ALNT,AROOM,ASCORE,AVEHIC,AOBJ,AACTIO,ASTREN,AFLAG READ(1,130) MBASE,MLNT,RTEXT C CLOSE(1) GO TO 1025 C C 130 FORMAT(I8) 130 FORMAT(I6) 135 FORMAT(L4) C INIT, PAGE 5 C C THE INTERNAL DATA BASE IS NOW ESTABLISHED. C SET UP TO PLAY THE GAME. C 1025 CALL ITIME(SHOUR,SMIN,SSEC) C CALL IDATE(I,J,K) CALL IDATE(DATARRY(1)) CALL INIRND(or(DATARRY(1),or(DATARRY(2),DATARRY(3))), & or(SHOUR,or(SMIN,SSEC))) C WINNER=PLAYER LASTIT=AOBJ(PLAYER) HERE=AROOM(WINNER) THFPOS=OROOM(THIEF) BLOC=OROOM(BALLO) INIT=.TRUE. C C D PRINT 1050,RLNT,RMAX,XLNT,XMAX,OLNT,OMAX,MLNT,MMAX, C & VLNT,VMAX,ALNT,AMAX,CLNT,CMAX,R2LNT,R2MAX C D1050 FORMAT(' USED:'/1X,I5,' OF',I5,' ROOMS'/ C & 1X,I5,' OF',I5,' EXITS'/ C & 1X,I5,' OF',I5,' OBJECTS'/ C & 1X,I5,' OF',I5,' MESSAGES'/ C & 1X,I5,' OF',I5,' VILLAINS'/ C & 1X,I5,' OF',I5,' ADVENTURERS'/ C & 1X,I5,' OF',I5,' CLOCK EVENTS'/ C & 1X,I5,' OF',I5,' ROOM2 SLOTS') C D PRINT 1150,MXSCOR,EGMXSC,RECNO,RDESC2,MBASE,STRBIT C D1150 FORMAT(' MAX SCORE=',I5/' EG SCORE=',I5/ C & ' MAX RECNO=',I5/' RDESC2 BASE=',I5/ C & ' MELEE START=',I5/' STAR MASK=',I7) C D PAUSE 1 C RETURN C INIT, PAGE 6 C C ERRORS-- INIT FAILS. C 1900 PRINT 910 PRINT 980 RETURN 1925 PRINT 920,I,J,K,VMAJ,VMIN,VEDIT PRINT 980 RETURN 1950 PRINT 960 PRINT 980 RETURN 910 FORMAT(' I can''t open ',INDXFILE,'.') 920 FORMAT(' "dindx.dat" is version ',I1,'.',I1,A1,'.'/ & ' I require version ',I1,'.',I1,A1,'.') 960 FORMAT(' I can''t open ',TEXTFILE,'.') 980 FORMAT(' Suddenly a sinister, wraithlike figure appears before & you'/' seeming to float in the air. In a low, sorrowful voice & he says,'/' "Alas, the very nature of the world has changed, & and the dungeon'/' cannot be found. All must now pass away." & Raising his oaken staff'/' in farewell, he fades into the & spreading darkness. In his place'/' appears a tastefully & lettered sign reading:'//23X,'INITIALIZATION FAILURE'// & ' The darkness becomes all encompassing, and your vision fails.') C END C PROTCT-- CHECK FOR USER VIOLATION C C THIS ROUTINE SHOULD BE MODIFIED IF YOU WISH TO ADD SYSTEM C DEPENDANT PROTECTION AGAINST ABUSE. C C AT THE MOMENT, PLAY IS PERMITTED UNDER ALL CIRCUMSTANCES. C LOGICAL FUNCTION PROTCT(X) IMPLICIT INTEGER(A-Z) C PROTCT=.TRUE. RETURN END !Funky!Stuff! echo x - dmain.ftn.f cat >dmain.ftn.f <<'!Funky!Stuff!' C DUNGEON-- MAIN PROGRAM C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C PROGRAM DUNGEO C C DECLARATIONS C IMPLICIT INTEGER (A-Z) LOGICAL INIT C C PARSER OUTPUT C LOGICAL PRSWON COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON C C PARSER STATE C COMMON /ORPHS/ OFLAG,OACT,OSLOT,OPREP,ONAME COMMON /LAST/ LASTIT COMMON /PV/ ACT,OBJ1,OBJ2,PREP1,PREP2 COMMON /SYNTAX/ SYN(11) COMMON /SYNFLG/ SDIR,SIND,SSTD,SFLIP,SDRIV,SVMASK COMMON /OBJFLG/ VABIT,VRBIT,VTBIT,VCBIT,VEBIT,VFBIT,VPMASK C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC C C SCREEN OF LIGHT STATE C COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC COMMON /SCREEN/ SCOLDR(8),SCOLWL(12) C C PUZZLE ROOM STATE C COMMON /PUZZLE/ CPDR(16),CPWL(8),CPVEC(64) C C MESSAGE INDEX C COMMON /RMSG/ MLNT,RTEXT(1050) C C MISCELLANEOUS VARIABLES C CHARACTER VEDIT CHARACTER INBUF(78) COMMON /INPUT/ INLNT,INBUF(78) COMMON /STAR/ MBASE,STRBIT COMMON /VERS/ VMAJ,VMIN,VEDIT COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC COMMON /BATS/ BATDRP(9) COMMON /CHAN/ INPCH,OUTCH,DBCH COMMON /DEBUG/ DBGFLG,PRSFLG,GDTFLG COMMON /HYPER/ HFACTR C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C COMMON /RINDEX/ WHOUS,LROOM,CELLA COMMON /RINDEX/ MTROL,MAZE1 COMMON /RINDEX/ MGRAT,MAZ15 COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER COMMON /RINDEX/ STREA,EGYPT,ECHOR COMMON /RINDEX/ TSHAF COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC COMMON /RINDEX/ CAROU COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4 COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL COMMON /RINDEX/ CPANT,CPOUT,CPUZZ C C EXITS C COMMON /EXITS/ XLNT,TRAVEL(900) C COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ EQUIVALENCE (XFLAG,XOBJ) C COMMON /XPARS/ XRMASK,XDMASK,XFMASK,XFSHFT,XASHFT, & XELNT(4),XNORM,XNO,XCOND,XDOOR,XLFLAG C COMMON /XSRCH/ XMIN,XMAX,XDOWN,XUP, & XNORTH,XSOUTH,XENTER,XEXIT,XEAST,XWEST C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OROOM2/ R2LNT,O2(20),R2(20) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C CLOCK INTERRUPTS C LOGICAL CFLAG COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25) C COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND, & CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG, & CEVGNO,CEVBUC,CEVSPH,CEVEGH, & CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE, & CEVMRS,CEVPIN,CEVINQ,CEVFOL C C VILLAINS AND DEMONS C LOGICAL THFFLG,SWDACT,THFACT COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA COMMON /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4) C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C COMMON /AFLAGS/ ASTAG C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C C VERBS C COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW COMMON /VINDEX/ WALKIW,FIGHTW,FOOW COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C DUNGEON, PAGE 2 C C DATA STATEMENTS FOR CONSTANT ARRAYS C DATA VMAJ/2/,VMIN/5/,VEDIT/'A'/ C DATA SDIR/o'40000'/,SIND/o'20000'/,SSTD/o'10000'/, & SFLIP/o'4000'/,SDRIV/o'2000'/,SVMASK/o'777'/ DATA VABIT/o'40000'/,VRBIT/o'20000'/,VTBIT/o'10000'/, & VCBIT/o'4000'/,VEBIT/o'2000'/,VFBIT/o'1000'/, & VPMASK/o'777'/ C DATA BATDRP/66,67,68,69,70,71,72,65,73/ C DATA SCOLDR/o'2000',153,o'12000',154,o'6000',152,o'16000',151/ DATA SCOLWL/151,207,o'6000',152,208,o'16000', & 153,206,o'12000',154,205,o'2000'/ C DATA HFACTR/500/ C DATA CPDR/o'2000',-8,o'4000',-7,o'6000',1,o'10000',9, & o'12000',8,o'14000',7,o'16000',-1,o'20000',-9/ DATA CPWL/205,-8,206,8,207,1,208,-1/ DATA CPVEC/1,1,1,1,1,1,1,1, & 1,0,-1,0,0,-1,0,1, & 1,-1,0,1,0,-2,0,1, & 1,0,0,0,0,1,0,1, & 1,-3,0,0,-1,-1,0,1, & 1,0,0,-1,0,0,0,1, & 1,1,1,0,0,0,1,1, & 1,1,1,1,1,1,1,1/ C DATA CEVCUR/1/,CEVMNT/2/,CEVLNT/3/,CEVMAT/4/, & CEVCND/5/,CEVBAL/6/,CEVBRN/7/,CEVFUS/8/, & CEVLED/9/,CEVSAF/10/,CEVVLG/11/,CEVGNO/12/, & CEVBUC/13/,CEVSPH/14/,CEVEGH/15/, & CEVFOR/16/,CEVSCL/17/,CEVZGI/18/,CEVZGO/19/, & CEVSTE/20/,CEVMRS/21/,CEVPIN/22/,CEVINQ/23/, & CEVFOL/24/ C DATA XRMASK/o'377'/,XDMASK/o'76000'/,XFMASK/3/ DATA XFSHFT/256/,XASHFT/256/ DATA XNORM/1/,XNO/2/,XCOND/3/,XDOOR/4/ DATA XELNT/1,2,3,3/,XLFLAG/o'100000'/ DATA XMIN/o'2000'/,XMAX/o'40000'/,XUP/o'22000'/,XDOWN/o'24000'/ DATA XNORTH/o'2000'/,XSOUTH/o'12000'/,XENTER/o'32000'/, & XEXIT/o'34000'/ DATA XEAST/o'6000'/,XWEST/o'16000'/ C DATA PLAYER/1/,AROBOT/2/,AMASTR/3/ DATA ASTAG/o'100000'/ C DATA RSEEN/o'100000'/,RLIGHT/o'40000'/,RLAND/o'20000'/ DATA RWATER/o'10000'/,RAIR/o'4000'/,RSACRD/o'2000'/, & RFILL/o'1000'/ DATA RMUNG/o'400'/,RBUCK/o'200'/,RHOUSE/o'100'/, & RNWALL/o'40'/,REND/o'20'/ C DATA WHOUS/2/,LROOM/8/,CELLA/9/ DATA MTROL/10/,MAZE1/11/ DATA MGRAT/25/,MAZ15/30/ DATA FORE1/31/,FORE3/33/,CLEAR/36/,RESER/40/ DATA STREA/42/,EGYPT/44/,ECHOR/49/ DATA TSHAF/61/ DATA BSHAF/76/,MMACH/77/,DOME/79/,MTORC/80/ DATA CAROU/83/ DATA RIDDL/91/,LLD2/94/,TEMP1/96/,TEMP2/97/,MAINT/100/ DATA MCYCL/101/,BLROO/102/,TREAS/103/,RIVR1/107/,RIVR2/108/ DATA RIVR3/109/ DATA RIVR4/112/,RIVR5/113/,FCHMP/114/,MBARR/119/,FALLS/120/ DATA MRAIN/121/,POG/122/,VLBOT/126/,VAIR1/127/,VAIR2/128/ DATA VAIR3/129/,VAIR4/130/ DATA LEDG2/131/,LEDG3/132/,LEDG4/133/,MSAFE/135/,CAGER/140/ DATA CAGED/141/,TWELL/142/,BWELL/143/,ALICE/144/,ALISM/145/ DATA ALITR/146/,MTREE/147/,BKENT/148/ DATA BKVW/151/,BKTWI/153/,BKVAU/154/,BKBOX/155/ DATA CRYPT/157/,TSTRS/158/,MRANT/159/ DATA MREYE/160/,MRA/161/,MRB/162/,MRC/163/,MRG/164/ DATA MRD/165/,FDOOR/166/,MRAE/167/ DATA MRCE/171/,MRCW/172/,MRGE/173/,MRGW/174/,MRDW/176/ DATA INMIR/177/,SCORR/179/ DATA NCORR/182/,PARAP/183/,CELL/184/,PCELL/185/,NCELL/186/ DATA CPANT/188/,CPOUT/189/ DATA CPUZZ/190/ C DATA CINTW/1/,DEADXW/2/,FRSTQW/3/,INXW/4/ DATA OUTXW/5/,WALKIW/6/,FIGHTW/7/,FOOW/8/ C DATA READW/100/,MELTW/101/ DATA INFLAW/102/,DEFLAW/103/,ALARMW/104/,EXORCW/105/ DATA PLUGW/106/,KICKW/107/,WAVEW/108/,RAISEW/109/,LOWERW/110/ DATA RUBW/111/,PUSHW/112/,UNTIEW/113/,TIEW/114/,TIEUPW/115/ DATA TURNW/116/,BREATW/117/,KNOCKW/118/,LOOKW/119/ DATA EXAMIW/120/,SHAKEW/121/,MOVEW/122/,TRNONW/123/,TRNOFW/124/ DATA OPENW/125/,CLOSEW/126/,FINDW/127/,WAITW/128/,SPINW/129/ DATA BOARDW/130/,UNBOAW/131/,TAKEW/132/,INVENW/133/ DATA FILLW/134/,EATW/135/,DRINKW/136/,BURNW/137/ DATA MUNGW/138/,KILLW/139/,ATTACW/141/ DATA SWINGW/140/,WALKW/142/,TELLW/143/,PUTW/144/ DATA DROPW/145/,GIVEW/146/,POURW/147/,THROWW/148/ C DATA DIGW/89/,LEAPW/91/,STAYW/73/,FOLLOW/85/ DATA HELLOW/151/,LOOKIW/152/,LOOKUW/153/,PUMPW/154/ DATA WINDW/155/,CLMBW/156/,CLMBUW/157/,CLMBDW/158/,TRNTOW/159/ C DATA VISIBT/o'100000'/,READBT/o'40000'/,TAKEBT/o'20000'/, & DOORBT/o'10000'/,TRANBT/o'4000'/,FOODBT/o'2000'/, & NDSCBT/o'1000'/,DRNKBT/o'400'/, CONTBT/o'200'/, & LITEBT/o'100'/,VICTBT/o'40'/,BURNBT/o'20'/, & FLAMBT/o'10'/,TOOLBT/o'4'/,TURNBT/o'2'/,ONBT/o'1'/ C DATA FINDBT/o'100000'/,SLEPBT/o'40000'/,SCRDBT/o'20000'/, & TIEBT/o'10000'/, CLMBBT/o'4000'/,ACTRBT/o'2000'/, & WEAPBT/o'1000'/,FITEBT/o'400'/, VILLBT/o'200'/, & STAGBT/o'100'/,TRYBT/o'40'/,NOCHBT/o'20'/, & OPENBT/o'10'/,TCHBT/o'4'/,VEHBT/o'2'/,SCHBT/o'1'/ C DATA GARLI/2/,FOOD/3/,GUNK/4/,COAL/5/,MACHI/7/,DIAMO/8/ DATA TCASE/9/,BOTTL/10/ DATA WATER/11/,ROPE/12/,KNIFE/13/,SWORD/14/,LAMP/15/,BLAMP/16/ DATA RUG/17/,LEAVE/18/,TROLL/19/,AXE/20/ DATA RKNIF/21/,KEYS/23/,BAR/26/,ICE/30/ DATA COFFI/33/,TORCH/34/,TBASK/35/,FBASK/36/,IRBOX/39/ DATA GHOST/42/,TRUNK/45/,BELL/46/,BOOK/47/,CANDL/48/ DATA MATCH/51/,TUBE/54/,PUTTY/55/,WRENC/56/,SCREW/57/ DATA CYCLO/58/,CHALI/59/ DATA THIEF/61/,STILL/62/,WINDO/63/,GRATE/65/,DOOR/66/ DATA HPOLE/71/,RBUTT/79/,LEAK/78/,RAILI/75/ DATA POT/85/,STATU/86/,IBOAT/87/,DBOAT/88/,PUMP/89/,RBOAT/90/ DATA STICK/92/,BUOY/94/,SHOVE/96/,GUANO/97/,BALLO/98/,RECEP/99/ DATA BROPE/101/,HOOK1/102/,HOOK2/103/,SAFE/105/,SSLOT/107/ DATA BRICK/109/,FUSE/110/ DATA GNOME/111/,BLABE/112/,DBALL/113/,TOMB/119/ DATA LCASE/123/,CAGE/124/,RCAGE/125/,SPHER/126/,SQBUT/127/ DATA FLASK/132/,POOL/133/,SAFFR/134/,BUCKE/137/,ORICE/139/ DATA ECAKE/138/,RDICE/140/ DATA BLICE/141/,ROBOT/142/,FTREE/145/,BILLS/148/,PORTR/149/ DATA SCOL/151/,ZGNOM/152/,EGG/154/,BEGG/155/,BAUBL/156/ DATA CANAR/157/,BCANA/158/,YLWAL/159/ DATA RDWAL/161/,PINDR/164/ DATA RBEAM/171/,ODOOR/172/,QDOOR/173/,CDOOR/175/ DATA NUM1/178/ DATA NUM8/185/,WARNI/186/,CSLIT/187/,GCARD/188/,STLDR/189/ DATA ITOBJ/192/,OPLAY/193/,EVERY/194/ DATA VALUA/195/,SAILO/196/,TEETH/197/,WALL/198/ DATA HANDS/200/,LUNGS/201/,AVIAT/202/ DATA WNORT/205/,GWATE/209/,MASTER/215/ C DUNGEON, PAGE 3 C C 1) INITIALIZE DATA STRUCTURES C 2) PLAY GAME C IF(INIT(X)) CALL GAME CALL EXIT END !Funky!Stuff! echo x - dso1.for.f cat >dso1.for.f <<'!Funky!Stuff!' C PRINCR- PRINT CONTENTS OF ROOM C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C SUBROUTINE PRINCR(FULL,RM) IMPLICIT INTEGER (A-Z) LOGICAL QEMPTY,QHERE,FULL C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,ENDGMF,FROBZF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,ENDGMF,FROBZF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVGUA,RVSND COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C PRINCR, PAGE 2 C J=329 DO 500 I=1,OLNT IF(.NOT.QHERE(I,RM).OR.(and(OFLAG1(I),(VISIBT+NDSCBT)).NE. & VISIBT).OR.(I.EQ.AVEHIC(WINNER))) GO TO 500 IF(.NOT.FULL.AND.(SUPERF.OR.(BRIEFF.AND. & (and(RFLAG(HERE),RSEEN).NE.0)))) GO TO 200 C C DO LONG DESCRIPTION OF OBJECT. C K=ODESCO(I) IF((K.EQ.0).OR.(and(OFLAG2(I),TCHBT).NE.0)) K=ODESC1(I) CALL RSPEAK(K) GO TO 500 C DO SHORT DESCRIPTION OF OBJECT. C 200 CALL RSPSUB(J,ODESC2(I)) J=502 C 500 CONTINUE C C NOW LOOP TO PRINT CONTENTS OF OBJECTS IN ROOM. C DO 1000 I=1,OLNT IF(.NOT.QHERE(I,RM).OR.(and(OFLAG1(I),(VISIBT+NDSCBT)).NE. & VISIBT)) GO TO 1000 IF(and(OFLAG2(I),ACTRBT).NE.0) CALL INVENT(OACTOR(I)) IF(((and(OFLAG1(I),TRANBT).EQ.0) & .AND.(and(OFLAG2(I),OPENBT).EQ.0)) & .OR.QEMPTY(I)) GO TO 1000 C C OBJECT IS NOT EMPTY AND IS OPEN OR TRANSPARENT. C J=573 IF(I.NE.TCASE) GO TO 600 J=574 IF((BRIEFF.OR.SUPERF).AND. .NOT.FULL) GO TO 1000 600 CALL PRINCO(I,J) C 1000 CONTINUE RETURN C END C INVENT- PRINT CONTENTS OF ADVENTURER C C DECLARATIONS C SUBROUTINE INVENT(ADV) IMPLICIT INTEGER (A-Z) LOGICAL QEMPTY C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C INVENT, PAGE 2 C I=575 IF(ADV.NE.PLAYER) I=576 DO 10 J=1,OLNT IF((OADV(J).NE.ADV).OR.(and(OFLAG1(J),VISIBT).EQ.0)) & GO TO 10 CALL RSPSUB(I,ODESC2(AOBJ(ADV))) I=0 CALL RSPSUB(502,ODESC2(J)) 10 CONTINUE C IF(I.EQ.0) GO TO 25 IF(ADV.EQ.PLAYER) CALL RSPEAK(578) RETURN C 25 DO 100 J=1,OLNT IF((OADV(J).NE.ADV).OR.(and(OFLAG1(J),VISIBT).EQ.0).OR. & ((and(OFLAG1(J),TRANBT).EQ.0).AND. & (and(OFLAG2(J),OPENBT).EQ.0))) GO TO 100 IF(.NOT.QEMPTY(J)) CALL PRINCO(J,573) 100 CONTINUE RETURN C END C PRINCO- PRINT CONTENTS OF OBJECT C C DECLARATIONS C SUBROUTINE PRINCO(OBJ,DESC) IMPLICIT INTEGER(A-Z) C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C CALL RSPSUB(DESC,ODESC2(OBJ)) DO 100 I=1,OLNT IF(OCAN(I).EQ.OBJ) CALL RSPSUB(502,ODESC2(I)) 100 CONTINUE RETURN C END !Funky!Stuff! echo x - dso2.for.f cat >dso2.for.f <<'!Funky!Stuff!' C MOVETO- MOVE PLAYER TO NEW ROOM C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C LOGICAL FUNCTION MOVETO(NR,WHO) IMPLICIT INTEGER (A-Z) LOGICAL NLV,LHR,LNR C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C COMMON /AINDEX/ PLAYER,AROBOT,AMASTR C MOVETO, PAGE 2 C MOVETO=.FALSE. LHR=and(RFLAG(HERE),RLAND).NE.0 LNR=and(RFLAG(NR),RLAND).NE.0 J=AVEHIC(WHO) C IF(J.NE.0) GO TO 100 IF(LNR) GO TO 500 CALL RSPEAK(427) RETURN C 100 BITS=0 IF(J.EQ.RBOAT) BITS=RWATER IF(J.EQ.BALLO) BITS=RAIR IF(J.EQ.BUCKE) BITS=RBUCK NLV=and(RFLAG(NR),BITS).EQ.0 IF((.NOT.LNR .AND.NLV) .OR. & (LNR.AND.LHR.AND.NLV.AND.(BITS.NE.RLAND))) & GO TO 800 C 500 MOVETO=.TRUE. IF(and(RFLAG(NR),RMUNG).EQ.0) GO TO 600 CALL RSPEAK(RRAND(NR)) RETURN C 600 IF(WHO.NE.PLAYER) CALL NEWSTA(AOBJ(WHO),0,NR,0,0) IF(J.NE.0) CALL NEWSTA(J,0,NR,0,0) HERE=NR AROOM(WHO)=HERE CALL SCRUPD(RVAL(NR)) RVAL(NR)=0 RETURN C 800 CALL RSPSUB(428,ODESC2(J)) RETURN END C SCORE-- PRINT OUT CURRENT SCORE C C DECLARATIONS C SUBROUTINE SCORE(FLG) IMPLICIT INTEGER (A-Z) LOGICAL FLG INTEGER RANK(10),ERANK(5) C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC C COMMON /CHAN/ INPCH,OUTCH,DBCH C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C C FUNCTIONS AND DATA C DATA RANK/20,19,18,16,12,8,4,2,1,0/ DATA ERANK/20,15,10,5,0/ C SCORE, PAGE 2 C AS=ASCORE(WINNER) C IF(ENDGMF) GO TO 60 IF(FLG) WRITE(OUTCH,100) IF(.NOT.FLG) WRITE(OUTCH,110) IF(MOVES.NE.1) WRITE(OUTCH,120) AS,MXSCOR,MOVES IF(MOVES.EQ.1) WRITE(OUTCH,130) AS,MXSCOR,MOVES C DO 10 I=1,10 IF((AS*20/MXSCOR).GE.RANK(I)) GO TO 50 10 CONTINUE 50 CALL RSPEAK(484+I) RETURN C 60 IF(FLG) WRITE(OUTCH,140) IF(.NOT.FLG) WRITE(OUTCH,150) WRITE(OUTCH,120) EGSCOR,EGMXSC,MOVES DO 70 I=1,5 IF((EGSCOR*20/EGMXSC).GE.ERANK(I)) GO TO 80 70 CONTINUE 80 CALL RSPEAK(786+I) RETURN 100 FORMAT(' Your score would be',$) 110 FORMAT(' Your score is',$) 120 FORMAT('+',I4,' [total of',I4,' points], in',I5,' moves.') 130 FORMAT('+',I4,' [total of',I4,' points], in',I5,' move.') 140 FORMAT(' Your score in the endgame would be',$) 150 FORMAT(' Your score in the endgame is',$) C END C SCRUPD- UPDATE WINNER'S SCORE C C DECLARATIONS C SUBROUTINE SCRUPD(N) IMPLICIT INTEGER (A-Z) C C GAME STATE C LOGICAL TELFLG COMMON /PLAY/ WINNER,HERE,TELFLG COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC C C CLOCK INTERRUPTS C LOGICAL CFLAG COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25) C COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND, & CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG, & CEVGNO,CEVBUC,CEVSPH,CEVEGH, & CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE, & CEVMRS,CEVPIN,CEVINQ,CEVFOL C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C IF(ENDGMF) GO TO 100 ASCORE(WINNER)=ASCORE(WINNER)+N RWSCOR=RWSCOR+N IF(ASCORE(WINNER).LT.(MXSCOR-(10*DEATHS))) RETURN CFLAG(CEVEGH)=.TRUE. CTICK(CEVEGH)=15 RETURN C 100 EGSCOR=EGSCOR+N RETURN END !Funky!Stuff! echo x - dso3.for.f cat >dso3.for.f <<'!Funky!Stuff!' C FINDXT- FIND EXIT FROM ROOM C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C LOGICAL FUNCTION FINDXT(DIR,RM) IMPLICIT INTEGER (A-Z) C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C C EXITS C COMMON /EXITS/ XLNT,TRAVEL(900) C COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ EQUIVALENCE (XFLAG,XOBJ) C COMMON /XPARS/ XRMASK,XDMASK,XFMASK,XFSHFT,XASHFT, & XELNT(4),XNORM,XNO,XCOND,XDOOR,XLFLAG C FINDXT=.TRUE. XI=REXIT(RM) IF(XI.EQ.0) GO TO 1000 C 100 I=TRAVEL(XI) XROOM1=and(I,XRMASK) XTYPE=and((and(I,not(XLFLAG))/XFSHFT),XFMASK)+1 GO TO (110,120,130,130),XTYPE CALL BUG(10,XTYPE) C 130 XOBJ=and(TRAVEL(XI+2),XRMASK) XACTIO=TRAVEL(XI+2)/XASHFT 120 XSTRNG=TRAVEL(XI+1) 110 XI=XI+XELNT(XTYPE) IF(and(I,XDMASK).EQ.DIR) RETURN IF(and(I,XLFLAG).EQ.0) GO TO 100 1000 FINDXT=.FALSE. RETURN END C FWIM- FIND WHAT I MEAN C C DECLARATIONS C INTEGER FUNCTION FWIM(F1,F2,RM,CON,ADV,NOCARE) IMPLICIT INTEGER (A-Z) LOGICAL NOCARE C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C FWIM=0 DO 1000 I=1,OLNT IF(((RM.EQ.0).OR.(OROOM(I).NE.RM)) .AND. & ((ADV.EQ.0).OR.(OADV(I).NE.ADV)) .AND. & ((CON.EQ.0).OR.(OCAN(I).NE.CON))) & GO TO 1000 C C OBJECT IS ON LIST... IS IT A MATCH? C IF(and(OFLAG1(I),VISIBT).EQ.0) GO TO 1000 IF(and(not(NOCARE),(and(OFLAG1(I),TAKEBT).EQ.0)) .OR. & ((and(OFLAG1(I),F1).EQ.0).AND. & (and(OFLAG2(I),F2).EQ.0))) GO TO 500 IF(FWIM.EQ.0) GO TO 400 FWIM=-FWIM RETURN C 400 FWIM=I C C DOES OBJECT CONTAIN A MATCH? C 500 IF(and(OFLAG2(I),OPENBT).EQ.0) GO TO 1000 DO 700 J=1,OLNT IF((OCAN(J).NE.I).OR.(and(OFLAG1(J),VISIBT).EQ.0) .OR. & ((and(OFLAG1(J),F1).EQ.0).AND. & (and(OFLAG2(J),F2).EQ.0))) GO TO 700 IF(FWIM.EQ.0) GO TO 600 FWIM=-FWIM RETURN C 600 FWIM=J 700 CONTINUE 1000 CONTINUE RETURN END C YESNO- OBTAIN YES/NO ANSWER C C CALLED BY- C C YES-IS-TRUE=YESNO(QUESTION,YES-STRING,NO-STRING) C LOGICAL FUNCTION YESNO(Q,Y,N) IMPLICIT INTEGER(A-Z) COMMON /CHAN/ INPCH,OUTCH,DBCH CHARACTER ANS C 100 CALL RSPEAK(Q) READ(INPCH,110) ANS 110 FORMAT(A1) IF((ANS.EQ.'Y').OR.(ANS.EQ.'y')) GO TO 200 IF((ANS.EQ.'N').OR.(ANS.EQ.'n')) GO TO 300 CALL RSPEAK(6) GO TO 100 C 200 YESNO=.TRUE. CALL RSPEAK(Y) RETURN C 300 YESNO=.FALSE. CALL RSPEAK(N) RETURN C END !Funky!Stuff! echo x - dso4.for.f cat >dso4.for.f <<'!Funky!Stuff!' C ROBADV-- STEAL WINNER'S VALUABLES C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C INTEGER FUNCTION ROBADV(ADV,NR,NC,NA) IMPLICIT INTEGER (A-Z) C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C ROBADV=0 DO 100 I=1,OLNT IF((OADV(I).NE.ADV).OR.(OTVAL(I).LE.0).OR. & (and(OFLAG2(I),SCRDBT).NE.0)) GO TO 100 CALL NEWSTA(I,0,NR,NC,NA) ROBADV=ROBADV+1 100 CONTINUE RETURN END C ROBRM-- STEAL ROOM VALUABLES C C DECLARATIONS C INTEGER FUNCTION ROBRM(RM,PR,NR,NC,NA) IMPLICIT INTEGER (A-Z) LOGICAL PROB,QHERE C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C ROBRM=0 DO 100 I=1,OLNT IF(.NOT. QHERE(I,RM)) GO TO 100 IF((OTVAL(I).LE.0).OR.(and(OFLAG2(I),SCRDBT).NE.0).OR. & (and(OFLAG1(I),VISIBT).EQ.0).OR.(.NOT.PROB(PR,PR))) & GO TO 50 CALL NEWSTA(I,0,NR,NC,NA) ROBRM=ROBRM+1 OFLAG2(I)=or(OFLAG2(I),TCHBT) GO TO 100 50 IF(and(OFLAG2(I),ACTRBT).NE.0) & ROBRM=ROBRM+ROBADV(OACTOR(I),NR,NC,NA) 100 CONTINUE RETURN END C WINNIN-- SEE IF VILLAIN IS WINNING C C DECLARATIONS C LOGICAL FUNCTION WINNIN(VL,HR) IMPLICIT INTEGER (A-Z) LOGICAL PROB C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C VS=OCAPAC(VL) PS=VS-FIGHTS(HR,.TRUE.) WINNIN=PROB(90,100) IF(PS.GT.3) RETURN WINNIN=PROB(75,85) IF(PS.GT.0) RETURN WINNIN=PROB(50,30) IF(PS.EQ.0) RETURN WINNIN=PROB(25,25) IF(VS.GT.1) RETURN WINNIN=PROB(10,0) RETURN END C FIGHTS-- COMPUTE FIGHT STRENGTH C C DECLARATIONS C INTEGER FUNCTION FIGHTS(H,FLG) IMPLICIT INTEGER (A-Z) LOGICAL FLG C C GAME STATE C COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C C FUNCTIONS AND DATA C DATA SMAX/7/,SMIN/2/ C FIGHTS=SMIN+((((SMAX-SMIN)*ASCORE(H))+(MXSCOR/2))/MXSCOR) IF(FLG) FIGHTS=FIGHTS+ASTREN(H) RETURN END C VILSTR- COMPUTE VILLAIN STRENGTH C C DECLARATIONS C INTEGER FUNCTION VILSTR(V) IMPLICIT INTEGER (A-Z) C C PARSER OUTPUT C LOGICAL PRSWON COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG COMMON /OINDEX/ LEAVE,TROLL,AXE COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8 COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER C COMMON /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4) C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C VILSTR, PAGE 2 C VILSTR=OCAPAC(V) IF(VILSTR.LE.0) RETURN IF((V.NE.THIEF).OR..NOT.THFENF) GO TO 100 THFENF=.FALSE. VILSTR=MIN0(VILSTR,2) C 100 DO 200 I=1,VLNT IF((VILLNS(I).EQ.V).AND.(PRSI.EQ.VBEST(I))) & VILSTR=MAX0(1,VILSTR-1) 200 CONTINUE RETURN END !Funky!Stuff! echo x - dso5.for.f cat >dso5.for.f <<'!Funky!Stuff!' C GTTIME-- GET TOTAL TIME PLAYED C C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C SUBROUTINE GTTIME(T) IMPLICIT INTEGER(A-Z) C COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC C CALL ITIME(H,M,S) T=((H*60)+M)-((SHOUR*60)+SMIN) IF(T.LT.0) T=T+1440 T=T+PLTIME RETURN END C OPNCLS-- PROCESS OPEN/CLOSE FOR DOORS C C DECLARATIONS C LOGICAL FUNCTION OPNCLS(OBJ,SO,SC) IMPLICIT INTEGER (A-Z) LOGICAL QOPEN C C PARSER OUTPUT C LOGICAL PRSWON COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C C VERBS C COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW COMMON /VINDEX/ WALKIW,FIGHTW,FOOW COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW C C FUNCTIONS AND DATA C QOPEN(O)=and(OFLAG2(O),OPENBT).NE.0 C OPNCLS=.TRUE. IF(PRSA.EQ.CLOSEW) GO TO 100 IF(PRSA.EQ.OPENW) GO TO 50 OPNCLS=.FALSE. RETURN C 50 IF(QOPEN(OBJ)) GO TO 200 CALL RSPEAK(SO) OFLAG2(OBJ)=or(OFLAG2(OBJ),OPENBT) RETURN C 100 IF(.NOT.QOPEN(OBJ)) GO TO 200 CALL RSPEAK(SC) OFLAG2(OBJ)=and(OFLAG2(OBJ),not(OPENBT)) RETURN C 200 CALL RSPEAK(125+RND(3)) RETURN END C LIT-- IS ROOM LIT? C C DECLARATIONS C LOGICAL FUNCTION LIT(RM) IMPLICIT INTEGER (A-Z) LOGICAL QHERE C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C C ADVENTURERS C COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4), & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4) C LIT=.TRUE. IF(and(RFLAG(RM),RLIGHT).NE.0) RETURN C DO 1000 I=1,OLNT IF(QHERE(I,RM)) GO TO 100 OA=OADV(I) IF(OA.LE.0) GO TO 1000 IF(AROOM(OA).NE.RM) GO TO 1000 C C OBJ IN ROOM OR ON ADV IN ROOM C 100 IF(and(OFLAG1(I),ONBT).NE.0) RETURN IF((and(OFLAG1(I),VISIBT).EQ.0).OR. & ((and(OFLAG1(I),TRANBT).EQ.0).AND. & (and(OFLAG2(I),OPENBT).EQ.0))) GO TO 1000 C C OBJ IS VISIBLE AND OPEN OR TRANSPARENT C DO 500 J=1,OLNT IF((OCAN(J).EQ.I).AND.(and(OFLAG1(J),ONBT).NE.0)) & RETURN 500 CONTINUE 1000 CONTINUE LIT=.FALSE. RETURN END C WEIGHT- RETURNS SUM OF WEIGHT OF QUALIFYING OBJECTS C C DECLARATIONS C INTEGER FUNCTION WEIGHT(RM,CN,AD) IMPLICIT INTEGER (A-Z) LOGICAL QHERE C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C WEIGHT=0 DO 100 I=1,OLNT IF(OSIZE(I).GE.10000) GO TO 100 IF((QHERE(I,RM).AND.(RM.NE.0)).OR. & ((OADV(I).EQ.AD).AND.(AD.NE.0))) GO TO 50 J=I 25 J=OCAN(J) IF(J.EQ.0) GO TO 100 IF(J.NE.CN) GO TO 25 50 WEIGHT=WEIGHT+OSIZE(I) 100 CONTINUE RETURN END !Funky!Stuff! echo x - dso6.for.f cat >dso6.for.f <<'!Funky!Stuff!' C GHERE-- IS GLOBAL ACTUALLY IN THIS ROOM? C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C LOGICAL FUNCTION GHERE(OBJ,RM) IMPLICIT INTEGER(A-Z) C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C COMMON /RINDEX/ WHOUS,LROOM,CELLA COMMON /RINDEX/ MTROL,MAZE1 COMMON /RINDEX/ MGRAT,MAZ15 COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER COMMON /RINDEX/ STREA,EGYPT,ECHOR COMMON /RINDEX/ TSHAF COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC COMMON /RINDEX/ CAROU COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4 COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL COMMON /RINDEX/ CPANT,CPOUT,CPUZZ C COMMON /STAR/ MBASE,STRBIT C GHERE, PAGE 2 C GHERE=.TRUE. GO TO (1000,1000,1000,1000,1000,1000, & 1000,1000,1000,1000,1000, & 2000,3000,4000,5000,5000,5000,6000, & 7000,8000,9000,9100,8000,10000,11000),OBJ-STRBIT CALL BUG(60,OBJ) C C 1000-- STARS ARE ALWAYS HERE C 1000 RETURN C C 2000-- BIRD C 2000 GHERE=((RM.GE.FORE1).AND.(RM.LT.CLEAR)).OR.(RM.EQ.MTREE) RETURN C C 3000-- TREE C 3000 GHERE=((RM.GE.FORE1).AND.(RM.LT.CLEAR)).AND.(RM.NE.FORE3) RETURN C C 4000-- NORTH WALL C 4000 GHERE=((RM.GE.BKVW).AND.(RM.LE.BKBOX)).OR.(RM.EQ.CPUZZ) RETURN C C 5000-- EAST, SOUTH, WEST WALLS C 5000 GHERE=((RM.GE.BKVW).AND.(RM.LT.BKBOX)).OR.(RM.EQ.CPUZZ) RETURN C C 6000-- GLOBAL WATER C 6000 GHERE=and(RFLAG(RM),(RWATER+RFILL)).NE.0 RETURN C C 7000-- GLOBAL GUARDIANS C 7000 GHERE=((RM.GE.MRC).AND.(RM.LE.MRD)).OR. & ((RM.GE.MRCE).AND.(RM.LE.MRDW)).OR.(RM.EQ.INMIR) RETURN C C 8000-- ROSE/CHANNEL C 8000 GHERE=((RM.GE.MRA).AND.(RM.LE.MRD)).OR.(RM.EQ.INMIR) RETURN C C 9000-- MIRROR C 9100 PANEL C 9100 IF(RM.EQ.FDOOR) RETURN 9000 GHERE=((RM.GE.MRA).AND.(RM.LE.MRC)).OR. & ((RM.GE.MRAE).AND.(RM.LE.MRCW)) RETURN C C 10000-- MASTER C 10000 GHERE=(RM.EQ.FDOOR).OR.(RM.EQ.NCORR).OR.(RM.EQ.PARAP).OR. & (RM.EQ.CELL) RETURN C C 11000-- LADDER C 11000 GHERE=(RM.EQ.CPUZZ) RETURN C END C MRHERE-- IS MIRROR HERE? C C DECLARATIONS C INTEGER FUNCTION MRHERE(RM) IMPLICIT INTEGER(A-Z) C C ROOMS C COMMON /RINDEX/ WHOUS,LROOM,CELLA COMMON /RINDEX/ MTROL,MAZE1 COMMON /RINDEX/ MGRAT,MAZ15 COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER COMMON /RINDEX/ STREA,EGYPT,ECHOR COMMON /RINDEX/ TSHAF COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC COMMON /RINDEX/ CAROU COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4 COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL COMMON /RINDEX/ CPANT,CPOUT,CPUZZ C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C MRHERE, PAGE 2 C IF((RM.LT.MRAE).OR.(RM.GT.MRDW)) GO TO 100 C C RM IS AN E-W ROOM, MIRROR MUST BE N-S (MDIR= 0 OR 180) C MRHERE=1 IF(MOD(RM-MRAE,2).EQ.(MDIR/180)) MRHERE=2 RETURN C C RM IS NORTH OR SOUTH OF MIRROR. IF MIRROR IS N-S OR NOT C WITHIN ONE ROOM OF RM, LOSE. C 100 MRHERE=0 IF((IABS(MLOC-RM).NE.1).OR.(MOD(MDIR,180).EQ.0)) RETURN C C RM IS WITHIN ONE OF MLOC, AND MDIR IS E-W C MRHERE=1 IF(((RM.LT.MLOC).AND.(MDIR.LT.180)).OR. & ((RM.GT.MLOC).AND.(MDIR.GT.180))) MRHERE=2 RETURN END !Funky!Stuff! echo x - dso7.f cat >dso7.f <<'!Funky!Stuff!' C ENCRYP-- ENCRYPT PASSWORD C C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED C WRITTEN BY R. M. SUPNIK C C DECLARATIONS C SUBROUTINE ENCRYP(INW,OUTW) IMPLICIT INTEGER(A-Z) CHARACTER INW(6),OUTW(6) CHARACTER KEYW(6),UKEYW(6) INTEGER UINW(6) DATA KEYW/'E','C','O','R','M','S'/ C UINWS=0 UKEYWS=0 J=1 DO 100 I=1,6 UKEYW(I)=char(ichar(KEYW(I))-64) IF(INW(J).LE.char(64)) J=1 UINW(I)=ichar(ichar(INW(J))-64) UKEYWS=UKEYWS+ichar(UKEYW(I)) UINWS=UINWS+UINW(I) J=J+1 100 CONTINUE C USUM=MOD(UINWS,8)+(8*MOD(UKEYWS,8)) DO 200 I=1,6 J=and(xor(xor(ichar(UINW(I)),ichar(UKEYW(I))),USUM),31) USUM=MOD(USUM+1,32) IF(J.GT.26) J=MOD(J,26) OUTW(I)=char(MAX0(1,J)+64) 200 CONTINUE RETURN C END C CPGOTO-- MOVE TO NEXT STATE IN PUZZLE ROOM C C DECLARATIONS C SUBROUTINE CPGOTO(ST) IMPLICIT INTEGER(A-Z) C COMMON /HYPER/ HFACTR C C ROOMS C COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200), & RACTIO(200),RVAL(200),RFLAG(200) INTEGER RRAND(200) EQUIVALENCE (RVAL,RRAND) C COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR, & RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND C COMMON /RINDEX/ WHOUS,LROOM,CELLA COMMON /RINDEX/ MTROL,MAZE1 COMMON /RINDEX/ MGRAT,MAZ15 COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER COMMON /RINDEX/ STREA,EGYPT,ECHOR COMMON /RINDEX/ TSHAF COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC COMMON /RINDEX/ CAROU COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4 COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL COMMON /RINDEX/ CPANT,CPOUT,CPUZZ C C OBJECTS C COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220), & OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), & OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), & OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, & NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, & TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, & WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, & TCHBT,VEHBT,SCHBT C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C CPGOTO, PAGE 2 C RFLAG(CPUZZ)=and(RFLAG(CPUZZ),not(RSEEN)) DO 100 I=1,OLNT IF((OROOM(I).EQ.CPUZZ).AND. & (and(OFLAG2(I),(ACTRBT+VILLBT)).EQ.0)) & CALL NEWSTA(I,0,CPHERE*HFACTR,0,0) IF(OROOM(I).EQ.(ST*HFACTR)) & CALL NEWSTA(I,0,CPUZZ,0,0) 100 CONTINUE CPHERE=ST RETURN C END C CPINFO-- DESCRIBE PUZZLE ROOM C C DECLARATIONS C SUBROUTINE CPINFO(RMK,ST) IMPLICIT INTEGER(A-Z) INTEGER DGMOFT(8) CHARACTER DGM(8),PICT(5),QMK C COMMON /CHAN/ INPCH,OUTCH,DBCH C C PUZZLE ROOM C COMMON /PUZZLE/ CPDR(16),CPWL(8),CPVEC(64) C C FLAGS C LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, & DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, & MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, & EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, & GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, & GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, & MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, & FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ BTIEF,BINFF COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP COMMON /FINDEX/ MDIR,MLOC,POLEUF COMMON /FINDEX/ QUESNO,NQATT,CORRCT COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE C C FUNCTIONS AND LOCAL DATA C C DATA DGMOFT/-9,-8,-7,-1,1,7,8,9/ DATA PICT/'SS','SS','SS',' ','MM'/ DATA QMK/'??'/ C CPINFO, PAGE 2 C CALL RSPEAK(RMK) DO 100 I=1,8 J=DGMOFT(I) DGM(I)=PICT(CPVEC(ST+J)+4) IF((IABS(J).EQ.1).OR.(IABS(J).EQ.8)) GO TO 100 K=8 IF(J.LT.0) K=-8 L=J-K IF((CPVEC(ST+K).NE.0).AND.(CPVEC(ST+L).NE.0)) & DGM(I)=QMK 100 CONTINUE WRITE(OUTCH,10) DGM C IF(ST.EQ.10) CALL RSPEAK(870) IF(ST.EQ.37) CALL RSPEAK(871) I=872 IF(CPOUTF) I=873 IF(ST.EQ.52) CALL RSPEAK(I) IF(CPVEC(ST+1).EQ.-2) CALL RSPEAK(874) IF(CPVEC(ST-1).EQ.-3) CALL RSPEAK(875) RETURN C 10 FORMAT(' |',A2,1X,A2,1X,A2,'|'/, & ' West |',A2,' .. ',A2,'| East',/ & ' |',A2,1X,A2,1X,A2,'|') C END !Funky!Stuff! exit 0 -- -Bill Randle Tektronix, Inc. billr@tekred.TEK.COM