335 lines
9.3 KiB
C
335 lines
9.3 KiB
C
/* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */
|
|
/* command1.c */
|
|
|
|
/* This file has the two toplevel command scanners, p_process,
|
|
which works everywhere but the countryside, and p_couyntry_process,
|
|
which works.... */
|
|
|
|
#include "glob.h"
|
|
|
|
|
|
/* deal with a new player command in dungeon or city mode*/
|
|
void p_process(void)
|
|
{
|
|
static int searchval=0;
|
|
|
|
if (Player.status[BERSERK])
|
|
if (goberserk()) {
|
|
setgamestatus(SKIP_PLAYER);
|
|
drawvision(Player.x,Player.y);
|
|
}
|
|
if (! gamestatusp(SKIP_PLAYER)) {
|
|
if (searchval > 0) {
|
|
searchval--;
|
|
if (searchval == 0) resetgamestatus(FAST_MOVE);
|
|
}
|
|
drawvision(Player.x,Player.y);
|
|
if (! gamestatusp(FAST_MOVE)) {
|
|
searchval = 0;
|
|
Cmd = mgetc();
|
|
clear_if_necessary();
|
|
}
|
|
Command_Duration = 0;
|
|
switch (Cmd) {
|
|
case ' ':
|
|
case 13: setgamestatus(SKIP_MONSTERS); break; /*no op on space or return*/
|
|
case 6: abortshadowform(); break; /* ^f */
|
|
case 7: wizard(); break; /* ^g */
|
|
case 4: player_dump(); break; /* ^d */
|
|
case 9: display_pack(); morewait(); xredraw(); break; /* ^i */
|
|
case 11: if (gamestatusp(CHEATED)) frobgamestatus();
|
|
case 12: xredraw(); setgamestatus(SKIP_MONSTERS); break; /* ^l */
|
|
#ifndef MSDOS_SUPPORTED_ANTIQUE
|
|
case 16: bufferprint(); setgamestatus(SKIP_MONSTERS); break; /* ^p */
|
|
#else
|
|
case 15: bufferprint(); setgamestatus(SKIP_MONSTERS); break; /* ^o */
|
|
#endif
|
|
case 18: redraw(); setgamestatus(SKIP_MONSTERS); break; /* ^r */
|
|
case 23: if (gamestatusp(CHEATED)) drawscreen(); break; /* ^w */
|
|
case 24: /* ^x */
|
|
if (gamestatusp(CHEATED) ||
|
|
Player.rank[ADEPT])
|
|
wish(1);
|
|
Command_Duration = 5;
|
|
break;
|
|
case 'a': zapwand();
|
|
Command_Duration = Player.speed*8/5;
|
|
break;
|
|
case 'c': closedoor();
|
|
Command_Duration = Player.speed*2/5;
|
|
break;
|
|
case 'd': drop();
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case 'e': eat();
|
|
Command_Duration = 30;
|
|
break;
|
|
case 'f': fire();
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case 'g': pickup();
|
|
Command_Duration = Player.speed*10/5;
|
|
break;
|
|
case 'i':
|
|
do_inventory_control();
|
|
break;
|
|
case 'm': magic();
|
|
Command_Duration = 12;
|
|
break;
|
|
case 'o': opendoor();
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case 'p': pickpocket();
|
|
Command_Duration = Player.speed*20/5;
|
|
break;
|
|
case 'q': quaff();
|
|
Command_Duration = 10;
|
|
break;
|
|
case 'r': peruse();
|
|
Command_Duration = 20;
|
|
break;
|
|
case 's': search(&searchval);
|
|
Command_Duration = 20;
|
|
break;
|
|
case 't': talk();
|
|
Command_Duration = 10;
|
|
break;
|
|
case 'v': vault();
|
|
Command_Duration = Player.speed*10/5;
|
|
break;
|
|
case 'x': examine();
|
|
Command_Duration = 1;
|
|
break;
|
|
case 'z': bash_location();
|
|
Command_Duration = Player.speed*10/5;
|
|
break;
|
|
case 'A': activate();
|
|
Command_Duration = 10;
|
|
break;
|
|
case 'C': callitem();
|
|
break;
|
|
case 'D': disarm();
|
|
Command_Duration = 30;
|
|
break;
|
|
case 'E': dismount_steed();
|
|
Command_Duration = Player.speed*10/5;
|
|
break;
|
|
case 'F': tacoptions();
|
|
break;
|
|
case 'G': give();
|
|
Command_Duration = 10;
|
|
break;
|
|
case 'I':
|
|
if (! optionp(TOPINV)) top_inventory_control();
|
|
else {
|
|
display_possessions();
|
|
inventory_control();
|
|
}
|
|
break;
|
|
case 'M': city_move();
|
|
Command_Duration = 10;
|
|
break;
|
|
case 'O': setoptions();
|
|
#if defined(AMIGA) || defined(MSDOS_SUPPORTED_ANTIQUE)
|
|
show_screen();
|
|
xredraw();
|
|
#endif
|
|
break;
|
|
case 'P': show_license();
|
|
break; /* actually show_license is in file.c */
|
|
case 'Q': quit();
|
|
break;
|
|
case 'R': rename_player();
|
|
break;
|
|
case 'S': save(optionp(COMPRESS_OPTION), FALSE);
|
|
break;
|
|
case 'T': tunnel();
|
|
Command_Duration = Player.speed*30/5;
|
|
break;
|
|
case 'V': version();
|
|
break;
|
|
#ifdef MSDOS_SUPPORTED_ANTIQUE
|
|
case 'X': check_memory(); break;
|
|
#endif
|
|
case 'Z': bash_item();
|
|
Command_Duration = Player.speed*10/5;
|
|
break;
|
|
case '.': rest();
|
|
Command_Duration = 10;
|
|
break;
|
|
case ',':
|
|
Command_Duration = 10;
|
|
nap();
|
|
break;
|
|
case '>':
|
|
downstairs();
|
|
break;
|
|
case '<':
|
|
upstairs();
|
|
break;
|
|
case '@':
|
|
p_movefunction(Level->site[Player.x][Player.y].p_locf);
|
|
Command_Duration = 5;
|
|
break;
|
|
case '#': if (gamestatusp(CHEATED)) editstats(); break; /* RAC - char editor */
|
|
case '/': charid(); setgamestatus(SKIP_MONSTERS);
|
|
break;
|
|
case '?': help(); setgamestatus(SKIP_MONSTERS);
|
|
break;
|
|
case '4':
|
|
case 'h': moveplayer(-1,0);
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case '2':
|
|
case 'j': moveplayer(0,1);
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case '8':
|
|
case 'k': moveplayer(0,-1);
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case '6':
|
|
case 'l': moveplayer(1,0);
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case '1':
|
|
case 'b': moveplayer(-1,1);
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case '3':
|
|
case 'n': moveplayer(1,1);
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case '7':
|
|
case 'y': moveplayer(-1,-1);
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case '9':
|
|
case 'u': moveplayer(1,-1);
|
|
Command_Duration = Player.speed*5/5;
|
|
break;
|
|
case '5':
|
|
setgamestatus(SKIP_MONSTERS); /* don't do anything; a dummy turn */
|
|
Cmd = mgetc();
|
|
while ((Cmd != ESCAPE) &&
|
|
((Cmd < '1') || (Cmd > '9') || (Cmd=='5'))) {
|
|
print3("Run in keypad direction [ESCAPE to abort]: ");
|
|
Cmd = mgetc();
|
|
}
|
|
if (Cmd != ESCAPE) setgamestatus(FAST_MOVE);
|
|
break;
|
|
case 'H': setgamestatus(FAST_MOVE); Cmd = 'h'; moveplayer(-1,0);
|
|
Command_Duration = Player.speed*4/5;
|
|
break;
|
|
case 'J': setgamestatus(FAST_MOVE); Cmd = 'j'; moveplayer(0,1);
|
|
Command_Duration = Player.speed*4/5;
|
|
break;
|
|
case 'K': setgamestatus(FAST_MOVE); Cmd = 'k'; moveplayer(0,-1);
|
|
Command_Duration = Player.speed*4/5;
|
|
break;
|
|
case 'L': setgamestatus(FAST_MOVE); Cmd = 'l'; moveplayer(1,0);
|
|
Command_Duration = Player.speed*4/5;
|
|
break;
|
|
case 'B': setgamestatus(FAST_MOVE); Cmd = 'b'; moveplayer(-1,1);
|
|
Command_Duration = Player.speed*4/5;
|
|
break;
|
|
case 'N': setgamestatus(FAST_MOVE); Cmd = 'n'; moveplayer(1,1);
|
|
Command_Duration = Player.speed*4/5;
|
|
break;
|
|
case 'Y': setgamestatus(FAST_MOVE); Cmd = 'y'; moveplayer(-1,-1);
|
|
Command_Duration = Player.speed*4/5;
|
|
break;
|
|
case 'U': setgamestatus(FAST_MOVE); Cmd = 'u'; moveplayer(1,-1);
|
|
Command_Duration = Player.speed*4/5;
|
|
break;
|
|
default: commanderror(); setgamestatus(SKIP_MONSTERS); break;
|
|
}
|
|
}
|
|
if (Current_Environment != E_COUNTRYSIDE) roomcheck();
|
|
screencheck(Player.x,Player.y);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* deal with a new player command in countryside mode */
|
|
void p_country_process(void)
|
|
{
|
|
int no_op;
|
|
|
|
drawvision(Player.x,Player.y);
|
|
do {
|
|
no_op = FALSE;
|
|
Cmd = mgetc();
|
|
clear_if_necessary();
|
|
switch (Cmd) {
|
|
case ' ':
|
|
case 13: no_op = TRUE; break;
|
|
case 7: wizard(); break; /* ^g */
|
|
case 12: xredraw(); no_op = TRUE; break; /* ^l */
|
|
#ifndef MSDOS_SUPPORTED_ANTIQUE
|
|
case 16: bufferprint(); no_op = TRUE; break; /* ^p */
|
|
#else
|
|
case 15: bufferprint(); no_op = TRUE; break; /* ^o */
|
|
#endif
|
|
case 18: redraw(); no_op = TRUE; break; /* ^r */
|
|
case 23: if (gamestatusp(CHEATED)) drawscreen(); break; /* ^w */
|
|
case 24: if (gamestatusp(CHEATED) ||
|
|
Player.rank[ADEPT]) wish(1); break; /* ^x */
|
|
case 'd': drop(); break;
|
|
case 'e': eat(); break;
|
|
case 'i':
|
|
do_inventory_control();
|
|
break;
|
|
case 's': countrysearch(); break;
|
|
case 'x': examine(); break;
|
|
case 'E': dismount_steed(); break;
|
|
case 'H': hunt(Country[Player.x][Player.y].current_terrain_type); break;
|
|
case 'I':
|
|
if (! optionp(TOPINV)) top_inventory_control();
|
|
else {
|
|
menuclear();
|
|
display_possessions();
|
|
inventory_control();
|
|
}
|
|
break;
|
|
case 'O': setoptions(); break;
|
|
case 'P': show_license(); break; /* actually show_license is in file.c */
|
|
case 'Q': quit(); break;
|
|
case 'R': rename_player(); break;
|
|
case 'S': save(optionp(COMPRESS_OPTION), FALSE); break;
|
|
case 'V': version(); break;
|
|
#ifdef MSDOS_SUPPORTED_ANTIQUE
|
|
case 'X': check_memory(); break;
|
|
#endif
|
|
case '>':
|
|
enter_site(Country[Player.x][Player.y].base_terrain_type);
|
|
break;
|
|
case '#': if (gamestatusp(CHEATED)) editstats(); break; /* RAC - char editor */
|
|
case '/': charid(); no_op = TRUE; break;
|
|
case '?': help(); no_op = TRUE; break;
|
|
case '4':
|
|
case 'h': movepincountry(-1,0); break;
|
|
case '2':
|
|
case 'j': movepincountry(0,1); break;
|
|
case '8':
|
|
case 'k': movepincountry(0,-1); break;
|
|
case '6':
|
|
case 'l': movepincountry(1,0); break;
|
|
case '1':
|
|
case 'b': movepincountry(-1,1); break;
|
|
case '3':
|
|
case 'n': movepincountry(1,1); break;
|
|
case '7':
|
|
case 'y': movepincountry(-1,-1); break;
|
|
case '9':
|
|
case 'u': movepincountry(1,-1); break;
|
|
default: commanderror(); no_op = TRUE; break;
|
|
}
|
|
} while (no_op);
|
|
screencheck(Player.x,Player.y);
|
|
}
|
|
|
|
|