1
0
src/wip/rogue/play.c
2023-11-25 11:23:42 -07:00

187 lines
5.4 KiB
C

/* $NetBSD: play.c,v 1.10 2019/02/03 03:19:25 mrg 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;
static const char unknown_command[] = "unknown command";
void
play_level(void)
{
short ch;
int count;
enum { NORMAL, COUNTED, CHECK } state;
state = NORMAL;
for(;;){
switch(state){
case NORMAL:
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();
case CHECK:
check_message();
count = 0;
}
state = NORMAL;
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 'Y': case 'U':
case 'N': case 'B': 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');
state = CHECK;
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 (trinity mod)."
" (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)
state = COUNTED;
break;
case ' ': break;
case '\011': if(!wizard){
messagef(0, "%s", unknown_command);
break;
}
inventory(&level_objects, ALL_OBJECTS); break;
case '\023': if(!wizard){
messagef(0, "%s", unknown_command);
break;
}
draw_magic_map(); break;
case '\024': if(!wizard){
messagef(0, "%s", unknown_command);
break;
}
show_traps(); break;
case '\017': if(!wizard){
messagef(0, "%s", unknown_command);
break;
}
show_objects(); break;
case '\001': show_average_hp(); break;
case '\003': if(!wizard){
messagef(0, "%s", unknown_command);
break;
}
c_object_for_wizard(); break;
case '\015': if(!wizard){
messagef(0, "%s", unknown_command);
break;
}
show_monsters(); break;
case 'S': save_game(); break;
default: messagef(0, "%s", unknown_command); break;
}
}
}