Commit | Line | Data |
---|---|---|
8b22683c KB |
1 | C LIGHTP- LIGHT PROCESSOR |
2 | C | |
3 | C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 | |
4 | C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED | |
5 | C WRITTEN BY R. M. SUPNIK | |
6 | C | |
7 | C DECLARATIONS | |
8 | C | |
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" | |
21 | C | |
22 | C FUNCTIONS AND DATA | |
23 | C | |
24 | QON(R)=and(OFLAG1(R),ONBT).NE.0 | |
25 | C LIGHTP, PAGE 2 | |
26 | C | |
27 | LIGHTP=.TRUE. | |
28 | C !ASSUME WINS | |
29 | FLOBTS=FLAMBT+LITEBT+ONBT | |
30 | IF(OBJ.NE.CANDL) GO TO 20000 | |
31 | C !CANDLE? | |
32 | IF(ORCAND.NE.0) GO TO 19100 | |
33 | C !FIRST REF? | |
34 | ORCAND=1 | |
35 | C !YES, CANDLES ARE | |
36 | CTICK(CEVCND)=50 | |
37 | C !BURNING WHEN SEEN. | |
38 | C | |
39 | 19100 IF(PRSI.EQ.CANDL) GO TO 10 | |
40 | C !IGNORE IND REFS. | |
41 | IF(PRSA.NE.TRNOFW) GO TO 19200 | |
42 | C !TURN OFF? | |
43 | I=513 | |
44 | C !ASSUME OFF. | |
45 | IF(QON(CANDL)) I=514 | |
46 | C !IF ON, DIFFERENT. | |
47 | CFLAG(CEVCND)=.FALSE. | |
48 | C !DISABLE COUNTDOWN. | |
49 | OFLAG1(CANDL)=and(OFLAG1(CANDL), not(ONBT)) | |
50 | CALL RSPEAK(I) | |
51 | RETURN | |
52 | C | |
53 | 19200 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) | |
56 | C !CANDLES TOO SHORT. | |
57 | RETURN | |
58 | C | |
59 | 19300 IF(PRSI.NE.0) GO TO 19400 | |
60 | C !ANY FLAME? | |
61 | CALL RSPEAK(516) | |
62 | C !NO, LOSE. | |
63 | PRSWON=.FALSE. | |
64 | RETURN | |
65 | C | |
66 | 19400 IF((PRSI.NE.MATCH).OR. .NOT.QON(MATCH)) GO TO 19500 | |
67 | I=517 | |
68 | C !ASSUME OFF. | |
69 | IF(QON(CANDL)) I=518 | |
70 | C !IF ON, JOKE. | |
71 | OFLAG1(CANDL)=or(OFLAG1(CANDL),ONBT) | |
72 | CFLAG(CEVCND)=.TRUE. | |
73 | C !RESUME COUNTDOWN. | |
74 | CALL RSPEAK(I) | |
75 | RETURN | |
76 | C | |
77 | 19500 IF((PRSI.NE.TORCH).OR. .NOT.QON(TORCH)) GO TO 19600 | |
78 | IF(QON(CANDL)) GO TO 19700 | |
79 | C !ALREADY ON? | |
80 | CALL NEWSTA(CANDL,521,0,0,0) | |
81 | C !NO, VAPORIZE. | |
82 | RETURN | |
83 | C | |
84 | 19600 CALL RSPEAK(519) | |
85 | C !CANT LIGHT WITH THAT. | |
86 | RETURN | |
87 | C | |
88 | 19700 CALL RSPEAK(520) | |
89 | C !ALREADY ON. | |
90 | RETURN | |
91 | C | |
92 | 20000 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 | |
95 | C !ANY MATCHES LEFT? | |
96 | CALL RSPEAK(183) | |
97 | C !NO, LOSE. | |
98 | RETURN | |
99 | C | |
100 | 20100 ORMTCH=ORMTCH-1 | |
101 | C !DECREMENT NO MATCHES. | |
102 | OFLAG1(MATCH)=or(OFLAG1(MATCH),FLOBTS) | |
103 | CTICK(CEVMAT)=2 | |
104 | C !COUNTDOWN. | |
105 | CALL RSPEAK(184) | |
106 | RETURN | |
107 | C | |
108 | 20500 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 | |
114 | C | |
115 | C HERE FOR FALSE RETURN | |
116 | C | |
117 | 10 LIGHTP=.FALSE. | |
118 | RETURN | |
119 | END |