[comp.sources.games] v08i045: NetHack3 - display oriented dungeons & dragons

billr@saab.CNA.TEK.COM (Bill Randle) (09/30/89)

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 8, Issue 45
Archive-name: NetHack3/Patch4i
Patch-To: NetHack3: Volume 7, Issue 56-93

#! /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 11)."
# Contents:  UPDATE4 do_patch4.sh others/Makefile.pc src/objects.c
# Wrapped by billr@saab on Fri Sep 29 13:57:17 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'UPDATE4' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'UPDATE4'\"
else
echo shar: Extracting \"'UPDATE4'\" \(1550 characters\)
sed "s/^X//" >'UPDATE4' <<'END_OF_FILE'
X-------------
XUPDATE4
X-------------
XNOTICE:  The changes which were made in the code make all save and bones 
Xfiles absolete.  Once Patch 4 is applied, all the old save and bones files
Xmust be thrown out.
X
X
XHere is a list of the main changes:
X
XObject and monster types got a new field specifying their color, so things 
Xcan now appear in "living color" instead having one color for all monsters,
Xone for all weapons, and so on.
X
XReferences to monsters and objects on the floor were moved to new structures,
Xwhich support the better color handling as well as provide yet faster access.
X
XDavid Gentzel provided a port for VMS.  Although extensively tested by
XDavid and others, and found to be sound, it probably needs further
Xrefinements.  We are appealing to those of you who know VMS (none of us
Xdoes..) to join David in his efforts to refine the VMS code.
X
XMuch of the *main.c code was moved to a new file, to avoid having to update
Xthat common code in three different *main.c files.
X
XVARARG handling was ifdef'd to satisfy ANSI compilers.
X
XAlmost all grey creatures now join the other gray creatures.
X
XMonsters will no longer be created in the same room as the player, and should
Xno longer want to end up in the SE corner of the dungeon.
X
XLycanthropy is now considered a "major problem" (allowing for appeal to the
Xgods through prayer), some artifacts are associated with particular character
Xclasses, various oddities involving statues, digging, iron balls, and 
Xthrowing have been removed, and many other bugs, both major and minor, were
Xfixed.
X
END_OF_FILE
if test 1550 -ne `wc -c <'UPDATE4'`; then
    echo shar: \"'UPDATE4'\" unpacked with wrong size!
