w(1): Limit affect of locale change
[dragonfly.git] / games / rogue / play.c
blobdb1e8720e9a10fc22575d625bdd41c6da95b3adb
1 /*-
2 * Copyright (c) 1988, 1993
3 * The Regents of the University of California. All rights reserved.
5 * This code is derived from software contributed to Berkeley by
6 * Timothy C. Stoehr.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. Neither the name of the University nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
32 * @(#)play.c 8.1 (Berkeley) 5/31/93
33 * $FreeBSD: src/games/rogue/play.c,v 1.3 1999/11/30 03:49:26 billf Exp $
34 * $DragonFly: src/games/rogue/play.c,v 1.3 2006/09/02 19:31:07 pavalos Exp $
38 * play.c
40 * This source herein may be modified and/or distributed by anybody who
41 * so desires, with the following restrictions:
42 * 1.) No portion of this notice shall be removed.
43 * 2.) Credit shall not be taken for the creation of this source.
44 * 3.) This code is not to be traded, sold, or used for personal
45 * gain or profit.
49 #include "rogue.h"
51 boolean interrupted = 0;
52 const char *unknown_command = "unknown command";
54 extern short party_room, bear_trap;
55 extern char hit_message[];
56 extern boolean wizard, trap_door;
58 void
59 play_level(void)
61 short ch;
62 int count;
64 for (;;) {
65 interrupted = 0;
66 if (hit_message[0]) {
67 message(hit_message, 1);
68 hit_message[0] = 0;
70 if (trap_door) {
71 trap_door = 0;
72 return;
74 move(rogue.row, rogue.col);
75 refresh();
77 ch = rgetchar();
78 CMCH:
79 check_message();
80 count = 0;
81 CH:
82 switch(ch) {
83 case '.':
84 rest((count > 0) ? count : 1);
85 break;
86 case 's':
87 search(((count > 0) ? count : 1), 0);
88 break;
89 case 'i':
90 inventory(&rogue.pack, ALL_OBJECTS);
91 break;
92 case 'f':
93 fight(0);
94 break;
95 case 'F':
96 fight(1);
97 break;
98 case 'h':
99 case 'j':
100 case 'k':
101 case 'l':
102 case 'y':
103 case 'u':
104 case 'n':
105 case 'b':
106 one_move_rogue(ch, 1);
107 break;
108 case 'H':
109 case 'J':
110 case 'K':
111 case 'L':
112 case 'B':
113 case 'Y':
114 case 'U':
115 case 'N':
116 case '\010':
117 case '\012':
118 case '\013':
119 case '\014':
120 case '\031':
121 case '\025':
122 case '\016':
123 case '\002':
124 multiple_move_rogue(ch);
125 break;
126 case 'e':
127 eat();
128 break;
129 case 'q':
130 quaff();
131 break;
132 case 'r':
133 read_scroll();
134 break;
135 case 'm':
136 move_onto();
137 break;
138 case ',':
139 kick_into_pack();
140 break;
141 case 'd':
142 drop();
143 break;
144 case 'P':
145 put_on_ring();
146 break;
147 case 'R':
148 remove_ring();
149 break;
150 case '\020':
151 do {
152 remessage(count++);
153 ch = rgetchar();
154 } while (ch == '\020');
155 goto CMCH;
156 break;
157 case '\027':
158 wizardize();
159 break;
160 case '>':
161 if (drop_check()) {
162 return;
164 break;
165 case '<':
166 if (check_up()) {
167 return;
169 break;
170 case ')':
171 case ']':
172 inv_armor_weapon(ch == ')');
173 break;
174 case '=':
175 inv_rings();
176 break;
177 case '^':
178 id_trap();
179 break;
180 case '/':
181 id_type();
182 break;
183 case '?':
184 id_com();
185 break;
186 case '!':
187 do_shell();
188 break;
189 case 'o':
190 edit_opts();
191 break;
192 case 'I':
193 single_inv(0);
194 break;
195 case 'T':
196 take_off();
197 break;
198 case 'W':
199 wear();
200 break;
201 case 'w':
202 wield();
203 break;
204 case 'c':
205 call_it();
206 break;
207 case 'z':
208 zapp();
209 break;
210 case 't':
211 throw();
212 break;
213 case 'v':
214 message("rogue-clone: Version III. (Tim Stoehr was here), tektronix!zeus!tims", 0);
215 break;
216 case 'Q':
217 quit(0);
218 case '0':
219 case '1':
220 case '2':
221 case '3':
222 case '4':
223 case '5':
224 case '6':
225 case '7':
226 case '8':
227 case '9':
228 move(rogue.row, rogue.col);
229 refresh();
230 do {
231 if (count < 100) {
232 count = (10 * count) + (ch - '0');
234 ch = rgetchar();
235 } while (is_digit(ch));
236 if (ch != CANCEL) {
237 goto CH;
239 break;
240 case ' ':
241 break;
242 case '\011':
243 if (wizard) {
244 inventory(&level_objects, ALL_OBJECTS);
245 } else {
246 message(unknown_command, 0);
248 break;
249 case '\023':
250 if (wizard) {
251 draw_magic_map();
252 } else {
253 message(unknown_command, 0);
255 break;
256 case '\024':
257 if (wizard) {
258 show_traps();
259 } else {
260 message(unknown_command, 0);
262 break;
263 case '\017':
264 if (wizard) {
265 show_objects();
266 } else {
267 message(unknown_command, 0);
269 break;
270 case '\001':
271 show_average_hp();
272 break;
273 case '\003':
274 if (wizard) {
275 c_object_for_wizard();
276 } else {
277 message(unknown_command, 0);
279 break;
280 case '\015':
281 if (wizard) {
282 show_monsters();
283 } else {
284 message(unknown_command, 0);
286 break;
287 case 'S':
288 save_game();
289 break;
290 default:
291 message(unknown_command, 0);
292 break;