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