C LIGHTP- LIGHT PROCESSOR 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 LIGHTP(OBJ) IMPLICIT INTEGER (A-Z) LOGICAL QON 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), 1 OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220), 2 OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220), 3 OADV(220),OCAN(220),OREAD(220) C COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT, 1 NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT, 2 TOOLBT,TURNBT,ONBT COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT, 1 WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT, 2 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*1 CFLAG COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25) C COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND, 1 CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG, 2 CEVGNO,CEVBUC,CEVSPH,CEVEGH, 3 CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE, 5 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*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF, 1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF, 2 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF, 3 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF, 4 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF, 5 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF, 6 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF, 7 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 QON(R)=(OFLAG1(R).AND.ONBT).NE.0 C LIGHTP, PAGE 2 C LIGHTP=.TRUE. !ASSUME WINS FLOBTS=FLAMBT+LITEBT+ONBT IF(OBJ.NE.CANDL) GO TO 20000 !CANDLE? IF(ORCAND.NE.0) GO TO 19100 !FIRST REF? ORCAND=1 !YES, CANDLES ARE CTICK(CEVCND)=50 !BURNING WHEN SEEN. C 19100 IF(PRSI.EQ.CANDL) GO TO 10 !IGNORE IND REFS. IF(PRSA.NE.TRNOFW) GO TO 19200 !TURN OFF? I=513 !ASSUME OFF. IF(QON(CANDL)) I=514 !IF ON, DIFFERENT. CFLAG(CEVCND)=.FALSE. !DISABLE COUNTDOWN. OFLAG1(CANDL)=OFLAG1(CANDL).AND. .NOT.ONBT CALL RSPEAK(I) RETURN C 19200 IF((PRSA.NE.BURNW).AND.(PRSA.NE.TRNONW)) GO TO 10 IF((OFLAG1(CANDL).AND.LITEBT).NE.0) GO TO 19300 CALL RSPEAK(515) !CANDLES TOO SHORT. RETURN C 19300 IF(PRSI.NE.0) GO TO 19400 !ANY FLAME? CALL RSPEAK(516) !NO, LOSE. PRSWON=.FALSE. RETURN C 19400 IF((PRSI.NE.MATCH).OR. .NOT.QON(MATCH)) GO TO 19500 I=517 !ASSUME OFF. IF(QON(CANDL)) I=518 !IF ON, JOKE. OFLAG1(CANDL)=OFLAG1(CANDL).OR.ONBT !LITE CANDLES. CFLAG(CEVCND)=.TRUE. !RESUME COUNTDOWN. CALL RSPEAK(I) RETURN C 19500 IF((PRSI.NE.TORCH).OR. .NOT.QON(TORCH)) GO TO 19600 IF(QON(CANDL)) GO TO 19700 !ALREADY ON? CALL NEWSTA(CANDL,521,0,0,0) !NO, VAPORIZE. RETURN C 19600 CALL RSPEAK(519) !CANT LIGHT WITH THAT. RETURN C 19700 CALL RSPEAK(520) !ALREADY ON. RETURN C 20000 IF(OBJ.NE.MATCH) CALL BUG(6,OBJ) IF((PRSA.NE.TRNONW).OR.(PRSO.NE.MATCH)) GO TO 20500 IF(ORMTCH.NE.0) GO TO 20100 !ANY MATCHES LEFT? CALL RSPEAK(183) !NO, LOSE. RETURN C 20100 ORMTCH=ORMTCH-1 !DECREMENT NO MATCHES. OFLAG1(MATCH)=OFLAG1(MATCH).OR.FLOBTS CTICK(CEVMAT)=2 !COUNTDOWN. CALL RSPEAK(184) RETURN C 20500 IF((PRSA.NE.TRNOFW).OR.((OFLAG1(MATCH).AND.ONBT).EQ.0)) 1 GO TO 10 !EXTINGUISH? OFLAG1(MATCH)=OFLAG1(MATCH).AND. .NOT.FLOBTS CTICK(CEVMAT)=0 CALL RSPEAK(185) RETURN C C HERE FOR FALSE RETURN C 10 LIGHTP=.FALSE. RETURN END