Commit | Line | Data |
---|---|---|
8b22683c KB |
1 | C MOVETO- MOVE PLAYER TO NEW ROOM |
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 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" | |
18 | C MOVETO, PAGE 2 | |
19 | C | |
20 | MOVETO=.FALSE. | |
21 | C !ASSUME FAILS. | |
22 | LHR=and(RFLAG(HERE),RLAND).NE.0 | |
23 | LNR=and(RFLAG(NR),RLAND).NE.0 | |
24 | J=AVEHIC(WHO) | |
25 | C !HIS VEHICLE | |
26 | C | |
27 | IF(J.NE.0) GO TO 100 | |
28 | C !IN VEHICLE? | |
29 | IF(LNR) GO TO 500 | |
30 | C !NO, GOING TO LAND? | |
31 | CALL RSPEAK(427) | |
32 | C !CAN'T GO WITHOUT VEHICLE. | |
33 | RETURN | |
34 | C | |
35 | 100 BITS=0 | |
36 | C !ASSUME NOWHERE. | |
37 | IF(J.EQ.RBOAT) BITS=RWATER | |
38 | C !IN BOAT? | |
39 | IF(J.EQ.BALLO) BITS=RAIR | |
40 | C !IN BALLOON? | |
41 | IF(J.EQ.BUCKE) BITS=RBUCK | |
42 | C !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 | |
47 | C | |
48 | 500 MOVETO=.TRUE. | |
49 | C !MOVE SHOULD SUCCEED. | |
50 | IF(and(RFLAG(NR),RMUNG).EQ.0) GO TO 600 | |
51 | CALL RSPEAK(RRAND(NR)) | |
52 | C !YES, TELL HOW. | |
53 | RETURN | |
54 | C | |
55 | 600 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)) | |
60 | C !SCORE ROOM | |
61 | RVAL(NR)=0 | |
62 | RETURN | |
63 | C | |
64 | 800 CALL RSPSUB(428,ODESC2(J)) | |
65 | C !WRONG VEHICLE. | |
66 | RETURN | |
67 | END | |
68 | C SCORE-- PRINT OUT CURRENT SCORE | |
69 | C | |
70 | C DECLARATIONS | |
71 | C | |
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" | |
78 | C | |
79 | COMMON /CHAN/ INPCH,OUTCH,DBCH | |
80 | #include "advers.h" | |
81 | #include "flags.h" | |
82 | C | |
83 | C FUNCTIONS AND DATA | |
84 | C | |
85 | DATA RANK/20,19,18,16,12,8,4,2,1,0/ | |
86 | DATA ERANK/20,15,10,5,0/ | |
87 | C SCORE, PAGE 2 | |
88 | C | |
89 | AS=ASCORE(WINNER) | |
90 | C | |
91 | IF(ENDGMF) GO TO 60 | |
92 | C !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 | |
108 | C | |
109 | DO 10 I=1,10 | |
110 | IF((AS*20/MXSCOR).GE.RANK(I)) GO TO 50 | |
111 | 10 CONTINUE | |
112 | 50 CALL RSPEAK(484+I) | |
113 | RETURN | |
114 | C | |
115 | #ifdef PDP | |
116 | 60 continue | |
117 | call pscore(EGSCOR,EGMXSC,MOVES) | |
118 | #else | |
119 | #ifdef NOCC | |
120 | 60 IF(FLG) WRITE(OUTCH,140) EGSCOR,EGMXSC,MOVES | |
121 | IF(.NOT.FLG) WRITE(OUTCH,150) EGSCOR,EGMXSC,MOVES | |
122 | #else NOCC | |
123 | 60 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 | |
130 | 70 CONTINUE | |
131 | 80 CALL RSPEAK(786+I) | |
132 | RETURN | |
133 | ||
134 | #ifndef PDP | |
135 | #ifdef NOCC | |
136 | 100 FORMAT('Your score would be',I4,' [total of',I4,' points], in', | |
137 | & I5,' moves.') | |
138 | 110 FORMAT('Your score is',I4,' [total of',I4,' points], in', | |
139 | & I5,' moves.') | |
140 | 120 FORMAT('Your score would be',I4,' [total of',I4,' points], in', | |
141 | & I5,' move.') | |
142 | 130 FORMAT('Your score is',I4,' [total of',I4,' points], in', | |
143 | & I5,' move.') | |
144 | 140 FORMAT('Your score in the endgame would be',I4,' [total of', | |
145 | & I4,' points], in',I5,' moves.') | |
146 | 150 FORMAT('Your score in the endgame is',I4,' [total of', | |
147 | & I4,' points], in',I5,' moves.') | |
148 | #else NOCC | |
149 | 100 FORMAT(' Your score would be',$) | |
150 | 110 FORMAT(' Your score is',$) | |
151 | 120 FORMAT('+',I4,' [total of',I4,' points], in',I5,' moves.') | |
152 | 130 FORMAT('+',I4,' [total of',I4,' points], in',I5,' move.') | |
153 | 140 FORMAT(' Your score in the endgame would be',$) | |
154 | 150 FORMAT(' Your score in the endgame is',$) | |
155 | #endif NOCC | |
156 | #endif PDP | |
157 | C | |
158 | END | |
159 | C SCRUPD- UPDATE WINNER'S SCORE | |
160 | C | |
161 | C DECLARATIONS | |
162 | C | |
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" | |
170 | C | |
171 | IF(ENDGMF) GO TO 100 | |
172 | C !ENDGAME? | |
173 | ASCORE(WINNER)=ASCORE(WINNER)+N | |
174 | C !UPDATE SCORE | |
175 | RWSCOR=RWSCOR+N | |
176 | C !UPDATE RAW SCORE | |
177 | IF(ASCORE(WINNER).LT.(MXSCOR-(10*DEATHS))) RETURN | |
178 | CFLAG(CEVEGH)=.TRUE. | |
179 | C !TURN ON END GAME | |
180 | CTICK(CEVEGH)=15 | |
181 | RETURN | |
182 | C | |
183 | 100 EGSCOR=EGSCOR+N | |
184 | C !UPDATE EG SCORE. | |
185 | RETURN | |
186 | END |