xref: /original-bsd/contrib/dungeon/lightp.F (revision 29d43723)
1C LIGHTP-	LIGHT PROCESSOR
2C
3C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
4C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
5C WRITTEN BY R. M. SUPNIK
6C
7C DECLARATIONS
8C
9	LOGICAL FUNCTION LIGHTP(OBJ)
10	IMPLICIT INTEGER (A-Z)
11	LOGICAL QON
12#include "parser.h"
13#include "gamestate.h"
14#include "objects.h"
15#include "oflags.h"
16#include "oindex.h"
17#include "clock.h"
18
19#include "verbs.h"
20#include "flags.h"
21C
22C FUNCTIONS AND DATA
23C
24	QON(R)=and(OFLAG1(R),ONBT).NE.0
25C LIGHTP, PAGE 2
26C
27	LIGHTP=.TRUE.
28C						!ASSUME WINS
29	FLOBTS=FLAMBT+LITEBT+ONBT
30	IF(OBJ.NE.CANDL) GO TO 20000
31C						!CANDLE?
32	IF(ORCAND.NE.0) GO TO 19100
33C						!FIRST REF?
34	ORCAND=1
35C						!YES, CANDLES ARE
36	CTICK(CEVCND)=50
37C						!BURNING WHEN SEEN.
38C
3919100	IF(PRSI.EQ.CANDL) GO TO 10
40C						!IGNORE IND REFS.
41	IF(PRSA.NE.TRNOFW) GO TO 19200
42C						!TURN OFF?
43	I=513
44C						!ASSUME OFF.
45	IF(QON(CANDL)) I=514
46C						!IF ON, DIFFERENT.
47	CFLAG(CEVCND)=.FALSE.
48C						!DISABLE COUNTDOWN.
49	OFLAG1(CANDL)=and(OFLAG1(CANDL), not(ONBT))
50	CALL RSPEAK(I)
51	RETURN
52C
5319200	IF((PRSA.NE.BURNW).AND.(PRSA.NE.TRNONW)) GO TO 10
54	IF(and(OFLAG1(CANDL),LITEBT).NE.0) GO TO 19300
55	CALL RSPEAK(515)
56C						!CANDLES TOO SHORT.
57	RETURN
58C
5919300	IF(PRSI.NE.0) GO TO 19400
60C						!ANY FLAME?
61	CALL RSPEAK(516)
62C						!NO, LOSE.
63	PRSWON=.FALSE.
64	RETURN
65C
6619400	IF((PRSI.NE.MATCH).OR. .NOT.QON(MATCH)) GO TO 19500
67	I=517
68C						!ASSUME OFF.
69	IF(QON(CANDL)) I=518
70C						!IF ON, JOKE.
71	OFLAG1(CANDL)=or(OFLAG1(CANDL),ONBT)
72	CFLAG(CEVCND)=.TRUE.
73C						!RESUME COUNTDOWN.
74	CALL RSPEAK(I)
75	RETURN
76C
7719500	IF((PRSI.NE.TORCH).OR. .NOT.QON(TORCH)) GO TO 19600
78	IF(QON(CANDL)) GO TO 19700
79C						!ALREADY ON?
80	CALL NEWSTA(CANDL,521,0,0,0)
81C						!NO, VAPORIZE.
82	RETURN
83C
8419600	CALL RSPEAK(519)
85C						!CANT LIGHT WITH THAT.
86	RETURN
87C
8819700	CALL RSPEAK(520)
89C						!ALREADY ON.
90	RETURN
91C
9220000	IF(OBJ.NE.MATCH) CALL BUG(6,OBJ)
93	IF((PRSA.NE.TRNONW).OR.(PRSO.NE.MATCH)) GO TO 20500
94	IF(ORMTCH.NE.0) GO TO 20100
95C						!ANY MATCHES LEFT?
96	CALL RSPEAK(183)
97C						!NO, LOSE.
98	RETURN
99C
10020100	ORMTCH=ORMTCH-1
101C						!DECREMENT NO MATCHES.
102	OFLAG1(MATCH)=or(OFLAG1(MATCH),FLOBTS)
103	CTICK(CEVMAT)=2
104C						!COUNTDOWN.
105	CALL RSPEAK(184)
106	RETURN
107C
10820500	IF((PRSA.NE.TRNOFW).OR.(and(OFLAG1(MATCH),ONBT).EQ.0))
109&		GO TO 10
110	OFLAG1(MATCH)=and(OFLAG1(MATCH), not(FLOBTS))
111	CTICK(CEVMAT)=0
112	CALL RSPEAK(185)
113	RETURN
114C
115C HERE FOR FALSE RETURN
116C
11710	LIGHTP=.FALSE.
118	RETURN
119	END
120