[comp.sources.games] v02i081: umoria - single player dungeon simulation, Part16/16

games-request@tekred.TEK.COM (11/05/87)

Submitted by: "James E. Wilson" <wilson@ji.berkeley.edu>
Comp.sources.games: Volume 2, Issue 81
Archive-name: umoria/Part16




#! /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 16 (of 16)."
# Contents:  Makefile.43 constants.h eat.c prayer.c sets.c signals.c
#   staffs.c wands.c
# Wrapped by billr@tekred on Wed Nov  4 10:00:19 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f Makefile.43 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Makefile.43\"
else
echo shar: Extracting \"Makefile.43\" \(2422 characters\)
sed "s/^X//" >Makefile.43 <<'END_OF_Makefile.43'
X# BINDIR is the directory where the moria binary while be put
X# LIBDIR is where the other files (scoreboard, news, hours) will be put
X#  LIBDIR must be the same directory defined in config.h
XBINDIR = /usr/public/moria
XLIBDIR = /usr/public/moriadir
X
XCFLAGS = -O -DKEY_BINDINGS=ORIGINAL
X
XSRCS = main.c misc1.c misc2.c store1.c files.c io.c create.c desc.c\
X	generate.c sets.c dungeon.c creature.c death.c eat.c help.c magic.c\
X	potions.c prayer.c save.c staffs.c wands.c scrolls.c spells.c\
X	wizard.c store2.c signals.c moria1.c moria2.c monsters.c\
X	treasure1.c treasure2.c variables.c
X
XOBJS = main.o misc1.o misc2.o store1.o files.o io.o create.o desc.o\
X	generate.o sets.o dungeon.o creature.o death.o eat.o help.o magic.o\
X	potions.o prayer.o save.o staffs.o wands.o scrolls.o spells.o\
X	wizard.o store2.o signals.o moria1.o moria2.o monsters.o\
X  	treasure1.o treasure2.o variables.o
X
Xmoria : $(OBJS)
X	cc -o moria $(CFLAGS) $(OBJS) -lm -lcurses -ltermcap
X
Xlintout : $(SRCS)
X	lint $(SRCS) -lm -lcurses -ltermcap > lintout
X
XTAGS : $(SRCS)
X	ctags -x $(SRCS) > TAGS
X
Xinstall:
X	cp moria $(BINDIR)
X	cp Moria_hours $(LIBDIR)
X	cp Moria_news $(LIBDIR)
X	cp Highscores $(LIBDIR)
X	chmod 4511 $(BINDIR)/moria
X	chmod 644 $(LIBDIR)/Highscores
X	chmod 444 $(LIBDIR)/Moria_news
X	chmod 444 $(LIBDIR)/Moria_hours
X	chmod 555 $(LIBDIR)
X
Xcreate.o: constants.h types.h externs.h
Xcreature.o: constants.h types.h externs.h
Xdeath.o: config.h constants.h types.h externs.h
Xdesc.o: constants.h types.h externs.h
Xdungeon.o: constants.h types.h externs.h
Xeat.o: constants.h types.h externs.h
Xfiles.o: config.h constants.h types.h externs.h
Xgenerate.o: constants.h types.h externs.h
Xhelp.o: constants.h types.h externs.h
Xio.o: constants.h types.h externs.h
Xmagic.o: constants.h types.h externs.h
Xmain.o: constants.h types.h
Xmisc1.o: constants.h types.h externs.h
Xmisc2.o: config.h constants.h types.h externs.h
Xmoria1.o: constants.h types.h externs.h
Xmoria2.o: constants.h types.h externs.h
Xpotions.o: constants.h types.h externs.h
Xprayer.o: constants.h types.h externs.h
Xsave.o: constants.h types.h externs.h
Xscrolls.o: constants.h types.h externs.h
Xsets.o: constants.h
Xsignals.o: constants.h types.h externs.h
Xspells.o: constants.h types.h externs.h
Xstaffs.o: constants.h types.h externs.h
Xstore1.o: constants.h types.h externs.h
Xstore2.o: constants.h types.h externs.h
Xwands.o: constants.h types.h externs.h
Xwizard.o: constants.h types.h externs.h
END_OF_Makefile.43
if test 2422 -ne `wc -c <Makefile.43`; then
    echo shar: \"Makefile.43\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f constants.h -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"constants.h\"
