C VAPPLI- MAIN VERB PROCESSING ROUTINE 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 VAPPLI(RI) IMPLICIT INTEGER (A-Z) LOGICAL LIT,OBJACT LOGICAL QEMPTY,RMDESC,CLOCKD LOGICAL QOPEN,EDIBLE,DRKBLE LOGICAL TAKE,PUT,DROP,WALK LOGICAL QHERE,SVERBS,FINDXT,OAPPLI,F #include "parser.h" #include "gamestate.h" #include "state.h" C COMMON /STAR/ MBASE,STRBIT #include "rooms.h" #include "rflag.h" #include "rindex.h" #include "xsrch.h" #include "objects.h" #include "oflags.h" #include "oindex.h" #include "advers.h" #include "verbs.h" C C FUNCTIONS AND DATA C QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0 EDIBLE(R)=and(OFLAG1(R),FOODBT).NE.0 DRKBLE(R)=and(OFLAG1(R),DRNKBT).NE.0 DATA MXNOP/39/,MXSMP/99/ C VAPPLI, PAGE 2 C VAPPLI=.TRUE. C !ASSUME WINS. C IF(PRSO.GT.220) GO TO 5 C IF(PRSO.NE.0) ODO2=ODESC2(PRSO) C !SET UP DESCRIPTORS. 5 IF(PRSI.NE.0) ODI2=ODESC2(PRSI) AV=AVEHIC(WINNER) RMK=372+RND(6) C !REMARK FOR HACK-HACKS. C IF(RI.EQ.0) GO TO 10 C !ZERO IS FALSE. IF(RI.LE.MXNOP) RETURN C !NOP? IF(RI.LE.MXSMP) GO TO 100 C !SIMPLE VERB? GO TO (18000,20000, & 22000,23000,24000,25000,26000,27000,28000,29000,30000, & 31000,32000,33000,34000,35000,36000, 38000,39000,40000, & 41000,42000,43000,44000,45000,46000,47000,48000,49000,50000, & 51000,52000,53000, 55000,56000, 58000,59000,60000, & 63000,64000,65000,66000, 68000,69000,70000, & 71000,72000,73000,74000, 77000,78000, & 80000,81000,82000,83000,84000,85000,86000,87000,88000), & (RI-MXSMP) CALL BUG(7,RI) C C ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE. C 10 VAPPLI=.FALSE. C !LOSE. RETURN C C SIMPLE VERBS ARE HANDLED EXTERNALLY. C 100 VAPPLI=SVERBS(RI) RETURN C VAPPLI, PAGE 3 C C V100-- READ. OUR FIRST REAL VERB. C 18000 IF(LIT(HERE)) GO TO 18100 C !ROOM LIT? CALL RSPEAK(356) C !NO, CANT READ. RETURN C 18100 IF(PRSI.EQ.0) GO TO 18200 C !READ THROUGH OBJ? IF(and(OFLAG1(PRSI),TRANBT).NE.0) GO TO 18200 CALL RSPSUB(357,ODI2) C !NOT TRANSPARENT. RETURN C 18200 IF(and(OFLAG1(PRSO),READBT).NE.0) GO TO 18300 CALL RSPSUB(358,ODO2) C !NOT READABLE. RETURN C 18300 IF(.NOT.OBJACT(X)) CALL RSPEAK(OREAD(PRSO)) RETURN C C V101-- MELT. UNLESS OBJECT HANDLES, JOKE. C 20000 IF(.NOT.OBJACT(X)) CALL RSPSUB(361,ODO2) RETURN C C V102-- INFLATE. WORKS ONLY WITH BOATS. C 22000 IF(.NOT.OBJACT(X)) CALL RSPEAK(368) C !OBJ HANDLE? RETURN C C V103-- DEFLATE. C 23000 IF(.NOT.OBJACT(X)) CALL RSPEAK(369) C !OBJ HANDLE? RETURN C VAPPLI, PAGE 4 C C V104-- ALARM. IF SLEEPING, WAKE HIM UP. C 24000 IF(and(OFLAG2(PRSO),SLEPBT).EQ.0) GO TO 24100 VAPPLI=OBJACT(X) C !SLEEPING, LET OBJ DO. RETURN C 24100 CALL RSPSUB(370,ODO2) C !JOKE. RETURN C C V105-- EXORCISE. OBJECTS HANDLE. C 25000 F=OBJACT(X) C !OBJECTS HANDLE. RETURN C C V106-- PLUG. LET OBJECTS HANDLE. C 26000 IF(.NOT.OBJACT(X)) CALL RSPEAK(371) RETURN C C V107-- KICK. IF OBJECT IGNORES, JOKE. C 27000 IF(.NOT.OBJACT(X)) CALL RSPSB2(378,ODO2,RMK) RETURN C C V108-- WAVE. SAME. C 28000 IF(.NOT.OBJACT(X)) CALL RSPSB2(379,ODO2,RMK) RETURN C C V109,V110-- RAISE, LOWER. SAME. C 29000 CONTINUE 30000 IF(.NOT.OBJACT(X)) CALL RSPSB2(380,ODO2,RMK) RETURN C C V111-- RUB. SAME. C 31000 IF(.NOT.OBJACT(X)) CALL RSPSB2(381,ODO2,RMK) RETURN C C V112-- PUSH. SAME. C 32000 IF(.NOT.OBJACT(X)) CALL RSPSB2(382,ODO2,RMK) RETURN C VAPPLI, PAGE 5 C C V113-- UNTIE. IF OBJECT IGNORES, JOKE. C 33000 IF(OBJACT(X)) RETURN C !OBJECT HANDLE? I=383 C !NO, NOT TIED. IF(and(OFLAG2(PRSO),TIEBT).EQ.0) I=384 CALL RSPEAK(I) RETURN C C V114-- TIE. NEVER REALLY WORKS. C 34000 IF(and(OFLAG2(PRSO),TIEBT).NE.0) GO TO 34100 CALL RSPEAK(385) C !NOT TIEABLE. RETURN C 34100 IF(.NOT.OBJACT(X)) CALL RSPSUB(386,ODO2) C !JOKE. RETURN C C V115-- TIE UP. NEVER REALLY WORKS. C 35000 IF(and(OFLAG2(PRSI),TIEBT).NE.0) GO TO 35100 CALL RSPSUB(387,ODO2) C !NOT TIEABLE. RETURN C 35100 I=388 C !ASSUME VILLAIN. IF(and(OFLAG2(PRSO),VILLBT).EQ.0) I=389 CALL RSPSUB(I,ODO2) C !JOKE. RETURN C C V116-- TURN. OBJECT MUST HANDLE. C 36000 IF(and(OFLAG1(PRSO),TURNBT).NE.0) GO TO 36100 CALL RSPEAK(390) C !NOT TURNABLE. RETURN C 36100 IF(and(OFLAG1(PRSI),TOOLBT).NE.0) GO TO 36200 CALL RSPSUB(391,ODI2) C !NOT A TOOL. RETURN C 36200 VAPPLI=OBJACT(X) C !LET OBJECT HANDLE. RETURN C C V117-- BREATHE. BECOMES INFLATE WITH LUNGS. C 38000 PRSA=INFLAW PRSI=LUNGS GO TO 22000 C !HANDLE LIKE INFLATE. C C V118-- KNOCK. MOSTLY JOKE. C 39000 IF(OBJACT(X)) RETURN C !OBJ HANDLE? I=394 C !JOKE FOR DOOR. IF(and(OFLAG1(PRSO),DOORBT).EQ.0) I=395 CALL RSPSUB(I,ODO2) C !JOKE FOR NONDOORS TOO. RETURN C C V119-- LOOK. C 40000 IF(PRSO.NE.0) GO TO 41500 C !SOMETHING TO LOOK AT? VAPPLI=RMDESC(3) C !HANDLED BY RMDESC. RETURN C C V120-- EXAMINE. C 41000 IF(PRSO.NE.0) GO TO 41500 C !SOMETHING TO EXAMINE? VAPPLI=RMDESC(0) C !HANDLED BY RMDESC. RETURN C 41500 IF(OBJACT(X)) RETURN C !OBJ HANDLE? I=OREAD(PRSO) C !GET READING MATERIAL. IF(I.NE.0) CALL RSPEAK(I) C !OUTPUT IF THERE, IF(I.EQ.0) CALL RSPSUB(429,ODO2) C !OTHERWISE DEFAULT. PRSA=FOOW C !DEFUSE ROOM PROCESSORS. RETURN C C V121-- SHAKE. IF HOLLOW OBJECT, SOME ACTION. C 42000 IF(OBJACT(X)) RETURN C !OBJECT HANDLE? IF(and(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 42100 CALL RSPEAK(371) C !JOKE FOR VILLAINS. RETURN C 42100 IF(QEMPTY(PRSO).OR.(and(OFLAG1(PRSO),TAKEBT).EQ.0)) & GO TO 10 IF(QOPEN(PRSO)) GO TO 42300 C !OPEN? SPILL. CALL RSPSUB(396,ODO2) C !NO, DESCRIBE NOISE. RETURN C 42300 CALL RSPSUB(397,ODO2) C !SPILL THE WORKS. DO 42500 I=1,OLNT C !SPILL CONTENTS. IF(OCAN(I).NE.PRSO) GO TO 42500 C !INSIDE? OFLAG2(I)=or(OFLAG2(I),TCHBT) IF(AV.EQ.0) GO TO 42400 C !IN VEHICLE? CALL NEWSTA(I,0,0,AV,0) C !YES, SPILL IN THERE. GO TO 42500 C 42400 CALL NEWSTA(I,0,HERE,0,0) C !NO, SPILL ON FLOOR, IF(I.EQ.WATER) CALL NEWSTA(I,133,0,0,0) C !BUT WATER DISAPPEARS. 42500 CONTINUE RETURN C C V122-- MOVE. MOSTLY JOKES. C 43000 IF(OBJACT(X)) RETURN C !OBJ HANDLE? I=398 C !ASSUME NOT HERE. IF(QHERE(PRSO,HERE)) I=399 CALL RSPSUB(I,ODO2) C !JOKE. RETURN C VAPPLI, PAGE 6 C C V123-- TURN ON. C 44000 F=LIT(HERE) C !RECORD IF LIT. IF(OBJACT(X)) GO TO 44300 C !OBJ HANDLE? IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND. & (OADV(PRSO).EQ.WINNER)) GO TO 44100 CALL RSPEAK(400) C !CANT DO IT. RETURN C 44100 IF(and(OFLAG1(PRSO),ONBT).EQ.0) GO TO 44200 CALL RSPEAK(401) C !ALREADY ON. RETURN C 44200 OFLAG1(PRSO)=or(OFLAG1(PRSO),ONBT) CALL RSPSUB(404,ODO2) 44300 IF(.NOT.F .AND.LIT(HERE)) F=RMDESC(0) C !ROOM NEWLY LIT. RETURN C C V124-- TURN OFF. C 45000 IF(OBJACT(X)) GO TO 45300 C !OBJ HANDLE? IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND. & (OADV(PRSO).EQ.WINNER)) GO TO 45100 CALL RSPEAK(402) C !CANT DO IT. RETURN C 45100 IF(and(OFLAG1(PRSO),ONBT).NE.0) GO TO 45200 CALL RSPEAK(403) C !ALREADY OFF. RETURN C 45200 OFLAG1(PRSO)=and(OFLAG1(PRSO), not(ONBT)) CALL RSPSUB(405,ODO2) 45300 IF(.NOT.LIT(HERE)) CALL RSPEAK(406) C !MAY BE DARK. RETURN C C V125-- OPEN. A FINE MESS. C 46000 IF(OBJACT(X)) RETURN C !OBJ HANDLE? IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 46100 46050 CALL RSPSUB(407,ODO2) C !NOT OPENABLE. RETURN C 46100 IF(OCAPAC(PRSO).NE.0) GO TO 46200 CALL RSPSUB(408,ODO2) C !NOT OPENABLE. RETURN C 46200 IF(.NOT.QOPEN(PRSO)) GO TO 46225 CALL RSPEAK(412) C !ALREADY OPEN. RETURN C 46225 OFLAG2(PRSO)=or(OFLAG2(PRSO),OPENBT) IF((and(OFLAG1(PRSO),TRANBT).NE.0).OR.QEMPTY(PRSO)) & GO TO 46300 CALL PRINCO(PRSO,410) C !PRINT CONTENTS. RETURN C 46300 CALL RSPEAK(409) C !DONE RETURN C C V126-- CLOSE. C 47000 IF(OBJACT(X)) RETURN C !OBJ HANDLE? IF(and(OFLAG1(PRSO),CONTBT).EQ.0) GO TO 46050 IF(OCAPAC(PRSO).NE.0) GO TO 47100 CALL RSPSUB(411,ODO2) C !NOT CLOSABLE. RETURN C 47100 IF(QOPEN(PRSO)) GO TO 47200 C !OPEN? CALL RSPEAK(413) C !NO, JOKE. RETURN C 47200 OFLAG2(PRSO)=and(OFLAG2(PRSO), not(OPENBT)) CALL RSPEAK(414) C !DONE. RETURN C VAPPLI, PAGE 7 C C V127-- FIND. BIG MEGILLA. C 48000 IF(OBJACT(X)) RETURN C !OBJ HANDLE? I=415 C !DEFAULT CASE. IF(QHERE(PRSO,HERE)) GO TO 48300 C !IN ROOM? IF(OADV(PRSO).EQ.WINNER) GO TO 48200 C !ON WINNER? J=OCAN(PRSO) C !DOWN ONE LEVEL. IF(J.EQ.0) GO TO 10 IF(((and(OFLAG1(J),TRANBT).EQ.0).AND. & (.NOT.QOPEN(J).OR.(and(OFLAG1(J),(DOORBT+CONTBT)).EQ.0)))) & GO TO 10 I=417 C !ASSUME IN ROOM. IF(QHERE(J,HERE)) GO TO 48100 IF(OADV(J).NE.WINNER) GO TO 10 C !NOT HERE OR ON PERSON. I=418 48100 CALL RSPSUB(I,ODESC2(J)) C !DESCRIBE FINDINGS. RETURN C 48200 I=416 48300 CALL RSPSUB(I,ODO2) C !DESCRIBE FINDINGS. RETURN C C V128-- WAIT. RUN CLOCK DEMON. C 49000 CALL RSPEAK(419) C !TIME PASSES. DO 49100 I=1,3 IF(CLOCKD(X)) RETURN 49100 CONTINUE RETURN C C V129-- SPIN. C V159-- TURN TO. C 50000 CONTINUE 88000 IF(.NOT.OBJACT(X)) CALL RSPEAK(663) C !IF NOT OBJ, JOKE. RETURN C C V130-- BOARD. WORKS WITH VEHICLES. C 51000 IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 51100 CALL RSPSUB(421,ODO2) C !NOT VEHICLE, JOKE. RETURN C 51100 IF(QHERE(PRSO,HERE)) GO TO 51200 C !HERE? CALL RSPSUB(420,ODO2) C !NO, JOKE. RETURN C 51200 IF(AV.EQ.0) GO TO 51300 C !ALREADY GOT ONE? CALL RSPSUB(422,ODO2) C !YES, JOKE. RETURN C 51300 IF(OBJACT(X)) RETURN C !OBJ HANDLE? CALL RSPSUB(423,ODO2) C !DESCRIBE. AVEHIC(WINNER)=PRSO IF(WINNER.NE.PLAYER) OCAN(AOBJ(WINNER))=PRSO RETURN C C V131-- DISEMBARK. C 52000 IF(AV.EQ.PRSO) GO TO 52100 C !FROM VEHICLE? CALL RSPEAK(424) C !NO, JOKE. RETURN C 52100 IF(OBJACT(X)) RETURN C !OBJ HANDLE? IF(and(RFLAG(HERE),RLAND).NE.0) GO TO 52200 CALL RSPEAK(425) C !NOT ON LAND. RETURN C 52200 AVEHIC(WINNER)=0 CALL RSPEAK(426) IF(WINNER.NE.PLAYER) CALL NEWSTA(AOBJ(WINNER),0,HERE,0,0) RETURN C C V132-- TAKE. HANDLED EXTERNALLY. C 53000 VAPPLI=TAKE(.TRUE.) RETURN C C V133-- INVENTORY. PROCESSED EXTERNALLY. C 55000 CALL INVENT(WINNER) RETURN C VAPPLI, PAGE 8 C C V134-- FILL. STRANGE DOINGS WITH WATER. C 56000 IF(PRSI.NE.0) GO TO 56050 C !ANY OBJ SPECIFIED? IF(and(RFLAG(HERE),(RWATER+RFILL)).NE.0) GO TO 56025 CALL RSPEAK(516) C !NOTHING TO FILL WITH. PRSWON=.FALSE. C !YOU LOSE. RETURN C 56025 PRSI=GWATE C !USE GLOBAL WATER. 56050 IF(OBJACT(X)) RETURN C !OBJ HANDLE? IF((PRSI.NE.GWATE).AND.(PRSI.NE.WATER)) & CALL RSPSB2(444,ODI2,ODO2) RETURN C C V135,V136-- EAT/DRINK C 58000 CONTINUE 59000 IF(OBJACT(X)) RETURN C !OBJ HANDLE? IF(PRSO.EQ.GWATE) GO TO 59500 C !DRINK GLOBAL WATER? IF(.NOT.EDIBLE(PRSO)) GO TO 59400 C !EDIBLE? IF(OADV(PRSO).EQ.WINNER) GO TO 59200 C !YES, ON WINNER? 59100 CALL RSPSUB(454,ODO2) C !NOT ACCESSIBLE. RETURN C 59200 IF(PRSA.EQ.DRINKW) GO TO 59300 C !DRINK FOOD? CALL NEWSTA(PRSO,455,0,0,0) C !NO, IT DISAPPEARS. RETURN C 59300 CALL RSPEAK(456) C !YES, JOKE. RETURN C 59400 IF(.NOT.DRKBLE(PRSO)) GO TO 59600 C !DRINKABLE? IF(OCAN(PRSO).EQ.0) GO TO 59100 C !YES, IN SOMETHING? IF(OADV(OCAN(PRSO)).NE.WINNER) GO TO 59100 IF(QOPEN(OCAN(PRSO))) GO TO 59500 C !CONT OPEN? CALL RSPEAK(457) C !NO, JOKE. RETURN C 59500 CALL NEWSTA(PRSO,458,0,0,0) C !GONE. RETURN C 59600 CALL RSPSUB(453,ODO2) C !NOT FOOD OR DRINK. RETURN C C V137-- BURN. COMPLICATED. C 60000 IF(and(OFLAG1(PRSI),(FLAMBT+LITEBT+ONBT)).NE. & (FLAMBT+LITEBT+ONBT)) GO TO 60400 IF(OBJACT(X)) RETURN C !OBJ HANDLE? IF(OCAN(PRSO).NE.RECEP) GO TO 60050 C !BALLOON? IF(OAPPLI(OACTIO(BALLO),0)) RETURN C !DID IT HANDLE? 60050 IF(and(OFLAG1(PRSO),BURNBT).EQ.0) GO TO 60300 IF(OADV(PRSO).NE.WINNER) GO TO 60100 C !CARRYING IT? CALL RSPSUB(459,ODO2) CALL JIGSUP(460) RETURN C 60100 J=OCAN(PRSO) C !GET CONTAINER. IF(QHERE(PRSO,HERE).OR. ((AV.NE.0).AND.(J.EQ.AV))) & GO TO 60200 IF(J.EQ.0) GO TO 60150 C !INSIDE? IF(.NOT.QOPEN(J)) GO TO 60150 C !OPEN? IF(QHERE(J,HERE).OR.((AV.NE.0).AND.(OCAN(J).EQ.AV))) & GO TO 60200 60150 CALL RSPEAK(461) C !CANT REACH IT. RETURN C 60200 CALL RSPSUB(462,ODO2) C !BURN IT. CALL NEWSTA(PRSO,0,0,0,0) RETURN C 60300 CALL RSPSUB(463,ODO2) C !CANT BURN IT. RETURN C 60400 CALL RSPSUB(301,ODI2) C !CANT BURN IT WITH THAT. RETURN C VAPPLI, PAGE 9 C C V138-- MUNG. GO TO COMMON ATTACK CODE. C 63000 I=466 C !CHOOSE PHRASE. IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66100 IF(.NOT.OBJACT(X)) CALL RSPSB2(466,ODO2,RMK) RETURN C C V139-- KILL. GO TO COMMON ATTACK CODE. C 64000 I=467 C !CHOOSE PHRASE. GO TO 66100 C C V140-- SWING. INVERT OBJECTS, FALL THRU TO ATTACK. C 65000 J=PRSO C !INVERT. PRSO=PRSI PRSI=J J=ODO2 ODO2=ODI2 ODI2=J PRSA=ATTACW C !FOR OBJACT. C C V141-- ATTACK. FALL THRU TO ATTACK CODE. C 66000 I=468 C C COMMON MUNG/ATTACK/SWING/KILL CODE. C 66100 IF(PRSO.NE.0) GO TO 66200 C !ANYTHING? CALL RSPEAK(469) C !NO, JOKE. RETURN C 66200 IF(OBJACT(X)) RETURN C !OBJ HANDLE? IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66300 IF(and(OFLAG1(PRSO),VICTBT).EQ.0) & CALL RSPSUB(470,ODO2) RETURN C 66300 J=471 C !ASSUME NO WEAPON. IF(PRSI.EQ.0) GO TO 66500 IF(and(OFLAG2(PRSI),WEAPBT).EQ.0) GO TO 66400 MELEE=1 C !ASSUME SWORD. IF(PRSI.NE.SWORD) MELEE=2 C !MUST BE KNIFE. I=BLOW(PLAYER,PRSO,MELEE,.TRUE.,0) C !STRIKE BLOW. RETURN C 66400 J=472 C !NOT A WEAPON. 66500 CALL RSPSB2(I,ODO2,J) C !JOKE. RETURN C VAPPLI, PAGE 10 C C V142-- WALK. PROCESSED EXTERNALLY. C 68000 VAPPLI=WALK(X) RETURN C C V143-- TELL. PROCESSED IN GAME. C 69000 CALL RSPEAK(603) RETURN C C V144-- PUT. PROCESSED EXTERNALLY. C 70000 VAPPLI=PUT(.TRUE.) RETURN C C V145,V146,V147,V148-- DROP/GIVE/POUR/THROW C 71000 CONTINUE 72000 CONTINUE 73000 CONTINUE 74000 VAPPLI=DROP(.FALSE.) RETURN C C V149-- SAVE C 77000 IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 77100 CALL RSPEAK(828) C !NO SAVES IN ENDGAME. RETURN C 77100 CALL SAVEGM RETURN C C V150-- RESTORE C #ifdef PDP 78000 call restor #else 78000 IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 78100 CALL RSPEAK(829) C !NO RESTORES IN ENDGAME. RETURN C 78100 CALL RSTRGM #endif PDP RETURN C VAPPLI, PAGE 11 C C V151-- HELLO C 80000 IF(PRSO.NE.0) GO TO 80100 C !ANY OBJ? CALL RSPEAK(346+RND(4)) C !NO, VANILLA HELLO. RETURN C 80100 IF(PRSO.NE.AVIAT) GO TO 80200 C !HELLO AVIATOR? CALL RSPEAK(350) C !NOTHING HAPPENS. RETURN C 80200 IF(PRSO.NE.SAILO) GO TO 80300 C !HELLO SAILOR? HS=HS+1 C !COUNT. I=351 C !GIVE NORMAL OR IF(MOD(HS,10).EQ.0) I=352 C !RANDOM MESSAGE. IF(MOD(HS,20).EQ.0) I=353 CALL RSPEAK(I) C !SPEAK UP. RETURN C 80300 IF(OBJACT(X)) RETURN C !OBJ HANDLE? I=354 C !ASSUME VILLAIN. IF(and(OFLAG2(PRSO),(VILLBT+ACTRBT)).EQ.0) I=355 CALL RSPSUB(I,ODO2) C !HELLO THERE C ! RETURN C C V152-- LOOK INTO C 81000 IF(OBJACT(X)) RETURN C !OBJ HANDLE? IF(and(OFLAG1(PRSO),DOORBT).EQ.0) GO TO 81300 IF(.NOT.QOPEN(PRSO)) GO TO 81200 C !OPEN? CALL RSPSUB(628,ODO2) C !OPEN DOOR- UNINTERESTING. RETURN C 81200 CALL RSPSUB(525,ODO2) C !CLOSED DOOR- CANT SEE. RETURN C 81300 IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 81400 IF(QOPEN(PRSO).OR.(and(OFLAG1(PRSO),TRANBT).NE.0)) & GO TO 81400 IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 81200 CALL RSPSUB(630,ODO2) C !CANT LOOK INSIDE. RETURN C 81400 IF(QEMPTY(PRSO)) GO TO 81500 C !VEH OR SEE IN. EMPTY? CALL PRINCO(PRSO,573) C !NO, LIST CONTENTS. RETURN C 81500 CALL RSPSUB(629,ODO2) C !EMPTY. RETURN C C V153-- LOOK UNDER C 82000 IF(.NOT.OBJACT(X)) CALL RSPEAK(631) C !OBJECT HANDLE? RETURN C VAPPLI, PAGE 12 C C V154-- PUMP C 83000 IF((OROOM(PUMP).EQ.HERE).OR.(OADV(PUMP).EQ.WINNER)) & GO TO 83100 CALL RSPEAK(632) C !NO. RETURN C 83100 PRSI=PUMP C !BECOMES INFLATE PRSA=INFLAW C !X WITH PUMP. GO TO 22000 C !DONE. C C V155-- WIND C 84000 IF(.NOT.OBJACT(X)) CALL RSPSUB(634,ODO2) C !OBJ HANDLE? RETURN C C V156-- CLIMB C V157-- CLIMB UP C V158-- CLIMB DOWN C 85000 CONTINUE 86000 CONTINUE 87000 I=XUP C !ASSUME UP. IF(PRSA.EQ.CLMBDW) I=XDOWN C !UNLESS CLIMB DN. F=(and(OFLAG2(PRSO),CLMBBT)).NE.0 IF(F.AND.FINDXT(I,HERE)) GO TO 87500 C !ANYTHING TO CLIMB? IF(OBJACT(X)) RETURN C !OBJ HANDLE? I=657 IF(F) I=524 C !VARIETY OF JOKES. IF(.NOT.F .AND.((PRSO.EQ.WALL).OR. & ((PRSO.GE.WNORT).AND.(PRSO.LE.WNORT+3)))) & I=656 CALL RSPEAK(I) C !JOKE. RETURN C 87500 PRSA=WALKW C !WALK PRSO=I C !IN SPECIFIED DIR. VAPPLI=WALK(X) RETURN C END C CLOCKD- CLOCK DEMON FOR INTERMOVE CLOCK EVENTS C C DECLARATIONS C LOGICAL FUNCTION CLOCKD(X) IMPLICIT INTEGER (A-Z) C C CLOCK INTERRUPTS C #include "clock.h" C CLOCKD=.FALSE. C !ASSUME NO ACTION. DO 100 I=1,CLNT IF(.NOT.CFLAG(I) .OR.(CTICK(I).EQ.0)) GO TO 100 IF(CTICK(I).LT.0) GO TO 50 C !PERMANENT ENTRY? CTICK(I)=CTICK(I)-1 IF(CTICK(I).NE.0) GO TO 100 C !TIMER EXPIRED? 50 CLOCKD=.TRUE. CALL CEVAPP(CACTIO(I)) C !DO ACTION. 100 CONTINUE RETURN C END