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 29/30
- Message-ID: <1992Feb24.014120.822@dragon.com>
- Date: 24 Feb 92 06:41:20 GMT
- Organization: Computer Projects Unlimited
- Lines: 1545
-
- -+-+-+-+-+-+-+-+ START OF PART 29 -+-+-+-+-+-+-+-+
- XC !KILL ROBOT.
- X RETURN
- XC
- XC O31-- GRUE
- XC
- X56000 IF(PRSA.NE.EXAMIW) GO TO 56100
- XC !EXAMINE?
- X CALL RSPEAK(288)
- X RETURN
- XC
- X56100 IF(PRSA.NE.FINDW) GO TO 10
- XC !FIND?
- X CALL RSPEAK(289)
- X RETURN
- XC
- X END
- $ CALL UNPACK [.SRC]SOBJS.FOR;1 1849673233
- $ create 'f'
- X COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
- X &`09`09LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
- $ CALL UNPACK [.SRC]STATE.LIB;1 1835804824
- $ create 'f'
- XC SVERBS- SIMPLE VERBS PROCESSOR
- XC ALL VERBS IN THIS ROUTINE MUST BE INDEPENDANT
- XC OF OBJECT ACTIONS
- 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 SVERBS(RI)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL MOVETO,YESNO
- X LOGICAL RMDESC
- X LOGICAL QOPEN
- X LOGICAL FINDXT,QHERE,F
- X INTEGER JOKES(25)
- X CHARACTER ANSSTR(78)
- X CHARACTER PP1(6),PP2(6),CH(6)
- X INTEGER ANSWER(28)
- X
- X INCLUDE 'PARSER.LIB'
- X INCLUDE 'GAMESTATE.LIB'
- X INCLUDE 'STATE.LIB'
- X INCLUDE 'SCREEN.LIB'
- XC
- XC MISCELLANEOUS VARIABLES
- XC
- X CHARACTER VEDIT
- X COMMON /VERS/ VMAJ,VMIN,VEDIT
- X
- X INCLUDE 'IO.LIB'
- X INCLUDE 'ROOMS.LIB'
- X INCLUDE 'RFLAG.LIB'
- X INCLUDE 'RINDEX.LIB'
- X INCLUDE 'EXITS.LIB'
- X INCLUDE 'CURXT.LIB'
- X INCLUDE 'XPARS.LIB'
- X INCLUDE 'XSRCH.LIB'
- X INCLUDE 'OBJECTS.LIB'
- X INCLUDE 'OFLAGS.LIB'
- X INCLUDE 'OINDEX.LIB'
- X INCLUDE 'CLOCK.LIB'
- X
- X INCLUDE 'ADVERS.LIB'
- X INCLUDE 'VERBS.LIB'
- X INCLUDE 'FLAGS.LIB'
- XC
- XC FUNCTIONS AND DATA
- XC
- X QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
- X DATA MXNOP/39/,MXJOKE/64/
- X DATA JOKES/4,5,3,304,305,306,307,308,309,310,311,312,
- X & 313,5314,5319,324,325,883,884,120,120,0,0,0,0/
- X DATA ANSWER/0,6,1,6,2,5,3,5,4,3,4,6,4,6,4,5,
- X & 5,5,5,4,5,6,6,10,7,4,7,6/
- X DATA ANSSTR/'T','E','M','P','L','E',
- X & 'F','O','R','E','S','T',
- X & '3','0','0','0','3',
- X & 'F','L','A','S','K',
- X & 'R','U','B',
- X & 'F','O','N','D','L','E',
- X & 'C','A','R','R','E','S',
- X & 'T','O','U','C','H',
- X & 'B','O','N','E','S',
- X & 'B','O','D','Y',
- X & 'S','K','E','L','E','T',
- X & 'R','U','S','T','Y','K','N','I','F','E',
- X & 'N','O','N','E',
- X & 'N','O','W','H','E','R','\0'/
- X`0C
- XC SVERBS, PAGE 2
- XC
- X SVERBS=.TRUE.
- XC !ASSUME WINS.
- X IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
- XC !SET UP DESCRIPTORS.
- X IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
- XC
- X IF(RI.EQ.0) CALL BUG(7,RI)
- XC !ZERO IS VERBOTEN.
- X IF(RI.LE.MXNOP) RETURN
- XC !NOP?
- X IF(RI.LE.MXJOKE) GO TO 100
- XC !JOKE?
- X GO TO (65000,66000,67000,68000,69000,
- X & 1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
- X & 11000,12000,13000,14000,15000,16000,17000,18000,19000,20000,
- X & 21000,22000,23000,24000,25000,26000,27000),
- X & (RI-MXJOKE)
- X CALL BUG(7,RI)
- XC
- XC ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE.
- XC
- X10 SVERBS=.FALSE.
- XC !LOSE.
- X RETURN
- XC
- XC JOKE PROCESSOR.
- XC FIND PROPER ENTRY IN JOKES, USE IT TO SELECT STRING TO PRINT.
- XC
- X100 I=JOKES(RI-MXNOP)
- XC !GET TABLE ENTRY.
- X J=I/1000
- XC !ISOLATE # STRINGS.
- X IF(J.NE.0) I=MOD(I,1000)+RND(J)
- XC !IF RANDOM, CHOOSE.
- X CALL RSPEAK(I)
- XC !PRINT JOKE.
- X RETURN
- X`0C
- XC SVERBS, PAGE 2A
- XC
- XC V65-- ROOM
- XC
- X65000 SVERBS=RMDESC(2)
- XC !DESCRIBE ROOM ONLY.
- X RETURN
- XC
- XC V66-- OBJECTS
- XC
- X66000 SVERBS=RMDESC(1)
- XC !DESCRIBE OBJ ONLY.
- X IF(.NOT.TELFLG) CALL RSPEAK(138)
- XC !NO OBJECTS.
- X RETURN
- XC
- XC V67-- RNAME
- XC
- X67000 CALL RSPEAK(RDESC2-HERE)
- XC !SHORT ROOM NAME.
- X RETURN
- XC
- XC V68-- RESERVED
- XC
- X68000 RETURN
- XC
- XC V69-- RESERVED
- XC
- X69000 RETURN
- X`0C
- XC SVERBS, PAGE 3
- XC
- XC V70-- BRIEF. SET FLAG.
- XC
- X1000 BRIEFF=.TRUE.
- XC !BRIEF DESCRIPTIONS.
- X SUPERF=.FALSE.
- X CALL RSPEAK(326)
- X RETURN
- XC
- XC V71-- VERBOSE. CLEAR FLAGS.
- XC
- X2000 BRIEFF=.FALSE.
- XC !LONG DESCRIPTIONS.
- X SUPERF=.FALSE.
- X CALL RSPEAK(327)
- X RETURN
- XC
- XC V72-- SUPERBRIEF. SET FLAG.
- XC
- X3000 SUPERF=.TRUE.
- X CALL RSPEAK(328)
- X RETURN
- XC
- XC V73-- STAY (USED IN ENDGAME).
- XC
- X4000 IF(WINNER.NE.AMASTR) GO TO 4100
- XC !TELL MASTER, STAY.
- X CALL RSPEAK(781)
- XC !HE DOES.
- X CTICK(CEVFOL)=0
- XC !NOT FOLLOWING.
- X RETURN
- XC
- X4100 IF(WINNER.EQ.PLAYER) CALL RSPEAK(664)
- XC !JOKE.
- X RETURN
- XC
- XC V74-- VERSION. PRINT INFO.
- XC
- X5000 WRITE(OUTCH,5010) VMAJ,VMIN,VEDIT
- X5010 FORMAT(' V',I1,'.',I2,A1)
- X TELFLG=.TRUE.
- X RETURN
- XC
- XC V75-- SWIM. ALWAYS A JOKE.
- XC
- X6000 I=330
- XC !ASSUME WATER.
- X IF(and(RFLAG(HERE),(RWATER+RFILL)).EQ.0)
- X & I=331+RND(3)
- X CALL RSPEAK(I)
- X RETURN
- XC
- XC V76-- GERONIMO. IF IN BARREL, FATAL, ELSE JOKE.
- XC
- X7000 IF(HERE.EQ.MBARR) GO TO 7100
- XC !IN BARREL?
- X CALL RSPEAK(334)
- XC !NO, JOKE.
- X RETURN
- XC
- X7100 CALL JIGSUP(335)
- XC !OVER FALLS.
- X RETURN
- XC
- XC V77-- SINBAD ET AL. CHASE CYCLOPS, ELSE JOKE.
- XC
- X8000 IF((HERE.EQ.MCYCL).AND.QHERE(CYCLO,HERE)) GO TO 8100
- X CALL RSPEAK(336)
- XC !NOT HERE, JOKE.
- X RETURN
- XC
- X8100 CALL NEWSTA(CYCLO,337,0,0,0)
- XC !CYCLOPS FLEES.
- X CYCLOF=.TRUE.
- XC !SET ALL FLAGS.
- X MAGICF=.TRUE.
- X OFLAG2(CYCLO)=and(OFLAG2(CYCLO), not(FITEBT))
- X RETURN
- XC
- XC V78-- WELL. OPEN DOOR, ELSE JOKE.
- XC
- X9000 IF(RIDDLF.OR.(HERE.NE.RIDDL)) GO TO 9100
- XC !IN RIDDLE ROOM?
- X RIDDLF=.TRUE.
- XC !YES, SOLVED IT.
- X CALL RSPEAK(338)
- X RETURN
- XC
- X9100 CALL RSPEAK(339)
- XC !WELL, WHAT?
- X RETURN
- XC
- XC V79-- PRAY. IF IN TEMP2, POOF
- XC !
- XC
- X10000 IF(HERE.NE.TEMP2) GO TO 10050
- XC !IN TEMPLE?
- X IF(MOVETO(FORE1,WINNER)) GO TO 10100
- XC !FORE1 STILL THERE?
- X10050 CALL RSPEAK(340)
- XC !JOKE.
- X RETURN
- XC
- X10100 F=RMDESC(3)
- XC !MOVED, DESCRIBE.
- X RETURN
- XC
- XC V80-- TREASURE. IF IN TEMP1, POOF
- XC !
- XC
- X11000 IF(HERE.NE.TEMP1) GO TO 11050
- XC !IN TEMPLE?
- X IF(MOVETO(TREAS,WINNER)) GO TO 10100
- XC !TREASURE ROOM THERE?
- X11050 CALL RSPEAK(341)
- XC !NOTHING HAPPENS.
- X RETURN
- XC
- XC V81-- TEMPLE. IF IN TREAS, POOF
- XC !
- XC
- X12000 IF(HERE.NE.TREAS) GO TO 12050
- XC !IN TREASURE?
- X IF(MOVETO(TEMP1,WINNER)) GO TO 10100
- XC !TEMP1 STILL THERE?
- X12050 CALL RSPEAK(341)
- XC !NOTHING HAPPENS.
- X RETURN
- XC
- XC V82-- BLAST. USUALLY A JOKE.
- XC
- X13000 I=342
- XC !DONT UNDERSTAND.
- X IF(PRSO.EQ.SAFE) I=252
- XC !JOKE FOR SAFE.
- X CALL RSPEAK(I)
- X RETURN
- XC
- XC V83-- SCORE. PRINT SCORE.
- XC
- X14000 CALL SCORE(.FALSE.)
- X RETURN
- XC
- XC V84-- QUIT. FINISH OUT THE GAME.
- XC
- X15000 CALL SCORE(.TRUE.)
- XC !TELLL SCORE.
- X IF(.NOT.YESNO(343,0,0)) RETURN
- XC !ASK FOR Y/N DECISION.
- X CLOSE (DBCH)
- X CALL EXIT
- XC !BYE.
- X`0C
- XC SVERBS, PAGE 4
- XC
- XC V85-- FOLLOW (USED IN ENDGAME)
- XC
- X16000 IF(WINNER.NE.AMASTR) RETURN
- XC !TELL MASTER, FOLLOW.
- X CALL RSPEAK(782)
- X CTICK(CEVFOL)=-1
- XC !STARTS FOLLOWING.
- X RETURN
- XC
- XC V86-- WALK THROUGH
- XC
- X17000 IF((SCOLRM.EQ.0).OR.((PRSO.NE.SCOL).AND.
- X & ((PRSO.NE.WNORT).OR.(HERE.NE.BKBOX)))) GO TO 17100
- X SCOLAC=SCOLRM
- XC !WALKED THRU SCOL.
- X PRSO=0
- XC !FAKE OUT FROMDR.
- X CTICK(CEVSCL)=6
- XC !START ALARM.
- X CALL RSPEAK(668)
- XC !DISORIENT HIM.
- X F=MOVETO(SCOLRM,WINNER)
- XC !INTO ROOM.
- X F=RMDESC(3)
- XC !DESCRIBE.
- X RETURN
- XC
- X17100 IF(HERE.NE.SCOLAC) GO TO 17300
- XC !ON OTHER SIDE OF SCOL?
- X DO 17200 I=1,12,3
- XC !WALK THRU PROPER WALL?
- X IF((SCOLWL(I).EQ.HERE).AND.(SCOLWL(I+1).EQ.PRSO))
- X & GO TO 17500
- X17200 CONTINUE
- XC
- X17300 IF(and(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 17400
- X I=669
- XC !NO, JOKE.
- X IF(PRSO.EQ.SCOL) I=670
- XC !SPECIAL JOKE FOR SCOL.
- X CALL RSPSUB(I,ODO2)
- X RETURN
- XC
- X17400 I=671
- XC !JOKE.
- X IF(OROOM(PRSO).NE.0) I=552+RND(5)
- XC !SPECIAL JOKES IF CARRY.
- X CALL RSPEAK(I)
- X RETURN
- XC
- X17500 PRSO=SCOLWL(I+2)
- XC !THRU SCOL WALL...
- X DO 17600 I=1,8,2
- XC !FIND MATCHING ROOM.
- X IF(PRSO.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
- X17600 CONTINUE
- XC !DECLARE NEW SCOLRM.
- X CTICK(CEVSCL)=0
- XC !CANCEL ALARM.
- X CALL RSPEAK(668)
- XC !DISORIENT HIM.
- X F=MOVETO(BKBOX,WINNER)
- XC !BACK IN BOX ROOM.
- X F=RMDESC(3)
- X RETURN
- XC
- XC V87-- RING. A JOKE.
- XC
- X18000 I=359
- XC !CANT RING.
- X IF(PRSO.EQ.BELL) I=360
- XC !DING, DONG.
- X CALL RSPEAK(I)
- XC !JOKE.
- X RETURN
- XC
- XC V88-- BRUSH. JOKE WITH OBSCURE TRAP.
- XC
- X19000 IF(PRSO.EQ.TEETH) GO TO 19100
- XC !BRUSH TEETH?
- X CALL RSPEAK(362)
- XC !NO, JOKE.
- X RETURN
- XC
- X19100 IF(PRSI.NE.0) GO TO 19200
- XC !WITH SOMETHING?
- X CALL RSPEAK(363)
- XC !NO, JOKE.
- X RETURN
- XC
- X19200 IF((PRSI.EQ.PUTTY).AND.(OADV(PUTTY).EQ.WINNER))
- X & GO TO 19300
- X CALL RSPSUB(364,ODI2)
- XC !NO, JOKE.
- X RETURN
- XC
- X19300 CALL JIGSUP(365)
- XC !YES, DEAD
- XC !
- XC !
- XC !
- XC !
- XC !
- X RETURN
- X`0C
- XC SVERBS, PAGE 5
- XC
- XC V89-- DIG. UNLESS SHOVEL, A JOKE.
- XC
- X20000 IF(PRSO.EQ.SHOVE) RETURN
- XC !SHOVEL?
- X I=392
- XC !ASSUME TOOL.
- X IF(and(OFLAG1(PRSO),TOOLBT).EQ.0) I=393
- X CALL RSPSUB(I,ODO2)
- X RETURN
- XC
- XC V90-- TIME. PRINT OUT DURATION OF GAME.
- XC
- X21000 CALL GTTIME(K)
- XC !GET PLAY TIME.
- X I=K/60
- X J=MOD(K,60)
- XC
- X WRITE(OUTCH,21010)
- X IF(I.NE.0) WRITE(OUTCH,21011) I
- X IF(I.GE.2) WRITE(OUTCH,21012)
- X IF(I.EQ.1) WRITE(OUTCH,21013)
- X IF(J.EQ.1) WRITE(OUTCH,21014) J
- X IF(J.NE.1) WRITE(OUTCH,21015) J
- X TELFLG=.TRUE.
- X RETURN
- XC
- X21010 FORMAT(' You have been playing Dungeon for ',$)
- X21011 FORMAT('+',I3,' hour',$)
- X21012 FORMAT('+s and ',$)
- X21013 FORMAT('+ and ',$)
- X21014 FORMAT('+',I2,' minute.')
- X21015 FORMAT('+',I2,' minutes.')
- XC
- XC V91-- LEAP. USUALLY A JOKE, WITH A CATCH.
- XC
- X22000 IF(PRSO.EQ.0) GO TO 22200
- XC !OVER SOMETHING?
- X IF(QHERE(PRSO,HERE)) GO TO 22100
- XC !HERE?
- X CALL RSPEAK(447)
- XC !NO, JOKE.
- X RETURN
- XC
- X22100 IF(and(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 22300
- X CALL RSPSUB(448,ODO2)
- XC !CANT JUMP VILLAIN.
- X RETURN
- XC
- X22200 IF(.NOT.FINDXT(XDOWN,HERE)) GO TO 22300
- XC !DOWN EXIT?
- X IF((XTYPE.EQ.XNO).OR.((XTYPE.EQ.XCOND).AND.
- X & .NOT.FLAGS(XFLAG))) GO TO 22400
- X22300 CALL RSPEAK(314+RND(5))
- XC !WHEEEE
- XC !
- X RETURN
- XC
- X22400 CALL JIGSUP(449+RND(4))
- XC !FATAL LEAP.
- X RETURN
- X`0C
- XC SVERBS, PAGE 6
- XC
- XC V92-- LOCK.
- XC
- X23000 IF((PRSO.EQ.GRATE).AND.(HERE.EQ.MGRAT))
- X & GO TO 23200
- X23100 CALL RSPEAK(464)
- XC !NOT LOCK GRATE.
- X RETURN
- XC
- X23200 GRUNLF=.FALSE.
- XC !GRATE NOW LOCKED.
- X CALL RSPEAK(214)
- X TRAVEL(REXIT(HERE)+1)=214
- XC !CHANGE EXIT STATUS.
- X RETURN
- XC
- XC V93-- UNLOCK
- XC
- X24000 IF((PRSO.NE.GRATE).OR.(HERE.NE.MGRAT))
- X & GO TO 23100
- X IF(PRSI.EQ.KEYS) GO TO 24200
- XC !GOT KEYS?
- X CALL RSPSUB(465,ODI2)
- XC !NO, JOKE.
- X RETURN
- XC
- X24200 GRUNLF=.TRUE.
- XC !UNLOCK GRATE.
- X CALL RSPEAK(217)
- X TRAVEL(REXIT(HERE)+1)=217
- XC !CHANGE EXIT STATUS.
- X RETURN
- XC
- XC V94-- DIAGNOSE.
- XC
- X25000 I=FIGHTS(WINNER,.FALSE.)
- XC !GET FIGHTS STRENGTH.
- X J=ASTREN(WINNER)
- XC !GET HEALTH.
- X K=MIN0(I+J,4)
- XC !GET STATE.
- X IF(.NOT.CFLAG(CEVCUR)) J=0
- XC !IF NO WOUNDS.
- X L=MIN0(4,IABS(J))
- XC !SCALE.
- X CALL RSPEAK(473+L)
- XC !DESCRIBE HEALTH.
- X I=(30*(-J-1))+CTICK(CEVCUR)
- XC !COMPUTE WAIT.
- XC
- X IF(J.NE.0) WRITE(OUTCH,25100) I
- X25100 FORMAT(' You will be cured after ',I3,' moves.')
- XC
- X CALL RSPEAK(478+K)
- XC !HOW MUCH MORE?
- X IF(DEATHS.NE.0) CALL RSPEAK(482+DEATHS)
- XC !HOW MANY DEATHS?
- X RETURN
- X`0C
- XC SVERBS, PAGE 7
- XC
- XC V95-- INCANT
- XC
- X26000 DO 26100 I=1,6
- XC !SET UP PARSE.
- X PP1(I)=' '
- X PP2(I)=' '
- X26100 CONTINUE
- X WP=1
- XC !WORD POINTER.
- X CP=1
- XC !CHAR POINTER.
- X IF(PRSCON.LE.1) GO TO 26300
- X DO 26200 I=PRSCON,INLNT
- XC !PARSE INPUT
- X IF(INBUF(I).EQ.',') GO TO 26300
- XC !END OF PHRASE?
- X IF(INBUF(I).NE.' ') GO TO 26150
- XC !SPACE?
- X IF(CP.NE.1) WP=WP+1
- X CP=1
- X GO TO 26200
- X26150 IF(WP.EQ.1) PP1(CP)=INBUF(I)
- XC !STUFF INTO HOLDER.
- X IF(WP.EQ.2) PP2(CP)=INBUF(I)
- X CP=MIN0(CP+1,6)
- X26200 CONTINUE
- XC
- X26300 PRSCON=1
- XC !KILL REST OF LINE.
- X IF(PP1(1).NE.' ') GO TO 26400
- XC !ANY INPUT?
- X CALL RSPEAK(856)
- XC !NO, HO HUM.
- X RETURN
- XC
- X26400 CALL ENCRYP(PP1,CH)
- XC !COMPUTE RESPONSE.
- X IF(PP2(1).NE.' ') GO TO 26600
- XC !TWO PHRASES?
- XC
- X IF(SPELLF) GO TO 26550
- XC !HE'S TRYING TO LEARN.
- X IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 26575
- X SPELLF=.TRUE.
- XC !TELL HIM.
- X TELFLG=.TRUE.
- X WRITE(OUTCH,26510) PP1,CH
- X26510 FORMAT(' A hollow voice replies: '',6A1,1X,6A1,''.')
- XC
- X RETURN
- XC
- X26550 CALL RSPEAK(857)
- XC !HE'S GOT ONE ALREADY.
- X RETURN
- XC
- X26575 CALL RSPEAK(858)
- XC !HE'S NOT IN ENDGAME.
- X RETURN
- XC
- X26600 IF(and(RFLAG(TSTRS),RSEEN).NE.0) GO TO 26800
- X DO 26700 I=1,6
- X IF(PP2(I).NE.CH(I)) GO TO 26575
- XC !WRONG.
- X26700 CONTINUE
- X SPELLF=.TRUE.
- XC !IT WORKS.
- X CALL RSPEAK(859)
- X CTICK(CEVSTE)=1
- XC !FORCE START.
- X RETURN
- XC
- X26800 CALL RSPEAK(855)
- XC !TOO LATE.
- X RETURN
- XC SVERBS, PAGE 8
- XC
- XC V96-- ANSWER
- XC
- X27000 IF((PRSCON.GT.1).AND.
- X & (HERE.EQ.FDOOR).AND.INQSTF)
- X & GO TO 27100
- X CALL RSPEAK(799)
- XC !NO ONE LISTENS.
- X PRSCON=1
- X RETURN
- XC
- X27100 K=1
- XC !POINTER INTO ANSSTR.
- X DO 27300 J=1,28,2
- XC !CHECK ANSWERS.
- X NEWK=K+ANSWER(J+1)
- XC !COMPUTE NEXT K.
- X IF(QUESNO.NE.ANSWER(J)) GO TO 27300
- XC !ONLY CHECK PROPER ANS.
- X I=PRSCON-1
- XC !SCAN ANSWER.
- X DO 27200 L=K,NEWK-1
- X27150 I=I+1
- XC !SKIP INPUT BLANKS.
- X IF(I.GT.INLNT) GO TO 27300
- XC !END OF INPUT? LOSE.
- X IF(INBUF(I).EQ.' ') GO TO 27150
- X IF(INBUF(I).NE.ANSSTR(L)) GO TO 27300
- X27200 CONTINUE
- X GO TO 27500
- XC !RIGHT ANSWER.
- X27300 K=NEWK
- XC
- X PRSCON=1
- XC !KILL REST OF LINE.
- X NQATT=NQATT+1
- XC !WRONG, CRETIN.
- X IF(NQATT.GE.5) GO TO 27400
- XC !TOO MANY WRONG?
- X CALL RSPEAK(800+NQATT)
- XC !NO, TRY AGAIN.
- X RETURN
- XC
- X27400 CALL RSPEAK(826)
- XC !ALL OVER.
- X CFLAG(CEVINQ)=.FALSE.
- XC !LOSE.
- X RETURN
- XC
- X27500 PRSCON=1
- XC !KILL REST OF LINE.
- X CORRCT=CORRCT+1
- XC !GOT IT RIGHT.
- X CALL RSPEAK(800)
- XC !HOORAY.
- X IF(CORRCT.GE.3) GO TO 27600
- XC !WON TOTALLY?
- X CTICK(CEVINQ)=2
- XC !NO, START AGAIN.
- X QUESNO=MOD(QUESNO+3,8)
- X NQATT=0
- X CALL RSPEAK(769)
- XC !ASK NEXT QUESTION.
- X CALL RSPEAK(770+QUESNO)
- X RETURN
- XC
- X27600 CALL RSPEAK(827)
- XC !QUIZ OVER,
- X CFLAG(CEVINQ)=.FALSE.
- X OFLAG2(QDOOR)=or(OFLAG2(QDOOR),OPENBT)
- X RETURN
- XC
- X END
- $ CALL UNPACK [.SRC]SVERBS.FOR;1 2054834882
- $ create 'f'
- XC VAPPLI- MAIN VERB PROCESSING ROUTINE
- 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 VAPPLI(RI)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL LIT,OBJACT
- X LOGICAL QEMPTY,RMDESC,CLOCKD
- X LOGICAL QOPEN,EDIBLE,DRKBLE
- X LOGICAL TAKE,PUT,DROP,WALK
- X LOGICAL QHERE,SVERBS,FINDXT,OAPPLI,F
- X
- X INCLUDE 'PARSER.LIB'
- X INCLUDE 'GAMESTATE.LIB'
- X INCLUDE 'STATE.LIB'
- XC
- X COMMON /STAR/ MBASE,STRBIT
- 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 'ADVERS.LIB'
- X INCLUDE 'VERBS.LIB'
- XC
- XC FUNCTIONS AND DATA
- XC
- X QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
- X EDIBLE(R)=and(OFLAG1(R),FOODBT).NE.0
- X DRKBLE(R)=and(OFLAG1(R),DRNKBT).NE.0
- X DATA MXNOP/39/,MXSMP/99/
- X`0C
- XC VAPPLI, PAGE 2
- XC
- X VAPPLI=.TRUE.
- XC !ASSUME WINS.
- XC
- X IF(PRSO.GT.220) GO TO 5
- XC
- X IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
- XC !SET UP DESCRIPTORS.
- X5 IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
- X AV=AVEHIC(WINNER)
- X RMK=372+RND(6)
- XC !REMARK FOR HACK-HACKS.
- XC
- X IF(RI.EQ.0) GO TO 10
- XC !ZERO IS FALSE.
- X IF(RI.LE.MXNOP) RETURN
- XC !NOP?
- X IF(RI.LE.MXSMP) GO TO 100
- XC !SIMPLE VERB?
- X GO TO (18000,20000,
- X & 22000,23000,24000,25000,26000,27000,28000,29000,30000,
- X & 31000,32000,33000,34000,35000,36000, 38000,39000,40000,
- X & 41000,42000,43000,44000,45000,46000,47000,48000,49000,50000,
- X & 51000,52000,53000, 55000,56000, 58000,59000,60000,
- X & 63000,64000,65000,66000, 68000,69000,70000,
- X & 71000,72000,73000,74000, 77000,78000,
- X & 80000,81000,82000,83000,84000,85000,86000,87000,88000),
- X &(RI-MXSMP)
- X CALL BUG(7,RI)
- XC
- XC ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE.
- XC
- X10 VAPPLI=.FALSE.
- XC !LOSE.
- X RETURN
- XC
- XC SIMPLE VERBS ARE HANDLED EXTERNALLY.
- XC
- X100 VAPPLI=SVERBS(RI)
- X RETURN
- X`0C
- XC VAPPLI, PAGE 3
- XC
- XC V100-- READ. OUR FIRST REAL VERB.
- XC
- X18000 IF(LIT(HERE)) GO TO 18100
- XC !ROOM LIT?
- X CALL RSPEAK(356)
- XC !NO, CANT READ.
- X RETURN
- XC
- X18100 IF(PRSI.EQ.0) GO TO 18200
- XC !READ THROUGH OBJ?
- X IF(and(OFLAG1(PRSI),TRANBT).NE.0) GO TO 18200
- X CALL RSPSUB(357,ODI2)
- XC !NOT TRANSPARENT.
- X RETURN
- XC
- X18200 IF(and(OFLAG1(PRSO),READBT).NE.0) GO TO 18300
- X CALL RSPSUB(358,ODO2)
- XC !NOT READABLE.
- X RETURN
- XC
- X18300 IF(.NOT.OBJACT(X)) CALL RSPEAK(OREAD(PRSO))
- X RETURN
- XC
- XC V101-- MELT. UNLESS OBJECT HANDLES, JOKE.
- XC
- X20000 IF(.NOT.OBJACT(X)) CALL RSPSUB(361,ODO2)
- X RETURN
- XC
- XC V102-- INFLATE. WORKS ONLY WITH BOATS.
- XC
- X22000 IF(.NOT.OBJACT(X)) CALL RSPEAK(368)
- XC !OBJ HANDLE?
- X RETURN
- XC
- XC V103-- DEFLATE.
- XC
- X23000 IF(.NOT.OBJACT(X)) CALL RSPEAK(369)
- XC !OBJ HANDLE?
- X RETURN
- X`0C
- XC VAPPLI, PAGE 4
- XC
- XC V104-- ALARM. IF SLEEPING, WAKE HIM UP.
- XC
- X24000 IF(and(OFLAG2(PRSO),SLEPBT).EQ.0) GO TO 24100
- X VAPPLI=OBJACT(X)
- XC !SLEEPING, LET OBJ DO.
- X RETURN
- XC
- X24100 CALL RSPSUB(370,ODO2)
- XC !JOKE.
- X RETURN
- XC
- XC V105-- EXORCISE. OBJECTS HANDLE.
- XC
- X25000 F=OBJACT(X)
- XC !OBJECTS HANDLE.
- X RETURN
- XC
- XC V106-- PLUG. LET OBJECTS HANDLE.
- XC
- X26000 IF(.NOT.OBJACT(X)) CALL RSPEAK(371)
- X RETURN
- XC
- XC V107-- KICK. IF OBJECT IGNORES, JOKE.
- XC
- X27000 IF(.NOT.OBJACT(X)) CALL RSPSB2(378,ODO2,RMK)
- X RETURN
- XC
- XC V108-- WAVE. SAME.
- XC
- X28000 IF(.NOT.OBJACT(X)) CALL RSPSB2(379,ODO2,RMK)
- X RETURN
- XC
- XC V109,V110-- RAISE, LOWER. SAME.
- XC
- X29000 CONTINUE
- X30000 IF(.NOT.OBJACT(X)) CALL RSPSB2(380,ODO2,RMK)
- X RETURN
- XC
- XC V111-- RUB. SAME.
- XC
- X31000 IF(.NOT.OBJACT(X)) CALL RSPSB2(381,ODO2,RMK)
- X RETURN
- XC
- XC V112-- PUSH. SAME.
- XC
- X32000 IF(.NOT.OBJACT(X)) CALL RSPSB2(382,ODO2,RMK)
- X RETURN
- XC VAPPLI, PAGE 5
- XC
- XC V113-- UNTIE. IF OBJECT IGNORES, JOKE.
- XC
- X33000 IF(OBJACT(X)) RETURN
- XC !OBJECT HANDLE?
- X I=383
- XC !NO, NOT TIED.
- X IF(and(OFLAG2(PRSO),TIEBT).EQ.0) I=384
- X CALL RSPEAK(I)
- X RETURN
- XC
- XC V114-- TIE. NEVER REALLY WORKS.
- XC
- X34000 IF(and(OFLAG2(PRSO),TIEBT).NE.0) GO TO 34100
- X CALL RSPEAK(385)
- XC !NOT TIEABLE.
- X RETURN
- XC
- X34100 IF(.NOT.OBJACT(X)) CALL RSPSUB(386,ODO2)
- XC !JOKE.
- X RETURN
- XC
- XC V115-- TIE UP. NEVER REALLY WORKS.
- XC
- X35000 IF(and(OFLAG2(PRSI),TIEBT).NE.0) GO TO 35100
- X CALL RSPSUB(387,ODO2)
- XC !NOT TIEABLE.
- X RETURN
- XC
- X35100 I=388
- XC !ASSUME VILLAIN.
- X IF(and(OFLAG2(PRSO),VILLBT).EQ.0) I=389
- X CALL RSPSUB(I,ODO2)
- XC !JOKE.
- X RETURN
- XC
- XC V116-- TURN. OBJECT MUST HANDLE.
- XC
- X36000 IF(and(OFLAG1(PRSO),TURNBT).NE.0) GO TO 36100
- X CALL RSPEAK(390)
- XC !NOT TURNABLE.
- X RETURN
- XC
- X36100 IF(and(OFLAG1(PRSI),TOOLBT).NE.0) GO TO 36200
- X CALL RSPSUB(391,ODI2)
- XC !NOT A TOOL.
- X RETURN
- XC
- X36200 VAPPLI=OBJACT(X)
- XC !LET OBJECT HANDLE.
- X RETURN
- XC
- XC V117-- BREATHE. BECOMES INFLATE WITH LUNGS.
- XC
- X38000 PRSA=INFLAW
- X PRSI=LUNGS
- X GO TO 22000
- XC !HANDLE LIKE INFLATE.
- XC
- XC V118-- KNOCK. MOSTLY JOKE.
- XC
- X39000 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X I=394
- XC !JOKE FOR DOOR.
- X IF(and(OFLAG1(PRSO),DOORBT).EQ.0) I=395
- X CALL RSPSUB(I,ODO2)
- XC !JOKE FOR NONDOORS TOO.
- X RETURN
- XC
- XC V119-- LOOK.
- XC
- X40000 IF(PRSO.NE.0) GO TO 41500
- XC !SOMETHING TO LOOK AT?
- X VAPPLI=RMDESC(3)
- XC !HANDLED BY RMDESC.
- X RETURN
- XC
- XC V120-- EXAMINE.
- XC
- X41000 IF(PRSO.NE.0) GO TO 41500
- XC !SOMETHING TO EXAMINE?
- X VAPPLI=RMDESC(0)
- XC !HANDLED BY RMDESC.
- X RETURN
- XC
- X41500 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X I=OREAD(PRSO)
- XC !GET READING MATERIAL.
- X IF(I.NE.0) CALL RSPEAK(I)
- XC !OUTPUT IF THERE,
- X IF(I.EQ.0) CALL RSPSUB(429,ODO2)
- XC !OTHERWISE DEFAULT.
- X PRSA=FOOW
- XC !DEFUSE ROOM PROCESSORS.
- X RETURN
- XC
- XC V121-- SHAKE. IF HOLLOW OBJECT, SOME ACTION.
- XC
- X42000 IF(OBJACT(X)) RETURN
- XC !OBJECT HANDLE?
- X IF(and(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 42100
- X CALL RSPEAK(371)
- XC !JOKE FOR VILLAINS.
- X RETURN
- XC
- X42100 IF(QEMPTY(PRSO).OR.(and(OFLAG1(PRSO),TAKEBT).EQ.0))
- X & GO TO 10
- X IF(QOPEN(PRSO)) GO TO 42300
- XC !OPEN? SPILL.
- X CALL RSPSUB(396,ODO2)
- XC !NO, DESCRIBE NOISE.
- X RETURN
- XC
- X42300 CALL RSPSUB(397,ODO2)
- XC !SPILL THE WORKS.
- X DO 42500 I=1,OLNT
- XC !SPILL CONTENTS.
- X IF(OCAN(I).NE.PRSO) GO TO 42500
- XC !INSIDE?
- X OFLAG2(I)=or(OFLAG2(I),TCHBT)
- X IF(AV.EQ.0) GO TO 42400
- XC !IN VEHICLE?
- X CALL NEWSTA(I,0,0,AV,0)
- XC !YES, SPILL IN THERE.
- X GO TO 42500
- XC
- X42400 CALL NEWSTA(I,0,HERE,0,0)
- XC !NO, SPILL ON FLOOR,
- X IF(I.EQ.WATER) CALL NEWSTA(I,133,0,0,0)
- XC !BUT WATER DISAPPEARS.
- X42500 CONTINUE
- X RETURN
- XC
- XC V122-- MOVE. MOSTLY JOKES.
- XC
- X43000 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X I=398
- XC !ASSUME NOT HERE.
- X IF(QHERE(PRSO,HERE)) I=399
- X CALL RSPSUB(I,ODO2)
- XC !JOKE.
- X RETURN
- X`0C
- XC VAPPLI, PAGE 6
- XC
- XC V123-- TURN ON.
- XC
- X44000 F=LIT(HERE)
- XC !RECORD IF LIT.
- X IF(OBJACT(X)) GO TO 44300
- XC !OBJ HANDLE?
- X IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND.
- X & (OADV(PRSO).EQ.WINNER)) GO TO 44100
- X CALL RSPEAK(400)
- XC !CANT DO IT.
- X RETURN
- XC
- X44100 IF(and(OFLAG1(PRSO),ONBT).EQ.0) GO TO 44200
- X CALL RSPEAK(401)
- XC !ALREADY ON.
- X RETURN
- XC
- X44200 OFLAG1(PRSO)=or(OFLAG1(PRSO),ONBT)
- X CALL RSPSUB(404,ODO2)
- X44300 IF(.NOT.F .AND.LIT(HERE)) F=RMDESC(0)
- XC !ROOM NEWLY LIT.
- X RETURN
- XC
- XC V124-- TURN OFF.
- XC
- X45000 IF(OBJACT(X)) GO TO 45300
- XC !OBJ HANDLE?
- X IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND.
- X & (OADV(PRSO).EQ.WINNER)) GO TO 45100
- X CALL RSPEAK(402)
- XC !CANT DO IT.
- X RETURN
- XC
- X45100 IF(and(OFLAG1(PRSO),ONBT).NE.0) GO TO 45200
- X CALL RSPEAK(403)
- XC !ALREADY OFF.
- X RETURN
- XC
- X45200 OFLAG1(PRSO)=and(OFLAG1(PRSO), not(ONBT))
- X CALL RSPSUB(405,ODO2)
- X45300 IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
- XC !MAY BE DARK.
- X RETURN
- XC
- XC V125-- OPEN. A FINE MESS.
- XC
- X46000 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 46100
- X46050 CALL RSPSUB(407,ODO2)
- XC !NOT OPENABLE.
- X RETURN
- XC
- X46100 IF(OCAPAC(PRSO).NE.0) GO TO 46200
- X CALL RSPSUB(408,ODO2)
- XC !NOT OPENABLE.
- X RETURN
- XC
- X46200 IF(.NOT.QOPEN(PRSO)) GO TO 46225
- X CALL RSPEAK(412)
- XC !ALREADY OPEN.
- X RETURN
- XC
- X46225 OFLAG2(PRSO)=or(OFLAG2(PRSO),OPENBT)
- X IF((and(OFLAG1(PRSO),TRANBT).NE.0).OR.QEMPTY(PRSO))
- X & GO TO 46300
- X CALL PRINCO(PRSO,410)
- XC !PRINT CONTENTS.
- X RETURN
- XC
- X46300 CALL RSPEAK(409)
- XC !DONE
- X RETURN
- XC
- XC V126-- CLOSE.
- XC
- X47000 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X IF(and(OFLAG1(PRSO),CONTBT).EQ.0) GO TO 46050
- X IF(OCAPAC(PRSO).NE.0) GO TO 47100
- X CALL RSPSUB(411,ODO2)
- XC !NOT CLOSABLE.
- X RETURN
- XC
- X47100 IF(QOPEN(PRSO)) GO TO 47200
- XC !OPEN?
- X CALL RSPEAK(413)
- XC !NO, JOKE.
- X RETURN
- XC
- X47200 OFLAG2(PRSO)=and(OFLAG2(PRSO), not(OPENBT))
- X CALL RSPEAK(414)
- XC !DONE.
- X RETURN
- X`0C
- XC VAPPLI, PAGE 7
- XC
- XC V127-- FIND. BIG MEGILLA.
- XC
- X48000 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X I=415
- XC !DEFAULT CASE.
- X IF(QHERE(PRSO,HERE)) GO TO 48300
- XC !IN ROOM?
- X IF(OADV(PRSO).EQ.WINNER) GO TO 48200
- XC !ON WINNER?
- X J=OCAN(PRSO)
- XC !DOWN ONE LEVEL.
- X IF(J.EQ.0) GO TO 10
- X IF(((and(OFLAG1(J),TRANBT).EQ.0).AND.
- X & (.NOT.QOPEN(J).OR.(and(OFLAG1(J),(DOORBT+CONTBT)).EQ.0))))
- X & GO TO 10
- X I=417
- XC !ASSUME IN ROOM.
- X IF(QHERE(J,HERE)) GO TO 48100
- X IF(OADV(J).NE.WINNER) GO TO 10
- XC !NOT HERE OR ON PERSON.
- X I=418
- X48100 CALL RSPSUB(I,ODESC2(J))
- XC !DESCRIBE FINDINGS.
- X RETURN
- XC
- X48200 I=416
- X48300 CALL RSPSUB(I,ODO2)
- XC !DESCRIBE FINDINGS.
- X RETURN
- XC
- XC V128-- WAIT. RUN CLOCK DEMON.
- XC
- X49000 CALL RSPEAK(419)
- XC !TIME PASSES.
- X DO 49100 I=1,3
- X IF(CLOCKD(X)) RETURN
- X49100 CONTINUE
- X RETURN
- XC
- XC V129-- SPIN.
- XC V159-- TURN TO.
- XC
- X50000 CONTINUE
- X88000 IF(.NOT.OBJACT(X)) CALL RSPEAK(663)
- XC !IF NOT OBJ, JOKE.
- X RETURN
- XC
- XC V130-- BOARD. WORKS WITH VEHICLES.
- XC
- X51000 IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 51100
- X CALL RSPSUB(421,ODO2)
- XC !NOT VEHICLE, JOKE.
- X RETURN
- XC
- X51100 IF(QHERE(PRSO,HERE)) GO TO 51200
- XC !HERE?
- X CALL RSPSUB(420,ODO2)
- XC !NO, JOKE.
- X RETURN
- XC
- X51200 IF(AV.EQ.0) GO TO 51300
- XC !ALREADY GOT ONE?
- X CALL RSPSUB(422,ODO2)
- XC !YES, JOKE.
- X RETURN
- XC
- X51300 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X CALL RSPSUB(423,ODO2)
- XC !DESCRIBE.
- X AVEHIC(WINNER)=PRSO
- X IF(WINNER.NE.PLAYER) OCAN(AOBJ(WINNER))=PRSO
- X RETURN
- XC
- XC V131-- DISEMBARK.
- XC
- X52000 IF(AV.EQ.PRSO) GO TO 52100
- XC !FROM VEHICLE?
- X CALL RSPEAK(424)
- XC !NO, JOKE.
- X RETURN
- XC
- X52100 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X IF(and(RFLAG(HERE),RLAND).NE.0) GO TO 52200
- X CALL RSPEAK(425)
- XC !NOT ON LAND.
- X RETURN
- XC
- X52200 AVEHIC(WINNER)=0
- X CALL RSPEAK(426)
- X IF(WINNER.NE.PLAYER) CALL NEWSTA(AOBJ(WINNER),0,HERE,0,0)
- X RETURN
- XC
- XC V132-- TAKE. HANDLED EXTERNALLY.
- XC
- X53000 VAPPLI=TAKE(.TRUE.)
- X RETURN
- XC
- XC V133-- INVENTORY. PROCESSED EXTERNALLY.
- XC
- X55000 CALL INVENT(WINNER)
- X RETURN
- XC VAPPLI, PAGE 8
- XC
- XC V134-- FILL. STRANGE DOINGS WITH WATER.
- XC
- X56000 IF(PRSI.NE.0) GO TO 56050
- XC !ANY OBJ SPECIFIED?
- X IF(and(RFLAG(HERE),(RWATER+RFILL)).NE.0) GO TO 56025
- X CALL RSPEAK(516)
- XC !NOTHING TO FILL WITH.
- X PRSWON=.FALSE.
- XC !YOU LOSE.
- X RETURN
- XC
- X56025 PRSI=GWATE
- XC !USE GLOBAL WATER.
- X56050 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X IF((PRSI.NE.GWATE).AND.(PRSI.NE.WATER))
- X & CALL RSPSB2(444,ODI2,ODO2)
- X RETURN
- XC
- XC V135,V136-- EAT/DRINK
- XC
- X58000 CONTINUE
- X59000 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X IF(PRSO.EQ.GWATE) GO TO 59500
- XC !DRINK GLOBAL WATER?
- X IF(.NOT.EDIBLE(PRSO)) GO TO 59400
- XC !EDIBLE?
- X IF(OADV(PRSO).EQ.WINNER) GO TO 59200
- XC !YES, ON WINNER?
- X59100 CALL RSPSUB(454,ODO2)
- XC !NOT ACCESSIBLE.
- X RETURN
- XC
- X59200 IF(PRSA.EQ.DRINKW) GO TO 59300
- XC !DRINK FOOD?
- X CALL NEWSTA(PRSO,455,0,0,0)
- XC !NO, IT DISAPPEARS.
- X RETURN
- XC
- X59300 CALL RSPEAK(456)
- XC !YES, JOKE.
- X RETURN
- XC
- X59400 IF(.NOT.DRKBLE(PRSO)) GO TO 59600
- XC !DRINKABLE?
- X IF(OCAN(PRSO).EQ.0) GO TO 59100
- XC !YES, IN SOMETHING?
- X IF(OADV(OCAN(PRSO)).NE.WINNER) GO TO 59100
- X IF(QOPEN(OCAN(PRSO))) GO TO 59500
- XC !CONT OPEN?
- X CALL RSPEAK(457)
- XC !NO, JOKE.
- X RETURN
- XC
- X59500 CALL NEWSTA(PRSO,458,0,0,0)
- XC !GONE.
- X RETURN
- XC
- X59600 CALL RSPSUB(453,ODO2)
- XC !NOT FOOD OR DRINK.
- X RETURN
- XC
- XC V137-- BURN. COMPLICATED.
- XC
- X60000 IF(and(OFLAG1(PRSI),(FLAMBT+LITEBT+ONBT)).NE.
- X & (FLAMBT+LITEBT+ONBT)) GO TO 60400
- X IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X IF(OCAN(PRSO).NE.RECEP) GO TO 60050
- XC !BALLOON?
- X IF(OAPPLI(OACTIO(BALLO),0)) RETURN
- XC !DID IT HANDLE?
- X60050 IF(and(OFLAG1(PRSO),BURNBT).EQ.0) GO TO 60300
- X IF(OADV(PRSO).NE.WINNER) GO TO 60100
- XC !CARRYING IT?
- X CALL RSPSUB(459,ODO2)
- X CALL JIGSUP(460)
- X RETURN
- XC
- X60100 J=OCAN(PRSO)
- XC !GET CONTAINER.
- X IF(QHERE(PRSO,HERE).OR. ((AV.NE.0).AND.(J.EQ.AV)))
- X & GO TO 60200
- X IF(J.EQ.0) GO TO 60150
- XC !INSIDE?
- X IF(.NOT.QOPEN(J)) GO TO 60150
- XC !OPEN?
- X IF(QHERE(J,HERE).OR.((AV.NE.0).AND.(OCAN(J).EQ.AV)))
- X & GO TO 60200
- X60150 CALL RSPEAK(461)
- XC !CANT REACH IT.
- X RETURN
- XC
- X60200 CALL RSPSUB(462,ODO2)
- XC !BURN IT.
- X CALL NEWSTA(PRSO,0,0,0,0)
- X RETURN
- XC
- X60300 CALL RSPSUB(463,ODO2)
- XC !CANT BURN IT.
- X RETURN
- XC
- X60400 CALL RSPSUB(301,ODI2)
- XC !CANT BURN IT WITH THAT.
- X RETURN
- X`0C
- XC VAPPLI, PAGE 9
- XC
- XC V138-- MUNG. GO TO COMMON ATTACK CODE.
- XC
- X63000 I=466
- XC !CHOOSE PHRASE.
- X IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66100
- X IF(.NOT.OBJACT(X)) CALL RSPSB2(466,ODO2,RMK)
- X RETURN
- XC
- XC V139-- KILL. GO TO COMMON ATTACK CODE.
- XC
- X64000 I=467
- XC !CHOOSE PHRASE.
- X GO TO 66100
- XC
- XC V140-- SWING. INVERT OBJECTS, FALL THRU TO ATTACK.
- XC
- X65000 J=PRSO
- XC !INVERT.
- X PRSO=PRSI
- X PRSI=J
- X J=ODO2
- X ODO2=ODI2
- X ODI2=J
- X PRSA=ATTACW
- XC !FOR OBJACT.
- XC
- XC V141-- ATTACK. FALL THRU TO ATTACK CODE.
- XC
- X66000 I=468
- XC
- XC COMMON MUNG/ATTACK/SWING/KILL CODE.
- XC
- X66100 IF(PRSO.NE.0) GO TO 66200
- XC !ANYTHING?
- X CALL RSPEAK(469)
- XC !NO, JOKE.
- X RETURN
- XC
- X66200 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66300
- X IF(and(OFLAG1(PRSO),VICTBT).EQ.0)
- X & CALL RSPSUB(470,ODO2)
- X RETURN
- XC
- X66300 J=471
- XC !ASSUME NO WEAPON.
- X IF(PRSI.EQ.0) GO TO 66500
- X IF(and(OFLAG2(PRSI),WEAPBT).EQ.0) GO TO 66400
- X MELEE=1
- XC !ASSUME SWORD.
- X IF(PRSI.NE.SWORD) MELEE=2
- XC !MUST BE KNIFE.
- X I=BLOW(PLAYER,PRSO,MELEE,.TRUE.,0)
- XC !STRIKE BLOW.
- X RETURN
- XC
- X66400 J=472
- XC !NOT A WEAPON.
- X66500 CALL RSPSB2(I,ODO2,J)
- XC !JOKE.
- X RETURN
- X`0C
- XC VAPPLI, PAGE 10
- XC
- XC V142-- WALK. PROCESSED EXTERNALLY.
- XC
- X68000 VAPPLI=WALK(X)
- X RETURN
- XC
- XC V143-- TELL. PROCESSED IN GAME.
- XC
- X69000 CALL RSPEAK(603)
- X RETURN
- XC
- XC V144-- PUT. PROCESSED EXTERNALLY.
- XC
- X70000 VAPPLI=PUT(.TRUE.)
- X RETURN
- XC
- XC V145,V146,V147,V148-- DROP/GIVE/POUR/THROW
- XC
- X71000 CONTINUE
- X72000 CONTINUE
- X73000 CONTINUE
- X74000 VAPPLI=DROP(.FALSE.)
- X RETURN
- XC
- XC V149-- SAVE
- XC
- X77000 IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 77100
- X CALL RSPEAK(828)
- XC !NO SAVES IN ENDGAME.
- X RETURN
- XC
- X77100 CALL SAVEGM
- X RETURN
- XC
- XC V150-- RESTORE
- XC
- X78000 IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 78100
- X CALL RSPEAK(829)
- XC !NO RESTORES IN ENDGAME.
- X RETURN
- XC
- X78100 CALL RSTRGM
- X RETURN
- X`0C
- XC VAPPLI, PAGE 11
- XC
- XC V151-- HELLO
- XC
- X80000 IF(PRSO.NE.0) GO TO 80100
- XC !ANY OBJ?
- X CALL RSPEAK(346+RND(4))
- XC !NO, VANILLA HELLO.
- X RETURN
- XC
- X80100 IF(PRSO.NE.AVIAT) GO TO 80200
- XC !HELLO AVIATOR?
- X CALL RSPEAK(350)
- XC !NOTHING HAPPENS.
- X RETURN
- XC
- X80200 IF(PRSO.NE.SAILO) GO TO 80300
- XC !HELLO SAILOR?
- X HS=HS+1
- XC !COUNT.
- X I=351
- XC !GIVE NORMAL OR
- X IF(MOD(HS,10).EQ.0) I=352
- XC !RANDOM MESSAGE.
- X IF(MOD(HS,20).EQ.0) I=353
- X CALL RSPEAK(I)
- XC !SPEAK UP.
- X RETURN
- XC
- X80300 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X I=354
- XC !ASSUME VILLAIN.
- X IF(and(OFLAG2(PRSO),(VILLBT+ACTRBT)).EQ.0) I=355
- X CALL RSPSUB(I,ODO2)
- XC !HELLO THERE
- XC !
- X RETURN
- XC
- XC V152-- LOOK INTO
- XC
- X81000 IF(OBJACT(X)) RETURN
- XC !OBJ HANDLE?
- X IF(and(OFLAG1(PRSO),DOORBT).EQ.0) GO TO 81300
- X IF(.NOT.QOPEN(PRSO)) GO TO 81200
- XC !OPEN?
- X CALL RSPSUB(628,ODO2)
- XC !OPEN DOOR- UNINTERESTING.
- X RETURN
- XC
- X81200 CALL RSPSUB(525,ODO2)
- XC !CLOSED DOOR- CANT SEE.
- X RETURN
- XC
- X81300 IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 81400
- X IF(QOPEN(PRSO).OR.(and(OFLAG1(PRSO),TRANBT).NE.0))
- X & GO TO 81400
- X IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 81200
- X CALL RSPSUB(630,ODO2)
- XC !CANT LOOK INSIDE.
- X RETURN
- XC
- X81400 IF(QEMPTY(PRSO)) GO TO 81500
- XC !VEH OR SEE IN. EMPTY?
- X CALL PRINCO(PRSO,573)
- XC !NO, LIST CONTENTS.
- X RETURN
- XC
- X81500 CALL RSPSUB(629,ODO2)
- XC !EMPTY.
- X RETURN
- XC
- XC V153-- LOOK UNDER
- XC
- X82000 IF(.NOT.OBJACT(X)) CALL RSPEAK(631)
- XC !OBJECT HANDLE?
- X RETURN
- X`0C
- XC VAPPLI, PAGE 12
- XC
- XC V154-- PUMP
- XC
- X83000 IF((OROOM(PUMP).EQ.HERE).OR.(OADV(PUMP).EQ.WINNER))
- X & GO TO 83100
- X CALL RSPEAK(632)
- XC !NO.
- X RETURN
- XC
- X83100 PRSI=PUMP
- XC !BECOMES INFLATE
- X PRSA=INFLAW
- XC !X WITH PUMP.
- X GO TO 22000
- XC !DONE.
- XC
- XC V155-- WIND
- XC
- X84000 IF(.NOT.OBJACT(X)) CALL RSPSUB(634,ODO2)
- XC !OBJ HANDLE?
- X RETURN
- XC
- XC V156-- CLIMB
- XC V157-- CLIMB UP
- +-+-+-+-+-+-+-+- END OF PART 29 +-+-+-+-+-+-+-+-
-