else
echo shar: Extracting \"constants.h\" \(8769 characters\)
sed "s/^X//" >constants.h <<'END_OF_constants.h'
X/*Note to the Wizard:                                            */
X/*       Tweaking these constants can *GREATLY* change the game. */
X/*       Two years of constant tuning have generated these       */
X/*       values.  Minor adjustments are encouraged, but you must */
X/*       be very careful not to unbalance the game.  Moria was   */
X/*       meant to be challenging, not a give away.  Many         */
X/*       adjustments can cause the game to act strangely, or even*/
X/*       cause errors.                                           */
X
X/* Current version number of Moria				*/
X#define CUR_VERSION 4.85
X
X#ifdef USG
X#define index strchr
X#endif
X
X#ifndef TRUE
X#define TRUE 1
X#endif
X#ifndef FALSE
X#define FALSE 0
X#endif
X
X/* Changing values below this line may be hazardous to your health! */
X
X/* key bindings option */
X#define ORIGINAL 0          /* uses keypad for directions */
X#define ROGUE_LIKE 1        /* uses 'rogue' style keys for directions */
X
X/* Dungeon size parameters					*/
X#define MAX_HEIGHT  66      /* Multiple of 11; >= 22 */
X#define MAX_WIDTH  198    /* Multiple of 33; >= 66 */
X#define SCREEN_HEIGHT  22
X#define SCREEN_WIDTH   66
X
X/* Output dungeon section sizes					*/
X#define OUTPAGE_HEIGHT 44     /* 44 lines of dungeon per section       */
X#define OUTPAGE_WIDTH  99     /* 100 columns of dungeon per section    */
X
X/* Dungeon generation values					*/
X/* Note: The entire design of dungeon can be changed by only     */
X/*       slight adjustments here.                                */
X#define DUN_TUN_RND      36   /* Random direction (4 is min)           */
X#define DUN_TUN_CHG      70   /* Chance of changing direction (99 max) */
X#define DUN_TUN_FND      12   /* Distance for auto find to kick in     */
X#define DUN_TUN_CON      15   /* Chance of extra tunneling             */
X#define DUN_ROO_MEA      32   /* Mean of # of rooms, standard dev2     */
X#define DUN_TUN_PEN      25   /* % chance of room doors                */
X#define DUN_TUN_JCT      15   /* % chance of doors at tunnel junctions */
X#define DUN_STR_DEN      5    /* Density of streamers                  */
X#define DUN_STR_RNG      2    /* Width of streamers                    */
X#define DUN_STR_MAG      3    /* Number of magma streamers             */
X#define DUN_STR_MC       95   /* 1/x chance of treasure per magma      */
X#define DUN_STR_QUA      2    /* Number of quartz streamers            */
X#define DUN_STR_QC       55   /* 1/x chance of treasure per quartz     */
X#define DUN_UNUSUAL      300  /* Level/x chance of unusual room        */
X     
X/* Store constants						*/
X#define MAX_OWNERS       18   /* Number of owners to choose from       */
X#define MAX_STORES       6    /* Number of different stores            */
X#define STORE_INVEN_MAX  24   /* Max number of discrete objs in inven  */
X#define STORE_CHOICES    26   /* NUMBER of items to choice stock from  */
X#define STORE_MAX_INVEN  20   /* Max diff objs in stock before auto sell*/
X#define STORE_MIN_INVEN  14   /* Min diff objs in stock before auto buy*/
X#define STORE_TURN_AROUND 3   /* Amount of buying and selling normally */
X#define INVEN_INIT_MAX   105  /* Size of store init array              */
X#define COST_ADJ         1.00 /* Adjust prices for buying and selling  */
X
X/* Treasure constants						*/
X#define INVEN_ARRAY_SIZE 35   /* Size of inventory array(Do not change)*/
X#define INVEN_MAX      34     /* index of highest entry in inventory array */
X#define MAX_OBJ_LEVEL  50     /* Maximum level of magic in dungeon     */
X#define OBJ_GREAT      20     /* 1/n Chance of item being a Great Item */
X#define MAX_OBJECTS    344    /* Number of objects for universe        */
X#define MAX_GOLD       18     /* Number of different types of gold     */
X#define MAX_TALLOC     225    /* Max objects per level                 */
X#define TREAS_ROOM_ALLOC  7   /* Amount of objects for rooms           */
X#define TREAS_ANY_ALLOC   2   /* Amount of objects for corridors       */
X#define TREAS_GOLD_ALLOC  2   /* Amount of gold (and gems)             */
X     
X/* Magic Treasure Generation constants				*/
X/* Note: Number of special objects, and degree of enchantments   */
X/*       can be adjusted here.                                   */
X#define OBJ_STD_ADJ      1.25 /* Adjust STD per level                  */
X#define OBJ_STD_MIN      7    /* Minimum STD                           */
X#define OBJ_TOWN_LEVEL   7    /* Town object generation level          */
X#define OBJ_BASE_MAGIC   15   /* Base amount of magic                  */
X#define OBJ_BASE_MAX     70   /* Max amount of magic                   */
X#define OBJ_DIV_SPECIAL  6    /* magic_chance/#  special magic        */
X#define OBJ_DIV_CURSED   1.3  /* magic_chance/#  cursed items         */
X
X/* Constants describing limits of certain objects		*/
X#define OBJ_LAMP_MAX    15000 /* Maximum amount that lamp can be filled*/
X#define OBJ_BOLT_RANGE   18   /* Maximum range of bolts and balls      */
X#define OBJ_RUNE_PROT    3000 /* Rune of protection resistance         */
X
X/* Creature constants						*/
X#define MAX_CREATURES     279 /* Number of creatures defined for univ  */
X#define MAX_MALLOC        100+1 /* Max that can be allocated          */
X#define MAX_MALLOC_CHANCE 160 /* 1/x chance of new monster each round  */
X#define MAX_MONS_LEVEL     40 /* Maximum level of creatures            */
X#define MAX_SIGHT          20 /* Maximum dis a creature can be seen    */
X#define MAX_SPELL_DIS      20 /* Maximum dis creat. spell can be cast  */
X#define MAX_MON_MULT       75 /* Maximum reproductions on a level      */
X#define MON_MULT_ADJ        7 /* High value slows multiplication       */
X#define MON_NASTY          50 /* Dun_level/x chance of high level creat*/
X#define MIN_MALLOC_LEVEL   14 /* Minimum number of monsters/level      */
X#define MIN_MALLOC_TD       4 /* Number of people on town level (day)  */
X#define MIN_MALLOC_TN       8 /* Number of people on town level (night)*/
X#define WIN_MON_TOT         2 /* Total number of "win" creatures       */
X#define WIN_MON_APPEAR     50 /* Level where winning creatures begin   */
X#define MON_SUMMON_ADJ      2 /* Adjust level of summoned creatures    */
X#define MON_DRAIN_LIFE      2 /* Percent of player exp drained per hit */
X     
X/* Trap constants						*/
X#define MAX_TRAPA         18  /* Number of defined traps               */
X#define MAX_TRAPB         19  /* Includes secret doors                 */
X
X/* Descriptive constants 					*/
X#define MAX_COLORS     67     /* Used with potions     */
X#define MAX_MUSH       29     /* Used with mushrooms   */
X#define MAX_WOODS      41     /* Used with staffs      */
X#define MAX_METALS     31     /* Used with wands       */
X#define MAX_ROCKS      52     /* Used with rings       */
X#define MAX_AMULETS    39     /* Used with amulets     */
X#define MAX_SYLLABLES  153    /* Used with scrolls     */
X
X/* Player constants						*/
X#define MAX_PLAYER_LEVEL  40  /* Maximum possible character level      */
X#define MAX_RACES         8   /* Number of defined races               */
X#define MAX_CLASS         6   /* Number of defined classes             */
X#define USE_DEVICE        3   /* x> Harder devices x< Easier devices   */
X#define MAX_BACKGROUND    128 /* Number of types of histories for univ */
X#define PLAYER_FOOD_FULL 10000/* Getting full                          */
X#define PLAYER_FOOD_MAX  15000/* Maximum food value, beyond is wasted  */
X#define PLAYER_FOOD_FAINT  300/* Character begins fainting             */
X#define PLAYER_FOOD_WEAK  1000/* Warn player that he is getting very low*/
X#define PLAYER_FOOD_ALERT 2000/* Warn player that he is getting low    */
X#define PLAYER_REGEN_FAINT   0.0005   /* Regen factor when fainting    */
X#define PLAYER_REGEN_WEAK    0.0015   /* Regen factor when weak        */
X#define PLAYER_REGEN_NORMAL  0.0030   /* Regen factor when full        */
X#define PLAYER_REGEN_HPBASE  0.0220   /* Min amount hp regen           */
X#define PLAYER_REGEN_MNBASE  0.0080   /* Min amount mana regen         */
X#define PLAYER_WEIGHT_CAP 130 /* "#"*(1/10 pounds) per strength point  */
X#define PLAYER_EXIT_PAUSE 2   /* Pause time before player can re-roll  */
X     
X/* Base to hit constants 					*/
X#define BTH_LEV_ADJ      3    /* Adjust BTH per level                  */
X#define BTH_PLUS_ADJ     3    /* Adjust BTH per plus-to-hit            */
X#define BTH_HIT          12   /* Automatic hit; 1/bth_hit              */
X
X/* table size for random() */
X#define STATE_SIZE 128
X
X/* magic numbers for players inventory array */
X#define INVEN_WIELD 22
X#define INVEN_HEAD  23
X#define INVEN_NECK  24
X#define INVEN_BODY  25
X#define INVEN_ARM   26
X#define INVEN_HANDS 27
X#define INVEN_RIGHT 28
X#define INVEN_LEFT  29
X#define INVEN_FEET  30
X#define INVEN_OUTER 31
X#define INVEN_LIGHT 32
X#define INVEN_AUX   33
X
END_OF_constants.h
if test 8769 -ne `wc -c <constants.h`; then
    echo shar: \"constants.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f eat.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"eat.c\"
