home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!haven.umd.edu!darwin.sura.net!gatech!nntp.msstate.edu!emory!dragon.com!cts
- From: cts@dragon.com
- Newsgroups: vmsnet.sources.games
- Subject: Dungeon Part 22/30
- Message-ID: <1992Feb24.013339.815@dragon.com>
- Date: 24 Feb 92 06:33:39 GMT
- Organization: Computer Projects Unlimited
- Lines: 1401
-
- -+-+-+-+-+-+-+-+ START OF PART 22 -+-+-+-+-+-+-+-+
- Xtranslated from MDL. See the file "dungeon.doc" for the complete
- Xoriginal documentation. See the file "PDP.doc" for notes on the
- XUnix/pdp implementation.
- X
- X
- XIII. DEC FORTRAN to f77 Conversion (17-nov-81)
- X
- XThe conversion from DEC FORTRAN to Unix f77 was done by Randy Dietrich,
- XLynn Cochran and Sig Peterson. Much hacking was done to get it to fit
- Xin the limited address space of a PDP-11/44 (split I/D). See the
- Xfile "PDP.doc" for all the gory details. Suffice it to say that by
- Xleaving out the debugging package and not linking in the f77 i/o
- Xlibrary they managed to get it to run.
- X
- XIV. PDP to VAX (dec-85)
- X
- XBased on the work of Randy, Lynn and Sig, Bill Randle folded in the
- Xfull save/restore functions and the game debugging package (gdt) into
- Xthe pdp version to create a Vax/Unix version. This version also uses
- Xf77 i/o, thus eliminating the extra speak and listen processes needed
- Xon the pdp.
- X
- XV. Cleanup I (11-dec-86)
- X
- XJohn Gilmore (hoptoad!gnu) cleaned up the source files by moving
- Xmost of the common declarations into include files and added
- Xcomments from the original (FORTRAN or MDL?) source. His efforts
- Xare greatly appreciated.
- X
- XVI. Cleanup II (9-feb-87)
- X
- XBill Randle (billr@tekred.tek.com) added the pdp dependencies back
- Xinto the Vax source files with #ifdefs in order to have just one
- Xset of sources. Previously, there were two sets of source: one for
- Xthe pdp and one for the Vax. In addition, a shell escape of the
- Xform !cmd was added and the wizard can enter the gdt without having
- Xto recompile the source. Finally, a man page was generated, based
- Xon the dungeon.doc file.
- X
- XVII. VMS Port (24-Feb-1992)
- X
- XCharles Smith (cts@dragon.com) reported the code to VMS, incorporating
- Xthe fixes from the Unix world and performing some source cleanup.
- X
- $ CALL UNPACK [.DOC]HISTORY.TXT;1 1829701053
- $ create 'f'
- XThis is a source file distribution for the game dungeon as implemented
- Xin f77 for Unix(R) systems. It is based on the game dungeon as
- Xdistributed on a DECUS tape, circa 1980. It has been converted from
- Xthe original DEC FORTRAN into something that is palatable to Unix f77.
- XSee the file "History" for some revision history and credit to those
- Xwhose efforts have made this possible.
- X
- XCheckout the Makefile and adjust it to fit your system. The only
- Xthings that should really need tweaking are the directory definitions
- Xand the "-D" defines. There is an example for both large address
- Xmachines (e.g. Vax) that get the complete game and small address
- Xmachines (e.g. Pdp-11) that get a modified game with minor functionality
- Xmissing (to get it to fit). Also edit the include file "files.h" if
- Xnecessary.
- X
- XAll of the f77 files end in a '.F' extension to force f77 to invoke the
- XC preprocessor for the #include files and #ifdefs. Most of the #ifdefs
- Xare for the PDP version (default non-pdp) and for debug (default off).
- X
- XExcept for DTEXT.DAT, all files in the distribution kit are ASCII.
- XDTEXT.DAT is a binary file consisting of 76-byte fixed length records.
- X
- XThis has been compiled and tested on a PDP-11/44 Version 7, PDP-11/70
- X2.9bsd Vax-11/785 4.3bsd and Sun-3 before the pdp and Vax sources were
- Xmerged (see the file "History"). After the merge it was again tested on
- Xthe Vax 11-785 4.3bsd.
- X
- XI/we consider my/our changes to be in the public domain. The original
- Xsource, however, is copyright.
- X
- X`09John Gilmore, Nebula Consultants
- X`09hoptoad!gnu
- X`0911 December 1986
- X
- X`09Bill Randle
- X`09Tektronix, Inc.
- X`09billr@tekred.TEK.COM
- X`099 February 1987
- X
- XDungeon consists of the following files:
- X
- X`09dmain.F`09`09`09-program root
- X`09dgame.F`09`09`09-main routine
- X`09dsub.F`09`09`09-resident subroutines
- X`09dinit.F`09`09`09-initialization routine
- X`09np.F`09`09`09-parser, part 0
- X`09np1.F`09`09`09-parser, part 1
- X`09np2.F`09`09`09-parser, part 2
- X`09np3.F`09`09`09-parser, part 3
- X`09gdt.F`09`09`09-game debugging tool
- X`09verbs.F`09`09`09-principal verbs
- X`09objcts.F`09`09-principal objects
- X`09sverbs.F`09`09-simple verbs
- X`09dverb1.F`09`09-auxiliary verbs, part 1
- X`09dverb2.F`09`09-auxiliary verbs, part 2
- X`09actors.F`09`09-character processors
- X`09demons.F`09`09-demon processors
- X`09clockr.F`09`09-clock event processors
- X`09rooms.F`09`09`09-room processors
- X`09nrooms.F`09`09-new room processors
- X`09sobjs.F`09`09`09-simple objects
- X`09nobjs.F`09`09`09-new objects
- X`09ballop.F`09`09-balloon processor
- X`09lightp.F`09`09-light processors
- X`09villns.F`09`09-villain processors
- X`09dso1.F`09`09`09-overlaid subroutines, part 1
- X`09dso2.F`09`09`09-overlaid subroutines, part 2
- X`09dso3.F`09`09`09-overlaid subroutines, part 3
- X`09dso4.F`09`09`09-overlaid subroutines, part 4
- X`09dso5.F`09`09`09-overlaid subroutines, part 5
- X`09dso6.F`09`09`09-overlaid subroutines, part 6
- X`09dso7.F`09`09`09-overlaid subroutines, part 7
- X`09advers.h`09`09-header file
- X`09clock.h`09`09`09-header file
- X`09curxt.h`09`09`09-header file
- X`09debug.h`09`09`09-header file
- X`09exits.h`09`09`09-header file
- X`09files.h`09`09`09-header file for directory paths
- X`09flags.h`09`09`09-header file
- X`09gamestate.h`09`09-header file
- X`09io.h`09`09`09-header file
- X`09objects.h`09`09-header file
- X`09oflags.h`09`09-header file
- X`09oindex.h`09`09-header file
- X`09parser.h`09`09-header file
- X`09puzzle.h`09`09-header file
- X`09rflag.h`09`09`09-header file
- X`09rindex.h`09`09-header file
- X`09rooms.h`09`09`09-header file
- X`09screen.h`09`09-header file
- X`09state.h`09`09`09-header file
- X`09verbs.h`09`09`09-header file
- X`09villians.h`09`09-header file
- X`09vocab.h`09`09`09-header file
- X`09xpars.h`09`09`09-header file
- X`09xsrch.h`09`09`09-header file
- X`09cinit.c`09`09`09-C routine to initialize game `5Bpdp ver`5D
- X`09cio.c`09`09`09-C routine for misc i/o `5Bpdp version`5D
- X`09rtim.c`09`09`09-C routines for system dependent functions
- X`09listen.c`09`09-C co-process for reading keyboard `5Bpdp`5D
- X`09cspeak.c`09`09-C co-process for displaying messages `5Bpdp`5D
- X`09speak.F`09`09`09-lookup messages for speak process `5Bpdp`5D
- X`09decode.c`09`09-C routine to decode binary text file `5Bdebug`5D
- X`09dindx.dat`09`09-initialization data base
- X`09dtext.dat`09`09-main data base `5Bbinary file`5D
- X`09rtext.dat`09`09-message index file `5Bpdp version`5D
- X`09dungeon.sh`09`09-shell script to invoke pdp version
- X`09dungeon.doc`09`09-original documentation file
- X`09dungeon.6`09`09-man page abstracted from dungeon.doc
- X`09Makefile`09`09-Makefile for making pdp or vax versions
- X`09History`09`09`09-Some revision history notes
- X`09PDP.doc`09`09`09-Notes on the PDP-11/Unix conversion
- X`09README`09`09`09-This file
- $ CALL UNPACK [.DOC]README.UNIX;1 776113410
- $ create 'f'
- X$`09@$compile
- X$`09@$link
- $ CALL UNPACK [.SRC]$BUILD.COM;2 453183433
- $ create 'f'
- X$`09fortran -
- X`09`09dmain,actors,ballop,clockr,demons,dgame,dinit,dso1, -
- X`09`09dso2,dso3,dso4,dso5,dso6,dso7,dsub,dverb1, -
- X`09`09dverb2,gdt,image_dir,lightp,nobjs,np,np1,np2,np3, -
- X`09`09nrooms,objcts,rooms,sobjs,sverbs,verbs,villns, -
- X`09`09vmssubs,wizard
- X$`09macro xor
- X$`09link/exe=dungeon -
- X`09`09dmain,actors,ballop,clockr,demons,dgame,dinit,dso1, -
- X`09`09dso2,dso3,dso4,dso5,dso6,dso7,dsub,dverb1, -
- X`09`09dverb2,gdt,lightp,nobjs,np,np1,np2,np3, -
- X`09`09nrooms,objcts,rooms,sobjs,sverbs,verbs,villns, -
- X`09`09vmssubs,wizard,xor
- X$
- $ CALL UNPACK [.SRC]$COMPILE.COM;2 1817072403
- $ create 'f'
- X$`09link/exe=dungeon -
- X`09`09dmain,actors,ballop,clockr,demons,dgame,dinit,dso1, -
- X`09`09dso2,dso3,dso4,dso5,dso6,dso7,dsub,dverb1, -
- X`09`09dverb2,gdt,image_dir,lightp,nobjs,np,np1,np2,np3, -
- X`09`09nrooms,objcts,rooms,sobjs,sverbs,verbs,villns, -
- X`09`09vmssubs,wizard,xor
- X$
- $ CALL UNPACK [.SRC]$LINK.COM;2 989930685
- $ create 'f'
- XC AAPPLI- APPLICABLES FOR ADVENTURERS
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- X LOGICAL FUNCTION AAPPLI(RI)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL F,MOVETO
- X
- X INCLUDE 'PARSER.LIB'
- X INCLUDE 'GAMESTATE.LIB'
- X INCLUDE 'ROOMS.LIB'
- X INCLUDE 'RFLAG.LIB'
- X INCLUDE 'RINDEX.LIB'
- X INCLUDE 'XSRCH.LIB'
- X INCLUDE 'OBJECTS.LIB'
- X INCLUDE 'OFLAGS.LIB'
- X INCLUDE 'OINDEX.LIB'
- X INCLUDE 'CLOCK.LIB'
- X INCLUDE 'ADVERS.LIB'
- X INCLUDE 'VERBS.LIB'
- X INCLUDE 'FLAGS.LIB'
- X
- X`0C
- XC AAPPLI, PAGE 2
- XC
- X IF(RI.EQ.0) GO TO 10
- XC !IF ZERO, NO APP.
- X AAPPLI=.TRUE.
- XC !ASSUME WINS.
- X GO TO (1000,2000),RI
- XC !BRANCH ON ADV.
- X CALL BUG(11,RI)
- XC
- XC COMMON FALSE RETURN.
- XC
- X10 AAPPLI=.FALSE.
- X RETURN
- XC
- XC A1-- ROBOT. PROCESS MOST COMMANDS GIVEN TO ROBOT.
- XC
- X1000 IF((PRSA.NE.RAISEW).OR.(PRSO.NE.RCAGE)) GO TO 1200
- X CFLAG(CEVSPH)=.FALSE.
- XC !ROBOT RAISED CAGE.
- X WINNER=PLAYER
- XC !RESET FOR PLAYER.
- X F=MOVETO(CAGER,WINNER)
- XC !MOVE TO NEW ROOM.
- X CALL NEWSTA(CAGE,567,CAGER,0,0)
- XC !INSTALL CAGE IN ROOM.
- X CALL NEWSTA(ROBOT,0,CAGER,0,0)
- XC !INSTALL ROBOT IN ROOM.
- X AROOM(AROBOT)=CAGER
- XC !ALSO MOVE ROBOT/ADV.
- X CAGESF=.TRUE.
- XC !CAGE SOLVED.
- X OFLAG1(ROBOT)=and(OFLAG1(ROBOT),not(NDSCBT))
- X OFLAG1(SPHER)=or(OFLAG1(SPHER),TAKEBT)
- X RETURN
- XC
- X1200 IF((PRSA.NE.DRINKW).AND.(PRSA.NE.EATW)) GO TO 1300
- X CALL RSPEAK(568)
- XC !EAT OR DRINK, JOKE.
- X RETURN
- XC
- X1300 IF(PRSA.NE.READW) GO TO 1400
- XC !READ,
- X CALL RSPEAK(569)
- XC !JOKE.
- X RETURN
- XC
- X1400 IF((PRSA.EQ.WALKW).OR.(PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW)
- X &.OR.(PRSA.EQ.PUTW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.THROWW)
- X &.OR.(PRSA.EQ.TURNW).OR.(PRSA.EQ.LEAPW)) GO TO 10
- X CALL RSPEAK(570)
- XC !JOKE.
- X RETURN
- X`0C
- XC AAPPLI, PAGE 3
- XC
- XC A2-- MASTER. PROCESS MOST COMMANDS GIVEN TO MASTER.
- XC
- X2000 IF(and(OFLAG2(QDOOR),OPENBT).NE.0) GO TO 2100
- X CALL RSPEAK(783)
- XC !NO MASTER YET.
- X RETURN
- XC
- X2100 IF(PRSA.NE.WALKW) GO TO 2200
- XC !WALK?
- X I=784
- XC !ASSUME WONT.
- X IF(((HERE.EQ.SCORR).AND.
- X & ((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XENTER))).OR.
- X & ((HERE.EQ.NCORR).AND.
- X & ((PRSO.EQ.XSOUTH).OR.(PRSO.EQ.XENTER))))
- X &I=785
- X CALL RSPEAK(I)
- X RETURN
- XC
- X2200 IF((PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW).OR.(PRSA.EQ.PUTW).OR.
- X & (PRSA.EQ.THROWW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.TURNW).OR.
- X & (PRSA.EQ.SPINW).OR.(PRSA.EQ.TRNTOW).OR.(PRSA.EQ.FOLLOW).OR.
- X & (PRSA.EQ.STAYW).OR.(PRSA.EQ.OPENW).OR.(PRSA.EQ.CLOSEW).OR.
- X & (PRSA.EQ.KILLW)) GO TO 10
- X CALL RSPEAK(786)
- XC !MASTER CANT DO IT.
- X RETURN
- XC
- X END
- X`0C
- XC THIEFD- INTERMOVE THIEF DEMON
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE THIEFD
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL ONCE,PROB,QHERE,QSTILL,LIT,WINNIN
- X INCLUDE 'GAMESTATE.LIB'
- XC
- X INCLUDE 'DEBUG.LIB'
- X INCLUDE 'ROOMS.LIB'
- X INCLUDE 'RFLAG.LIB'
- X INCLUDE 'RINDEX.LIB'
- X INCLUDE 'OBJECTS.LIB'
- X INCLUDE 'OFLAGS.LIB'
- X INCLUDE 'OINDEX.LIB'
- X INCLUDE 'VILLIANS.LIB'
- X INCLUDE 'FLAGS.LIB'
- XC
- XC FUNCTIONS AND DATA
- XC
- X QSTILL(R)=(QHERE(STILL,R).OR.(OADV(STILL).EQ.-THIEF))
- X`0C
- XC THIEFD, PAGE 2
- XC
- X DFLAG=and(PRSFLG, 32768).NE.0
- XC !SET UP DETAIL FLAG.
- X ONCE=.FALSE.
- XC !INIT FLAG.
- X1025 RHERE=OROOM(THIEF)
- XC !VISIBLE POS.
- X IF(RHERE.NE.0) THFPOS=RHERE
- XC
- X IF(THFPOS.EQ.HERE) GO TO 1100
- XC !THIEF IN WIN RM?
- X IF(THFPOS.NE.TREAS) GO TO 1400
- XC !THIEF NOT IN TREAS?
- XC
- XC THIEF IS IN TREASURE ROOM, AND WINNER IS NOT.
- XC
- X IF(DFLAG) PRINT 10
- X10 FORMAT(' THIEFD-- IN TREASURE ROOM')
- X IF(RHERE.EQ.0) GO TO 1050
- XC !VISIBLE?
- X CALL NEWSTA(THIEF,0,0,0,0)
- XC !YES, VANISH.
- X RHERE=0
- X IF(QSTILL(TREAS)) CALL NEWSTA(STILL,0,0,THIEF,0)
- X1050 I=ROBADV(-THIEF,THFPOS,0,0)
- XC !DROP VALUABLES.
- X IF(QHERE(EGG,THFPOS)) OFLAG2(EGG)=or(OFLAG2(EGG),OPENBT)
- X GO TO 1700
- XC
- XC THIEF AND WINNER IN SAME ROOM.
- XC
- X1100 IF(THFPOS.EQ.TREAS) GO TO 1700
- XC !IF TREAS ROOM, NOTHING.
- X IF(and(RFLAG(THFPOS),RLIGHT).NE.0) GO TO 1400
- X IF(DFLAG) PRINT 20
- X20 FORMAT(' THIEFD-- IN ADV ROOM')
- X IF(THFFLG) GO TO 1300
- XC !THIEF ANNOUNCED?
- X IF((RHERE.NE.0).OR.PROB(70,70)) GO TO 1150
- XC !IF INVIS AND 30%.
- X IF(OCAN(STILL).NE.THIEF) GO TO 1700
- XC !ABORT IF NO STILLETTO.
- X CALL NEWSTA(THIEF,583,THFPOS,0,0)
- XC !INSERT THIEF INTO ROOM.
- X THFFLG=.TRUE.
- XC !THIEF IS ANNOUNCED.
- X RETURN
- XC
- X1150 IF((RHERE.EQ.0).OR.(and(OFLAG2(THIEF),FITEBT).EQ.0))
- X & GO TO 1200
- X IF(WINNIN(THIEF,WINNER)) GO TO 1175
- XC !WINNING?
- X CALL NEWSTA(THIEF,584,0,0,0)
- XC !NO, VANISH THIEF.
- X OFLAG2(THIEF)=and(OFLAG2(THIEF), not(FITEBT))
- X IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
- X RETURN
- XC
- X1175 IF(PROB(90,90)) GO TO 1700
- XC !90% CHANCE TO STAY.
- XC
- X1200 IF((RHERE.EQ.0).OR.PROB(70,70)) GO TO 1250
- XC !IF VISIBLE AND 30%
- X CALL NEWSTA(THIEF,585,0,0,0)
- XC !VANISH THIEF.
- X IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
- X RETURN
- XC
- X1300 IF(RHERE.EQ.0) GO TO 1700
- XC !ANNOUNCED. VISIBLE?
- X1250 IF(PROB(70,70)) RETURN
- XC !70% CHANCE TO DO NOTHING.
- X THFFLG=.TRUE.
- X NR=ROBRM(THFPOS,100,0,0,-THIEF)+ROBADV(WINNER,0,0,-THIEF)
- X I=586
- XC !ROBBED EM.
- X IF(RHERE.NE.0) I=588
- XC !WAS HE VISIBLE?
- X IF(NR.NE.0) I=I+1
- XC !DID HE GET ANYTHING?
- X CALL NEWSTA(THIEF,I,0,0,0)
- XC !VANISH THIEF.
- X IF(QSTILL(THFPOS))
- X & CALL NEWSTA(STILL,0,0,THIEF,0)
- X IF((NR.NE.0).AND..NOT.LIT(THFPOS)) CALL RSPEAK(406)
- X RHERE=0
- X GO TO 1700
- XC !ONWARD.
- XC
- XC NOT IN ADVENTURERS ROOM.
- XC
- X1400 CALL NEWSTA(THIEF,0,0,0,0)
- XC !VANISH.
- X RHERE=0
- X IF(DFLAG) PRINT 30,THFPOS
- X30 FORMAT(' THIEFD-- IN ROOM ',I4)
- X IF(QSTILL(THFPOS))
- X & CALL NEWSTA(STILL,0,0,THIEF,0)
- X IF(and(RFLAG(THFPOS),RSEEN).EQ.0) GO TO 1700
- X I=ROBRM(THFPOS,75,0,0,-THIEF)
- XC !ROB ROOM 75%.
- X IF((THFPOS.LT.MAZE1).OR.(THFPOS.GT.MAZ15).OR.
- X & (HERE.LT.MAZE1).OR.(HERE.GT.MAZ15)) GO TO 1500
- X DO 1450 I=1,OLNT
- XC !BOTH IN MAZE.
- X IF(.NOT.QHERE(I,THFPOS).OR.PROB(60,60).OR.
- X & (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
- X &GO TO 1450
- X CALL RSPSUB(590,ODESC2(I))
- XC !TAKE OBJECT.
- X IF(PROB(40,20)) GO TO 1700
- X CALL NEWSTA(I,0,0,0,-THIEF)
- XC !MOST OF THE TIME.
- X OFLAG2(I)=or(OFLAG2(I),TCHBT)
- X GO TO 1700
- X1450 CONTINUE
- X GO TO 1700
- XC
- X1500 DO 1550 I=1,OLNT
- XC !NOT IN MAZE.
- X IF(.NOT.QHERE(I,THFPOS).OR.(OTVAL(I).NE.0).OR.PROB(80,60).OR.
- X & (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
- X & GO TO 1550
- X CALL NEWSTA(I,0,0,0,-THIEF)
- X OFLAG2(I)=or(OFLAG2(I),TCHBT)
- X GO TO 1700
- X1550 CONTINUE
- XC
- XC NOW MOVE TO NEW ROOM.
- XC
- X1700 IF(OADV(ROPE).EQ.-THIEF) DOMEF=.FALSE.
- X IF(ONCE) GO TO 1800
- X ONCE=.NOT.ONCE
- X1750 THFPOS=THFPOS-1
- XC !NEXT ROOM.
- X IF(THFPOS.LE.0) THFPOS=RLNT
- X IF(and(RFLAG(THFPOS),(RLAND+RSACRD+REND)).NE.RLAND)
- X & GO TO 1750
- X THFFLG=.FALSE.
- XC !NOT ANNOUNCED.
- X GO TO 1025
- XC !ONCE MORE.
- XC
- XC ALL DONE.
- XC
- X1800 IF(THFPOS.EQ.TREAS) RETURN
- XC !IN TREASURE ROOM?
- X J=591
- XC !NO, DROP STUFF.
- X IF(THFPOS.NE.HERE) J=0
- X DO 1850 I=1,OLNT
- X IF((OADV(I).NE.-THIEF).OR.PROB(70,70).OR.
- X & (OTVAL(I).GT.0)) GO TO 1850
- X CALL NEWSTA(I,J,THFPOS,0,0)
- X J=0
- X1850 CONTINUE
- X RETURN
- XC
- X END
- $ CALL UNPACK [.SRC]ACTORS.FOR;1 1595292988
- $ create 'f'
- XC
- XC ADVENTURERS
- XC
- X COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
- X & AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
- X INTEGER EQA(4,7)
- X EQUIVALENCE (AROOM, EQA)
- XC
- X COMMON /AFLAGS/ ASTAG
- XC
- X COMMON /AINDEX/ PLAYER,AROBOT,AMASTR
- $ CALL UNPACK [.SRC]ADVERS.LIB;1 269444062
- $ create 'f'
- XC BALLOP- BALLOON FUNCTION
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- X LOGICAL FUNCTION BALLOP(ARG)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL FINDXT,QEMPTY
- X
- X INCLUDE 'PARSER.LIB'
- X INCLUDE 'GAMESTATE.LIB'
- X INCLUDE 'STATE.LIB'
- X INCLUDE 'ROOMS.LIB'
- X INCLUDE 'RFLAG.LIB'
- X INCLUDE 'CURXT.LIB'
- X INCLUDE 'XPARS.LIB'
- X INCLUDE 'OBJECTS.LIB'
- X INCLUDE 'OFLAGS.LIB'
- X INCLUDE 'OINDEX.LIB'
- X INCLUDE 'CLOCK.LIB'
- X
- X INCLUDE 'VERBS.LIB'
- X INCLUDE 'FLAGS.LIB'
- X`0C
- XC BALLOP, PAGE 2
- XC
- X BALLOP=.TRUE.
- XC !ASSUME WINS.
- X IF(ARG.NE.2) GO TO 200
- XC !READOUT?
- X IF(PRSA.NE.LOOKW) GO TO 10
- XC !ONLY PROCESS LOOK.
- X IF(BINFF.NE.0) GO TO 50
- XC !INFLATED?
- X CALL RSPEAK(543)
- XC !NO.
- X GO TO 100
- X50 CALL RSPSUB(544,ODESC2(BINFF))
- XC !YES.
- X100 IF(BTIEF.NE.0) CALL RSPEAK(545)
- XC !HOOKED?
- X RETURN
- XC
- X200 IF(ARG.NE.1) GO TO 500
- XC !READIN?
- X IF(PRSA.NE.WALKW) GO TO 300
- XC !WALK?
- X IF(FINDXT(PRSO,HERE)) GO TO 250
- XC !VALID EXIT?
- X CALL RSPEAK(546)
- XC !NO, JOKE.
- X RETURN
- XC
- X250 IF(BTIEF.EQ.0) GO TO 275
- XC !TIED UP?
- X CALL RSPEAK(547)
- XC !YES, JOKE.
- X RETURN
- XC
- X275 IF(XTYPE.NE.XNORM) GO TO 10
- XC !NORMAL EXIT?
- X IF(and(RFLAG(XROOM1),RMUNG).EQ.0) BLOC=XROOM1
- X10 BALLOP=.FALSE.
- X RETURN
- XC
- X300 IF((PRSA.NE.TAKEW).OR.(PRSO.NE.BINFF)) GO TO 350
- X CALL RSPSUB(548,ODESC2(BINFF))
- XC !RECEP CONT TOO HOT.
- X RETURN
- XC
- X350 IF((PRSA.NE.PUTW).OR.(PRSI.NE.RECEP).OR.QEMPTY(RECEP))
- X & GO TO 10
- X CALL RSPEAK(549)
- X RETURN
- XC
- X500 IF((PRSA.NE.UNBOAW).OR.(and(RFLAG(HERE),RLAND).EQ.0))
- X & GO TO 600
- X IF(BINFF.NE.0) CTICK(CEVBAL)=3
- XC !HE GOT OUT, START BALLOON.
- X GO TO 10
- XC
- X600 IF((PRSA.NE.BURNW).OR.(OCAN(PRSO).NE.RECEP)) GO TO 700
- X CALL RSPSUB(550,ODESC2(PRSO))
- XC !LIGHT FIRE IN RECEP.
- X CTICK(CEVBRN)=OSIZE(PRSO)*20
- X OFLAG1(PRSO)=or(OFLAG1(PRSO),
- X & and((ONBT+FLAMBT+LITEBT), not(TAKEBT+READBT)))
- X IF(BINFF.NE.0) RETURN
- X IF(.NOT.BLABF) CALL NEWSTA(BLABE,0,0,BALLO,0)
- X BLABF=.TRUE.
- X BINFF=PRSO
- X CTICK(CEVBAL)=3
- X CALL RSPEAK(551)
- X RETURN
- XC
- X700 IF((PRSA.EQ.UNBOAW).AND.(BINFF.NE.0).AND.
- X & (and(RFLAG(HERE),RLAND).NE.0))
- X &CTICK(CEVBAL)=3
- X GO TO 10
- XC
- X END
- $ CALL UNPACK [.SRC]BALLOP.FOR;1 608267734
- $ create 'f'
- XC
- XC CLOCK INTERRUPTS
- XC
- X LOGICAL CFLAG
- X COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25)
- XC
- X COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND,
- X &`09`09CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG,
- X &`09`09CEVGNO,CEVBUC,CEVSPH,CEVEGH,
- X &`09`09CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE,
- X &`09`09CEVMRS,CEVPIN,CEVINQ,CEVFOL
- X INTEGER EQC(25,2)
- X EQUIVALENCE (CTICK, EQC)
- $ CALL UNPACK [.SRC]CLOCK.LIB;1 724545577
- $ create 'f'
- XC CEVAPP- CLOCK EVENT APPLICABLES
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE CEVAPP(RI)
- X IMPLICIT INTEGER (A-Z)
- X INTEGER CNDTCK(10),LMPTCK(12)
- X LOGICAL FINDXT,LIT,RMDESC,QOPEN,MOVETO
- X LOGICAL F,QLEDGE,QVAIR,QHERE,PROB
- X
- X INCLUDE 'GAMESTATE.LIB'
- X INCLUDE 'STATE.LIB'
- X INCLUDE 'ROOMS.LIB'
- X INCLUDE 'RFLAG.LIB'
- X INCLUDE 'RINDEX.LIB'
- X INCLUDE 'OBJECTS.LIB'
- X INCLUDE 'OFLAGS.LIB'
- X INCLUDE 'OINDEX.LIB'
- X INCLUDE 'CLOCK.LIB'
- X INCLUDE 'CURXT.LIB'
- X INCLUDE 'XSRCH.LIB'
- X INCLUDE 'VILLIANS.LIB'
- X INCLUDE 'ADVERS.LIB'
- X INCLUDE 'FLAGS.LIB'
- XC
- XC FUNCTIONS AND DATA
- XC
- X QOPEN(R)=(and(OFLAG2(R),OPENBT)).NE.0
- X QLEDGE(R)=(R.EQ.LEDG2).OR.(R.EQ.LEDG3).OR.(R.EQ.LEDG4).OR.
- X & (R.EQ.VLBOT)
- X QVAIR(R)=(R.EQ.VAIR1).OR.(R.EQ.VAIR2).OR.(R.EQ.VAIR3).OR.
- X & (R.EQ.VAIR4)
- X DATA CNDTCK/50,20,10,5,0,156,156,156,157,0/
- X DATA LMPTCK/50,30,20,10,4,0,154,154,154,154,155,0/
- X`0C
- XC CEVAPP, PAGE 2
- XC
- X IF(RI.EQ.0) RETURN
- XC !IGNORE DISABLED.
- X GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
- X & 11000,12000,13000,14000,15000,16000,17000,18000,19000,
- X & 20000,21000,22000,23000,24000),RI
- X CALL BUG(3,RI)
- XC
- XC CEV1-- CURE CLOCK. LET PLAYER SLOWLY RECOVER.
- XC
- X1000 ASTREN(PLAYER)=MIN0(0,ASTREN(PLAYER)+1)
- XC !RECOVER.
- X IF(ASTREN(PLAYER).GE.0) RETURN
- XC !FULLY RECOVERED?
- X CTICK(CEVCUR)=30
- XC !NO, WAIT SOME MORE.
- X RETURN
- XC
- XC CEV2-- MAINT-ROOM WITH LEAK. RAISE THE WATER LEVEL.
- XC
- X2000 IF(HERE.EQ.MAINT) CALL RSPEAK(71+(RVMNT/2))
- XC !DESCRIBE.
- X RVMNT=RVMNT+1
- XC !RAISE WATER LEVEL.
- X IF(RVMNT.LE.16) RETURN
- XC !IF NOT FULL, EXIT.
- X CTICK(CEVMNT)=0
- XC !FULL, DISABLE CLOCK.
- X RFLAG(MAINT)=or(RFLAG(MAINT),RMUNG)
- X RRAND(MAINT)=80
- XC !SAY IT IS FULL OF WATER.
- X IF(HERE.EQ.MAINT) CALL JIGSUP(81)
- XC !DROWN HIM IF PRESENT.
- X RETURN
- XC
- XC CEV3-- LANTERN. DESCRIBE GROWING DIMNESS.
- XC
- X3000 CALL LITINT(LAMP,ORLAMP,CEVLNT,LMPTCK,12)
- XC !DO LIGHT INTERRUPT.
- X RETURN
- XC
- XC CEV4-- MATCH. OUT IT GOES.
- XC
- X4000 CALL RSPEAK(153)
- XC !MATCH IS OUT.
- X OFLAG1(MATCH)=and(OFLAG1(MATCH), not(ONBT))
- X RETURN
- XC
- XC CEV5-- CANDLE. DESCRIBE GROWING DIMNESS.
- XC
- X5000 CALL LITINT(CANDL,ORCAND,CEVCND,CNDTCK,10)
- XC !DO CANDLE INTERRUPT.
- X RETURN
- X`0C
- XC CEVAPP, PAGE 3
- XC
- XC CEV6-- BALLOON
- XC
- X6000 CTICK(CEVBAL)=3
- XC !RESCHEDULE INTERRUPT.
- X F=AVEHIC(WINNER).EQ.BALLO
- XC !SEE IF IN BALLOON.
- X IF(BLOC.EQ.VLBOT) GO TO 6800
- XC !AT BOTTOM?
- X IF(QLEDGE(BLOC)) GO TO 6700
- XC !ON LEDGE?
- X IF(QOPEN(RECEP).AND.(BINFF.NE.0))
- X & GO TO 6500
- XC
- XC BALLOON IS IN MIDAIR AND IS DEFLATED (OR HAS RECEPTACLE CLOSED).
- XC FALL TO NEXT ROOM.
- XC
- X IF(BLOC.NE.VAIR1) GO TO 6300
- XC !IN VAIR1?
- X BLOC=VLBOT
- XC !YES, NOW AT VLBOT.
- X CALL NEWSTA(BALLO,0,BLOC,0,0)
- X IF(F) GO TO 6200
- XC !IN BALLOON?
- X IF(QLEDGE(HERE)) CALL RSPEAK(530)
- XC !ON LEDGE, DESCRIBE.
- X RETURN
- XC
- X6200 F=MOVETO(BLOC,WINNER)
- XC !MOVE HIM.
- X IF(BINFF.EQ.0) GO TO 6250
- XC !IN BALLOON. INFLATED?
- X CALL RSPEAK(531)
- XC !YES, LANDED.
- X F=RMDESC(0)
- XC !DESCRIBE.
- X RETURN
- XC
- X6250 CALL NEWSTA(BALLO,532,0,0,0)
- XC !NO, BALLOON & CONTENTS DIE.
- X CALL NEWSTA(DBALL,0,BLOC,0,0)
- XC !INSERT DEAD BALLOON.
- X AVEHIC(WINNER)=0
- XC !NOT IN VEHICLE.
- X CFLAG(CEVBAL)=.FALSE.
- XC !DISABLE INTERRUPTS.
- X CFLAG(CEVBRN)=.FALSE.
- X BINFF=0
- X BTIEF=0
- X RETURN
- XC
- X6300 BLOC=BLOC-1
- XC !NOT IN VAIR1, DESCEND.
- X CALL NEWSTA(BALLO,0,BLOC,0,0)
- X IF(F) GO TO 6400
- XC !IS HE IN BALLOON?
- X IF(QLEDGE(HERE)) CALL RSPEAK(533)
- XC !IF ON LEDGE, DESCRIBE.
- X RETURN
- XC
- X6400 F=MOVETO(BLOC,WINNER)
- XC !IN BALLOON, MOVE HIM.
- X CALL RSPEAK(534)
- XC !DESCRIBE.
- X F=RMDESC(0)
- X RETURN
- XC
- XC BALLOON IS IN MIDAIR AND IS INFLATED, UP-UP-AND-AWAY
- XC !
- XC
- X6500 IF(BLOC.NE.VAIR4) GO TO 6600
- XC !AT VAIR4?
- X CTICK(CEVBRN)=0
- X CTICK(CEVBAL)=0
- X BINFF=0
- X BTIEF=0
- X BLOC=VLBOT
- XC !FALL TO BOTTOM.
- X CALL NEWSTA(BALLO,0,0,0,0)
- XC !BALLOON & CONTENTS DIE.
- X CALL NEWSTA(DBALL,0,BLOC,0,0)
- XC !SUBSTITUTE DEAD BALLOON.
- X IF(F) GO TO 6550
- XC !WAS HE IN IT?
- X IF(QLEDGE(HERE)) CALL RSPEAK(535)
- XC !IF HE CAN SEE, DESCRIBE.
- X RETURN
- XC
- X6550 CALL JIGSUP(536)
- XC !IN BALLOON AT CRASH, DIE.
- X RETURN
- XC
- X6600 BLOC=BLOC+1
- XC !NOT AT VAIR4, GO UP.
- X CALL NEWSTA(BALLO,0,BLOC,0,0)
- X IF(F) GO TO 6650
- XC !IN BALLOON?
- X IF(QLEDGE(HERE)) CALL RSPEAK(537)
- XC !CAN HE SEE IT?
- X RETURN
- XC
- X6650 F=MOVETO(BLOC,WINNER)
- XC !MOVE PLAYER.
- X CALL RSPEAK(538)
- XC !DESCRIBE.
- X F=RMDESC(0)
- X RETURN
- XC
- XC ON LEDGE, GOES TO MIDAIR ROOM WHETHER INFLATED OR NOT.
- XC
- X6700 BLOC=BLOC+(VAIR2-LEDG2)
- XC !MOVE TO MIDAIR.
- X CALL NEWSTA(BALLO,0,BLOC,0,0)
- X IF(F) GO TO 6750
- XC !IN BALLOON?
- X IF(QLEDGE(HERE)) CALL RSPEAK(539)
- XC !NO, STRANDED.
- X CTICK(CEVVLG)=10
- XC !MATERIALIZE GNOME.
- X RETURN
- XC
- X6750 F=MOVETO(BLOC,WINNER)
- XC !MOVE TO NEW ROOM.
- X CALL RSPEAK(540)
- XC !DESCRIBE.
- X F=RMDESC(0)
- X RETURN
- XC
- XC AT BOTTOM, GO UP IF INFLATED, DO NOTHING IF DEFLATED.
- XC
- X6800 IF((BINFF.EQ.0).OR..NOT.QOPEN(RECEP)) RETURN
- X BLOC=VAIR1
- XC !INFLATED AND OPEN,
- X CALL NEWSTA(BALLO,0,BLOC,0,0)
- XC !GO UP TO VAIR1.
- X IF(F) GO TO 6850
- XC !IN BALLOON?
- X IF(QLEDGE(HERE)) CALL RSPEAK(541)
- XC !IF CAN SEE, DESCRIBE.
- X RETURN
- XC
- X6850 F=MOVETO(BLOC,WINNER)
- XC !MOVE PLAYER.
- X CALL RSPEAK(542)
- X F=RMDESC(0)
- X RETURN
- X`0C
- XC CEVAPP, PAGE 4
- XC
- XC CEV7-- BALLOON BURNUP
- XC
- X7000 DO 7100 I=1,OLNT
- XC !FIND BURNING OBJECT
- X IF((RECEP.EQ.OCAN(I)).AND.((and(OFLAG1(I),FLAMBT)).NE.0))
- X & GO TO 7200
- X7100 CONTINUE
- X CALL BUG(4,0)
- XC
- X7200 CALL NEWSTA(I,0,0,0,0)
- XC !VANISH OBJECT.
- X BINFF=0
- XC !UNINFLATED.
- X IF(HERE.EQ.BLOC) CALL RSPSUB(292,ODESC2(I))
- XC !DESCRIBE.
- X RETURN
- XC
- XC CEV8-- FUSE FUNCTION
- XC
- X8000 IF(OCAN(FUSE).NE.BRICK) GO TO 8500
- XC !IGNITED BRICK?
- X BR=OROOM(BRICK)
- XC !GET BRICK ROOM.
- X BC=OCAN(BRICK)
- XC !GET CONTAINER.
- X IF((BR.EQ.0).AND.(BC.NE.0)) BR=OROOM(BC)
- X CALL NEWSTA(FUSE,0,0,0,0)
- XC !KILL FUSE.
- X CALL NEWSTA(BRICK,0,0,0,0)
- XC !KILL BRICK.
- X IF((BR.NE.0).AND.(BR.NE.HERE)) GO TO 8100
- XC !BRICK ELSEWHERE?
- XC
- X RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
- X RRAND(HERE)=114
- XC !MUNG ROOM.
- X CALL JIGSUP(150)
- XC !DEAD.
- X RETURN
- XC
- X8100 CALL RSPEAK(151)
- XC !BOOM.
- X MUNGRM=BR
- XC !SAVE ROOM THAT BLEW.
- X CTICK(CEVSAF)=5
- XC !SET SAFE INTERRUPT.
- X IF(BR.NE.MSAFE) GO TO 8200
- XC !BLEW SAFE ROOM?
- X IF(BC.NE.SSLOT) RETURN
- XC !WAS BRICK IN SAFE?
- X CALL NEWSTA(SSLOT,0,0,0,0)
- XC !KILL SLOT.
- X OFLAG2(SAFE)=or(OFLAG2(SAFE),OPENBT)
- X SAFEF=.TRUE.
- XC !INDICATE SAFE BLOWN.
- X RETURN
- XC
- X8200 DO 8250 I=1,OLNT
- XC !BLEW WRONG ROOM.
- X IF(QHERE(I,BR) .AND. ((and(OFLAG1(I),TAKEBT)).NE.0))
- X & CALL NEWSTA(I,0,0,0,0)
- X8250 CONTINUE
- X IF(BR.NE.LROOM) RETURN
- XC !BLEW LIVING ROOM?
- X DO 8300 I=1,OLNT
- X IF(OCAN(I).EQ.TCASE) CALL NEWSTA(I,0,0,0,0)
- XC !KILL TROPHY CASE.
- X8300 CONTINUE
- X RETURN
- XC
- X8500 IF(QHERE(FUSE,HERE).OR.(OADV(FUSE).EQ.WINNER))
- X & CALL RSPEAK(152)
- X CALL NEWSTA(FUSE,0,0,0,0)
- XC !KILL FUSE.
- X RETURN
- X`0C
- XC CEVAPP, PAGE 5
- XC
- XC CEV9-- LEDGE MUNGE.
- XC
- X9000 RFLAG(LEDG4)=or(RFLAG(LEDG4),RMUNG)
- X RRAND(LEDG4)=109
- X IF(HERE.EQ.LEDG4) GO TO 9100
- XC !WAS HE THERE?
- X CALL RSPEAK(110)
- XC !NO, NARROW ESCAPE.
- X RETURN
- XC
- X9100 IF(AVEHIC(WINNER).NE.0) GO TO 9200
- XC !IN VEHICLE?
- X CALL JIGSUP(111)
- XC !NO, DEAD.
- X RETURN
- XC
- X9200 IF(BTIEF.NE.0) GO TO 9300
- XC !TIED TO LEDGE?
- X CALL RSPEAK(112)
- XC !NO, NO PLACE TO LAND.
- X RETURN
- XC
- X9300 BLOC=VLBOT
- XC !YES, CRASH BALLOON.
- X CALL NEWSTA(BALLO,0,0,0,0)
- XC !BALLOON & CONTENTS DIE.
- X CALL NEWSTA(DBALL,0,BLOC,0,0)
- XC !INSERT DEAD BALLOON.
- X BTIEF=0
- X BINFF=0
- X CFLAG(CEVBAL)=.FALSE.
- X CFLAG(CEVBRN)=.FALSE.
- X CALL JIGSUP(113)
- XC !DEAD
- X RETURN
- XC
- XC CEV10-- SAFE MUNG.
- XC
- X10000 RFLAG(MUNGRM)=or(RFLAG(MUNGRM),RMUNG)
- X RRAND(MUNGRM)=114
- X IF(HERE.EQ.MUNGRM) GO TO 10100
- XC !IS HE PRESENT?
- X CALL RSPEAK(115)
- XC !LET HIM KNOW.
- X IF(MUNGRM.EQ.MSAFE) CTICK(CEVLED)=8
- XC !START LEDGE CLOCK.
- X RETURN
- XC
- X10100 I=116
- XC !HE'S DEAD,
- X IF((and(RFLAG(HERE),RHOUSE)).NE.0) I=117
- X CALL JIGSUP(I)
- XC !LET HIM KNOW.
- X RETURN
- X`0C
- XC CEVAPP, PAGE 6
- XC
- XC CEV11-- VOLCANO GNOME
- XC
- X11000 IF(QLEDGE(HERE)) GO TO 11100
- XC !IS HE ON LEDGE?
- X CTICK(CEVVLG)=1
- XC !NO, WAIT A WHILE.
- X RETURN
- XC
- X11100 CALL NEWSTA(GNOME,118,HERE,0,0)
- XC !YES, MATERIALIZE GNOME.
- X RETURN
- XC
- XC CEV12-- VOLCANO GNOME DISAPPEARS
- XC
- X12000 CALL NEWSTA(GNOME,149,0,0,0)
- XC !DISAPPEAR THE GNOME.
- X RETURN
- XC
- XC CEV13-- BUCKET.
- XC
- X13000 IF(OCAN(WATER).EQ.BUCKE)
- X & CALL NEWSTA(WATER,0,0,0,0)
- X RETURN
- XC
- XC CEV14-- SPHERE. IF EXPIRES, HE'S TRAPPED.
- XC
- X14000 RFLAG(CAGER)=or(RFLAG(CAGER),RMUNG)
- X RRAND(CAGER)=147
- X CALL JIGSUP(148)
- XC !MUNG PLAYER.
- X RETURN
- XC
- XC CEV15-- END GAME HERALD.
- XC
- X15000 ENDGMF=.TRUE.
- XC !WE'RE IN ENDGAME.
- X CALL RSPEAK(119)
- XC !INFORM OF ENDGAME.
- X RETURN
- X`0C
- XC CEVAPP, PAGE 7
- XC
- XC CEV16-- FOREST MURMURS
- XC
- X16000 CFLAG(CEVFOR)=(HERE.EQ.MTREE).OR.
- X & ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR))
- X IF(CFLAG(CEVFOR).AND.PROB(10,10)) CALL RSPEAK(635)
- X RETURN
- XC
- XC CEV17-- SCOL ALARM
- XC
- X17000 IF(HERE.EQ.BKTWI) CFLAG(CEVZGI)=.TRUE.
- XC !IF IN TWI, GNOME.
- X IF(HERE.EQ.BKVAU) CALL JIGSUP(636)
- XC !IF IN VAU, DEAD.
- X RETURN
- XC
- XC CEV18-- ENTER GNOME OF ZURICH
- XC
- X18000 CFLAG(CEVZGO)=.TRUE.
- XC !EXITS, TOO.
- X CALL NEWSTA(ZGNOM,0,BKTWI,0,0)
- XC !PLACE IN TWI.
- X IF(HERE.EQ.BKTWI) CALL RSPEAK(637)
- XC !ANNOUNCE.
- X RETURN
- XC
- XC CEV19-- EXIT GNOME
- XC
- X19000 CALL NEWSTA(ZGNOM,0,0,0,0)
- XC !VANISH.
- X IF(HERE.EQ.BKTWI) CALL RSPEAK(638)
- XC !ANNOUNCE.
- X RETURN
- X`0C
- XC CEVAPP, PAGE 8
- XC
- XC CEV20-- START OF ENDGAME
- XC
- X20000 IF(SPELLF) GO TO 20200
- XC !SPELL HIS WAY IN?
- X IF(HERE.NE.CRYPT) RETURN
- XC !NO, STILL IN TOMB?
- X IF(.NOT.LIT(HERE)) GO TO 20100
- XC !LIGHTS OFF?
- X CTICK(CEVSTE)=3
- XC !RESCHEDULE.
- X RETURN
- XC
- X20100 CALL RSPEAK(727)
- XC !ANNOUNCE.
- X20200 DO 20300 I=1,OLNT
- XC !STRIP HIM OF OBJS.
- X CALL NEWSTA(I,0,OROOM(I),OCAN(I),0)
- X20300 CONTINUE
- X CALL NEWSTA(LAMP,0,0,0,PLAYER)
- XC !GIVE HIM LAMP.
- X CALL NEWSTA(SWORD,0,0,0,PLAYER)
- XC !GIVE HIM SWORD.
- XC
- X OFLAG1(LAMP)=and((or(OFLAG1(LAMP),LITEBT)), not(ONBT))
- X OFLAG2(LAMP)=or(OFLAG2(LAMP),TCHBT)
- X CFLAG(CEVLNT)=.FALSE.
- XC !LAMP IS GOOD AS NEW.
- X CTICK(CEVLNT)=350
- X ORLAMP=0
- X OFLAG2(SWORD)=or(OFLAG2(SWORD),TCHBT)
- X SWDACT=.TRUE.
- X SWDSTA=0
- XC
- X THFACT=.FALSE.
- XC !THIEF GONE.
- X ENDGMF=.TRUE.
- XC !ENDGAME RUNNING.
- X CFLAG(CEVMAT)=.FALSE.
- XC !MATCHES GONE,
- X CFLAG(CEVCND)=.FALSE.
- XC !CANDLES GONE.
- XC
- X CALL SCRUPD(RVAL(CRYPT))
- XC !SCORE CRYPT,
- X RVAL(CRYPT)=0
- XC !BUT ONLY ONCE.
- X F=MOVETO(TSTRS,WINNER)
- XC !TO TOP OF STAIRS,
- X F=RMDESC(3)
- XC !AND DESCRIBE.
- X RETURN
- XC !BAM
- XC !
- XC
- XC CEV21-- MIRROR CLOSES.
- XC
- X21000 MRPSHF=.FALSE.
- XC !BUTTON IS OUT.
- X MROPNF=.FALSE.
- XC !MIRROR IS CLOSED.
- X IF(HERE.EQ.MRANT) CALL RSPEAK(728)
- XC !DESCRIBE BUTTON.
- X IF((HERE.EQ.INMIR).OR.(MRHERE(HERE).EQ.1))
- X & CALL RSPEAK(729)
- X RETURN
- X`0C
- XC CEVAPP, PAGE 9
- XC
- XC CEV22-- DOOR CLOSES.
- XC
- X22000 IF(WDOPNF) CALL RSPEAK(730)
- XC !DESCRIBE.
- X WDOPNF=.FALSE.
- XC !CLOSED.
- X RETURN
- XC
- XC CEV23-- INQUISITOR'S QUESTION
- XC
- X23000 IF(AROOM(PLAYER).NE.FDOOR) RETURN
- XC !IF PLAYER LEFT, DIE.
- X CALL RSPEAK(769)
- X CALL RSPEAK(770+QUESNO)
- X CTICK(CEVINQ)=2
- X RETURN
- XC
- XC CEV24-- MASTER FOLLOWS
- XC
- X24000 IF(AROOM(AMASTR).EQ.HERE) RETURN
- XC !NO MOVEMENT, DONE.
- X IF((HERE.NE.CELL).AND.(HERE.NE.PCELL)) GO TO 24100
- X IF(FOLLWF) CALL RSPEAK(811)
- XC !WONT GO TO CELLS.
- X FOLLWF=.FALSE.
- X RETURN
- XC
- X24100 FOLLWF=.TRUE.
- XC !FOLLOWING.
- X I=812
- XC !ASSUME CATCHES UP.
- X DO 24200 J=XMIN,XMAX,XMIN
- X IF(FINDXT(J,AROOM(AMASTR)).AND.(XROOM1.EQ.HERE))
- X & I=813
- X24200 CONTINUE
- X CALL RSPEAK(I)
- X CALL NEWSTA(MASTER,0,HERE,0,0)
- XC !MOVE MASTER OBJECT.
- X AROOM(AMASTR)=HERE
- XC !MOVE MASTER PLAYER.
- X RETURN
- XC
- X END
- XC LITINT- LIGHT INTERRUPT PROCESSOR
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE LITINT(OBJ,CTR,CEV,TICKS,TICKLN)
- X IMPLICIT INTEGER (A-Z)
- X INTEGER TICKS(TICKLN)
- X
- X INCLUDE 'GAMESTATE.LIB'
- X INCLUDE 'OBJECTS.LIB'
- X INCLUDE 'OFLAGS.LIB'
- X INCLUDE 'CLOCK.LIB'
- XC
- X CTR=CTR+1
- XC !ADVANCE STATE CNTR.
- X CTICK(CEV)=TICKS(CTR)
- XC !RESET INTERRUPT.
- X IF(CTICK(CEV).NE.0) GO TO 100
- XC !EXPIRED?
- X OFLAG1(OBJ)=and(OFLAG1(OBJ), not(LITEBT+FLAMBT+ONBT))
- X IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
- X & CALL RSPSUB(293,ODESC2(OBJ))
- X RETURN
- XC
- X100 IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
- X & CALL RSPEAK(TICKS(CTR+(TICKLN/2)))
- X RETURN
- XC
- X END
- $ CALL UNPACK [.SRC]CLOCKR.FOR;1 1380514894
- $ create 'f'
- XC
- XC CURRENT EXITS
- XC
- X COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ
- X EQUIVALENCE (XFLAG,XOBJ)
- $ CALL UNPACK [.SRC]CURXT.LIB;1 1263412170
- $ create 'f'
- XC
- X COMMON /DEBUG/ DBGFLG,PRSFLG,GDTFLG
- X LOGICAL DFLAG
- $ CALL UNPACK [.SRC]DEBUG.LIB;1 91756646
- $ create 'f'
- XC FIGHTD- INTERMOVE FIGHT DEMON
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE FIGHTD
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL PROB,OAPPLI
- X
- X INCLUDE 'PARSER.LIB'
- X INCLUDE 'GAMESTATE.LIB'
- X INCLUDE 'OBJECTS.LIB'
- X INCLUDE 'OFLAGS.LIB'
- X INCLUDE 'OINDEX.LIB'
- X INCLUDE 'VILLIANS.LIB'
- X INCLUDE 'ADVERS.LIB'
- X INCLUDE 'VERBS.LIB'
- X INCLUDE 'FLAGS.LIB'
- XC
- X LOGICAL F
- XC
- XC FUNCTIONS AND DATA
- XC
- X DATA ROUT/1/
- X`0C
- XC FIGHTD, PAGE 2
- XC
- X DO 2400 I=1,VLNT
- XC !LOOP THRU VILLAINS.
- X VOPPS(I)=0
- XC !CLEAR OPPONENT SLOT.
- X OBJ=VILLNS(I)
- XC !GET OBJECT NO.
- X RA=OACTIO(OBJ)
- XC !GET HIS ACTION.
- X IF(HERE.NE.OROOM(OBJ)) GO TO 2200
- XC !ADVENTURER STILL HERE?
- X IF((OBJ.EQ.THIEF).AND.THFENF) GO TO 2400
- XC !THIEF ENGROSSED?
- X IF(OCAPAC(OBJ).GE.0) GO TO 2050
- XC !YES, VILL AWAKE?
- X IF((VPROB(I).EQ.0).OR..NOT.PROB(VPROB(I),VPROB(I)))
- X & GO TO 2025
- X OCAPAC(OBJ)=IABS(OCAPAC(OBJ))
- X VPROB(I)=0
- X IF(RA.EQ.0) GO TO 2400
- XC !ANYTHING TO DO?
- X PRSA=INXW
- XC !YES, WAKE HIM UP.
- X F=OAPPLI(RA,0)
- X GO TO 2400
- XC !NOTHING ELSE HAPPENS.
- XC
- X2025 VPROB(I)=VPROB(I)+10
- XC !INCREASE WAKEUP PROB.
- X GO TO 2400
- XC !NOTHING ELSE.
- XC
- X2050 IF((and(OFLAG2(OBJ),FITEBT)).EQ.0) GO TO 2100
- X VOPPS(I)=OBJ
- XC !FIGHTING, SET UP OPP.
- X GO TO 2400
- XC
- X2100 IF(RA.EQ.0) GO TO 2400
- XC !NOT FIGHTING,
- X PRSA=FRSTQW
- XC !SET UP PROBABILITY
- X IF(.NOT.OAPPLI(RA,0)) GO TO 2400
- XC !OF FIGHTING.
- X OFLAG2(OBJ)=or(OFLAG2(OBJ),FITEBT)
- X VOPPS(I)=OBJ
- XC !SET UP OPP.
- X GO TO 2400
- XC
- X2200 IF((and(OFLAG2(OBJ),FITEBT).EQ.0).OR.(RA.EQ.0))
- X & GO TO 2300
- X PRSA=FIGHTW
- XC !HAVE A FIGHT.
- X F=OAPPLI(RA,0)
- X2300 IF(OBJ.EQ.THIEF) THFENF=.FALSE.
- XC !TURN OFF ENGROSSED.
- X AFLAG(PLAYER)=and(AFLAG(PLAYER), not(ASTAG))
- X OFLAG2(OBJ)=and(OFLAG2(OBJ), not(STAGBT+FITEBT))
- X IF((OCAPAC(OBJ).GE.0).OR.(RA.EQ.0))
- X & GO TO 2400
- X PRSA=INXW
- XC !WAKE HIM UP.
- X F=OAPPLI(RA,0)
- X OCAPAC(OBJ)=IABS(OCAPAC(OBJ))
- X2400 CONTINUE
- X`0C
- XC FIGHTD, PAGE 3
- XC
- XC NOW DO ACTUAL COUNTERBLOWS.
- XC
- X OUT=0
- XC !ASSUME HERO OK.
- X2600 DO 2700 I=1,VLNT
- XC !LOOP THRU OPPS.
- X J=VOPPS(I)
- X IF(J.EQ.0) GO TO 2700
- XC !SLOT EMPTY?
- X PRSCON=1
- XC !STOP CMD STREAM.
- X RA=OACTIO(J)
- X IF(RA.EQ.0) GO TO 2650
- XC !VILLAIN ACTION?
- X PRSA=FIGHTW
- XC !SEE IF
- X IF(OAPPLI(RA,0)) GO TO 2700
- XC !SPECIAL ACTION.
- X2650 RES=BLOW(PLAYER,J,VMELEE(I),.FALSE.,OUT)
- XC !STRIKE BLOW.
- X IF(RES.LT.0) RETURN
- XC !IF HERO DEAD, EXIT.
- X IF(RES.EQ.ROUT) OUT=2+RND(3)
- XC !IF HERO OUT, SET FLG.
- X2700 CONTINUE
- X OUT=OUT-1
- XC !DECREMENT OUT COUNT.
- X IF(OUT.GT.0) GO TO 2600
- XC !IF STILL OUT, GO AGAIN.
- X RETURN
- XC
- X END
- X`0C
- XC BLOW- STRIKE BLOW
- XC
- XC DECLARATIONS
- XC
- X INTEGER FUNCTION BLOW(H,V,RMK,HFLG,OUT)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL HFLG,OAPPLI,PROB
- X INTEGER DEF1R(3),DEF2R(4),DEF3R(5)
- X INTEGER RVECTR(66),RSTATE(45)
- X INCLUDE 'GAMESTATE.LIB'
- X INCLUDE 'DEBUG.LIB'
- XC
- XC PARSE VECTOR
- XC
- XC LOGICAL PRSWON
- X INCLUDE 'PARSER.LIB'
- XC
- XC MISCELLANEOUS VARIABLES
- XC
- X COMMON /STAR/ MBASE,STRBIT
- X INCLUDE 'OBJECTS.LIB'
- X INCLUDE 'OFLAGS.LIB'
- XC
- X INCLUDE 'CLOCK.LIB'
- X
- X INCLUDE 'ADVERS.LIB'
- X INCLUDE 'VERBS.LIB'
- XC
- X LOGICAL F
- XC
- XC FUNCTIONS AND DATA
- XC
- X DATA RMISS/0/,ROUT/1/,RKILL/2/,RLIGHT/3/
- X DATA RSER/4/,RSTAG/5/,RLOSE/6/,RHES/7/,RSIT/8/
- X DATA DEF1R/1,2,3/
- X DATA DEF2R/13,23,24,25/
- X DATA DEF3R/35,36,46,47,57/
- XC
- +-+-+-+-+-+-+-+- END OF PART 22 +-+-+-+-+-+-+-+-
-