fi
# end of 'UPDATE4'
fi
if test -f 'do_patch4.sh' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'do_patch4.sh'\"
else
echo shar: Extracting \"'do_patch4.sh'\" \(739 characters\)
sed "s/^X//" >'do_patch4.sh' <<'END_OF_FILE'
X#! /bin/sh
X# script to call patch to apply diff files
X# make sure all of the patch files (and this file) are in your top level
X# NetHack directory
X#
Xecho "applying patch4a"
Xpatch -p <patches04a
Xecho "applying patch4b"
Xpatch -p <patches04b
Xecho "applying patch4c"
Xpatch -p <patches04c
Xecho "applying patch4d"
Xpatch -p <patches04d
Xecho "applying patch4e"
Xpatch -p <patches04e
Xecho "applying patch4f"
Xpatch -p <patches04f
Xecho "applying patch4g"
Xpatch -p <patches04g
Xecho "applying patch4h"
Xpatch -p <patches04h
Xecho "building monst.c"
Xif test -f 'src/monst.c'
Xthen
X  mv -f src/monst.c src/monst.c.orig
Xfi
Xcat src/monst.c1 src/monst.c2 > src/monst.c
Xrm src/monst.c1 src/monst.c2
Xrm -f vms/*.orig
Xecho "all patches applied, check for rejects"
END_OF_FILE
if test 739 -ne `wc -c <'do_patch4.sh'`; then
    echo shar: \"'do_patch4.sh'\" unpacked with wrong size!
fi
chmod +x 'do_patch4.sh'
# end of 'do_patch4.sh'
fi
if test -f 'others/Makefile.pc' -a "${1}" != "-c" ; then 
  mv -f others/Makefile.pc others/Makefile.pc.orig
fi
echo shar: Extracting \"'others/Makefile.pc'\" \(7987 characters\)
sed "s/^X//" >'others/Makefile.pc' <<'END_OF_FILE'
X#	SCCS Id: @(#)Makefile.pc	3.0	89/07/07
X#	PC NetHack 3.0 Makefile for Microsoft(tm) "C" 4.0 or better.
X#
X# Large memory model, register bug, remove stack probes:
XCC	= msc
XLINK	= link
XMODEL	= L
X
X# Directories (makedefs hardcodes these, don't change them)
XINCL	= ..\include
XAUX	= ..\auxil
XSRC	= ..\src
X
XCFLAGS	= -A$(MODEL) -DLINT_ARGS -Ot -Oa -Gs -Gt28 -I$(INCL)
XLFLAGS	= -exe -noig -stack:0x0aff -seg:512
XTARG	= pc
X
X.c.o:
X	$(CC) $(CFLAGS) $*.c, o\$*.o;
X
X# Optional high-quality BSD random number generation routines (see pcconf.h).
X# Set to nothing if not used.
XRANDOM = o\random.obj
X
X# For NDMAKE, to handle the .o suffix.
X.SUFFIXES: .exe .o .c .y .l
X
X# The game name
XGAME= nethack
X
X# The game directory
XGAMEDIR = \games\$(GAME)
X
X# The game filename
XGAMEFILE = $(GAMEDIR)\$(GAME).exe
X
X# object files for makedefs
XMAKEOBJS = o\makedefs.o o\alloc.o o\monst.o o\objects.o o\panic.o
X
X# object files for special levels compiler
XSPLEVOBJS = o\lev_comp.o o\lev_lex.o o\lev_main.o o\alloc.o o\monst.o o\objects.o o\panic.o
X
X# nothing below this line should have to be changed
X#
X# other things that have to be reconfigured are in config.h,
X# {unixconf.h, pcconf.h, tosconf.h}, and possibly system.h
X
XVOBJ =	o\allmain.o o\alloc.o o\apply.o o\artifact.o o\attrib.o o\bones.o \
X	o\cmd.o o\dbridge.o o\decl.o o\demon.o o\do.o o\do_name.o o\do_wear.o \
X	o\dog.o o\dogmove.o o\dokick.o o\dothrow.o o\eat.o o\end.o o\engrave.o \
X	o\exper.o o\extralev.o o\fountain.o o\getline.o o\hack.o o\invent.o \
X	o\lock.o o\mail.o o\main.o o\makemon.o o\mcastu.o o\mhitm.o o\mhitu.o \
X	o\mklev.o o\mkmaze.o o\mkobj.o o\mkroom.o o\mon.o o\mondata.o \
X	o\msdos.o o\monmove.o o\monst.o o\mthrowu.o o\music.o o\o_init.o \
X	o\objects.o o\objnam.o o\options.o o\pager.o o\pickup.o o\polyself.o \
X	o\potion.o o\pray.o o\pri.o o\priest.o o\prisym.o $(RANDOM) o\read.o \
X	o\restore.o o\rip.o o\rnd.o o\rumors.o o\save.o o\search.o o\shk.o \
X	o\shknam.o o\sit.o o\sounds.o o\sp_lev.o o\spell.o o\steal.o \
X	o\termcap.o o\timeout.o o\topl.o o\topten.o o\track.o o\trap.o \
X	o\tty.o o\u_init.o o\uhitm.o o\unix.o o\vault.o o\weapon.o o\were.o \
X	o\wield.o o\wizard.o o\worm.o o\worn.o o\write.o o\zap.o
XHOBJ =	$(VOBJ) o\version.o
X
XPCCONF_H   = $(INCL)\$(TARG)conf.h $(INCL)\msdos.h $(INCL)\system.h \
X	     $(INCL)\extern.h 
XGLOBAL_H   = $(INCL)\global.h $(INCL)\coord.h $(PCCONF_H)
XCONFIG_H   = $(INCL)\config.h $(INCL)\tradstdc.h $(GLOBAL_H)
XTRAP_H	   = $(INCL)\trap.h
XPERMONST_H = $(INCL)\permonst.h $(INCL)\monflag.h
XYOU_H	   = $(INCL)\you.h $(INCL)\attrib.h $(PERMONST_H) $(INCL)\mondata.h \
X	     $(INCL)\monst.h $(INCL)\youprop.h
XDECL_H	   = $(INCL)\decl.h $(INCL)\spell.h $(INCL)\obj.h $(YOU_H) \
X	     $(INCL)\onames.h $(INCL)\pm.h
XHACK_H	   = $(CONFIG_H) $(DECL_H) $(INCL)\monsym.h $(INCL)\mkroom.h \
X	     $(INCL)\objclass.h $(INCL)\gold.h $(INCL)\trap.h $(INCL)\flag.h \
X	     $(INCL)\rm.h
X
X# The main target
X$(GAMEDIR)\$(GAME).exe: o $(HOBJ)
X	.\linkit
X#	$(LINK) $(HOBJ),nethack,nethack,ltermcap llibux $(LFLAGS) ;
X
X# NDMAKE automatically generates LINK response files, so you can
X# uncomment the second line if you are using NDMAKE.
X
X$(GAME): $(GAMEDIR)\$(GAME).exe
X$(GAME).exe: $(GAMEDIR)\$(GAME).exe
X
X.c.o:
X	$(CC) $(CFLAGS) $*.c, o\$*.o ;
X
Xall:	o $(GAME) auxil
X	@echo Done.
X
Xo:
X	mkdir o
X
Xmakedefs.exe:	$(MAKEOBJS)
X	$(LINK) $(LFLAGS) $(MAKEOBJS);
X
Xo\makedefs.o:  $(INCL)\config.h $(INCL)\permonst.h $(INCL)\objclass.h
X
Xlev_comp.exe:  $(SPLEVOBJS)
X	$(LINK) $(LFLAGS) -o lev_comp $(SPLEVOBJS)
X
Xo\lev_comp.o:  $(HACK_H) $(INCL)\sp_lev.h
Xo\lev_lex.o:  $(INCL)\lev_comp.h $(HACK_H) $(INCL)\sp_lev.h
Xo\lev_main.o:  $(HACK_H) $(INCL)\sp_lev.h
X
X# If you have yacc or lex programs, and make any changes,
X# add some .y.c and .l.c rules to your Make.ini.
X
Xlev_comp.c:  lev_comp.y
Xlev_lex.c:  lev_comp.l
X
X#
X#	The following include files depend on makedefs to be created.
X#
X#	date.h should be remade any time any of the source or include code
X#	is modified.
X#
X$(INCL)\date.h:	 $(VOBJ) makedefs.exe
X	.\makedefs -v
X
X$(INCL)\trap.h:	 makedefs.exe
X	.\makedefs -t
X
X$(INCL)\onames.h:  makedefs.exe
X	.\makedefs -o
X
X$(INCL)\pm.h:  makedefs.exe
X	.\makedefs -p
X
Xdata:	$(AUX)\data.base makedefs.exe
X	.\makedefs -d
X
Xrumors: $(AUX)\rumors.tru $(AUX)\rumors.fal makedefs.exe
X	.\makedefs -r
X
X#
X#	The following programs vary depending on what OS you are using.
X#
Xo\main.o:   $(HACK_H) $(TARG)main.c
X	$(CC) $(CFLAGS) $(TARG)main.c, o\main.o ;
X
Xo\tty.o:   $(HACK_H) $(INCL)\func_tab.h $(TARG)tty.c
X	$(CC) $(CFLAGS) $(TARG)tty.c, o\tty.o ;
X
Xo\unix.o:   $(HACK_H) $(TARG)unix.c
X	$(CC) $(CFLAGS) $(TARG)unix.c, o\unix.o ;
X
X#
X# Secondary targets
X#
X
Xauxil:	spec_levs
X	cd $(AUX)
X	xcopy *. $(GAMEDIR)
X
Xspec_levs: $(AUX)\castle.des $(AUX)\endgame.des $(AUX)\tower.des
X	lev_comp $(AUX)\castle.des
X	lev_comp $(AUX)\endgame.des
X	lev_comp $(AUX)\tower.des
X	cd $(AUX)
X	xcopy castle $(GAMEDIR)
X	del castle
X	xcopy endgame $(GAMEDIR)
X	del endgame
X	xcopy tower? $(GAMEDIR)
X	del tower?
X
Xclean:
X	del o\*.obj
X	rmdir o
X
Xspotless: clean
X	cd $(INCL)
X	del date.h
X	del onames.h
X	del pm.h
X	touch date.h onames.h pm.h
X	cd $(SRC)
X	del makedefs.exe
X	if exist lev_comp.exe del lev_comp.exe
X
X#
X# Other dependencies
X#
X
X# GO AHEAD, DELETE THIS LINE
X
Xo\allmain.o:  $(HACK_H)
Xo\alloc.o:  $(CONFIG_H)
Xo\apply.o:  $(HACK_H) $(INCL)\edog.h
Xo\artifact.o:  $(HACK_H) $(INCL)\artifact.h
Xo\attrib.o:  $(HACK_H)
Xo\bones.o:  $(HACK_H)
Xo\cmd.o:  $(HACK_H) $(INCL)\func_tab.h
Xo\dbridge.o: $(HACK_H)
Xo\decl.o:  $(HACK_H)
Xo\demon.o:  $(HACK_H)
Xo\do.o:  $(HACK_H)
Xo\do_name.o:  $(HACK_H)
Xo\do_wear.o:  $(HACK_H)
Xo\dog.o:  $(HACK_H) $(INCL)\edog.h
Xo\dogmove.o:  $(HACK_H) $(INCL)\mfndpos.h $(INCL)\edog.h
Xo\dokick.o:  $(HACK_H)
Xo\dothrow.o:  $(HACK_H)
Xo\eat.o:  $(HACK_H)
Xo\end.o:  $(HACK_H) $(INCL)\eshk.h
Xo\engrave.o:  $(HACK_H)
Xo\exper.o:  $(HACK_H)
Xo\extralev.o:  $(HACK_H)
Xo\fountain.o:  $(HACK_H)
Xo\getline.o:  $(HACK_H) $(INCL)\func_tab.h
Xo\hack.o:  $(HACK_H)
Xo\invent.o:  $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h
Xo\ioctl.o:  $(HACK_H)
Xo\lev_comp.o:  $(HACK_H) $(INCL)\sp_lev.h
Xo\lock.o:  $(HACK_H)
Xo\makemon.o:  $(HACK_H)
Xo\mail.o:  $(HACK_H)
Xo\mcastu.o:  $(HACK_H)
Xo\mhitm.o:  $(HACK_H) $(INCL)\artifact.h
Xo\mhitu.o:  $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h
Xo\mklev.o:  $(HACK_H)
Xo\mkmaze.o:  $(HACK_H)
Xo\mkobj.o:  $(HACK_H)
Xo\mkroom.o:  $(HACK_H)
Xo\mon.o:  $(HACK_H) $(INCL)\mfndpos.h $(INCL)\artifact.h
Xo\mondata.o:  $(HACK_H) $(INCL)\eshk.h $(INCL)\epri.h
Xo\monmove.o:  $(HACK_H) $(INCL)\mfndpos.h $(INCL)\artifact.h
Xo\monst.o:  $(CONFIG_H) $(PERMONST_H) $(INCL)\eshk.h $(INCL)\vault.h $(INCL)\epri.h
Xo\msdos.o:  $(HACK_H)
Xo\mthrowu.o:  $(HACK_H)
Xo\music.o:  $(HACK_H)
Xo\o_init.o:  $(HACK_H) $(INCL)\onames.h
Xo\objects.o:  $(CONFIG_H) $(INCL)\obj.h $(INCL)\objclass.h $(INCL)\prop.h
Xo\objnam.o:  $(HACK_H)
Xo\options.o:  $(HACK_H)
Xo\pager.o:  $(HACK_H)
Xo\panic.o:  $(CONFIG_H)
Xo\pickup.o:  $(HACK_H)
Xo\polyself.o:  $(HACK_H)
Xo\potion.o:  $(HACK_H)
Xo\pray.o:  $(HACK_H)
Xo\pri.o:  $(HACK_H)
Xo\priest.o:  $(HACK_H) $(INCL)\mfndpos.h $(INCL)\eshk.h $(INCL)\epri.h
Xo\prisym.o:  $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h
Xo\random.o:
Xo\read.o:  $(HACK_H)
Xo\restore.o:  $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h
Xo\rip.o:  $(HACK_H)
Xo\rnd.o:  $(HACK_H)
Xo\rumors.o:  $(HACK_H)
Xo\save.o:  $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h
Xo\search.o:  $(HACK_H) $(INCL)\artifact.h
Xo\shk.o:  $(HACK_H) $(INCL)\eshk.h
Xo\shknam.o:  $(HACK_H) $(INCL)\eshk.h
Xo\sit.o:  $(HACK_H)
Xo\sounds.o:  $(HACK_H) $(INCL)\edog.h $(INCL)\eshk.h
Xo\sp_lev.o:  $(HACK_H) $(INCL)\sp_lev.h
Xo\spell.o:  $(HACK_H)
Xo\steal.o:  $(HACK_H)
Xo\termcap.o:  $(HACK_H)
Xo\timeout.o:  $(HACK_H)
Xo\topl.o:  $(HACK_H)
Xo\topten.o:  $(HACK_H)
Xo\track.o:  $(HACK_H)
Xo\trap.o:  $(HACK_H) $(INCL)\edog.h $(INCL)\trapname.h
Xo\u_init.o:  $(HACK_H)
Xo\uhitm.o:  $(HACK_H) $(INCL)\artifact.h
Xo\vault.o:  $(HACK_H) $(INCL)\vault.h
Xo\version.o:  $(HACK_H) $(INCL)\date.h
Xo\weapon.o:  $(HACK_H)
Xo\were.o:  $(HACK_H)
Xo\wield.o:  $(HACK_H)
Xo\wizard.o:  $(HACK_H)
Xo\worm.o:  $(HACK_H) $(INCL)\wseg.h
Xo\worn.o:  $(HACK_H)
Xo\write.o:  $(HACK_H)
Xo\zap.o:  $(HACK_H)
END_OF_FILE
if test 7987 -ne `wc -c <'others/Makefile.pc'`; then
    echo shar: \"'others/Makefile.pc'\" unpacked with wrong size!
fi
# end of 'others/Makefile.pc'
if test -f 'src/objects.c' -a "${1}" != "-c" ; then 
  mv -f src/objects.c src/objects.c.orig
fi
echo shar: Extracting \"'src/objects.c'\" \(31115 characters\)
sed "s/^X//" >'src/objects.c' <<'END_OF_FILE'
X/*	SCCS Id: @(#)objects.c	3.0	89/04/14
X/* NetHack may be freely redistributed.  See license for details. */
X/* Copyright (c) Mike Threepoint, 1989 (890110) */
X
X/* since this file is also used in auxiliary programs, don't include all the 
X * function declarations for all of nethack
X */
X#define EXTERN_H
X#include "config.h"
X#include "obj.h"
X#include "objclass.h"
X#include "prop.h"
X#include "decl.h"
X#undef BOW
X
X/* objects have letter " % ) ( 0 _ ` [ ! ? / = * + . */
X
X#ifdef C
X#undef C
X#endif
X#ifdef TEXTCOLOR
X#define C(n)	n
X#else
X#define C(n)
X#endif
X
Xstruct objclass objects[] = {
X
X	{ "strange object", NULL, NULL, 1,0,0,0,0, 0,
X		ILLOBJ_SYM, 0, 0, 0, 0, 0, 0, 0, C(0) },
X/* amulets ... - THE Amulet comes last because it is special */
X#define AMULET(name,desc,power,prob,weight) { \
X	name, desc, NULL, 0,0,0,0,METAL, power, AMULET_SYM, prob, 0, weight, \
X	150, 0, 0, 0, C(HI_METAL) }
X
X	AMULET("amulet of esp", 	  "circular",	TELEPAT,    190, 2),
X	AMULET("amulet of life saving",   "spherical",	LIFESAVED,   90, 2),
X	AMULET("amulet of strangulation", "oval",	STRANGLED,  150, 2),
X	AMULET("amulet of restful sleep", "triangular",	SLEEPING,   150, 2),
X	AMULET("amulet versus poison",	  "pyramidal",	POISON_RES, 180, 2),
X	AMULET("amulet of change",	  "square",	0,	    150, 2),
X								/* POLYMORPH */
X	AMULET("amulet of reflection",	  "hexagonal",	REFLECTING,  90, 2),
X	{ "Amulet of Yendor", NULL, NULL, 1,0,1,0,METAL, 0,
X		AMULET_SYM, 0, 0, 2, 3500, 0, 0, 0, C(HI_METAL) },
X#undef AMULET
X
X#define FOOD(name,prob,delay,wt,uk,tin,nutrition,color) { \
X	name, NULL, NULL, 1,1,uk,0,tin, 0, FOOD_SYM, prob, delay, wt, \
X	nutrition/20 + 5, 0, 0, nutrition, C(color) }
X
X/* dog eats foods 0-4 but prefers tripe rations above all others */
X/* fortune cookies can be read */
X/* carrots improve your vision */
X/* +0 tins contain monster meat */
X/* +1 tins (of spinach) make you stronger (like Popeye) */
X/* food CORPSE is a cadaver of some type */
X
X	/* meat */
X#ifdef TOLKIEN
X	FOOD("tripe ration",	   145, 1, 2, 0, 0, 200, BROWN),
X#else
X	FOOD("tripe ration",	   150, 1, 2, 0, 0, 200, BROWN),
X#endif
X	FOOD("dead lizard",	    35, 0, 1, 0, 0,  40, GREEN),
X	FOOD("corpse",		     0, 0, 0, 0, 0,   0, BROWN),
X	FOOD("egg",		    75, 0, 1, 1, 0,  80, WHITE),
X	/* fruits & veggies */
X	FOOD("apple",		    10, 0, 1, 0, 0,  50, RED),
X	FOOD("orange",		     7, 0, 1, 0, 0,  80, ORANGE_COLORED),
X	FOOD("pear",		     7, 0, 1, 0, 0,  50, GREEN+BRIGHT),
X	FOOD("melon",		     7, 0, 1, 0, 0, 100, GREEN+BRIGHT),
X	FOOD("banana",		     7, 0, 1, 0, 0,  80, YELLOW),
X	FOOD("carrot",		    15, 0, 1, 0, 0,  50, ORANGE_COLORED),
X	FOOD("clove of garlic",      5, 0, 1, 0, 0,  40, WHITE),
X#ifdef TUTTI_FRUTTI
X	FOOD("slime mold",	    75, 0, 1, 0, 0, 250, BROWN),
X#else
X	FOOD("slice of pizza",	    75, 0, 1, 0, 0, 250, RED),
X#endif
X	/* human food */
X	FOOD("lump of royal jelly",  0, 0, 1, 0, 0, 200, YELLOW),
X	FOOD("cream pie",	    25, 0, 1, 0, 0, 100, WHITE),
X	FOOD("candy bar",	     7, 0, 1, 0, 0, 100, BROWN),
X	FOOD("fortune cookie",	    55, 0, 1, 0, 0,  40, BROWN),
X#ifdef TOLKIEN
X	FOOD("pancake", 	    25, 1, 1, 0, 0, 200, BROWN),
X	FOOD("lembas wafer",	    20, 1, 1, 0, 0, 800, WHITE+BRIGHT),
X	FOOD("cram ration",	    20, 1, 3, 0, 0, 600, HI_ORGANIC),
X	FOOD("food ration",	   385, 5, 4, 0, 0, 800, HI_ORGANIC),
X#else
X	FOOD("pancake", 	    40, 1, 1, 0, 0, 200, BROWN),
X	FOOD("food ration",	   405, 5, 4, 0, 0, 800, HI_ORGANIC),
X#endif
X#ifdef ARMY
X	FOOD("K-ration",	     0, 1, 1, 0, 0, 400, HI_ORGANIC),
X	FOOD("C-ration",	     0, 1, 1, 0, 0, 300, HI_ORGANIC),
X#endif
X	FOOD("tin",		    75, 0, 1, 1, METAL, 0, HI_METAL),
X#undef FOOD
X
X#define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,metal,color) { \
X	name, app, NULL, kn,mg,1,bi,metal, 0, WEAPON_SYM, prob, 0, wt, \
X	cost, sdam, ldam, 0, C(color) }
X#define PROJECTILE(name,app,kn,bi,prob,wt,cost,sdam,ldam,metal,prop,color) { \
X	name, app, NULL, kn,1,1,bi,metal, 0, WEAPON_SYM, prob, 0, wt, \
X	cost, sdam, ldam, prop, C(color) }
X#define BOW(name,app,kn,bi,prob,wt,cost,sdam,ldam,metal,prop,color) { \
X	name, app, NULL, kn,0,1,bi,metal, 0, WEAPON_SYM, prob, 0, wt, \
X	cost, sdam, ldam, -(prop), C(color) }
X
X/* Note: for weapons that don't do an even die of damage (ex. 2-7 or 3-18)
X * the extra damage is added on in weapon.c, not here! */
X
X/* missiles */
X#ifdef TOLKIEN
XPROJECTILE("arrow",		NULL,		1, 0, 37, 0,  2, 6, 6,
X		   METAL, WP_BOW, HI_METAL),
XPROJECTILE("elven arrow",	"runed arrow",	0, 0, 10, 0,  2, 7, 6,
X		   METAL, WP_BOW, HI_METAL),
XPROJECTILE("orcish arrow",	"black arrow",	0, 0, 11, 0,  2, 5, 6,
X		   METAL, WP_BOW, BLACK),
X#else
XPROJECTILE("arrow",		NULL,		1, 0, 58, 0,  2, 6, 6,
X		   METAL, WP_BOW, HI_METAL),
X#endif
XPROJECTILE("silver arrow",	NULL,		1, 0,  8, 0,  2, 6, 6,
X		   SILVER, WP_BOW, HI_SILVER),
XPROJECTILE("crossbow bolt",	NULL,		1, 0, 60, 0,  2, 4, 6,
X		   METAL, WP_CROSSBOW, HI_METAL),
X
XWEAPON("dart",		NULL,		1, 1, 0, 60, 0,  2, 3, 2, METAL, HI_METAL),
XWEAPON("shuriken",	"throwing star",0, 1, 0, 30, 0,  5, 8, 6, METAL, HI_METAL),
XWEAPON("boomerang",	NULL,		1, 1, 0, 15, 3, 20, 9, 9, WOOD, HI_WOOD),
X
X/* spears */
X#ifdef TOLKIEN
XWEAPON("spear", 	NULL,		1, 1, 0, 55, 3,  5, 6, 8, METAL, HI_METAL),
XWEAPON("elven spear",	"runed spear",	0, 1, 0, 10, 3,  5, 7, 8, METAL, HI_METAL),
XWEAPON("orcish spear",	"black spear",	0, 1, 0, 13, 3,  5, 5, 8, METAL, BLACK),
XWEAPON("dwarvish spear","shiny spear",	0, 1, 0, 12, 3,  5, 8, 8, METAL, HI_METAL),
X#else
XWEAPON("spear", 	NULL,		1, 1, 0, 90, 3,  5, 6, 8, METAL, HI_METAL),
X#endif
XWEAPON("javelin",	"throwing spear",0,1, 0, 10, 3,  5, 6, 6, METAL, HI_METAL),
XWEAPON("trident",	NULL,		1, 0, 0,  8, 4, 15, 6, 4, METAL, HI_METAL),
X						/* +1 small, +2d4 large */
XWEAPON("lance", 	NULL,		1, 0, 0,  8, 4, 10, 6, 8, METAL, HI_METAL),
X
X/* blades */
X#ifdef TOLKIEN
XWEAPON("dagger",	NULL,		1, 1, 0, 25, 2,  4, 4, 3, METAL, HI_METAL),
XWEAPON("elven dagger",	"large runed knife", 0, 1, 0,  8, 2, 4, 5, 3, METAL, HI_METAL),
XWEAPON("orcish dagger", "large black knife", 0, 1, 0, 10, 2, 4, 3, 3, METAL, BLACK),
X#else
XWEAPON("dagger",	NULL,		1, 1, 0, 43, 2,  4, 4, 3, METAL, HI_METAL),
X#endif
XWEAPON("athame",	NULL,		1, 1, 0,  0, 2,  4, 4, 3, METAL, HI_METAL),
XWEAPON("scalpel",	NULL,		1, 1, 0,  0, 1,  4, 4, 3, METAL, HI_METAL),
XWEAPON("knife", 	NULL,		1, 1, 0, 25, 2,  4, 3, 3, METAL, HI_METAL),
XWEAPON("axe",		NULL,		1, 0, 0, 50, 3,  8, 6, 4, METAL, HI_METAL),
X#ifdef WORM
XWEAPON("worm tooth",	NULL,		1, 0, 0,  0, 3,  2, 2, 2, 0, WHITE),
XWEAPON("crysknife",	NULL,		1, 0, 0,  0, 3,100,10,10, METAL, HI_METAL),
X#endif
X
X/* swords */
X#ifdef TOLKIEN
XWEAPON("short sword",		NULL,	1, 0, 0,  6, 3, 10, 6, 8, METAL, HI_METAL),
XWEAPON("elven short sword",	"short runed sword",
X					0, 0, 0,  2, 3, 10, 8, 8, METAL, HI_METAL),
XWEAPON("orcish short sword",	"short black sword",
X					0, 0, 0,  3, 3, 10, 5, 8, METAL, BLACK),
XWEAPON("dwarvish short sword",	"short shiny sword",
X					0, 0, 0,  2, 3, 10, 7, 8, METAL, HI_METAL),
X#else
XWEAPON("short sword",		NULL,	1, 0, 0, 13, 3, 10, 6, 8, METAL, HI_METAL),
X#endif
XWEAPON("scimitar", "curved sword",	0, 0, 0,  6, 4, 15, 8, 8, METAL, HI_METAL),
X#ifdef TOLKIEN
XWEAPON("broadsword", "wide sword",	0, 0, 0,  8, 4, 10, 4, 6, METAL, HI_METAL),
X						/* +d4 small, +1 large */
XWEAPON("elven broadsword",	"wide runed sword",
X					0, 0, 0,  4, 4, 10, 6, 6, METAL, HI_METAL),
X						/* +d4 small, +1 large */
X#else
XWEAPON("broadsword", "wide sword",	0, 0, 0, 12, 4, 10, 4, 6, METAL, HI_METAL),
X						/* +d4 small, +1 large */
X#endif
XWEAPON("long sword",		NULL,	1, 0, 0, 60, 4, 15, 8, 12, METAL, HI_METAL),
X#ifdef TOLKIEN
XWEAPON("two-handed sword",	NULL,	1, 0, 1, 25, 5, 50,12,	6, METAL, HI_METAL),
X						/* +2d6 large */
XWEAPON("dwarvish mattock",	"huge shiny sword",
X					0, 0, 1, 15, 6, 50,12,	8, METAL, HI_METAL),
X						/* +2d6 large */
X#else
XWEAPON("two-handed sword",	NULL,	1, 0, 1, 40, 5, 50,12,	6, METAL, HI_METAL),
X						/* +2d6 large */
X#endif
XWEAPON("katana", "samurai sword",	0, 0, 0,  6, 4,100,10, 12, METAL, HI_METAL),
X
X/* blunt */
XWEAPON("mace",		NULL,		1, 0, 0, 40, 4,  8, 6, 6, METAL, HI_METAL),
X						/* +1 small */
XWEAPON("morning star",	NULL,		1, 0, 0, 12, 4, 10, 4, 6, METAL, HI_METAL),
X						/* +d4 small, +1 large */
XWEAPON("war hammer",	NULL,		1, 0, 0, 15, 3,  5, 4, 4, METAL, HI_METAL),
X						/* +1 small */
XWEAPON("club",		NULL,		1, 0, 0, 10, 3,  4, 6, 3, WOOD, HI_WOOD),
X#ifdef KOPS
XWEAPON("rubber hose",	NULL,		1, 0, 0,  0, 2,  4, 6, 3, 0, BROWN),
X#endif
XWEAPON("quarterstaff",	"staff",	0, 0, 1, 10, 3,  8, 6, 6, WOOD, HI_WOOD),
X/* two-piece */
XWEAPON("aklys", 	"thonged club", 0, 0, 0,  8, 3,  4, 6, 3, METAL, HI_METAL),
XWEAPON("flail", 	NULL,		1, 0, 0, 40, 3,  4, 6, 4, METAL, HI_METAL),
X						/* +1 small, +1d4 large */
X/* whip */
XWEAPON("bullwhip",	NULL,		1, 0, 0,  5, 2,  4, 2, 1, 0, BROWN),
X
X/* polearms */
X/* spear-type */
XWEAPON("partisan", "vulgar polearm",	0, 0, 1, 10, 3, 10, 6, 6, METAL, HI_METAL),
X						/* +1 large */
XWEAPON("ranseur", "hilted polearm",	0, 0, 1, 10, 3,  6, 4, 4, METAL, HI_METAL),
X						/* +d4 both */
XWEAPON("spetum", "forked polearm",	0, 0, 1, 10, 3,  5, 6, 6, METAL, HI_METAL),
X						/* +1 small, +d6 large */
XWEAPON("glaive", "single-edged polearm", 0, 0, 1, 15, 3, 6, 6,10, METAL, HI_METAL),
X/* axe-type */
XWEAPON("halberd", "angled poleaxe",	0, 0, 1, 16, 3, 10,10, 6, METAL, HI_METAL),
X						/* +1d6 large */
XWEAPON("bardiche", "long poleaxe",	0, 0, 1,  8, 3,  7, 4, 4, METAL, HI_METAL),
X						/* +1d4 small, +2d4 large */
XWEAPON("voulge", "pole cleaver",	0, 0, 1,  8, 3,  5, 4, 4, METAL, HI_METAL),
X						/* +d4 both */
X/* curved/hooked */
XWEAPON("fauchard",	"pole sickle",	0, 0, 1, 11, 3,  5, 6, 8, METAL, HI_METAL),
XWEAPON("guisarme",	"pruning hook", 0, 0, 1, 11, 3,  5, 4, 8, METAL, HI_METAL),
X						/* +1d4 small */
XWEAPON("bill-guisarme","hooked polearm",0, 0, 1,  8, 3,  7, 4,10, METAL, HI_METAL),
X						/* +1d4 small */
X/* other */
XWEAPON("lucern hammer", "pronged polearm", 0, 0, 1, 10, 3,  7, 4, 6, METAL, HI_METAL),
X						/* +1d4 small */
XWEAPON("bec de corbin","beaked polearm",0, 0, 1,  8, 3,  8, 8, 6, METAL, HI_METAL),
X
X/* bows */
X#ifdef TOLKIEN
XBOW("bow",	  NULL, 	1, 0, 24, 3, 120, 30, 6, 0, WP_BOW, HI_WOOD),
XBOW("elven bow",  "runed bow",	0, 0, 12, 3, 120, 35, 6, 0, WP_BOW, HI_WOOD),
XBOW("orcish bow", "black bow",	0, 0, 12, 3, 120, 25, 6, 0, WP_BOW, BLACK),
X#else
XBOW("bow",	  NULL, 	1, 0, 48, 3, 120, 30, 6, 0, WP_BOW, HI_WOOD),
X#endif
XBOW("sling", 	  NULL,	    	1, 0, 40, 2,  20,  4, 6, 0, WP_SLING, HI_WOOD),
XBOW("crossbow",	  NULL,		1, 0, 45, 3,  40, 35, 6, 0, WP_CROSSBOW, HI_WOOD),
X#undef WEAPON
X#undef PROJECTILE
X#undef BOW
X
X/* tools ... - PICK AXE comes last because it has special characteristics */
X#define TOOL(name,desc,kn,chg,prob,weight,cost,material,color) {\
X	name, desc, NULL, kn,0,chg,chg,material, 0, TOOL_SYM, prob, 0, \
X	weight, cost, 0, 0, 0, C(color)}
X
X#ifdef WALKIES
X	TOOL("leash",		NULL,	1, 0,  70,  3,	20, 0, HI_LEATHER),
X#endif
X#ifdef MEDUSA
X	TOOL("blindfold",	NULL,	1, 0,  55,  2,	20, 0, BLACK),
X	TOOL("mirror",		NULL,	1, 0,  50,  3,	40, GLASS, BLUE),
X#else
X	TOOL("blindfold",	NULL,	1, 0, 105,  2,	20, 0, BLACK),
X#endif
X	TOOL("tinning kit",	NULL,	1, 0,  15, 10,	30, METAL, HI_METAL),
X	TOOL("lock pick",	NULL,	1, 0,  55,  2,	20, METAL, HI_METAL),
X	TOOL("credit card",	NULL,	1, 0,	5,  1,	10, 0, WHITE),
X#ifdef WALKIES
X	TOOL("key",		NULL,	1, 0, 100,  1,	10, METAL, HI_METAL),
X#else
X	TOOL("key",		NULL,	1, 0, 155,  1,	10, METAL, HI_METAL),
X#endif
X	TOOL("skeleton key",	"key",	0, 0,  60,  1,	10, METAL, HI_METAL),
X	TOOL("expensive camera", NULL,	1, 0,	5,  3, 200, 0, BLACK),
X	TOOL("magic marker",	NULL,	1, 1,  15,  1,	50, 0, RED),
X	TOOL("stethoscope",	NULL,	1, 0,  15,  2,	75, 0, HI_METAL),
X	TOOL("tin opener",	NULL,	1, 0,  25,  1,	30, METAL, HI_METAL),
X#ifdef WALKIES
X	TOOL("lamp",		NULL,	1, 1,  90, 10,	50, 0, YELLOW),
X#else
X	TOOL("lamp",		NULL,	1, 1, 105, 10,	50, 0, YELLOW),
X#endif
X	TOOL("magic lamp",	"lamp", 0, 1,  20, 10,	50, 0, YELLOW),
X	TOOL("crystal ball",	NULL,	1, 1,  35, 15,	60, GLASS, HI_GLASS),
X	TOOL("figurine",	NULL,	1, 0,  35,  5,	80, MINERAL, HI_MINERAL),
X	TOOL("ice box", 	NULL,	1, 0,	5, 40,  30, 0, WHITE),
X	TOOL("large box",	NULL,	1, 0,  40, 40,  20, WOOD, HI_WOOD),
X	TOOL("chest",		NULL,	1, 0,  35, 40,  20, WOOD, HI_WOOD),
X	TOOL("sack",		"bag",	0, 0,  40,  3,  20, 0, HI_CLOTH),
X	TOOL("bag of holding",	"bag",	0, 0,  20,  3, 100, 0, HI_CLOTH),
X	TOOL("bag of tricks",	"bag",	0, 1,  20,  3, 100, 0, HI_CLOTH),
X#ifndef MUSIC
X	TOOL("whistle", 	NULL,	1, 0, 120,  2,	10, METAL, HI_METAL),
X	TOOL("magic whistle","whistle",	0, 0,  50,  2,	10, METAL, HI_METAL),
X#else
X	TOOL("whistle", 	NULL,	1, 0, 105,  2,	10, METAL, HI_METAL),
X	TOOL("magic whistle","whistle",	0, 0,  30,  2,	10, METAL, HI_METAL),
X	TOOL("flute",		NULL,	1, 0,	6,  3,	12, WOOD, HI_WOOD),
X	TOOL("magic flute",   "flute",	0, 1,	2,  3,	12, WOOD, HI_WOOD),
X	TOOL("horn",		NULL,	1, 0,	5,  4,	15, METAL, HI_METAL),
X	TOOL("frost horn",	"horn", 0, 1,	2,  4,	15, METAL, HI_METAL),
X	TOOL("fire horn",	"horn", 0, 1,	2,  4,	15, METAL, HI_METAL),
X	TOOL("harp",		NULL,	1, 0,	4, 10,	50, METAL, HI_METAL),
X	TOOL("magic harp",	"harp", 0, 1,	2, 10,	50, METAL, HI_METAL),
X	TOOL("bugle",		NULL,	1, 0,	6,  3,	15, METAL, HI_METAL),
X	TOOL("drum",		NULL,	1, 0,	4,  4,	25, 0, BROWN),
X	TOOL("drum of earthquake", "drum", 0, 1, 2,  4,	25, 0, BROWN),
X#endif
X#undef TOOL
X	{ "pick-axe", NULL, NULL, 1,0,1,1,METAL, 0, TOOL_SYM, 20,
X						0, 10, 50, 6, 3, 0, C(HI_METAL)},
X	{ "blinding venom", "splash of venom", NULL,
X		0,1,0,0,0, 0, VENOM_SYM, 500, 0, 0, 0, 0, 0, 0, C(HI_ORGANIC)},
X	{ "acid venom", "splash of venom", NULL,
X	        0,1,0,0,0, 0, VENOM_SYM, 500, 0, 0, 0, 6, 6, 0, C(HI_ORGANIC)},
X	    /* +d6 small or large */
X	{ "heavy iron ball", NULL, NULL, 1,0,0,0,METAL, 0,
X		BALL_SYM, 1000, 0, 20, 10, 0, 0, 0, C(HI_METAL)},
X	{ "iron chain", NULL, NULL, 1,0,0,0,METAL, 0,
X		CHAIN_SYM, 1000, 0, 20, 0, 0, 0, 0, C(HI_METAL)},
X
X	/* Note: boulders and rocks normally do not appear at random; the
X	 * probabilities only come into effect when you try to polymorph them.
X	 */
X	{ "boulder", NULL, NULL, 1,0,0,0,MINERAL, 0, ROCK_SYM, 100, 0,
X		200 /* > MAX_CARR_CAP */, 0, 20, 20, 0, C(HI_MINERAL)},
X	{ "statue", NULL, NULL, 1,0,0,0,MINERAL, 0, ROCK_SYM, 900, 0,
X	        250, 0, 20, 20, 0, C(HI_MINERAL)},
X
X#define ARMOR(name,desc,kn,blk,power,prob,delay,weight,cost,ac,can,metal,c) \
X	{name, desc, NULL, kn,0,1,blk,metal, power, ARMOR_SYM, prob,\
X	delay, weight, cost, ac, can, 0, C(c)}
X#ifdef TOLKIEN
XARMOR("elven leather helm", "leather hat",
X			0, 0, 0,  6, 1, 2,   8, 9, 0, 0, HI_LEATHER),
XARMOR("orcish helm", "black cap",
X			0, 0, 0,  6, 1, 3,  10, 9, 0, METAL, BLACK),
XARMOR("dwarvish iron helm", "hard hat",
X			0, 0, 0,  6, 1, 3,  20, 8, 0, METAL, HI_METAL),
X#else
XARMOR("orcish helm", "black cap",
X			0, 0, 0, 18, 1, 3,  10, 9, 0, METAL, BLACK),
X#endif
XARMOR("fedora", NULL,	1, 0, 0,  0, 1, 1,   8, 9, 0, 0, BROWN),
XARMOR("helmet", "rusty pot",
X			0, 0, 0, 12, 1, 2,  10, 9, 0, METAL, HI_METAL),
XARMOR("helm of brilliance", "plumed hat",
X			0, 0, 0,  6, 1, 2,  50, 9, 0, METAL, GREEN),
XARMOR("helm of opposite alignment", "crested helmet",
X			0, 0, 0,  6, 1, 2,  50, 9, 0, METAL, HI_METAL),
XARMOR("helm of telepathy", "visored helmet",
X			0, 0, TELEPAT, 2, 1, 2, 50, 9, 0, METAL, HI_METAL),
X
X/* non-metal and (METAL | 1) armors do not rust */
XARMOR("dragon scale mail", NULL,
X			1, 1, 0,  0, 5, 5,1000, 1, 0, 0, HI_LEATHER),
XARMOR("plate mail", NULL,
X			1, 1, 0, 44, 5, 9, 600, 3, 2, METAL, HI_METAL),
XARMOR("crystal plate mail", NULL,
X			1, 1, 0, 10, 5, 9, 820, 3, 2, 0, WHITE+BRIGHT),
X#ifdef SHIRT
XARMOR("bronze plate mail", NULL,
X			1, 1, 0, 25, 5, 9, 400, 4, 0, COPPER, HI_COPPER),
X#else
XARMOR("bronze plate mail", NULL,
X			1, 1, 0, 35, 5, 9, 400, 4, 0, COPPER, HI_COPPER),
X#endif
XARMOR("splint mail", NULL,	1, 1, 0, 66, 5, 8,  80, 4, 1, METAL, HI_METAL),
XARMOR("banded mail", NULL,	1, 1, 0, 76, 5, 8,  90, 4, 0, METAL, HI_METAL),
X#ifdef TOLKIEN
XARMOR("dwarvish mithril-coat", NULL,
X			1, 0, 0, 10, 1, 2, 240, 4, 3, MITHRIL, HI_METAL),
XARMOR("elven mithril-coat", NULL, 1, 0, 0, 15, 1, 2, 240, 5, 3, MITHRIL, HI_METAL),
XARMOR("chain mail", NULL,	1, 0, 0, 76, 5, 6,  75, 5, 1, METAL, HI_METAL),
XARMOR("orcish chain mail", "black chain mail",
X				0, 0, 0, 20, 5, 6,  75, 5, 1, METAL, BLACK),
X#else
XARMOR("dwarvish mithril-coat", NULL,
X			1, 0, 0, 25, 1, 2, 240, 4, 3, MITHRIL, HI_METAL),
XARMOR("chain mail", NULL,	1, 0, 0, 96, 5, 6,  75, 5, 1, METAL, HI_METAL),
X#endif
XARMOR("scale mail", NULL,	1, 0, 0, 76, 5, 5,  45, 6, 0, METAL, HI_METAL),
XARMOR("studded leather armor", NULL,
X				1, 0, 0, 76, 3, 3,  15, 7, 1, 0, HI_LEATHER),
X#ifdef TOLKIEN
XARMOR("ring mail", NULL,	1, 0, 0, 76, 5, 4, 100, 7, 0, METAL, HI_METAL),
XARMOR("orcish ring mail", "black ring mail",
X				0, 0, 0, 20, 5, 5,  80, 8, 1, METAL, BLACK),
X#else
XARMOR("ring mail", NULL,	1, 0, 0, 96, 5, 4, 100, 7, 0, METAL, HI_METAL),
X#endif
XARMOR("leather armor", NULL,	1, 0, 0, 97, 3, 2,   5, 8, 0, 0, HI_LEATHER),
X
X/*  'cope' is not a spelling mistake... leave it be */
XARMOR("mummy wrapping", NULL,
X			1, 0, 0,	     0, 0, 2,  2, 10, 2, 0, HI_CLOTH),
X#ifdef TOLKIEN
XARMOR("elven cloak", "ornamental cope",
X			0, 0, STEALTH,	    12, 0, 2, 60,  9, 3, 0, HI_CLOTH),
XARMOR("orcish cloak", "black mantelet",
X			0, 0, 0,	    12, 0, 2, 40, 10, 3, 0, BLACK),
XARMOR("dwarvish cloak", "colorful hooded cloak",
X			0, 0, 0,	    12, 0, 2, 50, 10, 3, 0, HI_CLOTH),
X#else
XARMOR("elven cloak", "ornamental cope",
X			0, 0, STEALTH,	    36, 0, 2, 60,  9, 3, 0, HI_CLOTH),
X#endif
XARMOR("cloak of protection", "tattered cape",
X			0, 0, PROTECTION,   12, 0, 2, 50,  7, 3, 0, HI_CLOTH),
XARMOR("cloak of invisibility", "opera hood",
X			0, 0, INVIS,	    12, 0, 2, 60,  9, 3, 0, HI_CLOTH),
XARMOR("cloak of magic resistance", "faded pall",
X			0, 0, ANTIMAGIC,     2, 0, 2, 60,  9, 3, 0, HI_CLOTH),
XARMOR("cloak of displacement", "piece of cloth",
X			0, 0, DISPLACED,    12, 0, 2, 50,  9, 3, 0, HI_CLOTH),
X
X#ifdef TOLKIEN
XARMOR("small shield", NULL,
X			1, 0, 0,	6, 0, 2,  3,  9, 0, METAL, HI_METAL),
XARMOR("elven shield", "blue and green shield",
X			0, 0, 0,	2, 0, 2,  3,  8, 0, METAL, GREEN),
XARMOR("Uruk-hai shield", "white-handed shield",
X			0, 0, 0,	2, 0, 4,  3,  9, 0, METAL, HI_METAL),
XARMOR("orcish shield", "red-eyed shield",
X			0, 0, 0,	2, 0, 3,  3,  9, 0, METAL, RED),
XARMOR("large shield", NULL,
X			1, 1, 0,	7, 0, 4,  7,  8, 0, METAL, HI_METAL),
XARMOR("dwarvish roundshield", "large round shield",
X			0, 0, 0,	4, 0, 4,  7,  8, 0, METAL, HI_METAL),
X#else
XARMOR("small shield", NULL,
X			1, 0, 0,       12, 0, 2,  3,  9, 0, METAL, HI_METAL),
XARMOR("large shield", NULL,
X			1, 1, 0,       11, 0, 4,  7,  8, 0, METAL, HI_METAL),
X#endif
XARMOR("shield of reflection", "polished silver shield",
X			0, 0, REFLECTING,  3, 0, 3, 50, 8, 0, SILVER, HI_SILVER),
X
X#ifdef SHIRT
XARMOR("Hawaiian shirt", NULL,	1, 0, 0, 10, 0, 2, 5, 10, 0, 0, MAGENTA),
X#endif
X
XARMOR("leather gloves", "old gloves",
X			0, 0, 0,	   16, 1, 2,  8, 9, 0, 0, BROWN),
XARMOR("gauntlets of fumbling", "padded gloves",
X			0, 0, FUMBLING,     8, 1, 2, 50, 9, 0, 0, BROWN),
XARMOR("gauntlets of power", "riding gloves",
X			0, 0, 0,	    8, 1, 2, 50, 9, 0, METAL, BROWN),
XARMOR("gauntlets of dexterity", "fencing gloves",
X			0, 0, 0,	    8, 1, 2, 50, 9, 0, 0, BROWN),
X
XARMOR("low boots", "walking shoes",
X			0, 0, 0,	   25, 2, 3,  8, 9, 0, 0, BROWN),
XARMOR("iron shoes", "hard shoes",
X			0, 0, 0,	    7, 2, 5, 16, 8, 0, METAL, HI_METAL),
XARMOR("high boots", "jackboots",
X			0, 0, 0,	   15, 2, 4, 12, 8, 0, 0, BROWN),
XARMOR("speed boots", "combat boots",
X			0, 0, FAST,	   12, 2, 4, 50, 9, 0, 0, BROWN),
XARMOR("water walking boots", "jungle boots",
X			0, 0, WWALKING,    12, 2, 4, 50, 9, 0, 0, BROWN),
XARMOR("jumping boots", "hiking boots",
X			0, 0, JUMPING,	   12, 2, 4, 50, 9, 0, 0, BROWN),
XARMOR("elven boots", "mud boots",
X			0, 0, STEALTH,	   12, 2, 3,  8, 9, 0, 0, BROWN),
XARMOR("fumble boots", "riding boots",
X			0, 0, FUMBLING,    12, 2, 4, 30, 9, 0, 0, BROWN),
XARMOR("levitation boots", "snow boots",
X			0, 0, LEVITATION,  12, 2, 4, 30, 9, 0, 0, BROWN),
X#undef ARMOR
X
X#define POTION(name,desc,power,prob,cost,color) \
X		{ name, desc, NULL, 0,1,0,0,0, power,\
X		POTION_SYM, prob, 0, 2, cost, 0, 0, 0, C(color)}
X
X#ifdef SPELLS
XPOTION("fruit juice",		"smoky",	0,	45, 50,	WHITE),
XPOTION("booze", 		"bubbly",	0,	45, 50,	WHITE),
XPOTION("gain energy",		"ebony", 	0,	45,150,	BLACK),
X#else
XPOTION("fruit juice",		"smoky",	0,	70, 50,	WHITE),
XPOTION("booze", 		"bubbly",	0,	65, 50,	WHITE),
X#endif
XPOTION("gain ability",		"swirly",	0,	45,300,	WHITE),
XPOTION("restore ability",	"pink",		0,	45,100,	MAGENTA+BRIGHT),
XPOTION("sickness",		"ruby",		SICK,	45, 50,	RED),
XPOTION("confusion",		"orange",	CONFUSION, 45, 100, ORANGE_COLORED),
XPOTION("blindness",		"yellow",	BLINDED, 45,150, YELLOW),
XPOTION("paralysis",		"emerald", 	0,	45,300,	GREEN+BRIGHT),
XPOTION("speed", 		"dark green", 	FAST,	45,200,	GREEN),
XPOTION("levitation",		"cyan",		LEVITATION, 45,200, CYAN),
XPOTION("hallucination", 	"brilliant blue", HALLUC, 45,100, BLUE+BRIGHT),
XPOTION("invisibility",		"sky blue",	INVIS,	45,150,	CYAN),
XPOTION("see invisible", 	"magenta",	SEE_INVIS, 45,50, MAGENTA),
XPOTION("healing",		"purple", 	0,	65,100,	MAGENTA),
XPOTION("extra healing", 	"purple-red",	0,	50,100,	MAGENTA),
XPOTION("gain level",		"puce",		0,	20,300,	MAGENTA+BRIGHT),
XPOTION("enlightenment",		"brown",	0,	20,200,	BROWN),
XPOTION("monster detection",	"white",	0,	45,150,	WHITE),
XPOTION("object detection",	"glowing",	0,	45,150,	WHITE+BRIGHT),
XPOTION("water", 		"clear",	0,	125,100,CYAN),
X#undef POTION
X
X#define SCROLL(name,text,prob,cost) { name, text, NULL, 0,1,0,0,0, 0,\
X		SCROLL_SYM, prob, 0, 3, cost, 0, 0, 0, C(HI_PAPER)}
X#ifdef MAIL
X	SCROLL("mail",			"KIRJE",	     0,   0),
X#endif
X	SCROLL("enchant armor", 	"ZELGO MER",	    63,  80),
X	SCROLL("destroy armor", 	"JUYED AWK YACC",   45, 100),
X	SCROLL("confuse monster",	"NR 9", 	    53, 100),
X	SCROLL("scare monster", 	"XIXAXA XOXAXA XUXAXA", 35, 100),
X	SCROLL("blank paper",		"READ ME",	    28,  60),
X	SCROLL("remove curse",		"PRATYAVAYAH",	    65,  80),
X	SCROLL("enchant weapon",	"DAIYEN FOOELS",    85,  60),
X	SCROLL("create monster",	"LEP GEX VEN ZEA",  45, 200),
X	SCROLL("taming",		"PRIRUTSENIE",	    15, 200),
X	SCROLL("genocide",		"ELBIB YLOH",	    15, 300),
X	SCROLL("light", 		"VERR YED HORRE",   95,  50),
X	SCROLL("teleportation", 	"VENZAR BORGAVVE",  55, 100),
X	SCROLL("gold detection",	"THARR",	    33, 100),
X	SCROLL("food detection",	"YUM YUM",	    25, 100),
X	SCROLL("identify",		"KERNOD WEL",	    185, 20),
X	SCROLL("magic mapping", 	"ELAM EBOW",	    45, 100),
X	SCROLL("amnesia",		"DUAM XNAHT",	    35, 200),
X	SCROLL("fire",			"ANDOVA BEGARIN",   48, 100),
X	SCROLL("punishment",		"VE FORBRYDERNE",   15, 300),
X	SCROLL("charging",		"HACKEM MUCHE",     15, 300),
X	SCROLL(NULL,			"VELOX NEB",	     0, 100),
X	SCROLL(NULL,			"FOOBIE BLETCH",     0, 100),
X	SCROLL(NULL,			"TEMOV",	     0, 100),
X	SCROLL(NULL,			"GARVEN DEH",	     0, 100),
X#undef SCROLL
X
X#define WAND(name,typ,prob,cost,flags,metal,c)	{ \
X	name, typ, NULL, 0,0,1,0,metal, 0, WAND_SYM, \
X	prob, 0, 3, cost, flags, 0, 0, C(c) }
X
XWAND("light",		"glass",	95, 100, NODIR,    GLASS,HI_GLASS),
XWAND("secret door detection", "balsa",	50, 150, NODIR,    WOOD,HI_WOOD),
XWAND("create monster",	"maple",	45, 200, NODIR,    WOOD,HI_WOOD),
XWAND("wishing", 	"pine",		 5, 500, NODIR,    WOOD,HI_WOOD),
XWAND("striking",	"oak",	 	75, 150, IMMEDIATE,WOOD,HI_WOOD),
XWAND("nothing", 	"ebony",	25, 100, IMMEDIATE,WOOD,HI_WOOD),
XWAND("make invisible",	"marble",	45, 150, IMMEDIATE,MINERAL,HI_MINERAL),
XWAND("slow monster",	"tin",		55, 150, IMMEDIATE,METAL,HI_METAL),
XWAND("speed monster",	"brass",	55, 150, IMMEDIATE,COPPER,HI_COPPER),
XWAND("undead turning",	"copper",	55, 150, IMMEDIATE,COPPER,HI_COPPER),
XWAND("polymorph",	"silver",	45, 200, IMMEDIATE,SILVER,HI_SILVER),
XWAND("cancellation",	"platinum",	45, 200, IMMEDIATE,PLATINUM,HI_SILVER|BRIGHT),
XWAND("teleportation",	"iridium", 	45, 200, IMMEDIATE,METAL,CYAN|BRIGHT),
X#ifdef PROBING
XWAND("opening", 	"zinc",		25, 150, IMMEDIATE,METAL,HI_METAL),
XWAND("locking", 	"aluminum",	25, 150, IMMEDIATE,METAL,HI_METAL),
XWAND("probing", 	"uranium",	30, 150, IMMEDIATE,METAL,HI_METAL),
X#else
XWAND("opening", 	"zinc",		40, 150, IMMEDIATE,METAL,HI_METAL),
XWAND("locking", 	"aluminum",	40, 150, IMMEDIATE,METAL,HI_METAL),
X#endif
XWAND("digging", 	"iron", 	55, 150, RAY,	   METAL,HI_METAL),
XWAND("magic missile",	"steel",	50, 150, RAY,	   METAL,HI_METAL),
XWAND("fire",		"hexagonal",	40, 175, RAY,	   METAL,HI_METAL),
XWAND("sleep",		"runed",	50, 175, RAY,	   METAL,HI_METAL),
XWAND("cold",		"short",	40, 175, RAY,	   METAL,HI_METAL),
XWAND("death",		"long", 	 5, 500, RAY,	   METAL,HI_METAL),
XWAND("lightning",	"curved",	40, 175, RAY,	   METAL,HI_METAL),
XWAND(NULL,		"forked",	 0, 150, 0,	   WOOD,HI_WOOD),
XWAND(NULL,		"spiked",	 0, 150, 0,	   METAL,HI_METAL),
XWAND(NULL,		"jeweled",	 0, 150, 0,	   METAL,HI_MINERAL),
X#undef WAND
X
X#ifdef SPELLS
X/* books */
X#define SPELL(name,desc,prob,delay,level,flags,color) \
X	{ name, desc, NULL, 0,1,0,0,0, 0, SPBOOK_SYM, prob, delay, \
X	5, level*100, flags, 0, level, C(color)}
X
XSPELL("magic missile",	 "parchment",	45,  3, 2, RAY,		HI_PAPER),
XSPELL("fireball",	 "vellum",	20,  6, 4, RAY,		HI_PAPER),
XSPELL("sleep",		 "dog eared",	50,  1, 1, RAY,		HI_PAPER),
XSPELL("cone of cold",	 "ragged",	10,  8, 5, RAY,		HI_PAPER),
XSPELL("finger of death", "stained",	 5, 10, 7, RAY,		HI_PAPER),
XSPELL("light",		 "cloth",	45,  1, 1, NODIR,	HI_CLOTH),
XSPELL("detect monsters", "leather", 	45,  1, 1, NODIR,	HI_LEATHER),
XSPELL("healing",	 "white",	40,  2, 1, NODIR,	WHITE),
XSPELL("knock",		 "pink",	40,  1, 1, IMMEDIATE,	MAGENTA+BRIGHT),
XSPELL("force bolt",	 "red",		40,  2, 1, IMMEDIATE,	RED),
XSPELL("confuse monster", "orange",	37,  2, 2, IMMEDIATE,	ORANGE_COLORED),
XSPELL("cure blindness",  "yellow", 	27,  2, 2, IMMEDIATE,	YELLOW),
XSPELL("slow monster",	 "light green",	37,  2, 2, IMMEDIATE,	GREEN+BRIGHT),
XSPELL("wizard lock",	 "dark green",	35,  3, 2, IMMEDIATE,	GREEN),
XSPELL("create monster",  "turquoise",	37,  3, 2, NODIR,	CYAN+BRIGHT),
XSPELL("detect food",	 "cyan",	37,  3, 2, NODIR,	CYAN),
XSPELL("cause fear",	 "light blue",	25,  3, 3, NODIR,	BLUE+BRIGHT),
XSPELL("clairvoyance",	 "dark blue",	15,  3, 3, NODIR,	BLUE),
XSPELL("cure sickness",	 "indigo",	32,  3, 3, NODIR,	BLUE),
XSPELL("charm monster",	 "magenta",	20,  3, 3, IMMEDIATE,	MAGENTA),
XSPELL("haste self",	 "purple",	33,  4, 3, NODIR,	MAGENTA),
XSPELL("detect unseen",	 "violet",	25,  4, 3, NODIR,	MAGENTA),
XSPELL("levitation",	 "tan",		25,  4, 4, NODIR,	BROWN),
XSPELL("extra healing",	 "plaid",	32,  5, 3, NODIR,	GREEN),
XSPELL("restore ability", "light brown",	25,  5, 4, NODIR,	BROWN),
XSPELL("invisibility",	 "dark brown",	32,  5, 4, NODIR,	BROWN),
XSPELL("detect treasure", "gray",	25,  5, 4, NODIR,	GRAY),
XSPELL("remove curse",	 "white",	25,  5, 5, NODIR,	WHITE),
XSPELL("dig",		 "mottled",	22,  6, 5, RAY,		HI_PAPER),
XSPELL("magic mapping",	 "rusty",	18,  7, 5, NODIR,	RED),
XSPELL("identify",	 "bronze",	25,  8, 5, NODIR,	HI_COPPER),
XSPELL("turn undead",	 "copper",	17,  8, 6, IMMEDIATE,	HI_COPPER),
XSPELL("polymorph",	 "silver",	12,  8, 6, IMMEDIATE,	HI_SILVER),
XSPELL("teleport away",	 "gold",	15,  6, 6, IMMEDIATE,	HI_GOLD),
XSPELL("create familiar", "glittering", 	10,  7, 6, NODIR,	WHITE+BRIGHT),
XSPELL("cancellation",	 "shining",	12,  8, 7, IMMEDIATE,	WHITE+BRIGHT),
XSPELL("genocide",	 "glowing",	 5, 10, 7, NODIR,	WHITE+BRIGHT),
XSPELL(NULL,		 "dull",	 0,  0, 0, 0,		HI_PAPER),
XSPELL(NULL,		 "thin",	 0,  0, 0, 0,		HI_PAPER),
XSPELL(NULL,		 "thick",	 0,  0, 0, 0,		HI_PAPER),
X#undef SPELL
X#endif /* SPELLS /**/
X
X#define RING(name,stone,power,cost,spec,metal,color) \
X		{ name, stone, NULL, 0,0,spec,spec,metal, \
X		power, RING_SYM, 0, 0, 1, cost, 0, 0, 0, C(color)}
X
XRING("adornment",	"wooden",	ADORNED,	100, 1, WOOD, HI_WOOD),
XRING("gain strength",	"granite",	0,		150, 1, MINERAL, HI_MINERAL),
XRING("increase damage", "coral",	0,		150, 1, MINERAL, RED+BRIGHT),
XRING("protection",	"black onyx",	PROTECTION,	100, 1, MINERAL, BLACK),
XRING("regeneration",	"moonstone",	REGENERATION,	200, 0, MINERAL, HI_MINERAL),
XRING("searching",	"tiger eye",	SEARCHING,	200, 0, MINERAL, BROWN),
XRING("stealth", 	"jade",		STEALTH,	100, 0, MINERAL, GREEN),
XRING("levitation",	"agate",	LEVITATION,	200, 0, MINERAL, RED),
XRING("hunger",		"topaz",	HUNGER, 	100, 0, MINERAL, CYAN),
XRING("aggravate monster", "sapphire",	AGGRAVATE_MONSTER, 150, 0, METAL, BLUE),
XRING("conflict",	"ruby", 	CONFLICT,	300, 0, METAL, RED),
XRING("warning", 	"diamond", 	WARNING,	100, 0, METAL, WHITE+BRIGHT),
XRING("poison resistance", "pearl",	POISON_RES,	150, 0, METAL, WHITE),
XRING("fire resistance", "iron",		FIRE_RES,	200, 0, METAL, HI_METAL),
XRING("cold resistance", "brass",	COLD_RES,	150, 0, COPPER, HI_COPPER),
XRING("shock resistance", "copper",	SHOCK_RES,	150, 0, COPPER, HI_COPPER),
XRING("teleportation",	"silver",	TELEPORT,	200, 0, SILVER, HI_SILVER),
XRING("teleport control", "gold",	TELEPORT_CONTROL,
X							300, 0, GOLD, HI_GOLD),
X#ifdef POLYSELF
XRING("polymorph",	"ivory",	POLYMORPH,	300, 0, 0, WHITE),
XRING("polymorph control","emerald",	POLYMORPH_CONTROL,
X							300, 0, METAL, GREEN+BRIGHT),
X#endif
XRING("invisibility",	"wire",		INVIS,		150, 0, METAL, HI_METAL),
XRING("see invisible",	"engagement",	SEE_INVIS,	150, 0, METAL, HI_METAL),
XRING("protection from shape changers", "shining", PROT_FROM_SHAPE_CHANGERS,
X							100, 0, METAL, HI_METAL|BRIGHT),
X#undef RING
X
X/* gems ************************************************************/
X#define GEM(name,desc,prob,wt,gval,glass, color) \
X		{ name, desc, NULL, 0,1,0,0,glass, 0,\
X		GEM_SYM, prob, 0, wt, gval, 3, 3, WP_SLING, C(color)}
XGEM("dilithium crystal", "white",	 3, 1, 4500, MINERAL, WHITE),
XGEM("diamond", "white", 		 4, 1, 4000, MINERAL, WHITE),
XGEM("ruby", "red",			 5, 1, 3500, MINERAL, RED),
XGEM("sapphire", "blue", 		 6, 1, 3000, MINERAL, BLUE),
XGEM("emerald", "green", 		 7, 1, 2500, MINERAL, GREEN),
XGEM("turquoise", "green",		 8, 1, 2000, MINERAL, GREEN),
XGEM("aquamarine", "green",		10, 1, 1500, MINERAL, GREEN),
XGEM("amber", "yellowish brown", 	11, 1, 1000, MINERAL, BROWN),
XGEM("topaz", "yellowish brown", 	13, 1,	900, MINERAL, BROWN),
XGEM("opal", "white",			15, 1,	800, MINERAL, WHITE),
XGEM("garnet", "red",			17, 1,	700, MINERAL, RED),
XGEM("amethyst", "violet",		19, 1,  600, MINERAL, MAGENTA),
XGEM("jasper", "red",			21, 1,	500, MINERAL, RED),
XGEM("fluorite", "violet",		22, 1,	400, MINERAL, MAGENTA),
XGEM("jade", "green",			23, 1,	300, MINERAL, GREEN),
XGEM("worthless piece of white glass", "white",	131, 1, 0, GLASS, WHITE),
XGEM("worthless piece of blue glass", "blue",	131, 1, 0, GLASS, BLUE),
XGEM("worthless piece of red glass", "red",	131, 1, 0, GLASS, RED),
XGEM("worthless piece of yellowish brown glass", "yellowish brown",
X						131, 1, 0, GLASS, BROWN),
XGEM("worthless piece of green glass", "green",	131, 1, 0, GLASS, GREEN),
XGEM("worthless piece of violet glass", "violet",131, 1, 0, GLASS, MAGENTA),
XGEM("luckstone", "gray",		 10, 1,  60, MINERAL, GRAY),
XGEM("loadstone", "gray",		 10, 50,  1, MINERAL, GRAY),
X{ "rock", NULL, NULL, 1,1,0,0,MINERAL, 0,
X		GEM_SYM, 10, 0, 1, 0, 3, 3, WP_SLING, C(HI_MINERAL)},
X#undef GEM
X
X	{ NULL, NULL, NULL, 0,0,0,0,0, 0, ILLOBJ_SYM, 0, 0, 0, 0, 0, 0, 0, C(0) }
X};
X
X#undef C
END_OF_FILE
if test 31115 -ne `wc -c <'src/objects.c'`; then
    echo shar: \"'src/objects.c'\" unpacked with wrong size!
fi
# end of 'src/objects.c'
echo shar: End of archive 9 \(of 11\).
cp /dev/null ark9isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 11 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