Install input{,-event-types}.h to /usr/include/compat/linux too.
[dragonfly.git] / games / rogue / play.c
blob7bc57ae4e6ed612d6dfdbb14c464843ee6dc5077
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 $
37 * play.c
39 * This source herein may be modified and/or distributed by anybody who
40 * so desires, with the following restrictions:
41 * 1.) No portion of this notice shall be removed.
42 * 2.) Credit shall not be taken for the creation of this source.
43 * 3.) This code is not to be traded, sold, or used for personal
44 * gain or profit.
48 #include "rogue.h"
50 boolean interrupted = 0;
52 static const char unknown_command[] = "unknown command";
54 void
55 play_level(void)
57 short ch;
58 int count;
60 for (;;) {
61 interrupted = 0;
62 if (hit_message[0]) {
63 message(hit_message, 1);
64 hit_message[0] = 0;
66 if (trap_door) {
67 trap_door = 0;
68 return;
70 move(rogue.row, rogue.col);
71 refresh();
73 ch = rgetchar();
74 CMCH:
75 check_message();
76 count = 0;
77 CH:
78 switch(ch) {
79 case '.':
80 rest((count > 0) ? count : 1);
81 break;
82 case 's':
83 search(((count > 0) ? count : 1), 0);
84 break;
85 case 'i':
86 inventory(&rogue.pack, ALL_OBJECTS);
87 break;
88 case 'f':
89 fight(0);
90 break;
91 case 'F':
92 fight(1);
93 break;
94 case 'h':
95 case 'j':
96 case 'k':
97 case 'l':
98 case 'y':
99 case 'u':
100 case 'n':
101 case 'b':
102 one_move_rogue(ch, 1);
103 break;
104 case 'H':
105 case 'J':
106 case 'K':
107 case 'L':
108 case 'B':
109 case 'Y':
110 case 'U':
111 case 'N':
112 case '\010':
113 case '\012':
114 case '\013':
115 case '\014':
116 case '\031':
117 case '\025':
118 case '\016':
119 case '\002':
120 multiple_move_rogue(ch);
121 break;
122 case 'e':
123 eat();
124 break;
125 case 'q':
126 quaff();
127 break;
128 case 'r':
129 read_scroll();
130 break;
131 case 'm':
132 move_onto();
133 break;
134 case ',':
135 kick_into_pack();
136 break;
137 case 'd':
138 drop();
139 break;
140 case 'P':
141 put_on_ring();
142 break;
143 case 'R':
144 remove_ring();
145 break;
146 case '\020':
147 do {
148 remessage(count++);
149 ch = rgetchar();
150 } while (ch == '\020');
151 goto CMCH;
152 break;
153 case '\027':
154 wizardize();
155 break;
156 case '>':
157 if (drop_check()) {
158 return;
160 break;
161 case '<':
162 if (check_up()) {
163 return;
165 break;
166 case ')':
167 case ']':
168 inv_armor_weapon(ch == ')');
169 break;
170 case '=':
171 inv_rings();
172 break;
173 case '^':
174 id_trap();
175 break;
176 case '/':
177 id_type();
178 break;
179 case '?':
180 id_com();
181 break;
182 case '!':
183 do_shell();
184 break;
185 case 'o':
186 edit_opts();
187 break;
188 case 'I':
189 single_inv(0);
190 break;
191 case 'T':
192 take_off();
193 break;
194 case 'W':
195 wear();
196 break;
197 case 'w':
198 wield();
199 break;
200 case 'c':
201 call_it();
202 break;
203 case 'z':
204 zapp();
205 break;
206 case 't':
207 throw();
208 break;
209 case 'v':
210 message("rogue-clone: Version III. (Tim Stoehr was here), tektronix!zeus!tims", 0);
211 break;
212 case 'Q':
213 quit(0);
214 /* FALLTHROUGH */
215 case '0':
216 case '1':
217 case '2':
218 case '3':
219 case '4':
220 case '5':
221 case '6':
222 case '7':
223 case '8':
224 case '9':
225 move(rogue.row, rogue.col);
226 refresh();
227 do {
228 if (count < 100) {
229 count = (10 * count) + (ch - '0');
231 ch = rgetchar();
232 } while (is_digit(ch));
233 if (ch != CANCEL) {
234 goto CH;
236 break;
237 case ' ':
238 break;
239 case '\011':
240 if (wizard) {
241 inventory(&level_objects, ALL_OBJECTS);
242 } else {
243 message(unknown_command, 0);
245 break;
246 case '\023':
247 if (wizard) {
248 draw_magic_map();
249 } else {
250 message(unknown_command, 0);
252 break;
253 case '\024':
254 if (wizard) {
255 show_traps();
256 } else {
257 message(unknown_command, 0);
259 break;
260 case '\017':
261 if (wizard) {
262 show_objects();
263 } else {
264 message(unknown_command, 0);
266 break;
267 case '\001':
268 show_average_hp();
269 break;
270 case '\003':
271 if (wizard) {
272 c_object_for_wizard();
273 } else {
274 message(unknown_command, 0);
276 break;
277 case '\015':
278 if (wizard) {
279 show_monsters();
280 } else {
281 message(unknown_command, 0);
283 break;
284 case 'S':
285 save_game();
286 break;
287 default:
288 message(unknown_command, 0);
289 break;