xref: /original-bsd/contrib/dungeon/dso6.F (revision 8af5b582)
1C GHERE--	IS GLOBAL ACTUALLY IN THIS 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 GHERE(OBJ,RM)
10	IMPLICIT INTEGER(A-Z)
11#include "rooms.h"
12#include "rflag.h"
13#include "rindex.h"
14C
15	COMMON /STAR/ MBASE,STRBIT
16C GHERE, PAGE 2
17C
18	GHERE=.TRUE.
19C						!ASSUME WINS.
20	GO TO (1000,1000,1000,1000,1000,1000,
21&		1000,1000,1000,1000,1000,
22&		2000,3000,4000,5000,5000,5000,6000,
23&		7000,8000,9000,9100,8000,10000,11000),OBJ-STRBIT
24	CALL BUG(60,OBJ)
25C
26C 1000--	STARS ARE ALWAYS HERE
27C
281000	RETURN
29C
30C 2000--	BIRD
31C
322000	GHERE=((RM.GE.FORE1).AND.(RM.LT.CLEAR)).OR.(RM.EQ.MTREE)
33	RETURN
34C
35C 3000--	TREE
36C
373000	GHERE=((RM.GE.FORE1).AND.(RM.LT.CLEAR)).AND.(RM.NE.FORE3)
38	RETURN
39C
40C 4000--	NORTH WALL
41C
424000	GHERE=((RM.GE.BKVW).AND.(RM.LE.BKBOX)).OR.(RM.EQ.CPUZZ)
43	RETURN
44C
45C 5000--	EAST, SOUTH, WEST WALLS
46C
475000	GHERE=((RM.GE.BKVW).AND.(RM.LT.BKBOX)).OR.(RM.EQ.CPUZZ)
48	RETURN
49C
50C 6000--	GLOBAL WATER
51C
526000	GHERE=and(RFLAG(RM),(RWATER+RFILL)).NE.0
53	RETURN
54C
55C 7000--	GLOBAL GUARDIANS
56C
577000	GHERE=((RM.GE.MRC).AND.(RM.LE.MRD)).OR.
58&		((RM.GE.MRCE).AND.(RM.LE.MRDW)).OR.(RM.EQ.INMIR)
59	RETURN
60C
61C 8000--	ROSE/CHANNEL
62C
638000	GHERE=((RM.GE.MRA).AND.(RM.LE.MRD)).OR.(RM.EQ.INMIR)
64	RETURN
65C
66C 9000--	MIRROR
67C 9100		PANEL
68C
699100	IF(RM.EQ.FDOOR) RETURN
70C						!PANEL AT FDOOR.
719000	GHERE=((RM.GE.MRA).AND.(RM.LE.MRC)).OR.
72&		((RM.GE.MRAE).AND.(RM.LE.MRCW))
73	RETURN
74C
75C 10000--	MASTER
76C
7710000	GHERE=(RM.EQ.FDOOR).OR.(RM.EQ.NCORR).OR.(RM.EQ.PARAP).OR.
78&		(RM.EQ.CELL)
79	RETURN
80C
81C 11000--	LADDER
82C
8311000	GHERE=(RM.EQ.CPUZZ)
84	RETURN
85C
86	END
87C MRHERE--	IS MIRROR HERE?
88C
89C DECLARATIONS
90C
91	INTEGER FUNCTION MRHERE(RM)
92	IMPLICIT INTEGER(A-Z)
93C
94C ROOMS
95#include "rindex.h"
96#include "flags.h"
97C MRHERE, PAGE 2
98C
99	IF((RM.LT.MRAE).OR.(RM.GT.MRDW)) GO TO 100
100C
101C RM IS AN E-W ROOM, MIRROR MUST BE N-S (MDIR= 0 OR 180)
102C
103	MRHERE=1
104C						!ASSUME MIRROR 1 HERE.
105	IF(MOD(RM-MRAE,2).EQ.(MDIR/180)) MRHERE=2
106	RETURN
107C
108C RM IS NORTH OR SOUTH OF MIRROR.  IF MIRROR IS N-S OR NOT
109C WITHIN ONE ROOM OF RM, LOSE.
110C
111100	MRHERE=0
112	IF((IABS(MLOC-RM).NE.1).OR.(MOD(MDIR,180).EQ.0)) RETURN
113C
114C RM IS WITHIN ONE OF MLOC, AND MDIR IS E-W
115C
116	MRHERE=1
117	IF(((RM.LT.MLOC).AND.(MDIR.LT.180)).OR.
118&	  ((RM.GT.MLOC).AND.(MDIR.GT.180))) MRHERE=2
119	RETURN
120	END
121