date and time created 90/10/11 11:35:49 by bostic
[unix-history] / usr / src / contrib / dungeon / lightp.F
CommitLineData
8b22683c
KB
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