1 /* GHERE-- IS GLOBAL ACTUALLY IN THIS 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 "funcs.h"
8 #include "vars.h"
9
ghere_(obj,rm)10 logical ghere_(obj, rm)
11 integer obj;
12 integer rm;
13 {
14 /* System generated locals */
15 logical ret_val;
16
17 ret_val = TRUE_;
18 /* !ASSUME WINS. */
19 switch (obj - star_1.strbit) {
20 case 1: goto L1000;
21 case 2: goto L1000;
22 case 3: goto L1000;
23 case 4: goto L1000;
24 case 5: goto L1000;
25 case 6: goto L1000;
26 case 7: goto L1000;
27 case 8: goto L1000;
28 case 9: goto L1000;
29 case 10: goto L1000;
30 case 11: goto L1000;
31 case 12: goto L2000;
32 case 13: goto L3000;
33 case 14: goto L4000;
34 case 15: goto L5000;
35 case 16: goto L5000;
36 case 17: goto L5000;
37 case 18: goto L6000;
38 case 19: goto L7000;
39 case 20: goto L8000;
40 case 21: goto L9000;
41 case 22: goto L9100;
42 case 23: goto L8000;
43 case 24: goto L10000;
44 case 25: goto L11000;
45 }
46 bug_(60, obj);
47
48 /* 1000-- STARS ARE ALWAYS HERE */
49
50 L1000:
51 return ret_val;
52
53 /* 2000-- BIRD */
54
55 L2000:
56 ret_val = rm >= rindex_1.fore1 && rm < rindex_1.clear || rm ==
57 rindex_1.mtree;
58 return ret_val;
59
60 /* 3000-- TREE */
61
62 L3000:
63 ret_val = rm >= rindex_1.fore1 && rm < rindex_1.clear && rm !=
64 rindex_1.fore3;
65 return ret_val;
66
67 /* 4000-- NORTH WALL */
68
69 L4000:
70 ret_val = rm >= rindex_1.bkvw && rm <= rindex_1.bkbox || rm ==
71 rindex_1.cpuzz;
72 return ret_val;
73
74 /* 5000-- EAST, SOUTH, WEST WALLS */
75
76 L5000:
77 ret_val = rm >= rindex_1.bkvw && rm < rindex_1.bkbox || rm ==
78 rindex_1.cpuzz;
79 return ret_val;
80
81 /* 6000-- GLOBAL WATER */
82
83 L6000:
84 ret_val = (rooms_1.rflag[rm - 1] & RWATER + RFILL) != 0;
85 return ret_val;
86
87 /* 7000-- GLOBAL GUARDIANS */
88
89 L7000:
90 ret_val = rm >= rindex_1.mrc && rm <= rindex_1.mrd || rm >=
91 rindex_1.mrce && rm <= rindex_1.mrdw || rm == rindex_1.inmir;
92 return ret_val;
93
94 /* 8000-- ROSE/CHANNEL */
95
96 L8000:
97 ret_val = rm >= rindex_1.mra && rm <= rindex_1.mrd || rm ==
98 rindex_1.inmir;
99 return ret_val;
100
101 /* 9000-- MIRROR */
102 /* 9100 PANEL */
103
104 L9100:
105 if (rm == rindex_1.fdoor) {
106 return ret_val;
107 }
108 /* !PANEL AT FDOOR. */
109 L9000:
110 ret_val = rm >= rindex_1.mra && rm <= rindex_1.mrc || rm >=
111 rindex_1.mrae && rm <= rindex_1.mrcw;
112 return ret_val;
113
114 /* 10000-- MASTER */
115
116 L10000:
117 ret_val = rm == rindex_1.fdoor || rm == rindex_1.ncorr || rm ==
118 rindex_1.parap || rm == rindex_1.cell;
119 return ret_val;
120
121 /* 11000-- LADDER */
122
123 L11000:
124 ret_val = rm == rindex_1.cpuzz;
125 return ret_val;
126
127 } /* ghere_ */
128
129 /* MRHERE-- IS MIRROR HERE? */
130
131 /* DECLARATIONS */
132
mrhere_(rm)133 integer mrhere_(rm)
134 integer rm;
135 {
136 /* System generated locals */
137 integer ret_val, i__1;
138
139 if (rm < rindex_1.mrae || rm > rindex_1.mrdw) {
140 goto L100;
141 }
142
143 /* RM IS AN E-W ROOM, MIRROR MUST BE N-S (MDIR= 0 OR 180) */
144
145 ret_val = 1;
146 /* !ASSUME MIRROR 1 HERE. */
147 if ((rm - rindex_1.mrae) % 2 == findex_1.mdir / 180) {
148 ret_val = 2;
149 }
150 return ret_val;
151
152 /* RM IS NORTH OR SOUTH OF MIRROR. IF MIRROR IS N-S OR NOT */
153 /* WITHIN ONE ROOM OF RM, LOSE. */
154
155 L100:
156 ret_val = 0;
157 if ((i__1 = findex_1.mloc - rm, abs(i__1)) != 1 || findex_1.mdir % 180 ==
158 0) {
159 return ret_val;
160 }
161
162 /* RM IS WITHIN ONE OF MLOC, AND MDIR IS E-W */
163
164 ret_val = 1;
165 if (rm < findex_1.mloc && findex_1.mdir < 180 || rm > findex_1.mloc &&
166 findex_1.mdir > 180) {
167 ret_val = 2;
168 }
169 return ret_val;
170 } /* mrhere_ */
171