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