[comp.sources.games] v05i043: umoria2 - single player dungeon simulation

games@tekred.TEK.COM (07/29/88)

Submitted by: "James E. Wilson" <wilson@ji.berkeley.edu>
Comp.sources.games: Volume 5, Issue 43
Archive-name: umoria2/Part09



#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 9 (of 18)."
# Contents:  Moria_hours dungeon.c potions.c shar.script
# Wrapped by billr@saab on Wed Jul 13 11:16:27 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Moria_hours' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Moria_hours'\"
else
echo shar: Extracting \"'Moria_hours'\" \(352 characters\)
sed "s/^X//" >'Moria_hours' <<'END_OF_FILE'
X    Moria operating hours are:
X    |    AM     |    PM     |
X    1         111         111
X    2123456789012123456789012
XSUN:XXXXXXXXXXXXXXXXXXXXXXXX
XMON:XXXXXXXX.........XXXXXXX
XTUE:XXXXXXXX.........XXXXXXX
XWED:XXXXXXXX.........XXXXXXX
XTHU:XXXXXXXX.........XXXXXXX
XFRI:XXXXXXXX.........XXXXXXX
XSAT:XXXXXXXXXXXXXXXXXXXXXXXX
X       (X==Open; .==Closed)
END_OF_FILE
if test 352 -ne `wc -c <'Moria_hours'`; then
    echo shar: \"'Moria_hours'\" unpacked with wrong size!
