Add -g flag for source file debugging.
[unix-history] / usr / src / contrib / dungeon / dso2.F
CommitLineData
8b22683c
KB
1C MOVETO- MOVE PLAYER TO NEW ROOM
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 MOVETO(NR,WHO)
10 IMPLICIT INTEGER (A-Z)
11 LOGICAL NLV,LHR,LNR
12#include "gamestate.h"
13#include "rooms.h"
14#include "rflag.h"
15#include "objects.h"
16#include "oindex.h"
17#include "advers.h"
18C MOVETO, PAGE 2
19C
20 MOVETO=.FALSE.
21C !ASSUME FAILS.
22 LHR=and(RFLAG(HERE),RLAND).NE.0
23 LNR=and(RFLAG(NR),RLAND).NE.0
24 J=AVEHIC(WHO)
25C !HIS VEHICLE
26C
27 IF(J.NE.0) GO TO 100
28C !IN VEHICLE?
29 IF(LNR) GO TO 500
30C !NO, GOING TO LAND?
31 CALL RSPEAK(427)
32C !CAN'T GO WITHOUT VEHICLE.
33 RETURN
34C
35100 BITS=0
36C !ASSUME NOWHERE.
37 IF(J.EQ.RBOAT) BITS=RWATER
38C !IN BOAT?
39 IF(J.EQ.BALLO) BITS=RAIR
40C !IN BALLOON?
41 IF(J.EQ.BUCKE) BITS=RBUCK
42C !IN BUCKET?
43 NLV=and(RFLAG(NR),BITS).EQ.0
44 IF((.NOT.LNR .AND.NLV) .OR.
45& (LNR.AND.LHR.AND.NLV.AND.(BITS.NE.RLAND)))
46& GO TO 800
47C
48500 MOVETO=.TRUE.
49C !MOVE SHOULD SUCCEED.
50 IF(and(RFLAG(NR),RMUNG).EQ.0) GO TO 600
51 CALL RSPEAK(RRAND(NR))
52C !YES, TELL HOW.
53 RETURN
54C
55600 IF(WHO.NE.PLAYER) CALL NEWSTA(AOBJ(WHO),0,NR,0,0)
56 IF(J.NE.0) CALL NEWSTA(J,0,NR,0,0)
57 HERE=NR
58 AROOM(WHO)=HERE
59 CALL SCRUPD(RVAL(NR))
60C !SCORE ROOM
61 RVAL(NR)=0
62 RETURN
63C
64800 CALL RSPSUB(428,ODESC2(J))
65C !WRONG VEHICLE.
66 RETURN
67 END
68C SCORE-- PRINT OUT CURRENT SCORE
69C
70C DECLARATIONS
71C
72 SUBROUTINE SCORE(FLG)
73 IMPLICIT INTEGER (A-Z)
74 LOGICAL FLG
75 INTEGER RANK(10),ERANK(5)
76#include "gamestate.h"
77#include "state.h"
78C
79 COMMON /CHAN/ INPCH,OUTCH,DBCH
80#include "advers.h"
81#include "flags.h"
82C
83C FUNCTIONS AND DATA
84C
85 DATA RANK/20,19,18,16,12,8,4,2,1,0/
86 DATA ERANK/20,15,10,5,0/
87C SCORE, PAGE 2
88C
89 AS=ASCORE(WINNER)
90C
91 IF(ENDGMF) GO TO 60
92C !ENDGAME?
93#ifdef PDP
94 call pscore(AS,MXSCOR,MOVES)
95#else
96#ifdef NOCC
97 IF(FLG.AND.MOVES.NE.1) WRITE(OUTCH,100) AS,MXSCOR,MOVES
98 IF(FLG.AND.MOVES.EQ.1) WRITE(OUTCH,120) AS,MXSCOR,MOVES
99 IF(.NOT.FLG.AND.MOVES.NE.1) WRITE(OUTCH,110) AS,MXSCOR,MOVES
100 IF(.NOT.FLG.AND.MOVES.EQ.1) WRITE(OUTCH,130) AS,MXSCOR,MOVES
101#else NOCC
102 IF(FLG) WRITE(OUTCH,100)
103 IF(.NOT.FLG) WRITE(OUTCH,110)
104 IF(MOVES.NE.1) WRITE(OUTCH,120) AS,MXSCOR,MOVES
105 IF(MOVES.EQ.1) WRITE(OUTCH,130) AS,MXSCOR,MOVES
106#endif NOCC
107#endif PDP
108C
109 DO 10 I=1,10
110 IF((AS*20/MXSCOR).GE.RANK(I)) GO TO 50
11110 CONTINUE
11250 CALL RSPEAK(484+I)
113 RETURN
114C
115#ifdef PDP
11660 continue
117 call pscore(EGSCOR,EGMXSC,MOVES)
118#else
119#ifdef NOCC
12060 IF(FLG) WRITE(OUTCH,140) EGSCOR,EGMXSC,MOVES
121 IF(.NOT.FLG) WRITE(OUTCH,150) EGSCOR,EGMXSC,MOVES
122#else NOCC
12360 IF(FLG) WRITE(OUTCH,140)
124 IF(.NOT.FLG) WRITE(OUTCH,150)
125 WRITE(OUTCH,120) EGSCOR,EGMXSC,MOVES
126#endif NOCC
127#endif PDP
128 DO 70 I=1,5
129 IF((EGSCOR*20/EGMXSC).GE.ERANK(I)) GO TO 80
13070 CONTINUE
13180 CALL RSPEAK(786+I)
132 RETURN
133
134#ifndef PDP
135#ifdef NOCC
136100 FORMAT('Your score would be',I4,' [total of',I4,' points], in',
137& I5,' moves.')
138110 FORMAT('Your score is',I4,' [total of',I4,' points], in',
139& I5,' moves.')
140120 FORMAT('Your score would be',I4,' [total of',I4,' points], in',
141& I5,' move.')
142130 FORMAT('Your score is',I4,' [total of',I4,' points], in',
143& I5,' move.')
144140 FORMAT('Your score in the endgame would be',I4,' [total of',
145& I4,' points], in',I5,' moves.')
146150 FORMAT('Your score in the endgame is',I4,' [total of',
147& I4,' points], in',I5,' moves.')
148#else NOCC
149100 FORMAT(' Your score would be',$)
150110 FORMAT(' Your score is',$)
151120 FORMAT('+',I4,' [total of',I4,' points], in',I5,' moves.')
152130 FORMAT('+',I4,' [total of',I4,' points], in',I5,' move.')
153140 FORMAT(' Your score in the endgame would be',$)
154150 FORMAT(' Your score in the endgame is',$)
155#endif NOCC
156#endif PDP
157C
158 END
159C SCRUPD- UPDATE WINNER'S SCORE
160C
161C DECLARATIONS
162C
163 SUBROUTINE SCRUPD(N)
164 IMPLICIT INTEGER (A-Z)
165#include "gamestate.h"
166#include "state.h"
167#include "clock.h"
168#include "advers.h"
169#include "flags.h"
170C
171 IF(ENDGMF) GO TO 100
172C !ENDGAME?
173 ASCORE(WINNER)=ASCORE(WINNER)+N
174C !UPDATE SCORE
175 RWSCOR=RWSCOR+N
176C !UPDATE RAW SCORE
177 IF(ASCORE(WINNER).LT.(MXSCOR-(10*DEATHS))) RETURN
178 CFLAG(CEVEGH)=.TRUE.
179C !TURN ON END GAME
180 CTICK(CEVEGH)=15
181 RETURN
182C
183100 EGSCOR=EGSCOR+N
184C !UPDATE EG SCORE.
185 RETURN
186 END