else
echo shar: Extracting \"eat.c\" \(5231 characters\)
sed "s/^X//" >eat.c <<'END_OF_eat.c'
X#include "constants.h"
X#include "types.h"
X#include "externs.h"
X
X
X/* Eat some food...					-RAK-	*/
Xeat()
X{
X  unsigned int i;
X  int j, k, item_val;
X  int redraw, ident;
X  struct flags *f_ptr;
X  struct misc *m_ptr;
X  struct stats *s_ptr;
X  treasure_type *i_ptr;
X
X  reset_flag = TRUE;
X  if (inven_ctr > 0) 
X    {
X      if (find_range(80, -1, &j, &k)) 
X	{
X	  redraw = FALSE;
X	  if (get_item(&item_val, "Eat what?", &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		  /* Foods					*/
X		  switch(j)
X		    {
X		    case 1:
X		      f_ptr = &py.flags;
X		      f_ptr->poisoned += randint(10) + i_ptr->level;
X		      ident = TRUE;
X		      break;
X		    case 2:
X		      f_ptr = &py.flags;
X		      f_ptr->blind += randint(250) + 10*i_ptr->level + 100;
X		      draw_cave();
X		      msg_print("A veil of darkness surrounds you.");
X		      ident = TRUE;
X		      break;
X		    case 3:
X		      f_ptr = &py.flags;
X		      f_ptr->afraid += randint(10) + i_ptr->level;
X		      msg_print("You feel terrified!");
X		      ident = TRUE;
X		      break;
X		    case 4:
X		      f_ptr = &py.flags;
X		      f_ptr->confused += randint(10) + i_ptr->level;
X		      msg_print("You feel drugged.");
X		      ident = TRUE;
X		      break;
X		    case 5:
X		      f_ptr = &py.flags;
X		      f_ptr->image += randint(200) + 25*i_ptr->level + 200;
X		      ident = TRUE;
X		      break;
X		    case 6:
X		      ident = cure_poison();
X		      break;
X		    case 7:
X		      ident = cure_blindness();
X		      break;
X		    case 8:
X		      f_ptr = &py.flags;
X		      if (f_ptr->afraid > 1) 
X			{
X			  f_ptr->afraid = 1;
X			  ident = TRUE;
X			}
X		      break;
X		    case 9:
X		      ident = cure_confusion();
X		      break;
X		    case 10:
X		      ident = lose_str();
X		      break;
X		    case 11:
X		      ident = lose_con();
X		      break;
X		    case 12:
X		      ident = lose_int();
X		      break;
X		    case 13:
X		      ident = lose_wis();
X		      break;
X		    case 14:
X		      ident = lose_dex();
X		      break;
X		    case 15:
X		      ident = lose_chr();
X		      break;
X		    case 16:
X		      s_ptr = &py.stats;
X		      if (s_ptr->str > s_ptr->cstr) 
X			{
X			  s_ptr->cstr = s_ptr->str;
X			  msg_print("You feel your strength returning.");
X			  prt_strength();
X			  ident = TRUE;
X			}
X		      break;
X		    case 17:
X		      s_ptr = &py.stats;
X		      if (s_ptr->con > s_ptr->ccon) 
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 18:
X		      s_ptr = &py.stats;
X		      if (py.stats.intel > s_ptr->cint) 
X			{
X			  s_ptr->cint = py.stats.intel;
X			  msg_print("Your head spins a moment.");
X			  prt_intelligence();
X			  ident = TRUE;
X			}
X		      break;
X		    case 19:
X		      s_ptr = &py.stats;
X		      if (s_ptr->wis > s_ptr->cwis) 
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 20:
X		      s_ptr = &py.stats;
X		      if (s_ptr->dex > s_ptr->cdex) 
X			{
X			  s_ptr->cdex = s_ptr->dex;
X			  msg_print("You feel more dextrous.");
X			  prt_dexterity();
X			  ident = TRUE;
X			}
X		      break;
X		    case 21:
X		      s_ptr = &py.stats;
X		      if (s_ptr->chr > s_ptr->cchr) 
X			{
X			  s_ptr->cchr = s_ptr->chr;
X			  msg_print("Your skins starts itching.");
X			  prt_charisma();
X			  ident = TRUE;
X			}
X		      break;
X		    case 22:
X		      ident = hp_player(randint(3), "poisonness food.");
X		      break;
X		    case 23:
X		      ident = hp_player(randint(6), "poisonness food.");
X		      break;
X		    case 24:
X		      ident = hp_player(randint(12), "poisonness food.");
X		      break;
X		    case 25:
X		      ident = hp_player(damroll("3d6"), "poisonness food.");
X		      break;
X		    case 26:
X		      ident = hp_player(damroll("3d12"), "poisonness food.");
X		      break;
X		    case 27:
X		      ident = hp_player(-randint(4), "poisonness food.");
X		      break;
X		    case 28:
X		      ident = hp_player(-randint(8), "poisonness food.");
X		      break;
X		    case 29:
X		      ident = hp_player(-damroll("2d8"), "poisonness food.");
X		      break;
X		    case 30:
X		      ident = hp_player(-damroll("3d8"), "poisonness food.");
X		      break;
X		    case 31:
X		      m_ptr = &py.misc;
X		      m_ptr->mhp--;
X		      if (m_ptr->mhp < m_ptr->chp) 
X			m_ptr->chp = (double)m_ptr->mhp;
X		      take_hit(1, "poisonness food.");
X		      prt_mhp();
X		      prt_chp();
X		      ident = TRUE;
X		      break;
X		    default:
X		      break;
X		    }
X		  /* End of food actions...				*/
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 += ((i_ptr->level/m_ptr->lev) + .5);
X		  prt_experience();
X		}
X	      add_food(i_ptr->p1);
X	      py.flags.status = (0xFFFFFFFC & py.flags.status);
X	      prt_hunger();
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 food.");
X    }
X  else
X    msg_print("But you are not carrying anything.");
X}
END_OF_eat.c
if test 5231 -ne `wc -c <eat.c`; then
    echo shar: \"eat.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f prayer.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"prayer.c\"
else
echo shar: Extracting \"prayer.c\" \(4983 characters\)
sed "s/^X//" >prayer.c <<'END_OF_prayer.c'
X#include "constants.h"
X#include "types.h"
X#include "externs.h"
X
X
X/* Pray like HELL...					-RAK-	*/
Xpray()
X{
X  int i, j, item_val, dir;
X  int choice, chance, result;
X  int dumy, y_dumy, x_dumy;
X  int redraw;
X  spell_type *s_ptr;
X  struct misc *m_ptr;
X  struct flags *f_ptr;
X  treasure_type *i_ptr;
X
X  reset_flag = TRUE;
X  if (py.flags.blind > 0) 
X    msg_print("You can't see to read your prayer!");
X  else if (no_light()) 
X    msg_print("You have no light to read by.");
X  else if (py.flags.confused > 0) 
X    msg_print("You are too confused...");
X  else if (class[py.misc.pclass].pspell) 
X    if (inven_ctr > 0) 
X      {
X	if (find_range(91, -1, &i, &j)) 
X	  {
X	    redraw = FALSE;
X	    if (get_item(&item_val, "Use which Holy Book?", &redraw, i, j)) 
X	      {
X		if ((result = cast_spell("Recite which prayer?", item_val, 
X			       &choice, &chance, &redraw)) == TRUE) 
X		  {
X		    s_ptr = &magic_spell[py.misc.pclass][choice];
X		    reset_flag = FALSE;
X		    if (randint(100) < chance) 
X		      msg_print("You lost your concentration!");
X		    else
X		      {
X			y_dumy = char_row;
X			x_dumy = char_col;
X			/* Prayers...					*/
X			choice++;
X			switch(choice)
X			  {
X			  case 1:
X			    (void) detect_evil();
X			    break;
X			  case 2:
X			    (void) hp_player(damroll("3d3"), "a prayer.");
X			    break;
X			  case 3:
X			    (void) bless(randint(12)+12);
X			    break;
X			  case 4:
X			    (void) remove_fear();
X			    break;
X			  case 5:
X			    (void) light_area(char_row, char_col);
X			    break;
X			  case 6:
X			    (void) detect_trap();
X			    break;
X			  case 7:
X			    (void) detect_sdoor();
X			    break;
X			  case 8:
X			    (void) slow_poison();
X                            break;
X			  case 9:
X			    if (get_dir("Which direction?", &dir, 
X					&dumy, &y_dumy, &x_dumy)) 
X			      (void) confuse_monster(dir, char_row, char_col);
X			    break;
X			  case 10:
X			    teleport((int)(py.misc.lev*3));
X			    break;
X			  case 11:
X			    (void) hp_player(damroll("4d4"), "a prayer.");
X			    break;
X			  case 12:
X			    (void) bless(randint(24)+24);
X			    break;
X			  case 13:
X			    (void) sleep_monsters1(char_row, char_col);
X			    break;
X			  case 14:
X			    (void) create_food();
X			    break;
X			  case 15:
X			    for (i = 0; i < INVEN_MAX; i++)
X			      {
X				i_ptr = &inventory[i];
X				i_ptr->flags &= 0x7FFFFFFF;
X			      }
X			    break;
X			  case 16:
X			    f_ptr = &py.flags;
X			    f_ptr->resist_heat += randint(10) + 10;
X			    f_ptr->resist_cold += randint(10) + 10;
X			    break;
X			  case 17:
X			    (void) cure_poison();
X			    break;
X			  case 18:
X			    if (get_dir("Which direction?", &dir,
X					&dumy, &y_dumy, &x_dumy)) 
X			      fire_ball(6, dir, char_row, char_col, 
X					(int)(damroll("3d6")+py.misc.lev),
X					"Black Sphere");
X			    break;
X			  case 19:
X			    (void) hp_player(damroll("8d4"), "a prayer.");
X			    break;
X			  case 20:
X			    detect_inv2(randint(24)+24);
X			    break;
X			  case 21:
X			    (void) protect_evil();
X			    break;
X			  case 22:
X			    (void) earthquake();
X			    break;
X			  case 23:
X			    (void) map_area();
X			    break;
X			  case 24:
X			    (void) hp_player(damroll("16d4"), "a prayer.");
X			    break;
X			  case 25:
X			    (void) turn_undead();
X			    break;
X			  case 26:
X			    (void) bless(randint(48)+48);
X			    break;
X			  case 27:
X			    (void) dispell_creature(0x0008, 
X						    (int)(3*py.misc.lev));
X			    break;
X			  case 28:
X			    (void) hp_player(200, "a prayer.");
X			    break;
X			  case 29:
X			    (void) dispell_creature(0x0004,
X						    (int)(3*py.misc.lev));
X			    break;
X			  case 30:
X			    (void) warding_glyph();
X			    break;
X			  case 31:
X			    (void) dispell_creature(0x0004,
X						    (int)(4*py.misc.lev));
X			    (void) cure_confusion();
X			    (void) remove_fear();
X			    (void) cure_poison();
X			    (void) cure_blindness();
X			    (void) hp_player(1000, "a prayer.");
X			    break;
X			  default:
X			    break;
X			  }
X			/* End of prayers...				*/
X			if (!reset_flag) 
X			  {
X			    m_ptr = &py.misc;
X			    m_ptr->exp += s_ptr->sexp;
X			    prt_experience();
X			    s_ptr->sexp = 0;
X			  }
X		      }
X		    m_ptr = &py.misc;
X		    if (!reset_flag) 
X		      {
X			if (s_ptr->smana > m_ptr->cmana) 
X			  {
X			    msg_print("You faint from fatigue!");
X			    py.flags.paralysis = 
X			      randint(5*(int)(s_ptr->smana-(int)m_ptr->cmana));
X			    m_ptr->cmana = 0.0;
X			    if (randint(3) == 1) 
X			      {
X				msg_print("You have damaged your health!");
X				py.stats.ccon = de_statp(py.stats.ccon);
X				prt_constitution();
X			      }
X			  }
X			else
X			  m_ptr->cmana -= (double)s_ptr->smana;
X			prt_cmana();
X		      }
X		  }
X		else if (result == -1)
X		  msg_print("You don't know any prayers in that book.");
X	      }
X	    else
X	      if (redraw)  draw_cave();
X	  }
X	else
X	  msg_print("But you are not carrying any Holy Books!");
X      }
X    else
X      msg_print("But you are not carrying any Holy Books!");
X  else
X    msg_print("Pray hard enough and your prayers may be answered.");
X}
END_OF_prayer.c
if test 4983 -ne `wc -c <prayer.c`; then
    echo shar: \"prayer.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f sets.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"sets.c\"
else
echo shar: Extracting \"sets.c\" \(4073 characters\)
sed "s/^X//" >sets.c <<'END_OF_sets.c'
X#include "constants.h"
X
Xint set_1_2(element)
Xint element;
X{
X  if ((element == 1) || (element == 2))
X    return(TRUE);
X  return(FALSE);
X}
X
Xint set_1_2_4(element)
Xint element;
X{
X  if ((element == 1) || (element == 2) || (element == 4))
X    return(TRUE);
X  return(FALSE);
X}
X
Xint set_4(element)
Xint element;
X{
X  if (element == 4)
X    return(TRUE);
X  return(FALSE);
X}
X
Xint set_corrodes(element)
Xint element;
X{
X  switch(element)
X    {
X    case 23: case 33: case 34: case 35: case 65:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint set_flammable(element)
Xint element;
X{
X  switch(element)
X    {
X    case 12: case 20: case 21: case 22: case 30: case 31: case 32:
X    case 36: case 55: case 70: case 71:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint set_frost_destroy(element)
Xint element;
X{
X  if ((element == 75) || (element == 76))
X    return(TRUE);
X  return(FALSE);
X}
X
X
Xint set_acid_affect(element)
Xint element;
X{
X  switch(element)
X    {
X    case 1: case 2: case 11: case 12: case 20: case 21: case 22:
X    case 30: case 31: case 32: case 36:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint set_floor(element)
X{
X  switch(element)
X    {
X    case 1: case 2: case 4: case 5: case 6: case 7:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint set_lightning_destroy(element)
Xint element;
X{
X  switch(element)
X    {
X    case 45: case 60: case 65:
X      return(FALSE);
X      break;
X    }
X  return(TRUE);
X}
X
X
X/*ARGSUSED*/    /* to shut up lint about unused argument */
Xint set_null(element)
Xint element;
X{
X  return(FALSE);
X}
X
X
Xint set_acid_destroy(element)
Xint element;
X{
X  switch(element)
X    {
X    case 12: case 20: case 21: case 22: case 30: case 31: case 32: case 33:
X    case 34: case 35: case 36: case 55: case 70: case 71: case 80: case 104:
X    case 105:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint set_fire_destroy(element)
Xint element;
X{
X  switch(element)
X    {
X    case 12: case 20: case 21: case 22: case 30: case 31: case 32: case 36:
X    case 55: case 70: case 71: case 75: case 76: case 80: case 104:
X    case 105:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint general_store(element)
Xint element;
X{
X  switch(element)
X    {
X    case 25: case 30: case 32: case 80: case 77: case 15: case 13:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint armory(element)
Xint element;
X{
X  switch(element)
X    {
X    case 30: case 31: case 33: case 34: case 35: case 36:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint weaponsmith(element)
Xint element;
X{
X  switch(element)
X    {
X    case 10: case 11: case 12: case 20: case 21: case 22: case 23:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint temple(element)
Xint element;
X{
X  switch(element)
X    {
X    case 21: case 70: case 71: case 75: case 76: case 91:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint alchemist(element)
Xint element;
X{
X  switch(element)
X    {
X    case 70: case 71: case 75: case 76:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint magic_shop(element)
Xint element;
X{
X  switch(element)
X    {
X    case 40: case 45: case 55: case 65: case 70: case 71:
X    case 75: case 76: case 90:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint set_wall(element)
Xint element;
X{
X  switch(element)
X    {
X    case 10: case 11: case 12:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint set_pwall(element)
Xint element;
X{
X  switch(element)
X    {
X    case 10: case 11: case 12: case 15:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint set_corr(element)
Xint element;
X{
X  if ((element == 4) || (element == 5))
X    return(TRUE);
X  return(FALSE);
X}
X
X
Xint set_trap(element)
Xint element;
X{
X  switch(element)
X    {
X    case 101: case 102: case 109: case 110:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
X
X
Xint set_light(element)
Xint element;
X{
X  switch(element)
X    {
X    case 102: case 103: case 104: case 105:
X    case 107: case 108: case 109: case 110:
X      return(TRUE);
X      break;
X    }
X  return(FALSE);
X}
END_OF_sets.c
if test 4073 -ne `wc -c <sets.c`; then
    echo shar: \"sets.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f signals.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"signals.c\"
else
echo shar: Extracting \"signals.c\" \(3793 characters\)
sed "s/^X//" >signals.c <<'END_OF_signals.c'
X#include <curses.h>
X#include <signal.h>
X#include "constants.h"
X#include "types.h"
X#include "externs.h"
X
Xextern int total_winner;
Xextern int moria_flag;
Xextern int search_flag;
X
X#ifdef USG
X/* no local special characters */
X#else
Xextern struct ltchars save_special_chars;
X#endif
X
Xint error_sig, error_code;
Xint (*core_dump)();
X#ifdef USG
X/* no suspend signal */
X#else
Xint (*suspend_handler)();
X#endif
X
X/* This signal package was brought to you by           -JEW-  */
X
X(*signal())();
Xsignal_save_core();
Xsignal_save_no_core();
Xsignal_ask_quit();
X
Xinit_signals()
X{
X  (void) signal(SIGHUP, signal_save_no_core);
X  (void) signal(SIGINT, signal_ask_quit);
X  core_dump = signal(SIGQUIT, signal_save_core);
X  (void) signal(SIGILL, signal_save_core);
X  (void) signal(SIGTRAP, signal_save_core);
X  (void) signal(SIGIOT, signal_save_core);
X  (void) signal(SIGEMT, signal_save_core);
X  (void) signal(SIGFPE, signal_save_core);
X  (void) signal(SIGKILL, signal_save_core);
X  (void) signal(SIGBUS, signal_save_core);
X  (void) signal(SIGSEGV, signal_save_core);
X  (void) signal(SIGSYS, signal_save_core);
X  (void) signal(SIGTERM, signal_save_core);
X}
X
X/*ARGSUSED*/
X#ifdef USG
Xsignal_save_core(sig)
Xint sig;
X{
X  error_sig = sig;
X  error_code = 0;
X  prt("OH NO!!!!!!!!!!  Attempting panic save.", 23, 0);
X  save_char(FALSE, FALSE);
X  (void) signal(SIGQUIT, SIG_DFL);
X  /* restore terminal settings */
X#ifndef BUGGY_CURSES
X  nl();
X#endif
X#ifdef ultrix
X  nocrmode();
X#else
X  nocbreak();
X#endif
X  echo();
X  resetterm();
X  /* restore the saved values of the local special chars */
X  /* no local special characters */
X  /* allow QUIT signal */
X  /* nothing needs to be done here */
X  (void) kill(getpid(), 3);
X  exit_game();
X}
X#else
Xsignal_save_core(sig, code, scp)
Xint sig, code;
Xstruct sigcontext *scp;
X{
X  error_sig = sig;
X  error_code = code;
X  prt("OH NO!!!!!!!!!!  Attempting panic save.", 23, 0);
X  save_char(FALSE, FALSE);
X  (void) signal(SIGQUIT, SIG_DFL);
X  /* restore terminal settings */
X#ifndef BUGGY_CURSES
X  nl();
X#endif
X#ifdef ultrix
X  nocrmode();
X#else
X  nocbreak();
X#endif
X  echo();
X  /* restore the saved values of the local special chars */
X  (void) ioctl(0, TIOCSLTC, (char *)&save_special_chars);
X  /* allow QUIT signal */
X  (void) sigsetmask(0);
X  (void) kill(getpid(), 3);
X  exit_game();
X}
X#endif
X
X/*ARGSUSED*/
X#ifdef USG
Xsignal_save_no_core(sig)
Xint sig;
X{
X  error_sig = sig;
X  error_code = 0;
X  save_char(FALSE, TRUE);
X  exit_game();
X}
X#else
Xsignal_save_no_core(sig, code, scp)
Xint sig, code;
Xstruct sigcontext *scp;
X{
X  error_sig = sig;
X  error_code = code;
X  save_char(FALSE, TRUE);
X  exit_game();
X}
X#endif
X
X/*ARGSUSED*/
X#ifdef USG
Xsignal_ask_quit(sig)
Xint sig;
X{
X  char command;
X
X  /* reset signal handler */
X  (void) signal(sig, signal_ask_quit);
X  if (get_com("Do you really want to quit?", &command))
X    switch(command)
X      {
X      case 'y': case 'Y':
X        if (character_generated)
X	  upon_death();
X        else
X          exit_game();
X	break;
X      }
X  find_flag = FALSE;
X  if (search_flag)
X    search_off();
X  if (py.flags.rest > 0)
X    rest_off();
X  erase_line(msg_line, msg_line);
X}
X#else
Xsignal_ask_quit(sig, code, scp)
Xint sig, code;
Xstruct sigcontext *scp;
X{
X  char command;
X
X  /* no need to reset signal handler */
X  if (get_com("Do you really want to quit?", &command))
X    switch(command)
X      {
X      case 'y': case 'Y':
X	if (character_generated)
X	  upon_death();
X	else
X	  exit_game();
X	break;
X      }
X  find_flag = FALSE;
X  if (search_flag)
X    search_off();
X  if (py.flags.rest > 0)
X    rest_off();
X  erase_line(msg_line, msg_line);
X}
X#endif
X
Xno_controlz()
X{
X#ifdef USG
X  /* no suspend signal */
X#else
X  suspend_handler = signal(SIGTSTP, SIG_IGN);
X#endif
X}
X
Xcontrolz()
X{
X#ifdef USG
X  /* no suspend signal */
X#else
X  (void) signal(SIGTSTP, suspend_handler);
X#endif
X}
END_OF_signals.c
if test 3793 -ne `wc -c <signals.c`; then
    echo shar: \"signals.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f staffs.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"staffs.c\"
else
echo shar: Extracting \"staffs.c\" \(3348 characters\)
sed "s/^X//" >staffs.c <<'END_OF_staffs.c'
X#include "constants.h"
X#include "types.h"
X#include "externs.h"
X
X
X/* Use a staff...					-RAK-	*/
Xuse()
X{
X  unsigned int i;
X  int j, k, item_val, chance;
X  int y, x;
X  int redraw, ident;
X  struct misc *m_ptr;
X  treasure_type *i_ptr;
X
X  reset_flag = TRUE;
X  if (inven_ctr > 0) 
X    {
X      if (find_range(55, -1, &j, &k)) 
X	{
X	  redraw = FALSE;
X	  if (get_item(&item_val, "Use which staff?", &redraw, j, k)) 
X	    {
X	      i_ptr = &inventory[item_val];
X	      if (redraw)  draw_cave();
X	      reset_flag = FALSE;
X	      m_ptr = &py.misc;
X	      chance = m_ptr->save + m_ptr->lev + int_adj() - i_ptr->level - 5;
X	      if (py.flags.confused > 0) 
X		chance /= 2.0;
X	      if (chance <= 0)  chance = 1;
X	      if (randint(chance) < USE_DEVICE) 
X		msg_print("You failed to use the staff properly.");
X	      else if (i_ptr->p1 > 0) 
X		{
X		  i = i_ptr->flags;
X		  ident = FALSE;
X		  (i_ptr->p1)--;
X		  while (i != 0)
X		    {
X		      j = bit_pos(&i) + 1;
X		      /* Staffs...				*/
X		      switch(j)
X			{
X			case 1:
X			  ident = light_area(char_row, char_col);
X			  break;
X			case 2:
X			  ident = detect_sdoor();
X			  break;
X			case 3:
X			  ident = detect_trap();
X			  break;
X			case 4:
X			  ident = detect_treasure();
X			  break;
X			case 5:
X			  ident = detect_object();
X			  break;
X			case 6:
X			  teleport(100);
X			  ident = TRUE;
X			  break;
X			case 7:
X			  ident = earthquake();
X			  break;
X			case 8:
X			  ident = FALSE;
X			  for (k = 0; k < randint(4); k++)
X			    {
X			      y = char_row;
X			      x = char_col;
X			      ident |= summon_monster(&y, &x, FALSE);
X			    }
X			  break;
X			case 9:
X			  ident = genocide();
X			  break;
X			case 10:
X			  ident = destroy_area(char_row, char_col);
X			  break;
X			case 11:
X			  ident = starlite(char_row, char_col);
X			  break;
X			case 12:
X			  ident = speed_monsters(1);
X			  break;
X			case 13:
X			  ident = speed_monsters(-1);
X			  break;
X			case 14:
X			  ident = sleep_monsters2();
X			  break;
X			case 15:
X			  ident = hp_player(randint(8), "a staff.");
X			  break;
X			case 16:
X			  ident = detect_invisible();
X			  break;
X			case 17:
X			  py.flags.fast += randint(30) + 15;
X			  ident = TRUE;
X			  break;
X			case 18:
X			  py.flags.slow += randint(30) + 15;
X			  ident = TRUE;
X			  break;
X			case 19:
X			  ident = mass_poly();
X			  break;
X			case 20:
X			  if (remove_curse()) 
X			    {
X			      msg_print("The staff glows blue for a moment..");
X			      ident = TRUE;
X			    }
X			  break;
X			case 21:
X			  ident = detect_evil();
X			  break;
X			case 22:
X			  if ((cure_blindness()) || (cure_poison()) ||
X			      (cure_confusion())) 
X			    ident = TRUE;
X			  break;
X			case 23:
X			  ident = dispell_creature(0x0004, 60);
X			  break;
X			case 24:
X			  ident = mass_genocide();
X			  break;
X			case 25:
X			  ident = unlight_area(char_row, char_col);
X			  break;
X			default:
X			  break;
X			}
X		      /* End of staff actions...		*/
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 += ((i_ptr->level/m_ptr->lev) + 0.5);
X		      prt_experience();
X		    }
X		  desc_charges(item_val);
X		}
X	      else
X		msg_print("The staff has no charges left.");
X	    }
X	  else
X	    if (redraw)  draw_cave();
X	}
X      else
X	msg_print("You are not carrying any staffs.");
X    }
X  else
X    msg_print("But you are not carrying anything.");
X}
END_OF_staffs.c
if test 3348 -ne `wc -c <staffs.c`; then
    echo shar: \"staffs.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f wands.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"wands.c\"
else
echo shar: Extracting \"wands.c\" \(4179 characters\)
sed "s/^X//" >wands.c <<'END_OF_wands.c'
X#include "constants.h"
X#include "types.h"
X#include "externs.h"
X
X
X/* Wands for the aiming...				*/
Xaim()
X{
X  unsigned int i;
X  int j, k, l, chance;
X  int dir, item_val;
X  int dumy, y_dumy, x_dumy;
X  int redraw, ident;
X  treasure_type *i_ptr;
X  struct misc *m_ptr;
X
X  redraw = FALSE;
X  reset_flag = TRUE;
X  if (inven_ctr > 0) 
X    {
X      if (find_range(65, -1, &j, &k)) 
X	{
X	  if (get_item(&item_val, "Aim which wand?", &redraw, j, k)) 
X	    {
X	      i_ptr = &inventory[item_val];
X	      if (redraw)  draw_cave();
X	      reset_flag = FALSE;
X	      redraw = FALSE;
X	      y_dumy = char_row;
X	      x_dumy = char_col;
X	      if (get_dir("Which direction?", &dir, &dumy, &y_dumy, &x_dumy)) 
X		{
X		  if (py.flags.confused > 0) 
X		    {
X		      msg_print("You are confused...");
X		      do
X			{
X			  dir = randint(9);
X			}
X		      while (dir == 5);
X		    }
X		  i = i_ptr->flags;
X		  ident = FALSE;
X		  m_ptr = &py.misc;
X		  chance = m_ptr->save + m_ptr->lev + int_adj() - i_ptr->level;
X		  if (py.flags.confused > 0) 
X		    chance /= 2.0;
X		  if (chance <= 0)  chance = 1;
X		  if (randint(chance) < USE_DEVICE) 
X		    msg_print("You failed to use the wand properly.");
X		  else if (i_ptr->p1 > 0) 
X		    {
X		      (i_ptr->p1)--;
X		      while (i != 0)
X			{
X			  j = bit_pos(&i) + 1;
X			  k = char_row;
X			  l = char_col;
X			  /* Wands                       */
X			  switch(j)
X			    {
X			    case 1:
X			 msg_print("A line of blue shimmering light appears.");
X			      light_line(dir, char_row, char_col);
X			      ident = TRUE;
X			      break;
X			    case 2:
X			      fire_bolt(1, dir, k, l, damroll("3d8"),
X					"Lightning Bolt");
X			      ident = TRUE;
X			      break;
X			    case 3:
X			      fire_bolt(4, dir, k, l, damroll("4d8"),
X					"Frost Bolt");
X			      ident = TRUE;
X			      break;
X			    case 4:
X			      fire_bolt(5, dir, k, l, damroll("6d8"),
X					"Fire Bolt");
X			      ident = TRUE;
X			      break;
X			    case 5:
X			      ident = wall_to_mud(dir, k, l);
X			      break;
X			    case 6:
X			      ident = poly_monster(dir, k, l);
X			      break;
X			    case 7:
X			      ident = hp_monster(dir, k, l, -damroll("4d6"));
X			      break;
X			    case 8:
X			      ident = speed_monster(dir, k, l, 1);
X			      break;
X			    case 9:
X			      ident = speed_monster(dir, k, l, -1);
X			      break;
X			    case 10:
X			      ident = confuse_monster(dir, k, l);
X			      break;
X			    case 11:
X			      ident = sleep_monster(dir, k, l);
X			      break;
X			    case 12:
X			      ident = drain_life(dir, k, l);
X			      break;
X			    case 13:
X			      ident = td_destroy2(dir, k, l);
X			      break;
X			    case 14:
X			      fire_bolt(0, dir, k, l, damroll("2d6"),
X					"Magic Missile");
X			      ident = TRUE;
X			      break;
X			    case 15:
X			      ident = build_wall(dir, k, l);
X			      break;
X			    case 16:
X			      ident = clone_monster(dir, k, l);
X			      break;
X			    case 17:
X			      ident = teleport_monster(dir, k, l);
X			      break;
X			    case 18:
X			      ident = disarm_all(dir, k, l);
X			      break;
X			    case 19:
X			      fire_ball(1, dir, k, l, 24, "Lightning Ball");
X			      ident = TRUE;
X			      break;
X			    case 20:
X			      fire_ball(4, dir, k, l, 32, "Cold Ball");
X			      ident = TRUE;
X			      break;
X			    case 21:
X			      fire_ball(5, dir, k, l, 48, "Fire Ball");
X			      ident = TRUE;
X			      break;
X			    case 22:
X			      fire_ball(2, dir, k, l, 8, "Stinking Cloud");
X			      ident = TRUE;
X			      break;
X			    case 23:
X			      fire_ball(3, dir, k, l, 40, "Acid Ball");
X			      ident = TRUE;
X			      break;
X			    case 24:
X			      i = 2 << (randint(23) - 1);
X			      break;
X			    default:
X			      break;
X			    }
X			  /* End of Wands...                  */
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 += ((i_ptr->level/m_ptr->lev) + 0.5);
X			  prt_experience();
X			}
X		      desc_charges(item_val);
X		    }
X		  else
X		    msg_print("The wand has no charges left.");
X		}
X	    }
X	}
X      else
X	msg_print("You are not carrying any wands.");
X    }
X  else
X    msg_print("But you are not carrying anything.");
X  if (redraw)  draw_cave();
X}
END_OF_wands.c
if test 4179 -ne `wc -c <wands.c`; then
    echo shar: \"wands.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 16 \(of 16\).
cp /dev/null ark16isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 16 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