fi
# end of 'Moria_hours'
fi
if test -f 'dungeon.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'dungeon.c'\"
else
echo shar: Extracting \"'dungeon.c'\" \(41566 characters\)
sed "s/^X//" >'dungeon.c' <<'END_OF_FILE'
X#include <stdio.h>
X
X#include "constants.h"
X#include "config.h"
X#include "types.h"
X#include "externs.h"
X
X#ifdef USG
X#include <string.h>
X#else
X#include <strings.h>
X#endif
X
X#ifdef sun   /* correct SUN stupidity in the stdio.h file */
Xchar *sprintf();
X#endif
X
X#ifdef USG
Xunsigned sleep();
X#endif
X
X#ifdef ultrix
Xvoid sleep();
X#endif
X
X/* global flags */
Xint moria_flag;        /* Next level when true  */
Xint search_flag;       /* Player is searching   */
Xint teleport_flag;     /* Handle teleport traps  */
Xint player_light;      /* Player carrying light */
Xint cave_flag;         /* used in get_panel */
Xint light_flag;        /* used in move_light */
X
X/* value of msg_flag at start of turn */
Xint save_msg_flag;
X
X/* Moria game module					-RAK-	*/
X/* The code in this section has gone through many revisions, and */
X/* some of it could stand some more hard work...  -RAK-          */
Xdungeon()
X{
X  int old_chp, old_cmana;      /* Detect change         */
X  double regen_amount;         /* Regenerate hp and mana*/
X  char command;         /* Last command          */
X  register struct misc *p_ptr;
X  register treasure_type *i_ptr;
X  register struct flags *f_ptr;
X  int set_floor();
X
X  /* Main procedure for dungeon... 			-RAK-	*/
X  /* Note: There is a lot of preliminary magic going on here at first*/
X
X  /* Check light status for setup          */
X  i_ptr = &inventory[INVEN_LIGHT];
X  if (i_ptr->p1 > 0)
X    player_light = TRUE;
X  else
X    player_light = FALSE;
X  /* Check for a maximum level             */
X  p_ptr = &py.misc;
X  if (dun_level > p_ptr->max_lev)  p_ptr->max_lev = dun_level;
X  /* Set up the character co-ords          */
X  if ((char_row == -1) || (char_col == -1))
X    new_spot(&char_row, &char_col);
X  /* Reset flags and initialize variables  */
X  moria_flag    = FALSE;
X  cave_flag     = FALSE;
X  find_flag     = FALSE;
X  search_flag   = FALSE;
X  teleport_flag = FALSE;
X  mon_tot_mult  = 0;
X  cave[char_row][char_col].cptr = 1;
X  old_chp   = (int)py.misc.chp;
X  old_cmana = (int)py.misc.cmana;
X  /* Light up the area around character    */
X  move_char(5);
X  /* Light,  but do not move critters       */
X  creatures(FALSE);
X  /* Print the depth                       */
X  prt_depth();
X
X  /* Loop until dead,  or new level 		*/
X  do
X    {
X      /* Increment turn counter			*/
X      turn++;
X      /* Check for game hours                          */
X      if (!wizard1)
X	if ((turn % 250) == 1)
X	  if (!check_time())
X	    if (closing_flag > 4)
X	      {
X		if (search_flag)
X		  search_off();
X		if (py.flags.rest > 0)
X		  rest_off();
X		find_flag = FALSE;
X		msg_print("The gates to Moria are now closed.");
X		/* make sure player sees the message */
X		msg_print(" ");
X		do
X		  {
X		    save_char(TRUE, FALSE);
X		  }
X		while (TRUE);
X	      }
X	    else
X	      {
X		if (search_flag)
X		  search_off();
X		if (py.flags.rest > 0)
X		  rest_off();
X		find_flag = FALSE;
X		move_light (char_row, char_col, char_row, char_col);
X		closing_flag++;
X		msg_print("The gates to Moria are closing...");
X		msg_print("Please finish up or save your game.");
X		/* make sure the player sees the message */
X		msg_print(" ");
X	      }
X
X      /* turn over the store contents every, say, 1000 turns */
X      if ((dun_level != 0) && ((turn % 1000) == 0))
X	store_maint();
X
X      /* Check for creature generation 		*/
X      if (randint(MAX_MALLOC_CHANCE) == 1)
X	alloc_monster(set_floor, 1, MAX_SIGHT, FALSE);
X      /* Screen may need updating,  used mostly for stats*/
X      if (print_stat != 0)
X	{
X	  if (0x0001 & print_stat)
X	    prt_strength();
X	  if (0x0002 & print_stat)
X	    prt_dexterity();
X	  if (0x0004 & print_stat)
X	    prt_constitution();
X	  if (0x0008 & print_stat)
X	    prt_intelligence();
X	  if (0x0010 & print_stat)
X	    prt_wisdom();
X	  if (0x0020 & print_stat)
X	    prt_charisma();
X	  if (0x0040 & print_stat)
X	    prt_pac();
X	  if (0x0100 & print_stat)
X	    prt_mhp();
X	  if (0x0200 & print_stat)
X	    prt_title();
X	  if (0x0400 & print_stat)
X	    prt_level();
X	}
X      /* Check light status                            */
X      i_ptr = &inventory[INVEN_LIGHT];
X      if (player_light)
X	if (i_ptr->p1 > 0)
X	  {
X	    i_ptr->p1--;
X	    if (i_ptr->p1 == 0)
X	      {
X		player_light = FALSE;
X		find_flag = FALSE;
X		msg_print("Your light has gone out!");
X		move_light(char_row, char_col, char_row, char_col);
X	      }
X	    else if (i_ptr->p1 < 40)
X	      if (randint(5) == 1)
X		{
X		  if (find_flag)
X		    {
X		      find_flag = FALSE;
X		      move_light(char_row, char_col, char_row, char_col);
X		    }
X		  msg_print("Your light is growing faint.");
X		}
X	  }
X	else
X	  {
X	    player_light = FALSE;
X	    find_flag = FALSE;
X	    move_light(char_row, char_col, char_row, char_col);
X	  }
X      else if (i_ptr->p1 > 0)
X	{
X	  i_ptr->p1--;
X	  player_light = TRUE;
X	  move_light(char_row, char_col, char_row, char_col);
X	}
X
X      /* Update counters and messages			*/
X      f_ptr = &py.flags;
X      /* Check food status             */
X      regen_amount = PLAYER_REGEN_NORMAL;
X      if (f_ptr->food < PLAYER_FOOD_ALERT)
X	{
X	  if (f_ptr->food < PLAYER_FOOD_WEAK)
X	    {
X	      if (f_ptr->food < 0)
X		regen_amount = 0;
X	      else if (f_ptr->food < PLAYER_FOOD_FAINT)
X		regen_amount = PLAYER_REGEN_FAINT;
X	      else if (f_ptr->food < PLAYER_FOOD_WEAK)
X		regen_amount = PLAYER_REGEN_WEAK;
X	      if ((0x00000002 & f_ptr->status) == 0)
X		{
X		  f_ptr->status |= 0x00000003;
X		  msg_print("You are getting weak from hunger.");
X		  if (find_flag)
X		    {
X		      find_flag = FALSE;
X		      move_light (char_row, char_col, char_row, char_col);
X		    }
X		  prt_hunger();
X		}
X	      if (f_ptr->food < PLAYER_FOOD_FAINT)
X		if (randint(8) == 1)
X		  {
X		    f_ptr->paralysis += randint(5);
X		    msg_print("You faint from the lack of food.");
X		    if (find_flag)
X		      {
X			find_flag = FALSE;
X			move_light (char_row, char_col, char_row, char_col);
X		      }
X		  }
X	    }
X	  else
X	    {
X	      if ((0x00000001 & f_ptr->status) == 0)
X		{
X		  f_ptr->status |= 0x00000001;
X		  msg_print("You are getting hungry.");
X		  if (find_flag)
X		    {
X		      find_flag = FALSE;
X		      move_light (char_row, char_col, char_row, char_col);
X		    }
X		  prt_hunger();
X		}
X	    }
X	}
X      /* Food consumption       */
X      /* Note: Speeded up characters really burn up the food!  */
X      if (f_ptr->speed < 0)
X	f_ptr->food +=  -(f_ptr->speed*f_ptr->speed) -
X	  f_ptr->food_digested;
X      else
X	f_ptr->food -= f_ptr->food_digested;
X      /* Regenerate            */
X      p_ptr = &py.misc;
X      if (f_ptr->regenerate)  regen_amount = regen_amount * 1.5;
X      if (f_ptr->rest > 0)    regen_amount = regen_amount * 2;
X      if (py.flags.poisoned < 1)
X	if (p_ptr->chp < p_ptr->mhp)
X	  regenhp(regen_amount);
X      if (p_ptr->cmana < p_ptr->mana)
X	regenmana(regen_amount);
X      /* Blindness             */
X      if (f_ptr->blind > 0)
X	{
X	  if ((0x00000004 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00000004;
X	      prt_map();
X	      prt_blind();
X	      if (search_flag)
X		search_off();
X	    }
X	  f_ptr->blind--;
X	  if (f_ptr->blind == 0)
X	    {
X	      f_ptr->status &= 0xFFFFFFFB;
X	      prt_blind();
X	      prt_map();
X	      msg_print("The veil of darkness lifts.");
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		}
X	      /* turn light back on */
X	      move_char(5);
X	      /* light creatures */
X	      creatures(FALSE);
X	    }
X	}
X      /* Confusion             */
X      if (f_ptr->confused > 0)
X	{
X	  if ((0x00000008 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00000008;
X	      prt_confused();
X	    }
X	  f_ptr->confused--;
X	  if (f_ptr->confused == 0)
X	    {
X	      f_ptr->status &= 0xFFFFFFF7;
X	      prt_confused();
X	      msg_print("You feel less confused now.");
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	    }
X	}
X      /* Afraid                */
X      if (f_ptr->afraid > 0)
X	{
X	  if ((0x00000010 & f_ptr->status) == 0)
X	    {
X	      if ((f_ptr->shero+f_ptr->hero) > 0)
X		f_ptr->afraid = 0;
X	      else
X		{
X		  f_ptr->status |= 0x00000010;
X		  prt_afraid();
X		}
X	    }
X	  else if ((f_ptr->shero+f_ptr->hero) > 0)
X	    f_ptr->afraid = 1;
X	  f_ptr->afraid--;
X	  if (f_ptr->afraid == 0)
X	    {
X	      f_ptr->status &= 0xFFFFFFEF;
X	      prt_afraid();
X	      msg_print("You feel bolder now.");
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	    }
X	}
X      /* Poisoned              */
X      if (f_ptr->poisoned > 0)
X	{
X	  if ((0x00000020 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00000020;
X	      prt_poisoned();
X	    }
X	  f_ptr->poisoned--;
X	  if (f_ptr->poisoned == 0)
X	    {
X	      f_ptr->status &= 0xFFFFFFDF;
X	      prt_poisoned();
X	      msg_print("You feel better.");
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	    }
X	  else
X	    {
X	      switch(con_adj())
X		{
X		case -4:
X		  take_hit(4, "poison.");
X		  break;
X		case -3: case  -2:
X		  take_hit(3, "poison.");
X		  break;
X		case -1:
X		  take_hit(2, "poison.");
X		  break;
X		case 0:
X		  take_hit(1, "poison.");
X		  break;
X		case 1: case 2: case 3:
X		  if ((turn % 2) == 0)
X		    take_hit(1, "poison.");
X		  break;
X		case 4: case 5:
X		  if ((turn % 3) == 0)
X		    take_hit(1, "poison.");
X		  break;
X		case 6:
X		  if ((turn % 4) == 0)
X		    take_hit(1, "poison.");
X		  break;
X		}
X	    }
X	}
X      /* Fast                  */
X      if (f_ptr->fast > 0)
X	{
X	  if ((0x00000040 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00000040;
X	      change_speed(-1);
X	      msg_print("You feel yourself moving faster.");
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	    }
X	  f_ptr->fast--;
X	  if (f_ptr->fast == 0)
X	    {
X	      f_ptr->status &= 0xFFFFFFBF;
X	      change_speed(1);
X	      msg_print("You feel yourself slow down.");
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	    }
X	}
X      /* Slow                  */
X      if (f_ptr->slow > 0)
X	{
X	  if ((0x00000080 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00000080;
X	      change_speed(1);
X	      msg_print("You feel yourself moving slower.");
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	    }
X	  f_ptr->slow--;
X	  if (f_ptr->slow == 0)
X	    {
X	      f_ptr->status &= 0xFFFFFF7F;
X	      change_speed(-1);
X	      msg_print("You feel yourself speed up.");
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	    }
X	}
X      /* Resting is over?      */
X      if (f_ptr->rest > 0)
X	{
X#ifdef SLOW
X	  /* Hibernate every 20 iterations so that process does  */
X	  /* not eat up system...                                */
X	  if ((f_ptr->rest % 20) == 1)  (void) sleep(1);
X#endif
X	  f_ptr->rest--;
X	  /* do not need to refresh screen here, if any movement/hit occurs
X	     update_mon/take_hit will turn off resting and screen refreshes */
X	  /* put_qio(); */
X	  if (f_ptr->rest == 0)               /* Resting over          */
X	    rest_off();
X	}
X      /* Hallucinating?  (Random characters appear!)*/
X      if (f_ptr->image > 0)
X	{
X	  f_ptr->image--;
X	  if (f_ptr->image == 0)
X	    draw_cave();
X	}
X      /* Paralysis             */
X      if (f_ptr->paralysis > 0)
X	{
X	  /* when paralysis true, you can not see any movement that occurs */
X	  f_ptr->paralysis--;
X	  if (f_ptr->rest > 0)
X	    rest_off();
X	  if (search_flag)
X	    search_off();
X	}
X      /* Protection from evil counter*/
X      if (f_ptr->protevil > 0)  f_ptr->protevil--;
X      /* Invulnerability        */
X      if (f_ptr->invuln > 0)
X	{
X	  if ((0x00001000 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00001000;
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	      py.misc.pac += 100;
X	      py.misc.dis_ac += 100;
X	      prt_pac();
X	      msg_print("Your skin turns into steel!");
X	    }
X	  f_ptr->invuln--;
X	  if (f_ptr->invuln == 0)
X	    {
X	      f_ptr->status &= 0xFFFFEFFF;
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	      py.misc.pac -= 100;
X	      py.misc.dis_ac -= 100;
X	      prt_pac();
X	      msg_print("Your skin returns to normal...");
X	    }
X	}
X      /* Heroism       */
X      if (f_ptr->hero > 0)
X	{
X	  if ((0x00002000 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00002000;
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	      p_ptr = &py.misc;
X	      p_ptr->mhp += 10;
X	      p_ptr->chp += 10.0;
X	      p_ptr->bth += 12;
X	      p_ptr->bthb+= 12;
X	      msg_print("You feel like a HERO!");
X	      prt_mhp();
X	    }
X	  f_ptr->hero--;
X	  if (f_ptr->hero == 0)
X	    {
X	      f_ptr->status &= 0xFFFFDFFF;
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	      p_ptr = &py.misc;
X	      p_ptr->mhp -= 10;
X	      if (p_ptr->chp > p_ptr->mhp)  p_ptr->chp = p_ptr->mhp;
X	      p_ptr->bth -= 12;
X	      p_ptr->bthb-= 12;
X	      msg_print("The heroism wears off.");
X	      prt_mhp();
X	    }
X	}
X      /* Super Heroism */
X      if (f_ptr->shero > 0)
X	{
X	  if ((0x00004000 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00004000;
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	      p_ptr = &py.misc;
X	      p_ptr->mhp += 20;
X	      p_ptr->chp += 20.0;
X	      p_ptr->bth += 24;
X	      p_ptr->bthb+= 24;
X	      msg_print("You feel like a SUPER HERO!");
X	      prt_mhp();
X	    }
X	  f_ptr->shero--;
X	  if (f_ptr->shero == 0)
X	    {
X	      f_ptr->status &= 0xFFFFBFFF;
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	      p_ptr = &py.misc;
X	      p_ptr->mhp -= 20;
X	      if (p_ptr->chp > p_ptr->mhp)  p_ptr->chp = p_ptr->mhp;
X	      p_ptr->bth -= 24;
X	      p_ptr->bthb-= 24;
X	      msg_print("The super heroism wears off.");
X	      prt_mhp();
X	    }
X	}
X      /* Blessed       */
X      if (f_ptr->blessed > 0)
X	{
X	  if ((0x00008000 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00008000;
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	      p_ptr = &py.misc;
X	      p_ptr->bth += 5;
X	      p_ptr->bthb+= 5;
X	      p_ptr->pac += 2;
X	      p_ptr->dis_ac+= 2;
X	      msg_print("You feel righteous!");
X	      prt_pac();
X	    }
X	  f_ptr->blessed--;
X	  if (f_ptr->blessed == 0)
X	    {
X	      f_ptr->status &= 0xFFFF7FFF;
X	      if (find_flag)
X		{
X		  find_flag = FALSE;
X		  move_light (char_row, char_col, char_row, char_col);
X		}
X	      p_ptr = &py.misc;
X	      p_ptr->bth -= 5;
X	      p_ptr->bthb-= 5;
X	      p_ptr->pac -= 2;
X	      p_ptr->dis_ac -= 2;
X	      msg_print("The prayer has expired.");
X	      prt_pac();
X	    }
X	}
X      /* Resist Heat   */
X      if (f_ptr->resist_heat > 0)  f_ptr->resist_heat--;
X      /* Resist Cold   */
X      if (f_ptr->resist_cold > 0)  f_ptr->resist_cold--;
X      /* Detect Invisible      */
X      if (f_ptr->detect_inv > 0)
X	{
X	  if ((0x00010000 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00010000;
X	      f_ptr->see_inv = TRUE;
X	    }
X	  f_ptr->detect_inv--;
X	  if (f_ptr->detect_inv == 0)
X	    {
X	      f_ptr->status &= 0xFFFEFFFF;
X	      f_ptr->see_inv = FALSE;
X	      py_bonuses(blank_treasure, 0);
X	    }
X	}
X      /* Timed infra-vision    */
X      if (f_ptr->tim_infra > 0)
X	{
X	  if ((0x00020000 & f_ptr->status) == 0)
X	    {
X	      f_ptr->status |= 0x00020000;
X	      f_ptr->see_infra++;
X	    }
X	  f_ptr->tim_infra--;
X	  if (f_ptr->tim_infra == 0)
X	    {
X	      f_ptr->status &= 0xFFFDFFFF;
X	      f_ptr->see_infra--;
X	    }
X	}
X	/* Word-of-Recall  Note: Word-of-Recall is a delayed action      */
X      if (f_ptr->word_recall > 0)
X	if (f_ptr->word_recall == 1)
X	  {
X	    moria_flag = TRUE;
X	    f_ptr->paralysis++;
X	    f_ptr->word_recall = 0;
X	    if (dun_level > 0)
X	      {
X		dun_level = 0;
X		msg_print("You feel yourself yanked upwards!");
X	      }
X	    else if (py.misc.max_lev != 0)
X	      {
X		dun_level = py.misc.max_lev;
X		msg_print("You feel yourself yanked downwards!");
X	      }
X	  }
X	else
X	  f_ptr->word_recall--;
X
X      /* Check hit points for adjusting...			*/
X      p_ptr = &py.misc;
X      if (!find_flag)
X	if (py.flags.rest < 1)
X	  {
X	    if (old_chp != (int)(p_ptr->chp))
X	      {
X		if (p_ptr->chp > p_ptr->mhp)
X		  p_ptr->chp = (double)p_ptr->mhp;
X		prt_chp();
X		old_chp = (int)p_ptr->chp;
X	      }
X	    if (old_cmana != (int)(p_ptr->cmana))
X	      {
X		if (p_ptr->cmana > p_ptr->mana)
X		  p_ptr->cmana = (double)p_ptr->mana;
X		prt_cmana();
X		old_cmana = (int)p_ptr->cmana;
X	      }
X	  }
X
X      if ((py.flags.paralysis < 1) &&        /* Accept a command?     */
X	  (py.flags.rest < 1) &&
X	  (!death))
X	/* Accept a command and execute it                               */
X	{
X	  do
X	    {
X	      print_stat = 0;
X	      reset_flag = FALSE;
X	      /* Random teleportation  */
X	      if (py.flags.teleport)
X		if (randint(100) == 1)
X		  {
X		    find_flag = FALSE; /* no need for move_char(5) */
X		    teleport(40);
X		  }
X	      if (!find_flag)
X		{
X		  /* move the cursor to the players character */
X		  print("", char_row, char_col);
X		  save_msg_flag = msg_flag;
X		  do
X		    {
X		      inkey(&command);
X		    }
X		  while (command == ' ');
X		  if (save_msg_flag)  erase_line(MSG_LINE, 0);
X		  global_com_val = (command);
X		}
X	      /* Commands are executed in following subroutines     */
X	      if (key_bindings == ORIGINAL)
X		original_commands(&global_com_val);
X	      else
X		rogue_like_commands(&global_com_val);
X	      /* End of commands                                     */
X	    }
X	  while ((reset_flag) && (!moria_flag));
X	}
X      /* Teleport?                     */
X      if (teleport_flag)  teleport(100);
X      /* Move the creatures            */
X      if (!moria_flag)  creatures(TRUE);
X      /* Exit when moria_flag is set   */
X    }
X  while (!moria_flag);
X  if (search_flag)  search_off();  /* Fixed "SLOW" bug; 06-11-86 RAK     */
X}
X
X
Xoriginal_commands(com_val)
Xint *com_val;
X{
X  int y, x, dir_val;
X  char command;
X  int i;
X  vtype out_val, tmp_str;
X  register struct stats *s_ptr;
X  register struct flags *f_ptr;
X  int set_floor();
X
X  switch(*com_val)
X    {
X    case 0: case 11:		/*^K == exit    */
X      flush();
X      if (get_com("Enter 'Q' to quit", &command))
X	switch(command)
X	  {
X	  case 'q': case  'Q':
X	    moria_flag = TRUE;
X	    death      = TRUE;
X            /* need dot on the end to be consistent with creature.c */
X            (void) strcpy(died_from, "Quitting.");
X	    break;
X	  default:
X	    break;
X	  }
X      reset_flag = TRUE;
X      break;
X    case 16:                               /*^P == repeat  */
X      repeat_msg ();
X      reset_flag = TRUE;
X      break;
X    case 23:
X      if (wizard1)                        /*^W == password*/
X	{
X	  wizard1 = FALSE;
X	  wizard2 = FALSE;
X	  msg_print("Wizard mode off.");
X	}
X      else
X	{
X	  if (check_pswd())
X	    {
X	      msg_print("Wizard mode on.");
X	    }
X	}
X      reset_flag = TRUE;
X      break;
X    case 18:                               /*^R == redraw  */
X      really_clear_screen();
X      draw_cave();
X      reset_flag = TRUE;
X      break;
X    case 24:                               /*^X == save    */
X      if (total_winner)
X	{
X	  msg_print("You are a Total Winner,  your character must be retired...");
X	  msg_print("Use <Control>-K to when you are ready to quit.");
X	}
X      else
X	{
X	  if (search_flag)  search_off();
X	  save_char(TRUE, FALSE);
X	}
X      reset_flag = TRUE;
X      break;
X    case 32:                                /*SPACE do nothing */
X      reset_flag = TRUE;
X      break;
X    case '!':                                /*!  == Shell   */
X      shell_out();
X      reset_flag = TRUE;
X      break;
X    case 46:                                   /*. == find     */
X      y = char_row;
X      x = char_col;
X      if (get_dir("Which direction?", &dir_val, com_val, &y, &x))
X	{
X	  find_flag = TRUE;
X	  move_char(dir_val);
X	}
X      break;
X    case 47:                          /* / == identify */
X      ident_char();
X      reset_flag = TRUE;
X      break;
X    case 49:
X      move_char(*com_val - 48);        /* Move dir 1    */
X      break;
X    case 50:
X      move_char(*com_val - 48);        /* Move dir 2    */
X      break;
X    case 51:
X      move_char(*com_val - 48);        /* Move dir 3    */
X      break;
X    case 52:
X      move_char(*com_val - 48);        /* Move dir 4    */
X      break;
X    case 53:                          /* Rest one turn */
X      move_char(*com_val - 48);
X#ifdef SLOW
X      (void) sleep(0);     /* Sleep 1/10 a second*/
X#endif
X      flush();
X      break;
X    case 54:
X      move_char(*com_val - 48);        /* Move dir 6    */
X      break;
X    case 55:
X      move_char(*com_val - 48);        /* Move dir 7    */
X      break;
X    case 56:
X      move_char(*com_val - 48);        /* Move dir 8    */
X      break;
X    case 57:
X      move_char(*com_val - 48);        /* Move dir 9    */
X      break;
X    case 60:
X      go_up();                                  /*< == go up    */
X      break;
X    case 62:
X      go_down();                                /*> == go down  */
X      break;
X    case 63:                                  /*? == help     */
X      original_help();
X      reset_flag = TRUE;   /* Free move     */
X      break;
X    case 66:
X      bash();                                   /*B == bash     */
X      break;
X    case 67:                                   /*C == character*/
X      if (get_com("Print to file? (Y/N)", &command))
X	switch(command)
X	  {
X	  case 'y': case 'Y':
X	    file_character();
X	    break;
X	  case 'n': case 'N':
X	    change_name();
X	    draw_cave();
X	    break;
X	  default:
X	    break;
X	  }
X      reset_flag = TRUE;   /* Free move     */
X      break;
X    case 68:
X      disarm_trap();                            /*D == disarm   */
X      break;
X    case 69:
X      eat();                                    /*E == eat      */
X      break;
X    case 70:
X      refill_lamp();                            /*F == refill   */
X      break;
X    case 76:                                   /*L == location */
X      if ((py.flags.blind > 0) || (no_light()))
X	msg_print("You can't see your map.");
X      else
X	{
X	  (void) sprintf(out_val,
X			 "Section [%d,%d]; Location == [%d,%d]",
X			 (((char_row-1)/OUTPAGE_HEIGHT)+1),
X			 (((char_col-1)/OUTPAGE_WIDTH )+1),
X			 char_row, char_col);
X	  msg_print(out_val);
X	}
X      reset_flag = TRUE;   /* Free move     */
X      break;
X    case 80:                                   /*P == print map*/
X      if ((py.flags.blind > 0) || (no_light()))
X	msg_print("You can't see to draw a map.");
X      else
X	print_map();
X      reset_flag = TRUE;   /* Free move     */
X      break;
X    case 82:
X      rest();                                   /*R == rest     */
X      break;
X    case 83:
X      if (search_flag)                    /*S == srh mode */
X	{
X	  search_off();
X	  reset_flag = TRUE; /* Free move     */
X	}
X      else if (py.flags.blind > 0)
X	msg_print("You are incapable of searching while blind.");
X      else
X	{
X	  search_on();
X	  reset_flag = TRUE; /* Free move     */
X	}
X      break;
X    case 84:
X      y = char_row;
X      x = char_col;
X      if (get_dir("Which direction?", &dir_val, com_val, &y, &x))
X	{
X	  tunnel(y, x);                /*T == tunnel   */
X	}
X      break;
X    case 97:
X      aim();                                    /*a == aim      */
X      break;
X    case 98:
X      examine_book();                           /*b == browse   */
X      reset_flag = TRUE;
X      break;
X    case 99:
X      closeobject();                            /*c == close    */
X      break;
X    case 100:
X      drop();                                   /*d == drop     */
X      break;
X    case 101:                                   /*e == equipment*/
X      reset_flag = TRUE;   /* Free move     */
X      if (inven_command('e', 0, 0))  draw_cave();
X      break;
X    case 102:
X      throw_object();                           /*f == throw    */
X      break;
X#if 0
X    case 104:                                 /*h == moria hlp */
X      moria_help("");
X      draw_cave();
X      reset_flag = TRUE;   /* Free move   */
X      break;
X#endif
X    case 105:                                /*i == inventory*/
X      reset_flag = TRUE;   /* Free move     */
X      if (inven_command('i', 0, 0))  draw_cave();
X      break;
X    case 106:
X      jamdoor();                                /*j == jam      */
X      break;
X    case 108:                                 /*l == look     */
X      look();
X      reset_flag = TRUE;   /* Free move     */
X      break;
X    case 109:
X      cast();                                   /*m == magick   */
X      break;
X    case 111:
X      openobject();                             /*o == open     */
X      break;
X    case 112:
X      pray();                                   /*p == pray     */
X      break;
X    case 113:
X      quaff();                                  /*q == quaff    */
X      break;
X    case 114:
X      read_scroll();                            /*r == read     */
X      break;
X    case 115:
X      if (py.flags.blind > 0)             /*s == search   */
X	msg_print("You are incapable of searching while blind.");
X      else
X	search(char_row, char_col, py.misc.srh);
X      break;
X    case 116:                              /*t == unwear   */
X      reset_flag = TRUE;
X      if (inven_command('t', 0, 0))  draw_cave();
X      break;
X    case 117:
X      use();                                    /*u == use staff*/
X      break;
X    case 118:
X      game_version();                           /*v == version  */
X      reset_flag = TRUE;
X      break;
X    case 119:                                 /*w == wear     */
X      reset_flag = TRUE;
X      if (inven_command('w', 0, 0))  draw_cave();
X      break;
X    case 120:                                 /*x == exchange */
X      reset_flag = TRUE;
X      if (inven_command('x', 0, 0))  draw_cave();
X      break;
X    default:
X      if (wizard1)
X	{
X	  reset_flag = TRUE; /* Wizard commands are free moves*/
X	  switch(*com_val)
X	    {
X	    case 1:                            /*^A == Cure all*/
X	      (void) remove_curse();
X	      (void) cure_blindness();
X	      (void) cure_confusion();
X	      (void) cure_poison();
X	      (void) remove_fear();
X	      s_ptr = &py.stats;
X	      s_ptr->cstr = s_ptr->str;
X	      s_ptr->cint = s_ptr->intel;
X	      s_ptr->cwis = s_ptr->wis;
X	      s_ptr->cdex = s_ptr->dex;
X	      s_ptr->ccon = s_ptr->con;
X	      s_ptr->cchr = s_ptr->chr;
X	      f_ptr = &py.flags;
X	      if (f_ptr->slow > 1)
X		f_ptr->slow = 1;
X	      if (f_ptr->image > 1)
X		f_ptr->image = 1;
X	      /* put_qio(); */
X	      /* adjust misc stats */
X	      py_bonuses(blank_treasure, 0);
X	      break;
X	    case 2:
X	      print_objects();                  /*^B == objects */
X	      break;
X	    case 4:                           /*^D == up/down */
X	      prt("Go to which level (0 -1200) ? ", 0, 0);
X	      i = -1;
X	      if (get_string(tmp_str, 0, 30, 10))
X		(void) sscanf(tmp_str, "%d", &i);
X	      if (i > -1)
X		{
X		  dun_level = i;
X		  if (dun_level > 1200)
X		    dun_level = 1200;
X		  moria_flag = TRUE;
X		}
X	      else
X		erase_line(MSG_LINE, 0);
X	      break;
X	    case 8:
X	      original_wizard_help();           /*^H == wizhelp */
X	      break;
X	    case 9:
X	      (void) ident_spell();             /*^I == identify*/
X	      break;
X	    case 14:
X	      print_monsters();                 /*^N == mon map */
X	      break;
X	    case 12:
X	      wizard_light();                   /*^L == wizlight*/
X	      break;
X	    case 20:
X	      teleport(100);                    /*^T == teleport*/
X	      break;
X	    case 22:
X	      restore_char();                   /*^V == restore */
X	      prt_stat_block();
X	      moria_flag = TRUE;
X	      break;
X	    default:
X	      if (wizard2)
X		switch(*com_val)
X		  {
X		  case 5:
X		    change_character();         /*^E == wizchar */
X		    break;
X		  case 6:
X		    (void) mass_genocide();     /*^F == genocide*/
X		    /* put_qio(); */
X		    break;
X		  case 7:                       /*^G == treasure*/
X		    alloc_object(set_floor, 5, 10);
X		    /* put_qio(); */
X		    break;
X		  case 10:                      /*^J == gain exp*/
X		    if (py.misc.exp == 0)
X		      py.misc.exp = 1;
X		    else
X		      py.misc.exp = py.misc.exp * 2;
X		    prt_experience();
X		    break;
X		  case 21:                    /*^U == summon  */
X		    y = char_row;
X		    x = char_col;
X		    (void) summon_monster(&y, &x, TRUE);
X		    creatures(FALSE);
X		    break;
X		  case '@':
X		    wizard_create();          /*^Q == create  */
X		    break;
X		  default:
X		    prt("Type '?' or '^H' for help...", 0, 0);
X		    break;
X		  }
X	      else
X		prt("Type '?' or '^H' for help...", 0, 0);
X	    }
X	}
X      else
X	{
X	  prt("Type '?' for help...", 0, 0);
X	  reset_flag = TRUE;
X	}
X    }
X}
X
X
Xrogue_like_commands(com_val)
Xint *com_val;
X{
X  int y, x;
X  char command;
X  int i;
X  vtype out_val, tmp_str;
X  register struct stats *s_ptr;
X  register struct flags *f_ptr;
X  int set_floor();
X
X  switch(*com_val)
X    {
X    case 0: case 'Q':		/*Q == exit    */
X      flush();
X      if (get_com("Do you really want to quit?", &command))
X	switch(command)
X	  {
X	  case 'y': case  'Y':
X	    moria_flag = TRUE;
X	    death      = TRUE;
X            /* need dot on the end to be consistent with creature.c */
X            (void) strcpy(died_from, "Quitting.");
X	    break;
X	  default:
X	    break;
X	  }
X      reset_flag = TRUE;
X      break;
X    case 16:                               /*^P == repeat  */
X      repeat_msg ();
X      reset_flag = TRUE;
X      break;
X    case 23:
X      if (wizard1)                        /*^W == password*/
X	{
X	  wizard1 = FALSE;
X	  wizard2 = FALSE;
X	  msg_print("Wizard mode off.");
X	}
X      else
X	{
X	  if (check_pswd())
X	    {
X	      msg_print("Wizard mode on.");
X	    }
X	}
X      reset_flag = TRUE;
X      break;
X    case 18:                               /*^R == redraw  */
X      really_clear_screen();
X      draw_cave();
X      reset_flag = TRUE;
X      break;
X    case 24:                               /*^X == save    */
X      if (total_winner)
X	{
X	  msg_print("You are a Total Winner,  your character must be retired...");
X	  msg_print("Use 'Q' to when you are ready to quit.");
X	}
X      else
X	{
X	  if (search_flag)  search_off();
X	  save_char(TRUE, FALSE);
X	}
X      reset_flag = TRUE;
X      break;
X    case ' ':                                /*SPACE do nothing */
X      reset_flag = TRUE;
X      break;
X    case '!':                                /*!  == Shell   */
X      shell_out();
X      reset_flag = TRUE;
X      break;
X    case 'b':
X      move_char(1);
X      break;
X    case 'j':
X      move_char(2);
X      break;
X    case 'n':
X      move_char(3);
X      break;
X    case 'h':
X      move_char(4);
X      break;
X    case 'l':
X      move_char(6);
X      break;
X    case 'y':
X      move_char(7);
X      break;
X    case 'k':
X      move_char(8);
X      break;
X    case 'u':
X      move_char(9);
X      break;
X    case 'B':                                   /*. == find     */
X      find_flag = TRUE;
X      move_char(1);
X      break;
X    case 'J':                                   /*. == find     */
X      find_flag = TRUE;
X      move_char(2);
X      break;
X    case 'N':                                   /*. == find     */
X      find_flag = TRUE;
X      move_char(3);
X      break;
X    case 'H':                                   /*. == find     */
X      find_flag = TRUE;
X      move_char(4);
X      break;
X    case 'L':                                   /*. == find     */
X      find_flag = TRUE;
X      move_char(6);
X      break;
X    case 'Y':                                   /*. == find     */
X      find_flag = TRUE;
X      move_char(7);
X      break;
X    case 'K':                                   /*. == find     */
X      find_flag = TRUE;
X      move_char(8);
X      break;
X    case 'U':                                   /*. == find     */
X      find_flag = TRUE;
X      move_char(9);
X      break;
X    case '/':                          /* / == identify */
X      ident_char();
X      reset_flag = TRUE;
X      break;
X    case '1':
X      move_char(1);        /* Move dir 1    */
X      break;
X    case '2':
X      move_char(2);        /* Move dir 2    */
X      break;
X    case '3':
X      move_char(3);        /* Move dir 3    */
X      break;
X    case '4':
X      move_char(4);        /* Move dir 4    */
X      break;
X    case '5':                          /* Rest one turn */
X    case '.':
X      move_char(5);
X#ifdef SLOW
X      (void) sleep(0);     /* Sleep 1/10 a second*/
X#endif
X      flush();
X      break;
X    case '6':
X      move_char(6);        /* Move dir 6    */
X      break;
X    case '7':
X      move_char(7);        /* Move dir 7    */
X      break;
X    case '8':
X      move_char(8);        /* Move dir 8    */
X      break;
X    case '9':
X      move_char(9);        /* Move dir 9    */
X      break;
X    case '<':
X      go_up();                                  /*< == go up    */
X      break;
X    case '>':
X      go_down();                                /*> == go down  */
X      break;
X    case '?':                                  /*? == help     */
X      rogue_like_help();
X      reset_flag = TRUE;   /* Free move     */
X      break;
X    case 'f':
X      bash();                                   /*f == bash     */
X      break;
X    case 'C':                                   /*C == character*/
X      if (get_com("Print to file? (Y/N)", &command))
X	switch(command)
X	  {
X	  case 'y': case 'Y':
X	    file_character();
X	    break;
X	  case 'n': case 'N':
X	    change_name();
X	    draw_cave();
X	    break;
X	  default:
X	    break;
X	  }
X      reset_flag = TRUE;   /* Free move     */
X      break;
X    case 'D':
X      disarm_trap();                            /*D == disarm   */
X      break;
X    case 'E':
X      eat();                                    /*E == eat      */
X      break;
X    case 'F':
X      refill_lamp();                            /*F == refill   */
X      break;
X    case 'W':                                   /*W == location */
X      if ((py.flags.blind > 0) || (no_light()))
X	msg_print("You can't see your map.");
X      else
X	{
X	  (void) sprintf(out_val,
X			 "Section [%d,%d]; Location == [%d,%d]",
X			 (((char_row-1)/OUTPAGE_HEIGHT)+1),
X			 (((char_col-1)/OUTPAGE_WIDTH )+1),
X			 char_row, char_col);
X	  msg_print(out_val);
X	}
X      reset_flag = TRUE;   /* Free move     */
X      break;
X    case 'M':                                   /*M == print map*/
X      if ((py.flags.blind > 0) || (no_light()))
X	msg_print("You can't see to draw a map.");
X      else
X	print_map();
X      reset_flag = TRUE;   /* Free move     */
X      break;
X    case 'R':
X      rest();                                   /*R == rest     */
X      break;
X    case '#':
X      if (search_flag)                    /*^S == srh mode */
X	{
X	  search_off();
X	  reset_flag = TRUE; /* Free move     */
X	}
X      else if (py.flags.blind > 0)
X	msg_print("You are incapable of searching while blind.");
X      else
X	{
X	  search_on();
X	  reset_flag = TRUE; /* Free move     */
X	}
X      break;
X    case 25:  /* ^Y */
X      x = char_row;
X      y = char_col;
X      (void) move(7, &x, &y);
X      tunnel(x, y);
X      break;
X    case 11:  /* ^K */
X      x = char_row;
X      y = char_col;
X      (void) move(8, &x, &y);
X      tunnel(x, y);
X      break;
X    case 21: /* ^U */
X      x = char_row;
X      y = char_col;
X      (void) move(9, &x, &y);
X      tunnel(x, y);
X      break;
X    case 12:  /* ^L */
X      x = char_row;
X      y = char_col;
X      (void) move(6, &x, &y);
X      tunnel(x, y);
X      break;
X    case 14:  /* ^N */
X      x = char_row;
X      y = char_col;
X      (void) move(3, &x, &y);
X      tunnel(x, y);
X      break;
X    case 10:    /* ^J */
X      x = char_row;
X      y = char_col;
X      (void) move(2, &x, &y);
X      tunnel(x, y);
X      break;
X    case 2:  /* ^B */
X      x = char_row;
X      y = char_col;
X      (void) move(1, &x, &y);
X      tunnel(x, y);
X      break;
X    case 8:  /* ^H */
X      x = char_row;
X      y = char_col;
X      (void) move(4, &x, &y);
X      tunnel(x, y);
X      break;
X    case 'z':
X     aim();                                    /*z == aim      */
X      break;
X    case 'P':
X      examine_book();                           /*P == browse   */
X      reset_flag = TRUE;
X      break;
X    case 'c':
X      closeobject();                            /*c == close    */
X      break;
X    case 'd':
X      drop();                                   /*d == drop     */
X      break;
X    case 'e':                                   /*e == equipment*/
X      reset_flag = TRUE;   /* Free move     */
X      if (inven_command('e', 0, 0))  draw_cave();
X      break;
X    case 't':
X      throw_object();                           /*t == throw    */
X      break;
X#if 0
X    case 104:                                 /*h == moria hlp */
X      moria_help("");
X      draw_cave();
X      reset_flag = TRUE;   /* Free move    */
X      break;
X#endif
X    case 'i':                                /*i == inventory*/
X      reset_flag = TRUE;   /* Free move     */
X      if (inven_command('i', 0, 0))  draw_cave();
X      break;
X    case 'S':
X      jamdoor();                                /*S == jam      */
X      break;
X    case 'x':                                 /*l == look     */
X      look();
X      reset_flag = TRUE;   /* Free move     */
X      break;
X    case 'm':
X      cast();                                   /*m == magick   */
X      break;
X    case 'o':
X      openobject();                             /*o == open     */
X      break;
X    case 'p':
X      pray();                                   /*p == pray     */
X      break;
X    case 'q':
X      quaff();                                  /*q == quaff    */
X      break;
X    case 'r':
X      read_scroll();                            /*r == read     */
X      break;
X    case 's':
X      if (py.flags.blind > 0)             /*s == search   */
X	msg_print("You are incapable of searching while blind.");
X      else
X	search(char_row, char_col, py.misc.srh);
X      break;
X    case 'T':                              /*T == unwear   */
X      reset_flag = TRUE;
X      if (inven_command('t', 0, 0))  draw_cave();
X      break;
X    case 'Z':
X      use();                                    /*Z == use staff*/
X      break;
X    case 'v':
X      game_version();                           /*v == version  */
X      reset_flag = TRUE;
X      break;
X    case 'w':                                 /*w == wear     */
X      reset_flag = TRUE;
X      if (inven_command('w', 0, 0))  draw_cave();
X      break;
X    case 'X':                                 /*x == exchange */
X      reset_flag = TRUE;
X      if (inven_command('x', 0, 0))  draw_cave();
X      break;
X    default:
X      if (wizard1)
X	{
X	  reset_flag = TRUE; /* Wizard commands are free moves*/
X	  switch(*com_val)
X	    {
X	    case 1:                            /*^A == Cure all*/
X	      (void) remove_curse();
X	      (void) cure_blindness();
X	      (void) cure_confusion();
X	      (void) cure_poison();
X	      (void) remove_fear();
X	      s_ptr = &py.stats;
X	      s_ptr->cstr = s_ptr->str;
X	      s_ptr->cint = s_ptr->intel;
X	      s_ptr->cwis = s_ptr->wis;
X	      s_ptr->cdex = s_ptr->dex;
X	      s_ptr->ccon = s_ptr->con;
X	      s_ptr->cchr = s_ptr->chr;
X	      f_ptr = &py.flags;
X	      if (f_ptr->slow > 1)
X		f_ptr->slow = 1;
X	      if (f_ptr->image > 1)
X		f_ptr->image = 1;
X	      /* put_qio(); */
X	      /* adjust misc stats */
X	      py_bonuses(blank_treasure, 0);
X	      break;
X	    case 15:
X	      print_objects();                  /*^O == objects */
X	      break;
X	    case 4:                           /*^D == up/down */
X	      prt("Go to which level (0 -1200) ? ", 0, 0);
X	      i = -1;
X	      if (get_string(tmp_str, 0, 30, 10))
X		(void) sscanf(tmp_str, "%d", &i);
X	      if (i > -1)
X		{
X		  dun_level = i;
X		  if (dun_level > 1200)
X		    dun_level = 1200;
X		  moria_flag = TRUE;
X		}
X	      else
X		erase_line(MSG_LINE, 0);
X	      break;
X	    case 127: /* ^? DEL */
X	      rogue_like_wizard_help();         /*DEL == wizhelp */
X	      break;
X	    case 9:
X	      (void) ident_spell();             /*^I == identify*/
X	      break;
X	    case 13:
X	      print_monsters();                 /*^M == mon map */
X	      break;
X	    case '*':
X	      wizard_light();                   /*` == wizlight*/
X	      break;
X	    case 20:
X	      teleport(100);                    /*^T == teleport*/
X	      break;
X	    case 22:
X	      restore_char();                   /*^V == restore */
X	      prt_stat_block();
X	      moria_flag = TRUE;
X	      break;
X	    default:
X	      if (wizard2)
X		switch(*com_val)
X		  {
X		  case 5:
X		    change_character();         /*^E == wizchar */
X		    break;
X		  case 6:
X		    (void) mass_genocide();     /*^F == genocide*/
X		    /* put_qio(); */
X		    break;
X		  case 7:                       /*^G == treasure*/
X		    alloc_object(set_floor, 5, 10);
X		    /* put_qio(); */
X		    break;
X		  case '+':                      /*+ == gain exp*/
X		    if (py.misc.exp == 0)
X		      py.misc.exp = 1;
X		    else
X		      py.misc.exp = py.misc.exp * 2;
X		    prt_experience();
X		    break;
X		  case 19:                    /*^S == summon  */
X		    y = char_row;
X		    x = char_col;
X		    (void) summon_monster(&y, &x, TRUE);
X		    creatures(FALSE);
X		    break;
X		  case '@':
X		    wizard_create();          /*^Q == create  */
X		    break;
X		  default:
X		    prt("Type '?' or DELETE for help...", 0, 0);
X		    break;
X		  }
X	      else
X		prt("Type '?' or DELETE for help...", 0, 0);
X	    }
X	}
X      else
X	{
X	  prt("Type '?' for help...", 0, 0);
X	  reset_flag = TRUE;
X	}
X    }
X}
END_OF_FILE
if test 41566 -ne `wc -c <'dungeon.c'`; then
    echo shar: \"'dungeon.c'\" unpacked with wrong size!
fi
# end of 'dungeon.c'
fi
if test -f 'potions.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'potions.c'\"
else
echo shar: Extracting \"'potions.c'\" \(9078 characters\)
sed "s/^X//" >'potions.c' <<'END_OF_FILE'
X#include "constants.h"
X#include "config.h"
X#include "types.h"
X#include "externs.h"
X
X
X/* Potions for the quaffing				-RAK-	*/
Xquaff()
X{
X  unsigned int i;
X  int j, k, l, item_val;
X  int redraw, ident;
X  register treasure_type *i_ptr;
X  register struct misc *m_ptr;
X  register struct flags *f_ptr;
X  register struct stats *s_ptr;
X  register class_type *c_ptr;
X
X  reset_flag = TRUE;
X  if (inven_ctr > 0)
X    {
X      if (find_range(75, 76, &j, &k))
X	{
X	  redraw = FALSE;
X	  if (get_item(&item_val, "Quaff which potion?", &redraw, j, k))
X	    {
X	      i_ptr = &inventory[item_val];
X	      if (redraw)  draw_cave();
X	      reset_flag = FALSE;
X	      i = i_ptr->flags;
X	      ident = FALSE;
X	      while (i != 0)
X		{
X		  j = bit_pos(&i) + 1;
X		  if (i_ptr->tval == 76)
X		    j += 31;
X		  /* Potions						*/
X		  switch(j)
X		    {
X		    case 1:
X		      s_ptr = &py.stats;
X		      s_ptr->cstr = in_statp(s_ptr->cstr);
X		      if (s_ptr->cstr > s_ptr->str)
X			s_ptr->str = s_ptr->cstr;
X		      msg_print("Wow!  What bulging muscles!");
X		      prt_strength();
X		      ident = TRUE;
X		      /* adjust misc stats */
X		      py_bonuses(blank_treasure, 0);
X		      break;
X		    case 2:
X		      ident = lose_str();
X		      break;
X		    case 3:
X		      s_ptr = &py.stats;
X		      s_ptr->cstr = s_ptr->str;
X		      msg_print("You feel warm all over.");
X		      prt_strength();
X		      ident = TRUE;
X		      /* adjust misc stats */
X		      py_bonuses(blank_treasure, 0);
X		      break;
X		    case 4:
X		      s_ptr = &py.stats;
X		      s_ptr->cint = in_statp(s_ptr->cint);
X		      if (s_ptr->cint > py.stats.intel)
X			py.stats.intel = s_ptr->cint;
X		      msg_print("Aren't you brilliant!");
X		      prt_intelligence();
X		      ident = TRUE;
X		      break;
X		    case 5:
X		      msg_print("This potion tastes very dull.");
X		      ident = lose_int();
X		      break;
X		    case 6:
X		      s_ptr = &py.stats;
X		      s_ptr->cint = py.stats.intel;
X		      msg_print("You have have a warm feeling.");
X		      prt_intelligence();
X		      ident = TRUE;
X		      break;
X		    case 7:
X		      s_ptr = &py.stats;
X		      s_ptr->cwis = in_statp(s_ptr->cwis);
X		      if (s_ptr->cwis > s_ptr->wis)
X			s_ptr->wis = s_ptr->cwis;
X		      msg_print("You suddenly have a profound thought!");
X		      prt_wisdom();
X		      ident = TRUE;
X		      break;
X		    case 8:
X		      ident = lose_wis();
X		      break;
X		    case 9:
X		      s_ptr = &py.stats;
X		      if (s_ptr->cwis < s_ptr->wis)
X			{
X			  s_ptr->cwis = s_ptr->wis;
X			  msg_print("You feel your wisdom returning.");
X			  prt_wisdom();
X			  ident = TRUE;
X			}
X		      break;
X		    case 10:
X		      s_ptr = &py.stats;
X		      s_ptr->cchr = in_statp(s_ptr->cchr);
X		      if (s_ptr->cchr > s_ptr->chr)
X			s_ptr->chr = s_ptr->cchr;
X		      msg_print("Gee,  ain't you cute!");
X		      prt_charisma();
X		      ident = TRUE;
X		      break;
X		    case 11:
X		      ident = lose_chr();
X		      break;
X		    case 12:
X		      s_ptr = &py.stats;
X		      if (s_ptr->cchr < s_ptr->chr)
X			{
X			  s_ptr->cchr = s_ptr->chr;
X			  msg_print("You feel your looks returning.");
X			  prt_charisma();
X			  ident = TRUE;
X			}
X		      break;
X		    case 13:
X		      ident = hp_player(damroll("2d7"), "a potion.");
X		      break;
X		    case 14:
X		      ident = hp_player(damroll("4d7"), "a potion.");
X		      break;
X		    case 15:
X		      ident = hp_player(damroll("6d7"), "a potion.");
X		      break;
X		    case 16:
X		      ident = hp_player(1000, "a potion.");
X		      break;
X		    case 17:
X		      m_ptr = &py.misc;
X		      py.stats.ccon = in_statp(py.stats.ccon);
X		      if (py.stats.ccon > py.stats.con)
X			py.stats.con = py.stats.ccon;
X		      m_ptr->mhp++;
X		      m_ptr->chp += m_ptr->mhp;
X		      msg_print("You feel tingly for a moment.");
X		      prt_mhp();
X		      prt_chp();
X		      prt_constitution();
X		      ident = TRUE;
X		      break;
X		    case 18:
X		      m_ptr = &py.misc;
X		      l = (m_ptr->exp / 2) + 10;
X		      if (l > 100000)  l = 100000;
X		      m_ptr->exp += l;
X		      msg_print("You feel more experienced.");
X		      prt_experience();
X		      ident = TRUE;
X		      break;
X		    case 19:
X		      f_ptr = &py.flags;
X		      if (!f_ptr->free_act)
X			{
X			  msg_print("You fall asleep.");
X			  f_ptr->paralysis += randint(4) + 4;
X			  ident = TRUE;
X			}
X		      break;
X		    case 20:
X		      f_ptr = &py.flags;
X		      msg_print("You are covered by a veil of darkness.");
X		      f_ptr->blind += randint(100) + 100;
X		      ident = TRUE;
X		      break;
X		    case 21:
X		      f_ptr = &py.flags;
X		      msg_print("Hey!  This is good stuff!  * Hick! *");
X		      f_ptr->confused += randint(20) + 12;
X		      ident = TRUE;
X		      break;
X		    case 22:
X		      f_ptr = &py.flags;
X		      msg_print("You feel very sick.");
X		      f_ptr->poisoned += randint(15) + 10;
X		      ident = TRUE;
X		      break;
X		    case 23:
X		      py.flags.fast += randint(25) + 15;
X		      ident = TRUE;
X		      break;
X		    case 24:
X		      py.flags.slow += randint(25) + 15;
X		      ident = TRUE;
X		      break;
X		    case 25:
X		      ident = detect_monsters();
X		      break;
X		    case 26:
X		      s_ptr = &py.stats;
X		      s_ptr->cdex = in_statp(s_ptr->cdex);
X		      if (s_ptr->cdex > s_ptr->dex)
X			s_ptr->dex = s_ptr->cdex;
X		      msg_print("You feel more limber!");
X		      prt_dexterity();
X		      ident = TRUE;
X		      /* adjust misc stats */
X		      py_bonuses(blank_treasure, 0);
X		      break;
X		    case 27:
X		      s_ptr = &py.stats;
X		      if (s_ptr->cdex < s_ptr->dex)
X			{
X			  s_ptr->cdex = s_ptr->dex;
X			  msg_print("You feel less clumsy.");
X			  prt_dexterity();
X			  ident = TRUE;
X			  /* adjust misc stats */
X			  py_bonuses(blank_treasure, 0);
X			}
X		      break;
X		    case 28:
X		      s_ptr= &py.stats;
X		      if (s_ptr->ccon < s_ptr->con)
X			{
X			  s_ptr->ccon = s_ptr->con;
X			  msg_print("You feel your health returning!");
X			  prt_constitution();
X			  ident = TRUE;
X			}
X		      break;
X		    case 29:
X		      (void) cure_blindness();
X		      break;
X		    case 30:
X		      (void) cure_confusion();
X		      break;
X		    case 31:
X		      (void) cure_poison();
X		      break;
X		    case 32:
X		      m_ptr = &py.misc;
X		      c_ptr = &class[m_ptr->pclass];
X		      if (c_ptr->mspell)
X			{
X			  ident = learn_spell(&redraw);
X			  if (redraw)  draw_cave();
X			}
X		      else if (c_ptr->pspell)
X			ident = learn_prayer();
X		      break;
X		    case 33:
X		      msg_print("You feel your memories fade...");
X		      /* avoid randint(0) call */
X		      l = (py.misc.exp/5.0);
X		      if (l == 0)
X			lose_exp(1);
X		      else
X			lose_exp(randint(l)+l);
X		      ident = TRUE;
X		      break;
X		    case 34:
X		      f_ptr = &py.flags;
X		      (void) cure_poison();
X		      if (f_ptr->food > 150)  f_ptr->food = 150;
X		      f_ptr->paralysis = 4;
X		      msg_print("The potion makes you vomit!");
X		      ident = TRUE;
X		      break;
X		    case 35:
X		      py.flags.invuln += randint(10) + 10;
X		      ident = TRUE;
X		      break;
X		    case 36:
X		      py.flags.hero += randint(25) + 25;
X		      ident = TRUE;
X		      break;
X		    case 37:
X		      py.flags.shero += randint(25) + 25;
X		      ident = TRUE;
X		      break;
X		    case 38:
X		      ident = remove_fear();
X		      break;
X		    case 39:
X		      ident = restore_level();
X		      break;
X		    case 40:
X		      f_ptr = &py.flags;
X		      f_ptr->resist_heat += randint(10) + 10;
X		      break;
X		    case 41:
X		      f_ptr = &py.flags;
X		      f_ptr->resist_cold += randint(10) + 10;
X                      break;
X		    case 42:
X		      detect_inv2(randint(12)+12);
X		      break;
X		    case 43:
X		      ident = slow_poison();
X		      break;
X		    case 44:
X		      ident = cure_poison();
X		      break;
X		    case 45:
X		      m_ptr = &py.misc;
X		      if (m_ptr->cmana < m_ptr->mana)
X			{
X			  m_ptr->cmana = (double)m_ptr->mana;
X			  ident = TRUE;
X			  msg_print("Your feel your head clear...");
X			}
X		      break;
X		    case 46:
X		      f_ptr = &py.flags;
X		      f_ptr->tim_infra += 100 + randint(100);
X		      ident = TRUE;
X		      msg_print("Your eyes begin to tingle.");
X		      break;
X		    case 47:
X		      break;
X		    case 48:
X		      break;
X		    case 49:
X		      break;
X		    case 50:
X		      break;
X		    case 51:
X		      break;
X		    case 52:
X		      break;
X		    case 53:
X		      break;
X		    case 54:
X		      break;
X		    case 55:
X		      break;
X		    case 56:
X		      break;
X		    case 57:
X		      break;
X		    case 58:
X		      break;
X		    case 59:
X		      break;
X		    case 60:
X		      break;
X		    case 61:
X		      break;
X		    case 62:
X		      break;
X		    default:
X		      break;
X		    }
X		  /* End of Potions...					*/
X		}
X	      if (ident)
X		identify(inventory[item_val]);
X	      if (i_ptr->flags != 0)
X		{
X		  m_ptr = &py.misc;
X		  m_ptr->exp += (int)(i_ptr->level/m_ptr->lev + 0.5);
X		  prt_experience();
X		}
X	      add_food(i_ptr->p1);
X	      desc_remain(item_val);
X	      inven_destroy(item_val);
X	    }
X	  else
X	    if (redraw)  draw_cave();
X	}
X      else
X	msg_print("You are not carrying any potions.");
X    }
X  else
X    msg_print("But you are not carrying anything.");
X}
END_OF_FILE
if test 9078 -ne `wc -c <'potions.c'`; then
    echo shar: \"'potions.c'\" unpacked with wrong size!
fi
# end of 'potions.c'
fi
if test -f 'shar.script' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'shar.script'\"
else
echo shar: Extracting \"'shar.script'\" \(741 characters\)
sed "s/^X//" >'shar.script' <<'END_OF_FILE'
Xshar README INSTALL Flexnames Highscores Int16bit.patch MISC_NOTES Makefile\
X	 constants.h create.c > Part01
X
Xshar Moria.doc > Part02
X
Xshar Moria.man Moria.man.alt Moria_hours Moria_news PROBLEMS io.c sets.c\
X	> Part03
X
Xshar PRONOUNCE Xenix.patch config.h > Part04
X
Xshar creature.c death.c desc.c > Part05
X
Xshar dungeon.c eat.c externs.h > Part06
X
Xshar files.c generate.c > Part07
X
Xshar magic.c main.c misc1.c > Part08
X
Xshar misc2.c scrolls.c > Part09
X
Xshar monsters.c potions.c > Part10
X
Xshar moria1.c prayer.c > Part11
X
Xshar moria2.c signals.c > Part12
X
Xshar spells.c > Part13
X
Xshar help.c staffs.c store1.c store2.c > Part14
X
Xshar treasure1.c > Part15
X
Xshar save.c treasure2.c types.h > Part16
X
Xshar variables.c wands.c wizard.c > Part17
END_OF_FILE
if test 741 -ne `wc -c <'shar.script'`; then
    echo shar: \"'shar.script'\" unpacked with wrong size!
fi
# end of 'shar.script'
fi
echo shar: End of archive 9 \(of 18\).
cp /dev/null ark9isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 18 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0