Branch data Line data Source code
1 : : /* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */
2 : : /* command1.c */
3 : :
4 : : /* This file has the two toplevel command scanners, p_process,
5 : : which works everywhere but the countryside, and p_couyntry_process,
6 : : which works.... */
7 : :
8 : : #include "glob.h"
9 : :
10 : :
11 : : /* deal with a new player command in dungeon or city mode*/
12 : 1182 : void p_process(void)
13 : : {
14 : : static int searchval=0;
15 : :
16 [ - + ]: 1182 : if (Player.status[BERSERK])
17 [ # # ]: 0 : if (goberserk()) {
18 : 0 : setgamestatus(SKIP_PLAYER);
19 : 0 : drawvision(Player.x,Player.y);
20 : : }
21 [ + - ]: 1182 : if (! gamestatusp(SKIP_PLAYER)) {
22 [ + + ]: 1182 : if (searchval > 0) {
23 : 2 : searchval--;
24 [ + - ]: 2 : if (searchval == 0) resetgamestatus(FAST_MOVE);
25 : : }
26 : 1182 : drawvision(Player.x,Player.y);
27 [ + + ]: 1182 : if (! gamestatusp(FAST_MOVE)) {
28 : 1096 : searchval = 0;
29 : 1096 : Cmd = mgetc();
30 : 1096 : clear_if_necessary();
31 : : }
32 : 1182 : Command_Duration = 0;
33 [ + - - - : 1182 : switch (Cmd) {
- - - - -
- - - - -
+ - + + +
- - + - +
+ - + - -
- + + + +
- + + - +
- + - - -
+ + - - -
- + + + +
+ + + + +
+ + + + -
+ + + + -
+ ]
34 : : case ' ':
35 : 10 : case 13: setgamestatus(SKIP_MONSTERS); break; /*no op on space or return*/
36 : 0 : case 6: abortshadowform(); break; /* ^f */
37 : 0 : case 7: wizard(); break; /* ^g */
38 : 0 : case 4: player_dump(); break; /* ^d */
39 : 0 : case 9: display_pack(); morewait(); xredraw(); break; /* ^i */
40 [ # # ]: 0 : case 11: if (gamestatusp(CHEATED)) frobgamestatus();
41 : 0 : case 12: xredraw(); setgamestatus(SKIP_MONSTERS); break; /* ^l */
42 : : #ifndef MSDOS_SUPPORTED_ANTIQUE
43 : 0 : case 16: bufferprint(); setgamestatus(SKIP_MONSTERS); break; /* ^p */
44 : : #else
45 : : case 15: bufferprint(); setgamestatus(SKIP_MONSTERS); break; /* ^o */
46 : : #endif
47 : 0 : case 18: redraw(); setgamestatus(SKIP_MONSTERS); break; /* ^r */
48 [ # # ]: 0 : case 23: if (gamestatusp(CHEATED)) drawscreen(); break; /* ^w */
49 : : case 24: /* ^x */
50 [ # # ][ # # ]: 0 : if (gamestatusp(CHEATED) ||
51 : 0 : Player.rank[ADEPT])
52 : 0 : wish(1);
53 : 0 : Command_Duration = 5;
54 : 0 : break;
55 : 0 : case 'a': zapwand();
56 : 0 : Command_Duration = Player.speed*8/5;
57 : 0 : break;
58 : 0 : case 'c': closedoor();
59 : 0 : Command_Duration = Player.speed*2/5;
60 : 0 : break;
61 : 0 : case 'd': drop();
62 : 0 : Command_Duration = Player.speed*5/5;
63 : 0 : break;
64 : 2 : case 'e': eat();
65 : 2 : Command_Duration = 30;
66 : 2 : break;
67 : 0 : case 'f': fire();
68 : 0 : Command_Duration = Player.speed*5/5;
69 : 0 : break;
70 : 10 : case 'g': pickup();
71 : 10 : Command_Duration = Player.speed*10/5;
72 : 10 : break;
73 : : case 'i':
74 : 10 : do_inventory_control();
75 : 10 : break;
76 : 2 : case 'm': magic();
77 : 2 : Command_Duration = 12;
78 : 2 : break;
79 : 0 : case 'o': opendoor();
80 : 0 : Command_Duration = Player.speed*5/5;
81 : 0 : break;
82 : 0 : case 'p': pickpocket();
83 : 0 : Command_Duration = Player.speed*20/5;
84 : 0 : break;
85 : 1 : case 'q': quaff();
86 : 1 : Command_Duration = 10;
87 : 1 : break;
88 : 0 : case 'r': peruse();
89 : 0 : Command_Duration = 20;
90 : 0 : break;
91 : 2 : case 's': search(&searchval);
92 : 2 : Command_Duration = 20;
93 : 2 : break;
94 : 24 : case 't': talk();
95 : 24 : Command_Duration = 10;
96 : 24 : break;
97 : 0 : case 'v': vault();
98 : 0 : Command_Duration = Player.speed*10/5;
99 : 0 : break;
100 : 5 : case 'x': examine();
101 : 5 : Command_Duration = 1;
102 : 5 : break;
103 : 0 : case 'z': bash_location();
104 : 0 : Command_Duration = Player.speed*10/5;
105 : 0 : break;
106 : 0 : case 'A': activate();
107 : 0 : Command_Duration = 10;
108 : 0 : break;
109 : 0 : case 'C': callitem();
110 : 0 : break;
111 : 1 : case 'D': disarm();
112 : 1 : Command_Duration = 30;
113 : 1 : break;
114 : 2 : case 'E': dismount_steed();
115 : 2 : Command_Duration = Player.speed*10/5;
116 : 2 : break;
117 : 2 : case 'F': tacoptions();
118 : 2 : break;
119 : 3 : case 'G': give();
120 : 3 : Command_Duration = 10;
121 : 3 : break;
122 : : case 'I':
123 [ # # ]: 0 : if (! optionp(TOPINV)) top_inventory_control();
124 : : else {
125 : 0 : display_possessions();
126 : 0 : inventory_control();
127 : : }
128 : 0 : break;
129 : 3 : case 'M': city_move();
130 : 3 : Command_Duration = 10;
131 : 3 : break;
132 : 4 : case 'O': setoptions();
133 : : #if defined(AMIGA) || defined(MSDOS_SUPPORTED_ANTIQUE)
134 : : show_screen();
135 : : xredraw();
136 : : #endif
137 : 4 : break;
138 : 0 : case 'P': show_license();
139 : 0 : break; /* actually show_license is in file.c */
140 : 5 : case 'Q': quit();
141 : 2 : break;
142 : 0 : case 'R': rename_player();
143 : 0 : break;
144 : 5 : case 'S': save(optionp(COMPRESS_OPTION), FALSE);
145 : 3 : break;
146 : 0 : case 'T': tunnel();
147 : 0 : Command_Duration = Player.speed*30/5;
148 : 0 : break;
149 : 0 : case 'V': version();
150 : 0 : break;
151 : : #ifdef MSDOS_SUPPORTED_ANTIQUE
152 : : case 'X': check_memory(); break;
153 : : #endif
154 : 0 : case 'Z': bash_item();
155 : 0 : Command_Duration = Player.speed*10/5;
156 : 0 : break;
157 : 2 : case '.': rest();
158 : 2 : Command_Duration = 10;
159 : 2 : break;
160 : : case ',':
161 : 1 : Command_Duration = 10;
162 : 1 : nap();
163 : 1 : break;
164 : : case '>':
165 : 0 : downstairs();
166 : 0 : break;
167 : : case '<':
168 : 0 : upstairs();
169 : 0 : break;
170 : : case '@':
171 : 0 : p_movefunction(Level->site[Player.x][Player.y].p_locf);
172 : 0 : Command_Duration = 5;
173 : 0 : break;
174 [ # # ]: 0 : case '#': if (gamestatusp(CHEATED)) editstats(); break; /* RAC - char editor */
175 : 8 : case '/': charid(); setgamestatus(SKIP_MONSTERS);
176 : 8 : break;
177 : 23 : case '?': help(); setgamestatus(SKIP_MONSTERS);
178 : 23 : break;
179 : : case '4':
180 : 266 : case 'h': moveplayer(-1,0);
181 : 266 : Command_Duration = Player.speed*5/5;
182 : 266 : break;
183 : : case '2':
184 : 122 : case 'j': moveplayer(0,1);
185 : 122 : Command_Duration = Player.speed*5/5;
186 : 122 : break;
187 : : case '8':
188 : 85 : case 'k': moveplayer(0,-1);
189 : 85 : Command_Duration = Player.speed*5/5;
190 : 85 : break;
191 : : case '6':
192 : 274 : case 'l': moveplayer(1,0);
193 : 274 : Command_Duration = Player.speed*5/5;
194 : 274 : break;
195 : : case '1':
196 : 54 : case 'b': moveplayer(-1,1);
197 : 54 : Command_Duration = Player.speed*5/5;
198 : 54 : break;
199 : : case '3':
200 : 52 : case 'n': moveplayer(1,1);
201 : 52 : Command_Duration = Player.speed*5/5;
202 : 52 : break;
203 : : case '7':
204 : 49 : case 'y': moveplayer(-1,-1);
205 : 49 : Command_Duration = Player.speed*5/5;
206 : 49 : break;
207 : : case '9':
208 : 47 : case 'u': moveplayer(1,-1);
209 : 47 : Command_Duration = Player.speed*5/5;
210 : 47 : break;
211 : : case '5':
212 : 55 : setgamestatus(SKIP_MONSTERS); /* don't do anything; a dummy turn */
213 : 55 : Cmd = mgetc();
214 [ + - ][ + + ]: 81 : while ((Cmd != ESCAPE) &&
215 [ - + ][ + + ]: 80 : ((Cmd < '1') || (Cmd > '9') || (Cmd=='5'))) {
216 : 26 : print3("Run in keypad direction [ESCAPE to abort]: ");
217 : 26 : Cmd = mgetc();
218 : : }
219 [ + - ]: 55 : if (Cmd != ESCAPE) setgamestatus(FAST_MOVE);
220 : 55 : break;
221 : 18 : case 'H': setgamestatus(FAST_MOVE); Cmd = 'h'; moveplayer(-1,0);
222 : 18 : Command_Duration = Player.speed*4/5;
223 : 18 : break;
224 : 1 : case 'J': setgamestatus(FAST_MOVE); Cmd = 'j'; moveplayer(0,1);
225 : 1 : Command_Duration = Player.speed*4/5;
226 : 1 : break;
227 : 0 : case 'K': setgamestatus(FAST_MOVE); Cmd = 'k'; moveplayer(0,-1);
228 : 0 : Command_Duration = Player.speed*4/5;
229 : 0 : break;
230 : 5 : case 'L': setgamestatus(FAST_MOVE); Cmd = 'l'; moveplayer(1,0);
231 : 5 : Command_Duration = Player.speed*4/5;
232 : 5 : break;
233 : 4 : case 'B': setgamestatus(FAST_MOVE); Cmd = 'b'; moveplayer(-1,1);
234 : 4 : Command_Duration = Player.speed*4/5;
235 : 4 : break;
236 : 1 : case 'N': setgamestatus(FAST_MOVE); Cmd = 'n'; moveplayer(1,1);
237 : 1 : Command_Duration = Player.speed*4/5;
238 : 1 : break;
239 : 4 : case 'Y': setgamestatus(FAST_MOVE); Cmd = 'y'; moveplayer(-1,-1);
240 : 4 : Command_Duration = Player.speed*4/5;
241 : 4 : break;
242 : 0 : case 'U': setgamestatus(FAST_MOVE); Cmd = 'u'; moveplayer(1,-1);
243 : 0 : Command_Duration = Player.speed*4/5;
244 : 0 : break;
245 : 20 : default: commanderror(); setgamestatus(SKIP_MONSTERS); break;
246 : : }
247 : : }
248 [ + + ]: 1177 : if (Current_Environment != E_COUNTRYSIDE) roomcheck();
249 : 1177 : screencheck(Player.x,Player.y);
250 : 1177 : }
251 : :
252 : :
253 : :
254 : :
255 : :
256 : : /* deal with a new player command in countryside mode */
257 : 108 : void p_country_process(void)
258 : : {
259 : : int no_op;
260 : :
261 : 108 : drawvision(Player.x,Player.y);
262 : : do {
263 : 111 : no_op = FALSE;
264 : 111 : Cmd = mgetc();
265 : 111 : clear_if_necessary();
266 [ - - - - : 111 : switch (Cmd) {
- - - - +
- + - - -
- - - + -
+ - + - -
+ + - - +
+ - + +
- ]
267 : : case ' ':
268 : 0 : case 13: no_op = TRUE; break;
269 : 0 : case 7: wizard(); break; /* ^g */
270 : 0 : case 12: xredraw(); no_op = TRUE; break; /* ^l */
271 : : #ifndef MSDOS_SUPPORTED_ANTIQUE
272 : 0 : case 16: bufferprint(); no_op = TRUE; break; /* ^p */
273 : : #else
274 : : case 15: bufferprint(); no_op = TRUE; break; /* ^o */
275 : : #endif
276 : 0 : case 18: redraw(); no_op = TRUE; break; /* ^r */
277 [ # # ]: 0 : case 23: if (gamestatusp(CHEATED)) drawscreen(); break; /* ^w */
278 [ # # ][ # # ]: 0 : case 24: if (gamestatusp(CHEATED) ||
279 : 0 : Player.rank[ADEPT]) wish(1); break; /* ^x */
280 : 0 : case 'd': drop(); break;
281 : 6 : case 'e': eat(); break;
282 : : case 'i':
283 : 0 : do_inventory_control();
284 : 0 : break;
285 : 2 : case 's': countrysearch(); break;
286 : 0 : case 'x': examine(); break;
287 : 0 : case 'E': dismount_steed(); break;
288 : 0 : case 'H': hunt(Country[Player.x][Player.y].current_terrain_type); break;
289 : : case 'I':
290 [ # # ]: 0 : if (! optionp(TOPINV)) top_inventory_control();
291 : : else {
292 : 0 : menuclear();
293 : 0 : display_possessions();
294 : 0 : inventory_control();
295 : : }
296 : 0 : break;
297 : 0 : case 'O': setoptions(); break;
298 : 0 : case 'P': show_license(); break; /* actually show_license is in file.c */
299 : 1 : case 'Q': quit(); break;
300 : 0 : case 'R': rename_player(); break;
301 : 4 : case 'S': save(optionp(COMPRESS_OPTION), FALSE); break;
302 : 0 : case 'V': version(); break;
303 : : #ifdef MSDOS_SUPPORTED_ANTIQUE
304 : : case 'X': check_memory(); break;
305 : : #endif
306 : : case '>':
307 : 4 : enter_site(Country[Player.x][Player.y].base_terrain_type);
308 : 4 : break;
309 [ # # ]: 0 : case '#': if (gamestatusp(CHEATED)) editstats(); break; /* RAC - char editor */
310 : 0 : case '/': charid(); no_op = TRUE; break;
311 : 3 : case '?': help(); no_op = TRUE; break;
312 : : case '4':
313 : 41 : case 'h': movepincountry(-1,0); break;
314 : : case '2':
315 : 0 : case 'j': movepincountry(0,1); break;
316 : : case '8':
317 : 0 : case 'k': movepincountry(0,-1); break;
318 : : case '6':
319 : 23 : case 'l': movepincountry(1,0); break;
320 : : case '1':
321 : 6 : case 'b': movepincountry(-1,1); break;
322 : : case '3':
323 : 0 : case 'n': movepincountry(1,1); break;
324 : : case '7':
325 : 8 : case 'y': movepincountry(-1,-1); break;
326 : : case '9':
327 : 13 : case 'u': movepincountry(1,-1); break;
328 : 0 : default: commanderror(); no_op = TRUE; break;
329 : : }
330 [ + + ]: 107 : } while (no_op);
331 : 104 : screencheck(Player.x,Player.y);
332 : 104 : }
333 : :
334 : :
|