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