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 #include "parser.h" #include "gamestate.h" #include "objects.h" #include "oflags.h" #include "oindex.h" #include "clock.h" #include "verbs.h" #include "flags.h" C C FUNCTIONS AND DATA C QON(R)=and(OFLAG1(R),ONBT).NE.0 C LIGHTP, PAGE 2 C LIGHTP=.TRUE. C !ASSUME WINS FLOBTS=FLAMBT+LITEBT+ONBT IF(OBJ.NE.CANDL) GO TO 20000 C !CANDLE? IF(ORCAND.NE.0) GO TO 19100 C !FIRST REF? ORCAND=1 C !YES, CANDLES ARE CTICK(CEVCND)=50 C !BURNING WHEN SEEN. C 19100 IF(PRSI.EQ.CANDL) GO TO 10 C !IGNORE IND REFS. IF(PRSA.NE.TRNOFW) GO TO 19200 C !TURN OFF? I=513 C !ASSUME OFF. IF(QON(CANDL)) I=514 C !IF ON, DIFFERENT. CFLAG(CEVCND)=.FALSE. C !DISABLE COUNTDOWN. OFLAG1(CANDL)=and(OFLAG1(CANDL), not(ONBT)) CALL RSPEAK(I) RETURN C 19200 IF((PRSA.NE.BURNW).AND.(PRSA.NE.TRNONW)) GO TO 10 IF(and(OFLAG1(CANDL),LITEBT).NE.0) GO TO 19300 CALL RSPEAK(515) C !CANDLES TOO SHORT. RETURN C 19300 IF(PRSI.NE.0) GO TO 19400 C !ANY FLAME? CALL RSPEAK(516) C !NO, LOSE. PRSWON=.FALSE. RETURN C 19400 IF((PRSI.NE.MATCH).OR. .NOT.QON(MATCH)) GO TO 19500 I=517 C !ASSUME OFF. IF(QON(CANDL)) I=518 C !IF ON, JOKE. OFLAG1(CANDL)=or(OFLAG1(CANDL),ONBT) CFLAG(CEVCND)=.TRUE. C !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 C !ALREADY ON? CALL NEWSTA(CANDL,521,0,0,0) C !NO, VAPORIZE. RETURN C 19600 CALL RSPEAK(519) C !CANT LIGHT WITH THAT. RETURN C 19700 CALL RSPEAK(520) C !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 C !ANY MATCHES LEFT? CALL RSPEAK(183) C !NO, LOSE. RETURN C 20100 ORMTCH=ORMTCH-1 C !DECREMENT NO MATCHES. OFLAG1(MATCH)=or(OFLAG1(MATCH),FLOBTS) CTICK(CEVMAT)=2 C !COUNTDOWN. CALL RSPEAK(184) RETURN C 20500 IF((PRSA.NE.TRNOFW).OR.(and(OFLAG1(MATCH),ONBT).EQ.0)) & GO TO 10 OFLAG1(MATCH)=and(OFLAG1(MATCH), not(FLOBTS)) CTICK(CEVMAT)=0 CALL RSPEAK(185) RETURN C C HERE FOR FALSE RETURN C 10 LIGHTP=.FALSE. RETURN END