xref: /original-bsd/games/battlestar/room.c (revision 65d10654)
1 /*
2  * Copyright (c) 1983, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  */
7 
8 #ifndef lint
9 static char sccsid[] = "@(#)room.c	8.2 (Berkeley) 04/28/95";
10 #endif /* not lint */
11 
12 #include "extern.h"
13 
14 writedes()
15 {
16 	int compass;
17 	register char *p;
18 	register c;
19 
20 	printf("\n\t%s\n", location[position].name);
21 	if (beenthere[position] < 3) {
22 		compass = NORTH;
23 		for (p = location[position].desc; c = *p++;)
24 			if (c != '-' && c != '*' && c != '+')
25 				putchar(c);
26 			else {
27 				if (c != '*')
28 					printf(truedirec(compass, c));
29 				compass++;
30 			}
31 	}
32 }
33 
34 printobjs()
35 {
36 	register unsigned int *p = location[position].objects;
37 	register n;
38 
39 	printf("\n");
40 	for (n = 0; n < NUMOFOBJECTS; n++)
41 		if (testbit(p, n) && objdes[n])
42 			puts(objdes[n]);
43 }
44 
45 whichway(here)
46 struct room here;
47 {
48 	switch(direction) {
49 
50 		case NORTH:
51 			left = here.west;
52 			right = here.east;
53 			ahead = here.north;
54 			back = here.south;
55 			break;
56 
57 		case SOUTH:
58 			left = here.east;
59 			right = here.west;
60 			ahead = here.south;
61 			back = here.north;
62 			break;
63 
64 		case EAST:
65 			left = here.north;
66 			right = here.south;
67 			ahead = here.east;
68 			back = here.west;
69 			break;
70 
71 		case WEST:
72 			left = here.south;
73 			right = here.north;
74 			ahead = here.west;
75 			back = here.east;
76 			break;
77 
78 	}
79 }
80 
81 char *
82 truedirec(way, option)
83 int way;
84 char option;
85 {
86 	switch(way) {
87 
88 		case NORTH:
89 			switch(direction) {
90 				case NORTH:
91 					return("ahead");
92 				case SOUTH:
93 					return(option == '+' ? "behind you" : "back");
94 				case EAST:
95 					return("left");
96 				case WEST:
97 					return("right");
98 			}
99 
100 		case SOUTH:
101 			switch(direction) {
102 				case NORTH:
103 					return(option == '+' ? "behind you" : "back");
104 				case SOUTH:
105 					return("ahead");
106 				case EAST:
107 					return("right");
108 				case WEST:
109 					return("left");
110 			}
111 
112 		case EAST:
113 			switch(direction) {
114 				case NORTH:
115 					return("right");
116 				case SOUTH:
117 					return("left");
118 				case EAST:
119 					return("ahead");
120 				case WEST:
121 					return(option == '+' ? "behind you" : "back");
122 			}
123 
124 		case WEST:
125 			switch(direction) {
126 				case NORTH:
127 					return("left");
128 				case SOUTH:
129 					return("right");
130 				case EAST:
131 					return(option == '+' ? "behind you" : "back");
132 				case WEST:
133 					return("ahead");
134 			}
135 
136 		default:
137 			printf("Error: room %d.  More than four directions wanted.", position);
138 			return("!!");
139       }
140 }
141 
142 newway(thisway)
143 int thisway;
144 {
145 	switch(direction){
146 
147 		case NORTH:
148 			switch(thisway){
149 				case LEFT:
150 					direction = WEST;
151 					break;
152 				case RIGHT:
153 					direction = EAST;
154 					break;
155 				case BACK:
156 					direction = SOUTH;
157 					break;
158 			}
159 			break;
160 		case SOUTH:
161 			switch(thisway){
162 				case LEFT:
163 					direction = EAST;
164 					break;
165 				case RIGHT:
166 					direction = WEST;
167 					break;
168 				case BACK:
169 					direction = NORTH;
170 					break;
171 			}
172 			break;
173 		case EAST:
174 			switch(thisway){
175 				case LEFT:
176 					direction = NORTH;
177 					break;
178 				case RIGHT:
179 					direction = SOUTH;
180 					break;
181 				case BACK:
182 					direction = WEST;
183 					break;
184 			}
185 			break;
186 		case WEST:
187 			switch(thisway){
188 				case LEFT:
189 					direction = SOUTH;
190 					break;
191 				case RIGHT:
192 					direction = NORTH;
193 					break;
194 				case BACK:
195 					direction = EAST;
196 					break;
197 			}
198 			break;
199       }
200 }
201