/* $OpenBSD: play.c,v 1.8 2009/10/27 23:59:26 deraadt Exp $ */ /* $NetBSD: play.c,v 1.3 1995/04/22 10:28:04 cgd Exp $ */ /* * Copyright (c) 1988, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Timothy C. Stoehr. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * play.c * * This source herein may be modified and/or distributed by anybody who * so desires, with the following restrictions: * 1.) No portion of this notice shall be removed. * 2.) Credit shall not be taken for the creation of this source. * 3.) This code is not to be traded, sold, or used for personal * gain or profit. * */ #include "rogue.h" boolean interrupted = 0; const char *unknown_command = "unknown command"; void play_level(void) { short ch; int count; for (;;) { interrupted = 0; if (hit_message[0]) { messagef(1, "%s", hit_message); hit_message[0] = 0; } if (trap_door) { trap_door = 0; return; } move(rogue.row, rogue.col); refresh(); ch = rgetchar(); CMCH: check_message(); count = 0; CH: switch(ch) { case '.': rest((count > 0) ? count : 1); break; case 's': search(((count > 0) ? count : 1), 0); break; case 'i': inventory(&rogue.pack, ALL_OBJECTS); break; case 'f': fight(0); break; case 'F': fight(1); break; case 'h': case 'j': case 'k': case 'l': case 'y': case 'u': case 'n': case 'b': (void) one_move_rogue(ch, 1); break; case 'H': case 'J': case 'K': case 'L': case 'B': case 'Y': case 'U': case 'N': case '\010': case '\012': case '\013': case '\014': case '\031': case '\025': case '\016': case '\002': multiple_move_rogue(ch); break; case 'e': eat(); break; case 'q': quaff(); break; case 'r': read_scroll(); break; case 'm': move_onto(); break; case ',': kick_into_pack(); break; case 'd': drop(); break; case 'P': put_on_ring(); break; case 'R': remove_ring(); break; case '\020': do { remessage(count++); ch = rgetchar(); } while (ch == '\020'); goto CMCH; break; case '\027': wizardize(); break; case '>': if (drop_check()) { return; } break; case '<': if (check_up()) { return; } break; case ')': case ']': inv_armor_weapon(ch == ')'); break; case '=': inv_rings(); break; case '^': id_trap(); break; case '/': id_type(); break; case '?': id_com(); break; case '!': do_shell(); break; case 'o': edit_opts(); break; case 'I': single_inv(0); break; case 'T': take_off(); break; case 'W': wear(); break; case 'w': wield(); break; case 'c': call_it(); break; case 'z': zapp(); break; case 't': throw(); break; case 'v': messagef(0, "rogue-clone: Version III. (Tim Stoehr was here), tektronix!zeus!tims"); break; case 'Q': quit(0); case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': move(rogue.row, rogue.col); refresh(); do { if (count < 100) { count = (10 * count) + (ch - '0'); } ch = rgetchar(); } while (is_digit(ch)); if (ch != CANCEL) { goto CH; } break; case ' ': break; case '\011': if (wizard) { inventory(&level_objects, ALL_OBJECTS); } else { messagef(0, "%s", unknown_command); } break; case '\023': if (wizard) { draw_magic_map(); } else { messagef(0, "%s", unknown_command); } break; case '\024': if (wizard) { show_traps(); } else { messagef(0, "%s", unknown_command); } break; case '\017': if (wizard) { show_objects(); } else { messagef(0, "%s", unknown_command); } break; case '\001': show_average_hp(); break; case '\003': if (wizard) { c_object_for_wizard(); } else { messagef(0, "%s", unknown_command); } break; case '\015': if (wizard) { show_monsters(); } else { messagef(0, "%s", unknown_command); } break; case 'S': save_game(); break; default: messagef(0, "%s", unknown_command); break; } } }