1 /* MOVETO- MOVE PLAYER TO NEW ROOM */
2
3 /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
4 /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
5 /* WRITTEN BY R. M. SUPNIK */
6
7 #include <stdio.h>
8 #include "funcs.h"
9 #include "vars.h"
10
moveto_(nr,who)11 logical moveto_(nr, who)
12 integer nr;
13 integer who;
14 {
15 /* System generated locals */
16 logical ret_val;
17
18 /* Local variables */
19 integer j;
20 logical lhr;
21 logical lnr, nlv;
22 integer bits;
23
24 ret_val = FALSE_;
25 /* !ASSUME FAILS. */
26 lhr = (rooms_1.rflag[play_1.here - 1] & RLAND) != 0;
27 lnr = (rooms_1.rflag[nr - 1] & RLAND) != 0;
28 j = advs_1.avehic[who - 1];
29 /* !HIS VEHICLE */
30
31 if (j != 0) {
32 goto L100;
33 }
34 /* !IN VEHICLE? */
35 if (lnr) {
36 goto L500;
37 }
38 /* !NO, GOING TO LAND? */
39 rspeak_(427);
40 /* !CAN'T GO WITHOUT VEHICLE. */
41 return ret_val;
42
43 L100:
44 bits = 0;
45 /* !ASSUME NOWHERE. */
46 if (j == oindex_1.rboat) {
47 bits = RWATER;
48 }
49 /* !IN BOAT? */
50 if (j == oindex_1.ballo) {
51 bits = RAIR;
52 }
53 /* !IN BALLOON? */
54 if (j == oindex_1.bucke) {
55 bits = RBUCK;
56 }
57 /* !IN BUCKET? */
58 nlv = (rooms_1.rflag[nr - 1] & bits) == 0;
59 if (! lnr && nlv || lnr && lhr && nlv && bits != RLAND) {
60 goto L800;
61 }
62
63 L500:
64 ret_val = TRUE_;
65 /* !MOVE SHOULD SUCCEED. */
66 if ((rooms_1.rflag[nr - 1] & RMUNG) == 0) {
67 goto L600;
68 }
69 rspeak_(rrand[nr - 1]);
70 /* !YES, TELL HOW. */
71 return ret_val;
72
73 L600:
74 if (who != aindex_1.player) {
75 newsta_(advs_1.aobj[who - 1], 0, nr, 0, 0);
76 }
77 if (j != 0) {
78 newsta_(j, 0, nr, 0, 0);
79 }
80 play_1.here = nr;
81 advs_1.aroom[who - 1] = play_1.here;
82 scrupd_(rooms_1.rval[nr - 1]);
83 /* !SCORE ROOM */
84 rooms_1.rval[nr - 1] = 0;
85 return ret_val;
86
87 L800:
88 rspsub_(428, objcts_1.odesc2[j - 1]);
89 /* !WRONG VEHICLE. */
90 return ret_val;
91 } /* moveto_ */
92
93 /* SCORE-- PRINT OUT CURRENT SCORE */
94
95 /* DECLARATIONS */
96
score_(flg)97 void score_(flg)
98 logical flg;
99 {
100 /* Initialized data */
101
102 static const integer rank[10] = { 20,19,18,16,12,8,4,2,1,0 };
103 static const integer erank[5] = { 20,15,10,5,0 };
104
105 /* System generated locals */
106 integer i__1;
107
108 /* Local variables */
109 integer i, as;
110
111 as = advs_1.ascore[play_1.winner - 1];
112
113 if (findex_1.endgmf) {
114 goto L60;
115 }
116 /* !ENDGAME? */
117 more_output(NULL);
118 printf("Your score ");
119 if (flg)
120 printf("would be");
121 else
122 printf("is");
123 printf(" %d [total of %d points], in %d move", as, state_1.mxscor,
124 state_1.moves);
125 if (state_1.moves != 1)
126 printf("s");
127 printf(".\n");
128
129 for (i = 1; i <= 10; ++i) {
130 if (as * 20 / state_1.mxscor >= rank[i - 1]) {
131 goto L50;
132 }
133 /* L10: */
134 }
135 L50:
136 i__1 = i + 484;
137 rspeak_(i__1);
138 return;
139
140 L60:
141 more_output(NULL);
142 printf("Your score in the endgame ");
143 if (flg)
144 printf("would be");
145 else
146 printf("is");
147 printf(" %d [total of %d points], in %d moves.\n", state_1.egscor,
148 state_1.egmxsc, state_1.moves);
149
150 for (i = 1; i <= 5; ++i) {
151 if (state_1.egscor * 20 / state_1.egmxsc >= erank[i - 1]) {
152 goto L80;
153 }
154 /* L70: */
155 }
156 L80:
157 i__1 = i + 786;
158 rspeak_(i__1);
159 } /* score_ */
160
161 /* SCRUPD- UPDATE WINNER'S SCORE */
162
163 /* DECLARATIONS */
164
scrupd_(n)165 void scrupd_(n)
166 integer n;
167 {
168 if (findex_1.endgmf) {
169 goto L100;
170 }
171 /* !ENDGAME? */
172 advs_1.ascore[play_1.winner - 1] += n;
173 /* !UPDATE SCORE */
174 state_1.rwscor += n;
175 /* !UPDATE RAW SCORE */
176 if (advs_1.ascore[play_1.winner - 1] < state_1.mxscor - state_1.deaths *
177 10) {
178 return;
179 }
180 cevent_1.cflag[cindex_1.cevegh - 1] = TRUE_;
181 /* !TURN ON END GAME */
182 cevent_1.ctick[cindex_1.cevegh - 1] = 15;
183 return;
184
185 L100:
186 state_1.egscor += n;
187 /* !UPDATE EG SCORE. */
188 } /* scrupd_ */
189