Difference between revisions of "Source:NetHack 3.4.3/src/objects.c"

From NetHackWiki
Jump to navigation Jump to search
(Added line numbers. Behold, the magic of Perl!)
m (Decided it'd be easier to modify my Perl script. :))
Line 1: Line 1:
 +
Below is the full text to src/objects.c from NetHack 3.4.3. To link to a particular line, write [[objects.c#line123|<nowiki>[[objects.c#line123]]</nowiki>]], for example.
 
=== Top of file ===
 
=== Top of file ===
  1.  /* SCCS Id: @(#)objects.c 3.4 2002/07/31 */
+
  <span id="line1">1.  /* SCCS Id: @(#)objects.c 3.4 2002/07/31 */</span>
  2.  /* Copyright (c) Mike Threepoint, 1989.   */
+
  <span id="line2">2.  /* Copyright (c) Mike Threepoint, 1989.         */</span>
  3.  /* NetHack may be freely redistributed.  See license for details. */
+
  <span id="line3">3.  /* NetHack may be freely redistributed.  See license for details. */</span>
  
 
{{NGPL}}
 
{{NGPL}}
  
  4.  #ifndef OBJECTS_PASS_2_
+
  <span id="line4">4.  #ifndef OBJECTS_PASS_2_</span>
  5.  /* first pass */
+
  <span id="line5">5.  /* first pass */</span>
  6.  struct monst { struct monst *dummy; }; /* lint: struct obj's union */
+
  <span id="line6">6.  struct monst { struct monst *dummy; }; /* lint: struct obj's union */</span>
  7.  #include "config.h"
+
  <span id="line7">7.  #include "config.h"</span>
  8.  #include "obj.h"
+
  <span id="line8">8.  #include "obj.h"</span>
  9.  #include "objclass.h"
+
  <span id="line9">9.  #include "objclass.h"</span>
  10.  #include "prop.h"
+
  <span id="line10">10.  #include "prop.h"</span>
  11.  #include "skills.h"
+
  <span id="line11">11.  #include "skills.h"</span>
  12.   
+
  <span id="line12">12.  </span>
  13.  #else /* !OBJECTS_PASS_2_ */
+
  <span id="line13">13.  #else /* !OBJECTS_PASS_2_ */</span>
  14.  /* second pass */
+
  <span id="line14">14.  /* second pass */</span>
  15.  #include "color.h"
+
  <span id="line15">15.  #include "color.h"</span>
  16.  #  define COLOR_FIELD(X) X,
+
  <span id="line16">16.  #  define COLOR_FIELD(X) X,</span>
  17.  #endif /* !OBJECTS_PASS_2_ */
+
  <span id="line17">17.  #endif /* !OBJECTS_PASS_2_ */</span>
  18.   
+
  <span id="line18">18.  </span>
  19.   
+
  <span id="line19">19.  </span>
  20.  /* objects have symbols: ) [ = " ( % ! ? + / $ * ` 0 _ . */
+
  <span id="line20">20.  /* objects have symbols: ) [ = " ( % ! ? + / $ * ` 0 _ . */</span>
  21.   
+
  <span id="line21">21.  </span>
  22.  /*
+
  <span id="line22">22.  /*</span>
  23.  * Note:  OBJ() and BITS() macros are used to avoid exceeding argument
+
  <span id="line23">23.  * Note:  OBJ() and BITS() macros are used to avoid exceeding argument</span>
  24.  * limits imposed by some compilers.  The ctnr field of BITS currently
+
  <span id="line24">24.  * limits imposed by some compilers.  The ctnr field of BITS currently</span>
  25.  * does not map into struct objclass, and is ignored in the expansion.
+
  <span id="line25">25.  * does not map into struct objclass, and is ignored in the expansion.</span>
  26.  * The 0 in the expansion corresponds to oc_pre_discovered, which is
+
  <span id="line26">26.  * The 0 in the expansion corresponds to oc_pre_discovered, which is</span>
  27.  * set at run-time during role-specific character initialization.
+
  <span id="line27">27.  * set at run-time during role-specific character initialization.</span>
  28.  */
+
  <span id="line28">28.  */</span>
  29.   
+
  <span id="line29">29.  </span>
 
=== Object macros ===
 
=== Object macros ===
  
  30.  #ifndef OBJECTS_PASS_2_
+
  <span id="line30">30.  #ifndef OBJECTS_PASS_2_</span>
  31.  /* first pass -- object descriptive text */
+
  <span id="line31">31.  /* first pass -- object descriptive text */</span>
  32.  # define OBJ(name,desc) name,desc
+
  <span id="line32">32.  # define OBJ(name,desc) name,desc</span>
  
 
Object name and description. The description field can be <tt>(char *)0</tt>, in which case there is no description, and only the object name is used.
 
Object name and description. The description field can be <tt>(char *)0</tt>, in which case there is no description, and only the object name is used.
  
  33.  # define OBJECT(obj,bits,prp,sym,prob,dly,wt,cost,sdam,ldam,oc1,oc2,nut,color) \
+
  <span id="line33">33.  # define OBJECT(obj,bits,prp,sym,prob,dly,wt,cost,sdam,ldam,oc1,oc2,nut,color) \</span>
  34.  {obj}
+
  <span id="line34">34.  {obj}</span>
  
 
The OBJECT macro.
 
The OBJECT macro.
Line 58: Line 59:
 
# <tt>nut</tt> is nutrition gained when the object is eaten.
 
# <tt>nut</tt> is nutrition gained when the object is eaten.
 
# <tt>color</tt> is the object color, as used in the TTY windowport.
 
# <tt>color</tt> is the object color, as used in the TTY windowport.
  35.   
+
  <span id="line35">35.  </span>
  36.  NEARDATA struct objdescr obj_descr[] = {
+
  <span id="line36">36.  NEARDATA struct objdescr obj_descr[] = {</span>
  37.  #else
+
  <span id="line37">37.  #else</span>
  38.  /* second pass -- object definitions */
+
  <span id="line38">38.  /* second pass -- object definitions */</span>
  39.   
+
  <span id="line39">39.  </span>
  40.  # define BITS(nmkn,mrg,uskn,ctnr,mgc,chrg,uniq,nwsh,big,tuf,dir,sub,mtrl) \
+
  <span id="line40">40.  # define BITS(nmkn,mrg,uskn,ctnr,mgc,chrg,uniq,nwsh,big,tuf,dir,sub,mtrl) \</span>
  41.  nmkn,mrg,uskn,0,mgc,chrg,uniq,nwsh,big,tuf,dir,mtrl,sub /* SCO ODT 1.1 cpp fodder */
+
  <span id="line41">41.  nmkn,mrg,uskn,0,mgc,chrg,uniq,nwsh,big,tuf,dir,mtrl,sub /* SCO ODT 1.1 cpp fodder */</span>
  
 
The BITS macro. Each value is either 1 or 0.
 
The BITS macro. Each value is either 1 or 0.
Line 82: Line 83:
 
# <tt>mtrl</tt> takes one of the material definitions, eg. <tt>LEATHER</tt> or <tt>IRON</tt>, as defined in [[objclass.h]]
 
# <tt>mtrl</tt> takes one of the material definitions, eg. <tt>LEATHER</tt> or <tt>IRON</tt>, as defined in [[objclass.h]]
  
  42.  # define OBJECT(obj,bits,prp,sym,prob,dly,wt,cost,sdam,ldam,oc1,oc2,nut,color) \
+
  <span id="line42">42.  # define OBJECT(obj,bits,prp,sym,prob,dly,wt,cost,sdam,ldam,oc1,oc2,nut,color) \</span>
  43.  {0, 0, (char *)0, bits, prp, sym, dly, COLOR_FIELD(color) \
+
  <span id="line43">43.  {0, 0, (char *)0, bits, prp, sym, dly, COLOR_FIELD(color) \</span>
  44.    prob, wt, cost, sdam, ldam, oc1, oc2, nut}
+
  <span id="line44">44.    prob, wt, cost, sdam, ldam, oc1, oc2, nut}</span>
  45.  # ifndef lint
+
  <span id="line45">45.  # ifndef lint</span>
  46.  #  define HARDGEM(n) (n >= 8)
+
  <span id="line46">46.  #  define HARDGEM(n) (n >= 8)</span>
  47.  # else
+
  <span id="line47">47.  # else</span>
  48.  #  define HARDGEM(n) (0)
+
  <span id="line48">48.  #  define HARDGEM(n) (0)</span>
  49.  # endif
+
  <span id="line49">49.  # endif</span>
  50.   
+
  <span id="line50">50.  </span>
  51.  NEARDATA struct objclass objects[] = {
+
  <span id="line51">51.  NEARDATA struct objclass objects[] = {</span>
  52.  #endif
+
  <span id="line52">52.  #endif</span>
  53.  /* dummy object[0] -- description [2nd arg] *must* be NULL */
+
  <span id="line53">53.  /* dummy object[0] -- description [2nd arg] *must* be NULL */</span>
  54.  OBJECT(OBJ("strange object",(char *)0), BITS(1,0,0,0,0,0,0,0,0,0,0,P_NONE,0),
+
  <span id="line54">54.  OBJECT(OBJ("strange object",(char *)0), BITS(1,0,0,0,0,0,0,0,0,0,0,P_NONE,0),</span>
  55.   0, ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
+
  <span id="line55">55.   0, ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),</span>
  
 
=== Weapons ===
 
=== Weapons ===
  56.   
+
  <span id="line56">56.  </span>
  57.  /* weapons ... */
+
  <span id="line57">57.  /* weapons ... */</span>
  58.  #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,hitbon,typ,sub,metal,color) \
+
  <span id="line58">58.  #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,hitbon,typ,sub,metal,color) \</span>
  59.  OBJECT( \
+
  <span id="line59">59.  OBJECT( \</span>
  60. OBJ(name,app), BITS(kn,mg,1,0,0,1,0,0,bi,0,typ,sub,metal), 0, \
+
  <span id="line60">60. OBJ(name,app), BITS(kn,mg,1,0,0,1,0,0,bi,0,typ,sub,metal), 0, \</span>
  61. WEAPON_CLASS, prob, 0, \
+
  <span id="line61">61. WEAPON_CLASS, prob, 0, \</span>
  62. wt, cost, sdam, ldam, hitbon, 0, wt, color )
+
  <span id="line62">62. wt, cost, sdam, ldam, hitbon, 0, wt, color )</span>
  63.  #define PROJECTILE(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,sub,color) \
+
  <span id="line63">63.  #define PROJECTILE(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,sub,color) \</span>
  64.  OBJECT( \
+
  <span id="line64">64.  OBJECT( \</span>
  65. OBJ(name,app), \
+
  <span id="line65">65. OBJ(name,app), \</span>
  66. BITS(kn,1,1,0,0,1,0,0,0,0,PIERCE,sub,metal), 0, \
+
  <span id="line66">66. BITS(kn,1,1,0,0,1,0,0,0,0,PIERCE,sub,metal), 0, \</span>
  67. WEAPON_CLASS, prob, 0, \
+
  <span id="line67">67. WEAPON_CLASS, prob, 0, \</span>
  68. wt, cost, sdam, ldam, hitbon, 0, wt, color )
+
  <span id="line68">68. wt, cost, sdam, ldam, hitbon, 0, wt, color )</span>
  69.  #define BOW(name,app,kn,prob,wt,cost,hitbon,metal,sub,color) \
+
  <span id="line69">69.  #define BOW(name,app,kn,prob,wt,cost,hitbon,metal,sub,color) \</span>
  70.  OBJECT( \
+
  <span id="line70">70.  OBJECT( \</span>
  71. OBJ(name,app), BITS(kn,0,1,0,0,1,0,0,0,0,0,sub,metal), 0, \
+
  <span id="line71">71. OBJ(name,app), BITS(kn,0,1,0,0,1,0,0,0,0,0,sub,metal), 0, \</span>
  72. WEAPON_CLASS, prob, 0, \
+
  <span id="line72">72. WEAPON_CLASS, prob, 0, \</span>
  73. wt, cost, 2, 2, hitbon, 0, wt, color )
+
  <span id="line73">73. wt, cost, 2, 2, hitbon, 0, wt, color )</span>
  74.   
+
  <span id="line74">74.  </span>
  75.  /* Note: for weapons that don't do an even die of damage (ex. 2-7 or 3-18)
+
  <span id="line75">75.  /* Note: for weapons that don't do an even die of damage (ex. 2-7 or 3-18)</span>
  76.  * the extra damage is added on in weapon.c, not here! */
+
  <span id="line76">76.  * the extra damage is added on in weapon.c, not here! */</span>
  77.   
+
  <span id="line77">77.  </span>
  78.  #define P PIERCE
+
  <span id="line78">78.  #define P PIERCE</span>
  79.  #define S SLASH
+
  <span id="line79">79.  #define S SLASH</span>
  80.  #define B WHACK
+
  <span id="line80">80.  #define B WHACK</span>
  81.   
+
  <span id="line81">81.  </span>
  82.  /* missiles */
+
  <span id="line82">82.  /* missiles */</span>
  83.  PROJECTILE("arrow", (char *)0,
+
  <span id="line83">83.  PROJECTILE("arrow", (char *)0,</span>
  84. 1, 55, 1, 2, 6, 6, 0, IRON, -P_BOW, HI_METAL),
+
  <span id="line84">84. 1, 55, 1, 2, 6, 6, 0, IRON, -P_BOW, HI_METAL),</span>
  85.  PROJECTILE("elven arrow", "runed arrow",
+
  <span id="line85">85.  PROJECTILE("elven arrow", "runed arrow",</span>
  86. 0, 20, 1, 2, 7, 6, 0, WOOD, -P_BOW, HI_WOOD),
+
  <span id="line86">86. 0, 20, 1, 2, 7, 6, 0, WOOD, -P_BOW, HI_WOOD),</span>
  87.  PROJECTILE("orcish arrow", "crude arrow",
+
  <span id="line87">87.  PROJECTILE("orcish arrow", "crude arrow",</span>
  88. 0, 20, 1, 2, 5, 6, 0, IRON, -P_BOW, CLR_BLACK),
+
  <span id="line88">88. 0, 20, 1, 2, 5, 6, 0, IRON, -P_BOW, CLR_BLACK),</span>
  89.  PROJECTILE("silver arrow", (char *)0,
+
  <span id="line89">89.  PROJECTILE("silver arrow", (char *)0,</span>
  90. 1, 12, 1, 5, 6, 6, 0, SILVER, -P_BOW, HI_SILVER),
+
  <span id="line90">90. 1, 12, 1, 5, 6, 6, 0, SILVER, -P_BOW, HI_SILVER),</span>
  91.  PROJECTILE("ya", "bamboo arrow",
+
  <span id="line91">91.  PROJECTILE("ya", "bamboo arrow",</span>
  92. 0, 15, 1, 4, 7, 7, 1, METAL, -P_BOW, HI_METAL),
+
  <span id="line92">92. 0, 15, 1, 4, 7, 7, 1, METAL, -P_BOW, HI_METAL),</span>
  93.  PROJECTILE("crossbow bolt", (char *)0,
+
  <span id="line93">93.  PROJECTILE("crossbow bolt", (char *)0,</span>
  94. 1, 55, 1, 2, 4, 6, 0, IRON, -P_CROSSBOW, HI_METAL),
+
  <span id="line94">94. 1, 55, 1, 2, 4, 6, 0, IRON, -P_CROSSBOW, HI_METAL),</span>
  95.   
+
  <span id="line95">95.  </span>
  96.  WEAPON("dart", (char *)0,
+
  <span id="line96">96.  WEAPON("dart", (char *)0,</span>
  97.  1, 1, 0, 60,  1,  2,  3,  2, 0, P,  -P_DART, IRON, HI_METAL),
+
  <span id="line97">97.  1, 1, 0, 60,  1,  2,  3,  2, 0, P,  -P_DART, IRON, HI_METAL),</span>
  98.  WEAPON("shuriken", "throwing star",
+
  <span id="line98">98.  WEAPON("shuriken", "throwing star",</span>
  99.  0, 1, 0, 35,  1,  5,  8,  6, 2, P,  -P_SHURIKEN, IRON, HI_METAL),
+
  <span id="line99">99.  0, 1, 0, 35,  1,  5,  8,  6, 2, P,  -P_SHURIKEN, IRON, HI_METAL),</span>
  100. WEAPON("boomerang", (char *)0,
+
  <span id="line100">100. WEAPON("boomerang", (char *)0,</span>
  101.  1, 1, 0, 15,  5, 20,  9,  9, 0, 0,  -P_BOOMERANG, WOOD, HI_WOOD),
+
  <span id="line101">101.  1, 1, 0, 15,  5, 20,  9,  9, 0, 0,  -P_BOOMERANG, WOOD, HI_WOOD),</span>
  102.  
+
  <span id="line102">102. </span>
  103. /* spears */
+
  <span id="line103">103. /* spears */</span>
  104. WEAPON("spear", (char *)0,
+
  <span id="line104">104. WEAPON("spear", (char *)0,</span>
  105.  1, 1, 0, 50, 30,  3,  6,  8, 0, P,  P_SPEAR, IRON, HI_METAL),
+
  <span id="line105">105.  1, 1, 0, 50, 30,  3,  6,  8, 0, P,  P_SPEAR, IRON, HI_METAL),</span>
  106. WEAPON("elven spear", "runed spear",
+
  <span id="line106">106. WEAPON("elven spear", "runed spear",</span>
  107.  0, 1, 0, 10, 30,  3,  7,  8, 0, P,  P_SPEAR, WOOD, HI_WOOD),
+
  <span id="line107">107.  0, 1, 0, 10, 30,  3,  7,  8, 0, P,  P_SPEAR, WOOD, HI_WOOD),</span>
  108. WEAPON("orcish spear", "crude spear",
+
  <span id="line108">108. WEAPON("orcish spear", "crude spear",</span>
  109.  0, 1, 0, 13, 30,  3,  5,  8, 0, P,  P_SPEAR, IRON, CLR_BLACK),
+
  <span id="line109">109.  0, 1, 0, 13, 30,  3,  5,  8, 0, P,  P_SPEAR, IRON, CLR_BLACK),</span>
  110. WEAPON("dwarvish spear", "stout spear",
+
  <span id="line110">110. WEAPON("dwarvish spear", "stout spear",</span>
  111.  0, 1, 0, 12, 35,  3,  8,  8, 0, P,  P_SPEAR, IRON, HI_METAL),
+
  <span id="line111">111.  0, 1, 0, 12, 35,  3,  8,  8, 0, P,  P_SPEAR, IRON, HI_METAL),</span>
  112. WEAPON("silver spear", (char *)0,
+
  <span id="line112">112. WEAPON("silver spear", (char *)0,</span>
  113.  1, 1, 0,  2, 36, 40,  6,  8, 0, P,  P_SPEAR, SILVER, HI_SILVER),
+
  <span id="line113">113.  1, 1, 0,  2, 36, 40,  6,  8, 0, P,  P_SPEAR, SILVER, HI_SILVER),</span>
  114. WEAPON("javelin", "throwing spear",
+
  <span id="line114">114. WEAPON("javelin", "throwing spear",</span>
  115.  0, 1, 0, 10, 20,  3,  6,  6, 0, P,  P_JAVELIN, IRON, HI_METAL),
+
  <span id="line115">115.  0, 1, 0, 10, 20,  3,  6,  6, 0, P,  P_JAVELIN, IRON, HI_METAL),</span>
  116.  
+
  <span id="line116">116. </span>
  117. WEAPON("trident", (char *)0,
+
  <span id="line117">117. WEAPON("trident", (char *)0,</span>
  118.  1, 0, 0,  8, 25,  5,  6,  4, 0, P,  P_TRIDENT, IRON, HI_METAL),
+
  <span id="line118">118.  1, 0, 0,  8, 25,  5,  6,  4, 0, P,  P_TRIDENT, IRON, HI_METAL),</span>
  119. /* +1 small, +2d4 large */
+
  <span id="line119">119.     /* +1 small, +2d4 large */</span>
  120.  
+
  <span id="line120">120. </span>
  121. /* blades */
+
  <span id="line121">121. /* blades */</span>
  122. WEAPON("dagger", (char *)0,
+
  <span id="line122">122. WEAPON("dagger", (char *)0,</span>
  123.  1, 1, 0, 30, 10,  4,  4,  3, 2, P,  P_DAGGER, IRON, HI_METAL),
+
  <span id="line123">123.  1, 1, 0, 30, 10,  4,  4,  3, 2, P,  P_DAGGER, IRON, HI_METAL),</span>
  124. WEAPON("elven dagger", "runed dagger",
+
  <span id="line124">124. WEAPON("elven dagger", "runed dagger",</span>
  125.  0, 1, 0, 10, 10,  4,  5,  3, 2, P,  P_DAGGER, WOOD, HI_WOOD),
+
  <span id="line125">125.  0, 1, 0, 10, 10,  4,  5,  3, 2, P,  P_DAGGER, WOOD, HI_WOOD),</span>
  126. WEAPON("orcish dagger", "crude dagger",
+
  <span id="line126">126. WEAPON("orcish dagger", "crude dagger",</span>
  127.  0, 1, 0, 12, 10,  4,  3,  3, 2, P,  P_DAGGER, IRON, CLR_BLACK),
+
  <span id="line127">127.  0, 1, 0, 12, 10,  4,  3,  3, 2, P,  P_DAGGER, IRON, CLR_BLACK),</span>
  128. WEAPON("silver dagger", (char *)0,
+
  <span id="line128">128. WEAPON("silver dagger", (char *)0,</span>
  129.  1, 1, 0,  3, 12, 40,  4,  3, 2, P,  P_DAGGER, SILVER, HI_SILVER),
+
  <span id="line129">129.  1, 1, 0,  3, 12, 40,  4,  3, 2, P,  P_DAGGER, SILVER, HI_SILVER),</span>
  130. WEAPON("athame", (char *)0,
+
  <span id="line130">130. WEAPON("athame", (char *)0,</span>
  131.  1, 1, 0,  0, 10,  4,  4,  3, 2, S,  P_DAGGER, IRON, HI_METAL),
+
  <span id="line131">131.  1, 1, 0,  0, 10,  4,  4,  3, 2, S,  P_DAGGER, IRON, HI_METAL),</span>
  132. WEAPON("scalpel", (char *)0,
+
  <span id="line132">132. WEAPON("scalpel", (char *)0,</span>
  133.  1, 1, 0,  0,  5,  6,  3,  3, 2, S,  P_KNIFE, METAL, HI_METAL),
+
  <span id="line133">133.  1, 1, 0,  0,  5,  6,  3,  3, 2, S,  P_KNIFE, METAL, HI_METAL),</span>
  134. WEAPON("knife", (char *)0,
+
  <span id="line134">134. WEAPON("knife", (char *)0,</span>
  135.  1, 1, 0, 20,  5,  4,  3,  2, 0, P|S, P_KNIFE, IRON, HI_METAL),
+
  <span id="line135">135.  1, 1, 0, 20,  5,  4,  3,  2, 0, P|S, P_KNIFE, IRON, HI_METAL),</span>
  136. WEAPON("stiletto", (char *)0,
+
  <span id="line136">136. WEAPON("stiletto", (char *)0,</span>
  137.  1, 1, 0,  5,  5,  4,  3,  2, 0, P|S, P_KNIFE, IRON, HI_METAL),
+
  <span id="line137">137.  1, 1, 0,  5,  5,  4,  3,  2, 0, P|S, P_KNIFE, IRON, HI_METAL),</span>
  138. WEAPON("worm tooth", (char *)0,
+
  <span id="line138">138. WEAPON("worm tooth", (char *)0,</span>
  139.  1, 0, 0,  0, 20,  2,  2,  2, 0, 0,  P_KNIFE, 0, CLR_WHITE),
+
  <span id="line139">139.  1, 0, 0,  0, 20,  2,  2,  2, 0, 0,  P_KNIFE, 0, CLR_WHITE),</span>
  140. WEAPON("crysknife", (char *)0,
+
  <span id="line140">140. WEAPON("crysknife", (char *)0,</span>
  141.  1, 0, 0,  0, 20,100, 10, 10, 3, P,  P_KNIFE, MINERAL, CLR_WHITE),
+
  <span id="line141">141.  1, 0, 0,  0, 20,100, 10, 10, 3, P,  P_KNIFE, MINERAL, CLR_WHITE),</span>
  142.  
+
  <span id="line142">142. </span>
  143. WEAPON("axe", (char *)0,
+
  <span id="line143">143. WEAPON("axe", (char *)0,</span>
  144.  1, 0, 0, 40, 60,  8,  6,  4, 0, S,  P_AXE, IRON, HI_METAL),
+
  <span id="line144">144.  1, 0, 0, 40, 60,  8,  6,  4, 0, S,  P_AXE, IRON, HI_METAL),</span>
  145. WEAPON("battle-axe", "double-headed axe",
+
  <span id="line145">145. WEAPON("battle-axe", "double-headed axe",</span>
  146.  0, 0, 1, 10,120, 40,  8,  6, 0, S,  P_AXE, IRON, HI_METAL),
+
  <span id="line146">146.  0, 0, 1, 10,120, 40,  8,  6, 0, S,  P_AXE, IRON, HI_METAL),</span>
  147. /* "double-bitted" ? */
+
  <span id="line147">147.     /* "double-bitted" ? */</span>
  148.  
+
  <span id="line148">148. </span>
  149. /* swords */
+
  <span id="line149">149. /* swords */</span>
  150. WEAPON("short sword", (char *)0,
+
  <span id="line150">150. WEAPON("short sword", (char *)0,</span>
  151.  1, 0, 0,  8, 30, 10,  6,  8, 0, P,  P_SHORT_SWORD, IRON, HI_METAL),
+
  <span id="line151">151.  1, 0, 0,  8, 30, 10,  6,  8, 0, P,  P_SHORT_SWORD, IRON, HI_METAL),</span>
  152. WEAPON("elven short sword", "runed short sword",
+
  <span id="line152">152. WEAPON("elven short sword", "runed short sword",</span>
  153.  0, 0, 0,  2, 30, 10,  8,  8, 0, P,  P_SHORT_SWORD, WOOD, HI_WOOD),
+
  <span id="line153">153.  0, 0, 0,  2, 30, 10,  8,  8, 0, P,  P_SHORT_SWORD, WOOD, HI_WOOD),</span>
  154. WEAPON("orcish short sword", "crude short sword",
+
  <span id="line154">154. WEAPON("orcish short sword", "crude short sword",</span>
  155.  0, 0, 0,  3, 30, 10,  5,  8, 0, P,  P_SHORT_SWORD, IRON, CLR_BLACK),
+
  <span id="line155">155.  0, 0, 0,  3, 30, 10,  5,  8, 0, P,  P_SHORT_SWORD, IRON, CLR_BLACK),</span>
  156. WEAPON("dwarvish short sword", "broad short sword",
+
  <span id="line156">156. WEAPON("dwarvish short sword", "broad short sword",</span>
  157.  0, 0, 0,  2, 30, 10,  7,  8, 0, P,  P_SHORT_SWORD, IRON, HI_METAL),
+
  <span id="line157">157.  0, 0, 0,  2, 30, 10,  7,  8, 0, P,  P_SHORT_SWORD, IRON, HI_METAL),</span>
  158. WEAPON("scimitar", "curved sword",
+
  <span id="line158">158. WEAPON("scimitar", "curved sword",</span>
  159.  0, 0, 0, 15, 40, 15,  8,  8, 0, S,  P_SCIMITAR, IRON, HI_METAL),
+
  <span id="line159">159.  0, 0, 0, 15, 40, 15,  8,  8, 0, S,  P_SCIMITAR, IRON, HI_METAL),</span>
  160. WEAPON("silver saber", (char *)0,
+
  <span id="line160">160. WEAPON("silver saber", (char *)0,</span>
  161.  1, 0, 0,  6, 40, 75,  8,  8, 0, S,  P_SABER, SILVER, HI_SILVER),
+
  <span id="line161">161.  1, 0, 0,  6, 40, 75,  8,  8, 0, S,  P_SABER, SILVER, HI_SILVER),</span>
  162. WEAPON("broadsword", (char *)0,
+
  <span id="line162">162. WEAPON("broadsword", (char *)0,</span>
  163.  1, 0, 0,  8, 70, 10,  4,  6, 0, S,  P_BROAD_SWORD, IRON, HI_METAL),
+
  <span id="line163">163.  1, 0, 0,  8, 70, 10,  4,  6, 0, S,  P_BROAD_SWORD, IRON, HI_METAL),</span>
  164. /* +d4 small, +1 large */
+
  <span id="line164">164.     /* +d4 small, +1 large */</span>
  165. WEAPON("elven broadsword", "runed broadsword",
+
  <span id="line165">165. WEAPON("elven broadsword", "runed broadsword",</span>
  166.  0, 0, 0,  4, 70, 10,  6,  6, 0, S,  P_BROAD_SWORD, WOOD, HI_WOOD),
+
  <span id="line166">166.  0, 0, 0,  4, 70, 10,  6,  6, 0, S,  P_BROAD_SWORD, WOOD, HI_WOOD),</span>
  167. /* +d4 small, +1 large */
+
  <span id="line167">167.     /* +d4 small, +1 large */</span>
  168. WEAPON("long sword", (char *)0,
+
  <span id="line168">168. WEAPON("long sword", (char *)0,</span>
  169.  1, 0, 0, 50, 40, 15,  8, 12, 0, S,  P_LONG_SWORD, IRON, HI_METAL),
+
  <span id="line169">169.  1, 0, 0, 50, 40, 15,  8, 12, 0, S,  P_LONG_SWORD, IRON, HI_METAL),</span>
  170. WEAPON("two-handed sword", (char *)0,
+
  <span id="line170">170. WEAPON("two-handed sword", (char *)0,</span>
  171.  1, 0, 1, 22,150, 50, 12,  6, 0, S,  P_TWO_HANDED_SWORD, IRON, HI_METAL),
+
  <span id="line171">171.  1, 0, 1, 22,150, 50, 12,  6, 0, S,  P_TWO_HANDED_SWORD, IRON, HI_METAL),</span>
  172. /* +2d6 large */
+
  <span id="line172">172.     /* +2d6 large */</span>
  173. WEAPON("katana", "samurai sword",
+
  <span id="line173">173. WEAPON("katana", "samurai sword",</span>
  174.  0, 0, 0,  4, 40, 80, 10, 12, 1, S,  P_LONG_SWORD, IRON, HI_METAL),
+
  <span id="line174">174.  0, 0, 0,  4, 40, 80, 10, 12, 1, S,  P_LONG_SWORD, IRON, HI_METAL),</span>
  175. /* special swords set up for artifacts */
+
  <span id="line175">175. /* special swords set up for artifacts */</span>
  176. WEAPON("tsurugi", "long samurai sword",
+
  <span id="line176">176. WEAPON("tsurugi", "long samurai sword",</span>
  177.  0, 0, 1,  0, 60,500, 16,  8, 2, S,  P_TWO_HANDED_SWORD, METAL, HI_METAL),
+
  <span id="line177">177.  0, 0, 1,  0, 60,500, 16,  8, 2, S,  P_TWO_HANDED_SWORD, METAL, HI_METAL),</span>
  178. /* +2d6 large */
+
  <span id="line178">178.     /* +2d6 large */</span>
  179. WEAPON("runesword", "runed broadsword",
+
  <span id="line179">179. WEAPON("runesword", "runed broadsword",</span>
  180.  0, 0, 0,  0, 40,300,  4,  6, 0, S,  P_BROAD_SWORD, IRON, CLR_BLACK),
+
  <span id="line180">180.  0, 0, 0,  0, 40,300,  4,  6, 0, S,  P_BROAD_SWORD, IRON, CLR_BLACK),</span>
  181. /* +d4 small, +1 large */
+
  <span id="line181">181.     /* +d4 small, +1 large */</span>
  182. /* +5d2 +d8 from level drain */
+
  <span id="line182">182.     /* +5d2 +d8 from level drain */</span>
  183.  
+
  <span id="line183">183. </span>
  184. /* polearms */
+
  <span id="line184">184. /* polearms */</span>
  185. /* spear-type */
+
  <span id="line185">185. /* spear-type */</span>
  186. WEAPON("partisan", "vulgar polearm",
+
  <span id="line186">186. WEAPON("partisan", "vulgar polearm",</span>
  187.  0, 0, 1,  5, 80, 10,  6,  6, 0, P,  P_POLEARMS, IRON, HI_METAL),
+
  <span id="line187">187.  0, 0, 1,  5, 80, 10,  6,  6, 0, P,  P_POLEARMS, IRON, HI_METAL),</span>
  188. /* +1 large */
+
  <span id="line188">188.     /* +1 large */</span>
  189. WEAPON("ranseur", "hilted polearm",
+
  <span id="line189">189. WEAPON("ranseur", "hilted polearm",</span>
  190.  0, 0, 1,  5, 50,  6,  4,  4, 0, P,  P_POLEARMS, IRON, HI_METAL),
+
  <span id="line190">190.  0, 0, 1,  5, 50,  6,  4,  4, 0, P,  P_POLEARMS, IRON, HI_METAL),</span>
  191. /* +d4 both */
+
  <span id="line191">191.     /* +d4 both */</span>
  192. WEAPON("spetum", "forked polearm",
+
  <span id="line192">192. WEAPON("spetum", "forked polearm",</span>
  193.  0, 0, 1,  5, 50,  5,  6,  6, 0, P,  P_POLEARMS, IRON, HI_METAL),
+
  <span id="line193">193.  0, 0, 1,  5, 50,  5,  6,  6, 0, P,  P_POLEARMS, IRON, HI_METAL),</span>
  194. /* +1 small, +d6 large */
+
  <span id="line194">194.     /* +1 small, +d6 large */</span>
  195. WEAPON("glaive", "single-edged polearm",
+
  <span id="line195">195. WEAPON("glaive", "single-edged polearm",</span>
  196.  0, 0, 1,  8, 75,  6,  6, 10, 0, S,  P_POLEARMS, IRON, HI_METAL),
+
  <span id="line196">196.  0, 0, 1,  8, 75,  6,  6, 10, 0, S,  P_POLEARMS, IRON, HI_METAL),</span>
  197. WEAPON("lance", (char *)0,
+
  <span id="line197">197. WEAPON("lance", (char *)0,</span>
  198.  1, 0, 0,  4,180, 10,  6,  8, 0, P,  P_LANCE, IRON, HI_METAL),
+
  <span id="line198">198.  1, 0, 0,  4,180, 10,  6,  8, 0, P,  P_LANCE, IRON, HI_METAL),</span>
  199. /* axe-type */
+
  <span id="line199">199. /* axe-type */</span>
  200. WEAPON("halberd", "angled poleaxe",
+
  <span id="line200">200. WEAPON("halberd", "angled poleaxe",</span>
  201.  0, 0, 1,  8,150, 10, 10,  6, 0, P|S, P_POLEARMS, IRON, HI_METAL),
+
  <span id="line201">201.  0, 0, 1,  8,150, 10, 10,  6, 0, P|S, P_POLEARMS, IRON, HI_METAL),</span>
  202. /* +1d6 large */
+
  <span id="line202">202.     /* +1d6 large */</span>
  203. WEAPON("bardiche", "long poleaxe",
+
  <span id="line203">203. WEAPON("bardiche", "long poleaxe",</span>
  204.  0, 0, 1,  4,120,  7,  4,  4, 0, S,  P_POLEARMS, IRON, HI_METAL),
+
  <span id="line204">204.  0, 0, 1,  4,120,  7,  4,  4, 0, S,  P_POLEARMS, IRON, HI_METAL),</span>
  205. /* +1d4 small, +2d4 large */
+
  <span id="line205">205.     /* +1d4 small, +2d4 large */</span>
  206. WEAPON("voulge", "pole cleaver",
+
  <span id="line206">206. WEAPON("voulge", "pole cleaver",</span>
  207.  0, 0, 1,  4,125,  5,  4,  4, 0, S,  P_POLEARMS, IRON, HI_METAL),
+
  <span id="line207">207.  0, 0, 1,  4,125,  5,  4,  4, 0, S,  P_POLEARMS, IRON, HI_METAL),</span>
  208. /* +d4 both */
+
  <span id="line208">208.     /* +d4 both */</span>
  209. WEAPON("dwarvish mattock", "broad pick",
+
  <span id="line209">209. WEAPON("dwarvish mattock", "broad pick",</span>
  210.  0, 0, 1, 13,120, 50, 12,  8,-1, B,  P_PICK_AXE, IRON, HI_METAL),
+
  <span id="line210">210.  0, 0, 1, 13,120, 50, 12,  8,-1, B,  P_PICK_AXE, IRON, HI_METAL),</span>
  211.  
+
  <span id="line211">211. </span>
  212. /* curved/hooked */
+
  <span id="line212">212. /* curved/hooked */</span>
  213. WEAPON("fauchard", "pole sickle",
+
  <span id="line213">213. WEAPON("fauchard", "pole sickle",</span>
  214.  0, 0, 1,  6, 60,  5,  6,  8, 0, P|S, P_POLEARMS, IRON, HI_METAL),
+
  <span id="line214">214.  0, 0, 1,  6, 60,  5,  6,  8, 0, P|S, P_POLEARMS, IRON, HI_METAL),</span>
  215. WEAPON("guisarme", "pruning hook",
+
  <span id="line215">215. WEAPON("guisarme", "pruning hook",</span>
  216.  0, 0, 1,  6, 80,  5,  4,  8, 0, S,  P_POLEARMS, IRON, HI_METAL),
+
  <span id="line216">216.  0, 0, 1,  6, 80,  5,  4,  8, 0, S,  P_POLEARMS, IRON, HI_METAL),</span>
  217. /* +1d4 small */
+
  <span id="line217">217.     /* +1d4 small */</span>
  218. WEAPON("bill-guisarme", "hooked polearm",
+
  <span id="line218">218. WEAPON("bill-guisarme", "hooked polearm",</span>
  219.  0, 0, 1,  4,120,  7,  4, 10, 0, P|S, P_POLEARMS, IRON, HI_METAL),
+
  <span id="line219">219.  0, 0, 1,  4,120,  7,  4, 10, 0, P|S, P_POLEARMS, IRON, HI_METAL),</span>
  220. /* +1d4 small */
+
  <span id="line220">220.     /* +1d4 small */</span>
  221. /* other */
+
  <span id="line221">221. /* other */</span>
  222. WEAPON("lucern hammer", "pronged polearm",
+
  <span id="line222">222. WEAPON("lucern hammer", "pronged polearm",</span>
  223.  0, 0, 1,  5,150,  7,  4,  6, 0, B|P, P_POLEARMS, IRON, HI_METAL),
+
  <span id="line223">223.  0, 0, 1,  5,150,  7,  4,  6, 0, B|P, P_POLEARMS, IRON, HI_METAL),</span>
  224. /* +1d4 small */
+
  <span id="line224">224.     /* +1d4 small */</span>
  225. WEAPON("bec de corbin", "beaked polearm",
+
  <span id="line225">225. WEAPON("bec de corbin", "beaked polearm",</span>
  226.  0, 0, 1,  4,100,  8,  8,  6, 0, B|P, P_POLEARMS, IRON, HI_METAL),
+
  <span id="line226">226.  0, 0, 1,  4,100,  8,  8,  6, 0, B|P, P_POLEARMS, IRON, HI_METAL),</span>
  227.  
+
  <span id="line227">227. </span>
  228. /* bludgeons */
+
  <span id="line228">228. /* bludgeons */</span>
  229. WEAPON("mace", (char *)0,
+
  <span id="line229">229. WEAPON("mace", (char *)0,</span>
  230.  1, 0, 0, 40, 30,  5,  6,  6, 0, B,  P_MACE, IRON, HI_METAL),
+
  <span id="line230">230.  1, 0, 0, 40, 30,  5,  6,  6, 0, B,  P_MACE, IRON, HI_METAL),</span>
  231. /* +1 small */
+
  <span id="line231">231.     /* +1 small */</span>
  232. WEAPON("morning star", (char *)0,
+
  <span id="line232">232. WEAPON("morning star", (char *)0,</span>
  233.  1, 0, 0, 12,120, 10,  4,  6, 0, B,  P_MORNING_STAR, IRON, HI_METAL),
+
  <span id="line233">233.  1, 0, 0, 12,120, 10,  4,  6, 0, B,  P_MORNING_STAR, IRON, HI_METAL),</span>
  234. /* +d4 small, +1 large */
+
  <span id="line234">234.     /* +d4 small, +1 large */</span>
  235. WEAPON("war hammer", (char *)0,
+
  <span id="line235">235. WEAPON("war hammer", (char *)0,</span>
  236.  1, 0, 0, 15, 50,  5,  4,  4, 0, B,  P_HAMMER, IRON, HI_METAL),
+
  <span id="line236">236.  1, 0, 0, 15, 50,  5,  4,  4, 0, B,  P_HAMMER, IRON, HI_METAL),</span>
  237. /* +1 small */
+
  <span id="line237">237.     /* +1 small */</span>
  238. WEAPON("club", (char *)0,
+
  <span id="line238">238. WEAPON("club", (char *)0,</span>
  239.  1, 0, 0, 12, 30,  3,  6,  3, 0, B,  P_CLUB, WOOD, HI_WOOD),
+
  <span id="line239">239.  1, 0, 0, 12, 30,  3,  6,  3, 0, B,  P_CLUB, WOOD, HI_WOOD),</span>
  240. #ifdef KOPS
+
  <span id="line240">240. #ifdef KOPS</span>
  241. WEAPON("rubber hose", (char *)0,
+
  <span id="line241">241. WEAPON("rubber hose", (char *)0,</span>
  242.  1, 0, 0,  0, 20,  3,  4,  3, 0, B,  P_WHIP, PLASTIC, CLR_BROWN),
+
  <span id="line242">242.  1, 0, 0,  0, 20,  3,  4,  3, 0, B,  P_WHIP, PLASTIC, CLR_BROWN),</span>
  243. #endif
+
  <span id="line243">243. #endif</span>
  244. WEAPON("quarterstaff", "staff",
+
  <span id="line244">244. WEAPON("quarterstaff", "staff",</span>
  245.  0, 0, 1, 11, 40,  5,  6,  6, 0, B,  P_QUARTERSTAFF, WOOD, HI_WOOD),
+
  <span id="line245">245.  0, 0, 1, 11, 40,  5,  6,  6, 0, B,  P_QUARTERSTAFF, WOOD, HI_WOOD),</span>
  246. /* two-piece */
+
  <span id="line246">246. /* two-piece */</span>
  247. WEAPON("aklys", "thonged club",
+
  <span id="line247">247. WEAPON("aklys", "thonged club",</span>
  248.  0, 0, 0,  8, 15,  4,  6,  3, 0, B,  P_CLUB, IRON, HI_METAL),
+
  <span id="line248">248.  0, 0, 0,  8, 15,  4,  6,  3, 0, B,  P_CLUB, IRON, HI_METAL),</span>
  249. WEAPON("flail", (char *)0,
+
  <span id="line249">249. WEAPON("flail", (char *)0,</span>
  250.  1, 0, 0, 40, 15,  4,  6,  4, 0, B,  P_FLAIL, IRON, HI_METAL),
+
  <span id="line250">250.  1, 0, 0, 40, 15,  4,  6,  4, 0, B,  P_FLAIL, IRON, HI_METAL),</span>
  251. /* +1 small, +1d4 large */
+
  <span id="line251">251.     /* +1 small, +1d4 large */</span>
  252. /* misc */
+
  <span id="line252">252. /* misc */</span>
  253. WEAPON("bullwhip", (char *)0,
+
  <span id="line253">253. WEAPON("bullwhip", (char *)0,</span>
  254.  1, 0, 0,  2, 20,  4,  2,  1, 0, 0,  P_WHIP, LEATHER, CLR_BROWN),
+
  <span id="line254">254.  1, 0, 0,  2, 20,  4,  2,  1, 0, 0,  P_WHIP, LEATHER, CLR_BROWN),</span>
  255.  
+
  <span id="line255">255. </span>
  256. /* bows */
+
  <span id="line256">256. /* bows */</span>
  257. BOW("bow", (char *)0, 1, 24, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
+
  <span id="line257">257. BOW("bow", (char *)0,   1, 24, 30, 60, 0, WOOD, P_BOW, HI_WOOD),</span>
  258. BOW("elven bow", "runed bow", 0, 12, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
+
  <span id="line258">258. BOW("elven bow", "runed bow", 0, 12, 30, 60, 0, WOOD, P_BOW, HI_WOOD),</span>
  259. BOW("orcish bow", "crude bow", 0, 12, 30, 60, 0, WOOD, P_BOW, CLR_BLACK),
+
  <span id="line259">259. BOW("orcish bow", "crude bow", 0, 12, 30, 60, 0, WOOD, P_BOW, CLR_BLACK),</span>
  260. BOW("yumi", "long bow", 0,  0, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
+
  <span id="line260">260. BOW("yumi", "long bow",   0,  0, 30, 60, 0, WOOD, P_BOW, HI_WOOD),</span>
  261. BOW("sling", (char *)0, 1, 40,  3, 20, 0, LEATHER, P_SLING, HI_LEATHER),
+
  <span id="line261">261. BOW("sling", (char *)0,   1, 40,  3, 20, 0, LEATHER, P_SLING, HI_LEATHER),</span>
  262. BOW("crossbow", (char *)0, 1, 45, 50, 40, 0, WOOD, P_CROSSBOW, HI_WOOD),
+
  <span id="line262">262. BOW("crossbow", (char *)0, 1, 45, 50, 40, 0, WOOD, P_CROSSBOW, HI_WOOD),</span>
  263.  
+
  <span id="line263">263. </span>
  264. #undef P
+
  <span id="line264">264. #undef P</span>
  265. #undef S
+
  <span id="line265">265. #undef S</span>
  266. #undef B
+
  <span id="line266">266. #undef B</span>
  267.  
+
  <span id="line267">267. </span>
  268. #undef WEAPON
+
  <span id="line268">268. #undef WEAPON</span>
  269. #undef PROJECTILE
+
  <span id="line269">269. #undef PROJECTILE</span>
  270. #undef BOW
+
  <span id="line270">270. #undef BOW</span>
  271.  
+
  <span id="line271">271. </span>
 
=== Armor ===
 
=== Armor ===
 
==== Armor macros ====
 
==== Armor macros ====
  272. /* armor ... */
+
  <span id="line272">272. /* armor ... */</span>
  273. /* IRON denotes ferrous metals, including steel.
+
  <span id="line273">273. /* IRON denotes ferrous metals, including steel.</span>
  274.  * Only IRON weapons and armor can rust.
+
  <span id="line274">274.  * Only IRON weapons and armor can rust.</span>
  275.  * Only COPPER (including brass) corrodes.
+
  <span id="line275">275.  * Only COPPER (including brass) corrodes.</span>
  276.  * Some creatures are vulnerable to SILVER.
+
  <span id="line276">276.  * Some creatures are vulnerable to SILVER.</span>
  277.  */
+
  <span id="line277">277.  */</span>
  278. #define ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,sub,metal,c) \
+
  <span id="line278">278. #define ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,sub,metal,c) \</span>
  279.  OBJECT( \
+
  <span id="line279">279.  OBJECT( \</span>
  280. OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,0,blk,0,0,sub,metal), power, \
+
  <span id="line280">280. OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,0,blk,0,0,sub,metal), power, \</span>
  281. ARMOR_CLASS, prob, delay, wt, cost, \
+
  <span id="line281">281. ARMOR_CLASS, prob, delay, wt, cost, \</span>
  282. 0, 0, 10 - ac, can, wt, c )
+
  <span id="line282">282. 0, 0, 10 - ac, can, wt, c )</span>
  283. #define HELM(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
+
  <span id="line283">283. #define HELM(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \</span>
  284.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_HELM,metal,c)
+
  <span id="line284">284.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_HELM,metal,c)</span>
  285. #define CLOAK(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
+
  <span id="line285">285. #define CLOAK(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \</span>
  286.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_CLOAK,metal,c)
+
  <span id="line286">286.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_CLOAK,metal,c)</span>
  287. #define SHIELD(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,metal,c) \
+
  <span id="line287">287. #define SHIELD(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,metal,c) \</span>
  288.  ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,ARM_SHIELD,metal,c)
+
  <span id="line288">288.  ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,ARM_SHIELD,metal,c)</span>
  289. #define GLOVES(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
+
  <span id="line289">289. #define GLOVES(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \</span>
  290.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_GLOVES,metal,c)
+
  <span id="line290">290.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_GLOVES,metal,c)</span>
  291. #define BOOTS(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
+
  <span id="line291">291. #define BOOTS(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \</span>
  292.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_BOOTS,metal,c)
+
  <span id="line292">292.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_BOOTS,metal,c)</span>
  
 
==== Helmets ====
 
==== Helmets ====
  
  293. /* helmets */
+
  <span id="line293">293. /* helmets */</span>
  294. HELM("elven leather helm", "leather hat",
+
  <span id="line294">294. HELM("elven leather helm", "leather hat",</span>
  295. 0, 0,  0, 6, 1,  3,  8, 9, 0, LEATHER, HI_LEATHER),
+
  <span id="line295">295. 0, 0,  0, 6, 1,  3,  8, 9, 0, LEATHER, HI_LEATHER),</span>
  296. HELM("orcish helm", "iron skull cap",
+
  <span id="line296">296. HELM("orcish helm", "iron skull cap",</span>
  297. 0, 0,  0, 6, 1, 30,  10, 9, 0, IRON, CLR_BLACK),
+
  <span id="line297">297. 0, 0,  0, 6, 1, 30,  10, 9, 0, IRON, CLR_BLACK),</span>
  298. HELM("dwarvish iron helm", "hard hat",
+
  <span id="line298">298. HELM("dwarvish iron helm", "hard hat",</span>
  299. 0, 0,  0, 6, 1, 40,  20, 8, 0, IRON, HI_METAL),
+
  <span id="line299">299. 0, 0,  0, 6, 1, 40,  20, 8, 0, IRON, HI_METAL),</span>
  300. HELM("fedora", (char *)0,
+
  <span id="line300">300. HELM("fedora", (char *)0,</span>
  301. 1, 0,  0, 0, 0,  3,  1,10, 0, CLOTH, CLR_BROWN),
+
  <span id="line301">301. 1, 0,  0, 0, 0,  3,  1,10, 0, CLOTH, CLR_BROWN),</span>
  302. HELM("cornuthaum", "conical hat",
+
  <span id="line302">302. HELM("cornuthaum", "conical hat",</span>
  303. 0, 1,  CLAIRVOYANT,
+
  <span id="line303">303. 0, 1,  CLAIRVOYANT,</span>
  304. 3, 1,  4,  80,10, 2, CLOTH, CLR_BLUE),
+
  <span id="line304">304.   3, 1,  4,  80,10, 2, CLOTH, CLR_BLUE),</span>
  305. HELM("dunce cap", "conical hat",
+
  <span id="line305">305. HELM("dunce cap", "conical hat",</span>
  306. 0, 1,  0, 3, 1,  4,  1,10, 0, CLOTH, CLR_BLUE),
+
  <span id="line306">306. 0, 1,  0, 3, 1,  4,  1,10, 0, CLOTH, CLR_BLUE),</span>
  307. HELM("dented pot", (char *)0,
+
  <span id="line307">307. HELM("dented pot", (char *)0,</span>
  308. 1, 0,  0, 2, 0, 10,  8, 9, 0, IRON, CLR_BLACK),
+
  <span id="line308">308. 1, 0,  0, 2, 0, 10,  8, 9, 0, IRON, CLR_BLACK),</span>
  309. /* With shuffled appearances... */
+
  <span id="line309">309. /* With shuffled appearances... */</span>
  310. HELM("helmet", "plumed helmet",
+
  <span id="line310">310. HELM("helmet", "plumed helmet",</span>
  311. 0, 0,  0,      10, 1, 30,  10, 9, 0, IRON, HI_METAL),
+
  <span id="line311">311. 0, 0,  0,      10, 1, 30,  10, 9, 0, IRON, HI_METAL),</span>
  312. HELM("helm of brilliance", "etched helmet",
+
  <span id="line312">312. HELM("helm of brilliance", "etched helmet",</span>
  313. 0, 1,  0, 6, 1, 50,  50, 9, 0, IRON, CLR_GREEN),
+
  <span id="line313">313. 0, 1,  0, 6, 1, 50,  50, 9, 0, IRON, CLR_GREEN),</span>
  314. HELM("helm of opposite alignment", "crested helmet",
+
  <span id="line314">314. HELM("helm of opposite alignment", "crested helmet",</span>
  315. 0, 1,  0, 6, 1, 50,  50, 9, 0, IRON, HI_METAL),
+
  <span id="line315">315. 0, 1,  0, 6, 1, 50,  50, 9, 0, IRON, HI_METAL),</span>
  316. HELM("helm of telepathy", "visored helmet",
+
  <span id="line316">316. HELM("helm of telepathy", "visored helmet",</span>
  317. 0, 1,  TELEPAT, 2, 1, 50,  50, 9, 0, IRON, HI_METAL),
+
  <span id="line317">317. 0, 1,  TELEPAT, 2, 1, 50,  50, 9, 0, IRON, HI_METAL),</span>
  
 
==== Suits of Armor ====
 
==== Suits of Armor ====
  318.  
+
  <span id="line318">318. </span>
  319. /* suits of armor */
+
  <span id="line319">319. /* suits of armor */</span>
  320. /*
+
  <span id="line320">320. /*</span>
  321.  * There is code in polyself.c that assumes (1) and (2).
+
  <span id="line321">321.  * There is code in polyself.c that assumes (1) and (2).</span>
  322.  * There is code in obj.h, objnam.c, mon.c, read.c that assumes (2).
+
  <span id="line322">322.  * There is code in obj.h, objnam.c, mon.c, read.c that assumes (2).</span>
  323.  *
+
  <span id="line323">323.  *</span>
  324.  * (1) The dragon scale mails and the dragon scales are together.
+
  <span id="line324">324.  * (1) The dragon scale mails and the dragon scales are together.</span>
  325.  * (2) That the order of the dragon scale mail and dragon scales is the
+
  <span id="line325">325.  * (2) That the order of the dragon scale mail and dragon scales is the</span>
  326.  *     the same defined in monst.c.
+
  <span id="line326">326.  *     the same defined in monst.c.</span>
  327.  */
+
  <span id="line327">327.  */</span>
  328. #define DRGN_ARMR(name,mgc,power,cost,ac,color) \
+
  <span id="line328">328. #define DRGN_ARMR(name,mgc,power,cost,ac,color) \</span>
  329.  ARMOR(name,(char *)0,1,mgc,1,power,0,5,40,cost,ac,0,ARM_SUIT,DRAGON_HIDE,color)
+
  <span id="line329">329.  ARMOR(name,(char *)0,1,mgc,1,power,0,5,40,cost,ac,0,ARM_SUIT,DRAGON_HIDE,color)</span>
  330. /* 3.4.1: dragon scale mail reclassified as "magic" since magic is
+
  <span id="line330">330. /* 3.4.1: dragon scale mail reclassified as "magic" since magic is</span>
  331.    needed to create them */
+
  <span id="line331">331.    needed to create them */</span>
  332. DRGN_ARMR("gray dragon scale mail",  1, ANTIMAGIC,  1200, 1, CLR_GRAY),
+
  <span id="line332">332. DRGN_ARMR("gray dragon scale mail",  1, ANTIMAGIC,  1200, 1, CLR_GRAY),</span>
  333. DRGN_ARMR("silver dragon scale mail", 1, REFLECTING, 1200, 1, DRAGON_SILVER),
+
  <span id="line333">333. DRGN_ARMR("silver dragon scale mail", 1, REFLECTING, 1200, 1, DRAGON_SILVER),</span>
  334. #if 0 /* DEFERRED */
+
  <span id="line334">334. #if 0 /* DEFERRED */</span>
  335. DRGN_ARMR("shimmering dragon scale mail", 1, DISPLACED, 1200, 1, CLR_CYAN),
+
  <span id="line335">335. DRGN_ARMR("shimmering dragon scale mail", 1, DISPLACED, 1200, 1, CLR_CYAN),</span>
  336. #endif
+
  <span id="line336">336. #endif</span>
  337. DRGN_ARMR("red dragon scale mail",    1, FIRE_RES,    900, 1, CLR_RED),
+
  <span id="line337">337. DRGN_ARMR("red dragon scale mail",    1, FIRE_RES,    900, 1, CLR_RED),</span>
  338. DRGN_ARMR("white dragon scale mail",  1, COLD_RES,    900, 1, CLR_WHITE),
+
  <span id="line338">338. DRGN_ARMR("white dragon scale mail",  1, COLD_RES,    900, 1, CLR_WHITE),</span>
  339. DRGN_ARMR("orange dragon scale mail", 1, SLEEP_RES,  900, 1, CLR_ORANGE),
+
  <span id="line339">339. DRGN_ARMR("orange dragon scale mail", 1, SLEEP_RES,  900, 1, CLR_ORANGE),</span>
  340. DRGN_ARMR("black dragon scale mail",  1, DISINT_RES, 1200, 1, CLR_BLACK),
+
  <span id="line340">340. DRGN_ARMR("black dragon scale mail",  1, DISINT_RES, 1200, 1, CLR_BLACK),</span>
  341. DRGN_ARMR("blue dragon scale mail",  1, SHOCK_RES,  900, 1, CLR_BLUE),
+
  <span id="line341">341. DRGN_ARMR("blue dragon scale mail",  1, SHOCK_RES,  900, 1, CLR_BLUE),</span>
  342. DRGN_ARMR("green dragon scale mail",  1, POISON_RES,  900, 1, CLR_GREEN),
+
  <span id="line342">342. DRGN_ARMR("green dragon scale mail",  1, POISON_RES,  900, 1, CLR_GREEN),</span>
  343. DRGN_ARMR("yellow dragon scale mail", 1, ACID_RES,    900, 1, CLR_YELLOW),
+
  <span id="line343">343. DRGN_ARMR("yellow dragon scale mail", 1, ACID_RES,    900, 1, CLR_YELLOW),</span>
  344.  
+
  <span id="line344">344. </span>
  345. /* For now, only dragons leave these. */
+
  <span id="line345">345. /* For now, only dragons leave these. */</span>
  346. /* 3.4.1: dragon scales left classified as "non-magic"; they confer
+
  <span id="line346">346. /* 3.4.1: dragon scales left classified as "non-magic"; they confer</span>
  347.    magical properties but are produced "naturally" */
+
  <span id="line347">347.    magical properties but are produced "naturally" */</span>
  348. DRGN_ARMR("gray dragon scales",  0, ANTIMAGIC,  700, 7, CLR_GRAY),
+
  <span id="line348">348. DRGN_ARMR("gray dragon scales",  0, ANTIMAGIC,  700, 7, CLR_GRAY),</span>
  349. DRGN_ARMR("silver dragon scales", 0, REFLECTING, 700, 7, DRAGON_SILVER),
+
  <span id="line349">349. DRGN_ARMR("silver dragon scales", 0, REFLECTING, 700, 7, DRAGON_SILVER),</span>
  350. #if 0 /* DEFERRED */
+
  <span id="line350">350. #if 0 /* DEFERRED */</span>
  351. DRGN_ARMR("shimmering dragon scales", 0, DISPLACED,  700, 7, CLR_CYAN),
+
  <span id="line351">351. DRGN_ARMR("shimmering dragon scales", 0, DISPLACED,  700, 7, CLR_CYAN),</span>
  352. #endif
+
  <span id="line352">352. #endif</span>
  353. DRGN_ARMR("red dragon scales",    0, FIRE_RES,  500, 7, CLR_RED),
+
  <span id="line353">353. DRGN_ARMR("red dragon scales",    0, FIRE_RES,  500, 7, CLR_RED),</span>
  354. DRGN_ARMR("white dragon scales",  0, COLD_RES,  500, 7, CLR_WHITE),
+
  <span id="line354">354. DRGN_ARMR("white dragon scales",  0, COLD_RES,  500, 7, CLR_WHITE),</span>
  355. DRGN_ARMR("orange dragon scales", 0, SLEEP_RES,  500, 7, CLR_ORANGE),
+
  <span id="line355">355. DRGN_ARMR("orange dragon scales", 0, SLEEP_RES,  500, 7, CLR_ORANGE),</span>
  356. DRGN_ARMR("black dragon scales",  0, DISINT_RES, 700, 7, CLR_BLACK),
+
  <span id="line356">356. DRGN_ARMR("black dragon scales",  0, DISINT_RES, 700, 7, CLR_BLACK),</span>
  357. DRGN_ARMR("blue dragon scales",  0, SHOCK_RES,  500, 7, CLR_BLUE),
+
  <span id="line357">357. DRGN_ARMR("blue dragon scales",  0, SHOCK_RES,  500, 7, CLR_BLUE),</span>
  358. DRGN_ARMR("green dragon scales",  0, POISON_RES, 500, 7, CLR_GREEN),
+
  <span id="line358">358. DRGN_ARMR("green dragon scales",  0, POISON_RES, 500, 7, CLR_GREEN),</span>
  359. DRGN_ARMR("yellow dragon scales", 0, ACID_RES,  500, 7, CLR_YELLOW),
+
  <span id="line359">359. DRGN_ARMR("yellow dragon scales", 0, ACID_RES,  500, 7, CLR_YELLOW),</span>
  360. #undef DRGN_ARMR
+
  <span id="line360">360. #undef DRGN_ARMR</span>
  361.  
+
  <span id="line361">361. </span>
  362. ARMOR("plate mail", (char *)0,
+
  <span id="line362">362. ARMOR("plate mail", (char *)0,</span>
  363.  1, 0, 1, 0, 44, 5, 450, 600,  3, 2, ARM_SUIT, IRON, HI_METAL),
+
  <span id="line363">363.  1, 0, 1, 0, 44, 5, 450, 600,  3, 2, ARM_SUIT, IRON, HI_METAL),</span>
  364. ARMOR("crystal plate mail", (char *)0,
+
  <span id="line364">364. ARMOR("crystal plate mail", (char *)0,</span>
  365.  1, 0, 1, 0, 10, 5, 450, 820,  3, 2, ARM_SUIT, GLASS, CLR_WHITE),
+
  <span id="line365">365.  1, 0, 1, 0, 10, 5, 450, 820,  3, 2, ARM_SUIT, GLASS, CLR_WHITE),</span>
  366. #ifdef TOURIST
+
  <span id="line366">366. #ifdef TOURIST</span>
  367. ARMOR("bronze plate mail", (char *)0,
+
  <span id="line367">367. ARMOR("bronze plate mail", (char *)0,</span>
  368.  1, 0, 1, 0, 25, 5, 450, 400,  4, 0, ARM_SUIT, COPPER, HI_COPPER),
+
  <span id="line368">368.  1, 0, 1, 0, 25, 5, 450, 400,  4, 0, ARM_SUIT, COPPER, HI_COPPER),</span>
  369. #else
+
  <span id="line369">369. #else</span>
  370. ARMOR("bronze plate mail", (char *)0,
+
  <span id="line370">370. ARMOR("bronze plate mail", (char *)0,</span>
  371.  1, 0, 1, 0, 35, 5, 450, 400,  4, 0, ARM_SUIT, COPPER, HI_COPPER),
+
  <span id="line371">371.  1, 0, 1, 0, 35, 5, 450, 400,  4, 0, ARM_SUIT, COPPER, HI_COPPER),</span>
  372. #endif
+
  <span id="line372">372. #endif</span>
  373. ARMOR("splint mail", (char *)0,
+
  <span id="line373">373. ARMOR("splint mail", (char *)0,</span>
  374.  1, 0, 1, 0, 62, 5, 400,  80,  4, 1, ARM_SUIT, IRON, HI_METAL),
+
  <span id="line374">374.  1, 0, 1, 0, 62, 5, 400,  80,  4, 1, ARM_SUIT, IRON, HI_METAL),</span>
  375. ARMOR("banded mail", (char *)0,
+
  <span id="line375">375. ARMOR("banded mail", (char *)0,</span>
  376.  1, 0, 1, 0, 72, 5, 350,  90,  4, 0, ARM_SUIT, IRON, HI_METAL),
+
  <span id="line376">376.  1, 0, 1, 0, 72, 5, 350,  90,  4, 0, ARM_SUIT, IRON, HI_METAL),</span>
  377. ARMOR("dwarvish mithril-coat", (char *)0,
+
  <span id="line377">377. ARMOR("dwarvish mithril-coat", (char *)0,</span>
  378.  1, 0, 0, 0, 10, 1, 150, 240,  4, 3, ARM_SUIT, MITHRIL, HI_METAL),
+
  <span id="line378">378.  1, 0, 0, 0, 10, 1, 150, 240,  4, 3, ARM_SUIT, MITHRIL, HI_METAL),</span>
  379. ARMOR("elven mithril-coat", (char *)0,
+
  <span id="line379">379. ARMOR("elven mithril-coat", (char *)0,</span>
  380.  1, 0, 0, 0, 15, 1, 150, 240,  5, 3, ARM_SUIT, MITHRIL, HI_METAL),
+
  <span id="line380">380.  1, 0, 0, 0, 15, 1, 150, 240,  5, 3, ARM_SUIT, MITHRIL, HI_METAL),</span>
  381. ARMOR("chain mail", (char *)0,
+
  <span id="line381">381. ARMOR("chain mail", (char *)0,</span>
  382.  1, 0, 0, 0, 72, 5, 300,  75,  5, 1, ARM_SUIT, IRON, HI_METAL),
+
  <span id="line382">382.  1, 0, 0, 0, 72, 5, 300,  75,  5, 1, ARM_SUIT, IRON, HI_METAL),</span>
  383. ARMOR("orcish chain mail", "crude chain mail",
+
  <span id="line383">383. ARMOR("orcish chain mail", "crude chain mail",</span>
  384.  0, 0, 0, 0, 20, 5, 300,  75,  6, 1, ARM_SUIT, IRON, CLR_BLACK),
+
  <span id="line384">384.  0, 0, 0, 0, 20, 5, 300,  75,  6, 1, ARM_SUIT, IRON, CLR_BLACK),</span>
  385. ARMOR("scale mail", (char *)0,
+
  <span id="line385">385. ARMOR("scale mail", (char *)0,</span>
  386.  1, 0, 0, 0, 72, 5, 250,  45,  6, 0, ARM_SUIT, IRON, HI_METAL),
+
  <span id="line386">386.  1, 0, 0, 0, 72, 5, 250,  45,  6, 0, ARM_SUIT, IRON, HI_METAL),</span>
  387. ARMOR("studded leather armor", (char *)0,
+
  <span id="line387">387. ARMOR("studded leather armor", (char *)0,</span>
  388.  1, 0, 0, 0, 72, 3, 200,  15,  7, 1, ARM_SUIT, LEATHER, HI_LEATHER),
+
  <span id="line388">388.  1, 0, 0, 0, 72, 3, 200,  15,  7, 1, ARM_SUIT, LEATHER, HI_LEATHER),</span>
  389. ARMOR("ring mail", (char *)0,
+
  <span id="line389">389. ARMOR("ring mail", (char *)0,</span>
  390.  1, 0, 0, 0, 72, 5, 250, 100,  7, 0, ARM_SUIT, IRON, HI_METAL),
+
  <span id="line390">390.  1, 0, 0, 0, 72, 5, 250, 100,  7, 0, ARM_SUIT, IRON, HI_METAL),</span>
  391. ARMOR("orcish ring mail", "crude ring mail",
+
  <span id="line391">391. ARMOR("orcish ring mail", "crude ring mail",</span>
  392.  0, 0, 0, 0, 20, 5, 250,  80,  8, 1, ARM_SUIT, IRON, CLR_BLACK),
+
  <span id="line392">392.  0, 0, 0, 0, 20, 5, 250,  80,  8, 1, ARM_SUIT, IRON, CLR_BLACK),</span>
  393. ARMOR("leather armor", (char *)0,
+
  <span id="line393">393. ARMOR("leather armor", (char *)0,</span>
  394.  1, 0, 0, 0, 82, 3, 150,  5,  8, 0, ARM_SUIT, LEATHER, HI_LEATHER),
+
  <span id="line394">394.  1, 0, 0, 0, 82, 3, 150,  5,  8, 0, ARM_SUIT, LEATHER, HI_LEATHER),</span>
  395. ARMOR("leather jacket", (char *)0,
+
  <span id="line395">395. ARMOR("leather jacket", (char *)0,</span>
  396.  1, 0, 0, 0, 12, 0, 30,  10,  9, 0, ARM_SUIT, LEATHER, CLR_BLACK),
+
  <span id="line396">396.  1, 0, 0, 0, 12, 0, 30,  10,  9, 0, ARM_SUIT, LEATHER, CLR_BLACK),</span>
  397.  
+
  <span id="line397">397. </span>
  398. #ifdef TOURIST
+
  <span id="line398">398. #ifdef TOURIST</span>
  399. /* shirts */
+
  <span id="line399">399. /* shirts */</span>
  400. ARMOR("Hawaiian shirt", (char *)0,
+
  <span id="line400">400. ARMOR("Hawaiian shirt", (char *)0,</span>
  401.  1, 0, 0, 0, 8, 0, 5,  3, 10, 0, ARM_SHIRT, CLOTH, CLR_MAGENTA),
+
  <span id="line401">401.  1, 0, 0, 0,   8, 0,   5,  3, 10, 0, ARM_SHIRT, CLOTH, CLR_MAGENTA),</span>
  402. ARMOR("T-shirt", (char *)0,
+
  <span id="line402">402. ARMOR("T-shirt", (char *)0,</span>
  403.  1, 0, 0, 0, 2, 0, 5,  2, 10, 0, ARM_SHIRT, CLOTH, CLR_WHITE),
+
  <span id="line403">403.  1, 0, 0, 0,   2, 0,   5,  2, 10, 0, ARM_SHIRT, CLOTH, CLR_WHITE),</span>
  404. #endif
+
  <span id="line404">404. #endif</span>
  405.  
+
  <span id="line405">405. </span>
 
==== Cloaks ====
 
==== Cloaks ====
  
  406. /* cloaks */
+
  <span id="line406">406. /* cloaks */</span>
  407. /*  'cope' is not a spelling mistake... leave it be */
+
  <span id="line407">407. /*  'cope' is not a spelling mistake... leave it be */</span>
  408. CLOAK("mummy wrapping", (char *)0,
+
  <span id="line408">408. CLOAK("mummy wrapping", (char *)0,</span>
  409. 1, 0, 0,     0, 0,  3,  2, 10, 1, CLOTH, CLR_GRAY),
+
  <span id="line409">409. 1, 0, 0,     0, 0,  3,  2, 10, 1, CLOTH, CLR_GRAY),</span>
  410. CLOAK("elven cloak", "faded pall",
+
  <span id="line410">410. CLOAK("elven cloak", "faded pall",</span>
  411. 0, 1, STEALTH,    8, 0, 10, 60,  9, 3, CLOTH, CLR_BLACK),
+
  <span id="line411">411. 0, 1, STEALTH,    8, 0, 10, 60,  9, 3, CLOTH, CLR_BLACK),</span>
  412. CLOAK("orcish cloak", "coarse mantelet",
+
  <span id="line412">412. CLOAK("orcish cloak", "coarse mantelet",</span>
  413. 0, 0, 0,     8, 0, 10, 40, 10, 2, CLOTH, CLR_BLACK),
+
  <span id="line413">413. 0, 0, 0,     8, 0, 10, 40, 10, 2, CLOTH, CLR_BLACK),</span>
  414. CLOAK("dwarvish cloak", "hooded cloak",
+
  <span id="line414">414. CLOAK("dwarvish cloak", "hooded cloak",</span>
  415. 0, 0, 0,     8, 0, 10, 50, 10, 2, CLOTH, HI_CLOTH),
+
  <span id="line415">415. 0, 0, 0,     8, 0, 10, 50, 10, 2, CLOTH, HI_CLOTH),</span>
  416. CLOAK("oilskin cloak", "slippery cloak",
+
  <span id="line416">416. CLOAK("oilskin cloak", "slippery cloak",</span>
  417. 0, 0, 0,     8, 0, 10, 50,  9, 3, CLOTH, HI_CLOTH),
+
  <span id="line417">417. 0, 0, 0,     8, 0, 10, 50,  9, 3, CLOTH, HI_CLOTH),</span>
  418. CLOAK("robe", (char *)0,
+
  <span id="line418">418. CLOAK("robe", (char *)0,</span>
  419. 1, 1, 0,     3, 0, 15, 50,  8, 3, CLOTH, CLR_RED),
+
  <span id="line419">419. 1, 1, 0,     3, 0, 15, 50,  8, 3, CLOTH, CLR_RED),</span>
  420. CLOAK("alchemy smock", "apron",
+
  <span id="line420">420. CLOAK("alchemy smock", "apron",</span>
  421. 0, 1, POISON_RES, 9, 0, 10, 50,  9, 1, CLOTH, CLR_WHITE),
+
  <span id="line421">421. 0, 1, POISON_RES, 9, 0, 10, 50,  9, 1, CLOTH, CLR_WHITE),</span>
  422. CLOAK("leather cloak", (char *)0,
+
  <span id="line422">422. CLOAK("leather cloak", (char *)0,</span>
  423. 1, 0, 0,     8, 0, 15, 40,  9, 1, LEATHER, CLR_BROWN),
+
  <span id="line423">423. 1, 0, 0,     8, 0, 15, 40,  9, 1, LEATHER, CLR_BROWN),</span>
  424. /* With shuffled appearances... */
+
  <span id="line424">424. /* With shuffled appearances... */</span>
  425. CLOAK("cloak of protection", "tattered cape",
+
  <span id="line425">425. CLOAK("cloak of protection", "tattered cape",</span>
  426. 0, 1, PROTECTION, 9, 0, 10, 50,  7, 3, CLOTH, HI_CLOTH),
+
  <span id="line426">426. 0, 1, PROTECTION, 9, 0, 10, 50,  7, 3, CLOTH, HI_CLOTH),</span>
  427. CLOAK("cloak of invisibility", "opera cloak",
+
  <span id="line427">427. CLOAK("cloak of invisibility", "opera cloak",</span>
  428. 0, 1, INVIS,   10, 0, 10, 60,  9, 2, CLOTH, CLR_BRIGHT_MAGENTA),
+
  <span id="line428">428. 0, 1, INVIS,     10, 0, 10, 60,  9, 2, CLOTH, CLR_BRIGHT_MAGENTA),</span>
  429. CLOAK("cloak of magic resistance", "ornamental cope",
+
  <span id="line429">429. CLOAK("cloak of magic resistance", "ornamental cope",</span>
  430. 0, 1, ANTIMAGIC,  2, 0, 10, 60,  9, 3, CLOTH, CLR_WHITE),
+
  <span id="line430">430. 0, 1, ANTIMAGIC,  2, 0, 10, 60,  9, 3, CLOTH, CLR_WHITE),</span>
  431. CLOAK("cloak of displacement", "piece of cloth",
+
  <span id="line431">431. CLOAK("cloak of displacement", "piece of cloth",</span>
  432. 0, 1, DISPLACED, 10, 0, 10, 50,  9, 2, CLOTH, HI_CLOTH),
+
  <span id="line432">432. 0, 1, DISPLACED, 10, 0, 10, 50,  9, 2, CLOTH, HI_CLOTH),</span>
  433.  
+
  <span id="line433">433. </span>
 
==== Shields ====
 
==== Shields ====
  
  434. /* shields */
+
  <span id="line434">434. /* shields */</span>
  435. SHIELD("small shield", (char *)0,
+
  <span id="line435">435. SHIELD("small shield", (char *)0,</span>
  436. 1, 0, 0, 0,     6, 0, 30, 3,  9, 0, WOOD, HI_WOOD),
+
  <span id="line436">436. 1, 0, 0, 0,      6, 0, 30, 3,  9, 0, WOOD, HI_WOOD),</span>
  437. SHIELD("elven shield", "blue and green shield",
+
  <span id="line437">437. SHIELD("elven shield", "blue and green shield",</span>
  438. 0, 0, 0, 0,     2, 0, 40, 7,  8, 0, WOOD, CLR_GREEN),
+
  <span id="line438">438. 0, 0, 0, 0,      2, 0, 40, 7,  8, 0, WOOD, CLR_GREEN),</span>
  439. SHIELD("Uruk-hai shield", "white-handed shield",
+
  <span id="line439">439. SHIELD("Uruk-hai shield", "white-handed shield",</span>
  440. 0, 0, 0, 0,     2, 0, 50, 7,  9, 0, IRON, HI_METAL),
+
  <span id="line440">440. 0, 0, 0, 0,      2, 0, 50, 7,  9, 0, IRON, HI_METAL),</span>
  441. SHIELD("orcish shield", "red-eyed shield",
+
  <span id="line441">441. SHIELD("orcish shield", "red-eyed shield",</span>
  442. 0, 0, 0, 0,     2, 0, 50, 7,  9, 0, IRON, CLR_RED),
+
  <span id="line442">442. 0, 0, 0, 0,      2, 0, 50, 7,  9, 0, IRON, CLR_RED),</span>
  443. SHIELD("large shield", (char *)0,
+
  <span id="line443">443. SHIELD("large shield", (char *)0,</span>
  444. 1, 0, 1, 0,     7, 0,100, 10,  8, 0, IRON, HI_METAL),
+
  <span id="line444">444. 1, 0, 1, 0,      7, 0,100, 10,  8, 0, IRON, HI_METAL),</span>
  445. SHIELD("dwarvish roundshield", "large round shield",
+
  <span id="line445">445. SHIELD("dwarvish roundshield", "large round shield",</span>
  446. 0, 0, 0, 0,     4, 0,100, 10,  8, 0, IRON, HI_METAL),
+
  <span id="line446">446. 0, 0, 0, 0,      4, 0,100, 10,  8, 0, IRON, HI_METAL),</span>
  447. SHIELD("shield of reflection", "polished silver shield",
+
  <span id="line447">447. SHIELD("shield of reflection", "polished silver shield",</span>
  448. 0, 1, 0, REFLECTING, 3, 0, 50, 50,  8, 0, SILVER, HI_SILVER),
+
  <span id="line448">448. 0, 1, 0, REFLECTING, 3, 0, 50, 50,  8, 0, SILVER, HI_SILVER),</span>
  449.  
+
  <span id="line449">449. </span>
 
==== Gloves ====
 
==== Gloves ====
  
  450. /* gloves */
+
  <span id="line450">450. /* gloves */</span>
  451. /* these have their color but not material shuffled, so the IRON must stay
+
  <span id="line451">451. /* these have their color but not material shuffled, so the IRON must stay</span>
  452.  * CLR_BROWN (== HI_LEATHER)
+
  <span id="line452">452.  * CLR_BROWN (== HI_LEATHER)</span>
  453.  */
+
  <span id="line453">453.  */</span>
  454. GLOVES("leather gloves", "old gloves",
+
  <span id="line454">454. GLOVES("leather gloves", "old gloves",</span>
  455. 0, 0,  0,   16, 1, 10,  8,  9, 0, LEATHER, HI_LEATHER),
+
  <span id="line455">455. 0, 0,  0,  16, 1, 10,  8,  9, 0, LEATHER, HI_LEATHER),</span>
  456. GLOVES("gauntlets of fumbling", "padded gloves",
+
  <span id="line456">456. GLOVES("gauntlets of fumbling", "padded gloves",</span>
  457. 0, 1,  FUMBLING,  8, 1, 10, 50,  9, 0, LEATHER, HI_LEATHER),
+
  <span id="line457">457. 0, 1,  FUMBLING,  8, 1, 10, 50,  9, 0, LEATHER, HI_LEATHER),</span>
  458. GLOVES("gauntlets of power", "riding gloves",
+
  <span id="line458">458. GLOVES("gauntlets of power", "riding gloves",</span>
  459. 0, 1,  0,   8, 1, 30, 50,  9, 0, IRON, CLR_BROWN),
+
  <span id="line459">459. 0, 1,  0,    8, 1, 30, 50,  9, 0, IRON, CLR_BROWN),</span>
  460. GLOVES("gauntlets of dexterity", "fencing gloves",
+
  <span id="line460">460. GLOVES("gauntlets of dexterity", "fencing gloves",</span>
  461. 0, 1,  0,   8, 1, 10, 50,  9, 0, LEATHER, HI_LEATHER),
+
  <span id="line461">461. 0, 1,  0,    8, 1, 10, 50,  9, 0, LEATHER, HI_LEATHER),</span>
  462.  
+
  <span id="line462">462. </span>
 
==== Boots ====
 
==== Boots ====
  
  463. /* boots */
+
  <span id="line463">463. /* boots */</span>
  464. BOOTS("low boots", "walking shoes",
+
  <span id="line464">464. BOOTS("low boots", "walking shoes",</span>
  465. 0, 0,  0,   25, 2, 10,  8,  9, 0, LEATHER, HI_LEATHER),
+
  <span id="line465">465. 0, 0,  0,  25, 2, 10,  8,  9, 0, LEATHER, HI_LEATHER),</span>
  466. BOOTS("iron shoes", "hard shoes",
+
  <span id="line466">466. BOOTS("iron shoes", "hard shoes",</span>
  467. 0, 0,  0,   7, 2, 50, 16,  8, 0, IRON, HI_METAL),
+
  <span id="line467">467. 0, 0,  0,    7, 2, 50, 16,  8, 0, IRON, HI_METAL),</span>
  468. BOOTS("high boots", "jackboots",
+
  <span id="line468">468. BOOTS("high boots", "jackboots",</span>
  469. 0, 0,  0,   15, 2, 20, 12,  8, 0, LEATHER, HI_LEATHER),
+
  <span id="line469">469. 0, 0,  0,  15, 2, 20, 12,  8, 0, LEATHER, HI_LEATHER),</span>
  470. /* With shuffled appearances... */
+
  <span id="line470">470. /* With shuffled appearances... */</span>
  471. BOOTS("speed boots", "combat boots",
+
  <span id="line471">471. BOOTS("speed boots", "combat boots",</span>
  472. 0, 1,  FAST,   12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),
+
  <span id="line472">472. 0, 1,  FAST,   12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),</span>
  473. BOOTS("water walking boots", "jungle boots",
+
  <span id="line473">473. BOOTS("water walking boots", "jungle boots",</span>
  474. 0, 1,  WWALKING,  12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),
+
  <span id="line474">474. 0, 1,  WWALKING,  12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),</span>
  475. BOOTS("jumping boots", "hiking boots",
+
  <span id="line475">475. BOOTS("jumping boots", "hiking boots",</span>
  476. 0, 1,  JUMPING,  12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),
+
  <span id="line476">476. 0, 1,  JUMPING,  12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),</span>
  477. BOOTS("elven boots", "mud boots",
+
  <span id="line477">477. BOOTS("elven boots", "mud boots",</span>
  478. 0, 1,  STEALTH,  12, 2, 15,  8,  9, 0, LEATHER, HI_LEATHER),
+
  <span id="line478">478. 0, 1,  STEALTH,  12, 2, 15,  8,  9, 0, LEATHER, HI_LEATHER),</span>
  479. BOOTS("kicking boots", "buckled boots",
+
  <span id="line479">479. BOOTS("kicking boots", "buckled boots",</span>
  480. 0, 1,  0,        12, 2, 15,  8,  9, 0, IRON, CLR_BROWN),
+
  <span id="line480">480. 0, 1,  0,        12, 2, 15,  8,  9, 0, IRON, CLR_BROWN),</span>
  481. BOOTS("fumble boots", "riding boots",
+
  <span id="line481">481. BOOTS("fumble boots", "riding boots",</span>
  482. 0, 1,  FUMBLING,  12, 2, 20, 30,  9, 0, LEATHER, HI_LEATHER),
+
  <span id="line482">482. 0, 1,  FUMBLING,  12, 2, 20, 30,  9, 0, LEATHER, HI_LEATHER),</span>
  483. BOOTS("levitation boots", "snow boots",
+
  <span id="line483">483. BOOTS("levitation boots", "snow boots",</span>
  484. 0, 1,  LEVITATION,12, 2, 15, 30,  9, 0, LEATHER, HI_LEATHER),
+
  <span id="line484">484. 0, 1,  LEVITATION,12, 2, 15, 30,  9, 0, LEATHER, HI_LEATHER),</span>
  485. #undef HELM
+
  <span id="line485">485. #undef HELM</span>
  486. #undef CLOAK
+
  <span id="line486">486. #undef CLOAK</span>
  487. #undef SHIELD
+
  <span id="line487">487. #undef SHIELD</span>
  488. #undef GLOVES
+
  <span id="line488">488. #undef GLOVES</span>
  489. #undef BOOTS
+
  <span id="line489">489. #undef BOOTS</span>
  490. #undef ARMOR
+
  <span id="line490">490. #undef ARMOR</span>
  
 
=== Rings ===
 
=== Rings ===
  
  491. /* rings ... */
+
  <span id="line491">491. /* rings ... */</span>
  492. #define RING(name,power,stone,cost,mgc,spec,mohs,metal,color) OBJECT( \
+
  <span id="line492">492. #define RING(name,power,stone,cost,mgc,spec,mohs,metal,color) OBJECT( \</span>
  493. OBJ(name,stone), \
+
  <span id="line493">493. OBJ(name,stone), \</span>
  494. BITS(0,0,spec,0,mgc,spec,0,0,0,HARDGEM(mohs),0,P_NONE,metal), \
+
  <span id="line494">494. BITS(0,0,spec,0,mgc,spec,0,0,0,HARDGEM(mohs),0,P_NONE,metal), \</span>
  495. power, RING_CLASS, 0, 0, 3, cost, 0, 0, 0, 0, 15, color )
+
  <span id="line495">495. power, RING_CLASS, 0, 0, 3, cost, 0, 0, 0, 0, 15, color )</span>
  496. RING("adornment", ADORNED, "wooden",        100, 1, 1, 2, WOOD, HI_WOOD),
+
  <span id="line496">496. RING("adornment", ADORNED, "wooden",        100, 1, 1, 2, WOOD, HI_WOOD),</span>
  497. RING("gain strength", 0, "granite",        150, 1, 1, 7, MINERAL, HI_MINERAL),
+
  <span id="line497">497. RING("gain strength", 0, "granite",        150, 1, 1, 7, MINERAL, HI_MINERAL),</span>
  498. RING("gain constitution", 0, "opal",        150, 1, 1, 7, MINERAL,  HI_MINERAL),
+
  <span id="line498">498. RING("gain constitution", 0, "opal",        150, 1, 1, 7, MINERAL,  HI_MINERAL),</span>
  499. RING("increase accuracy", 0, "clay",        150, 1, 1, 4, MINERAL, CLR_RED),
+
  <span id="line499">499. RING("increase accuracy", 0, "clay",        150, 1, 1, 4, MINERAL, CLR_RED),</span>
  500. RING("increase damage", 0, "coral",        150, 1, 1, 4, MINERAL, CLR_ORANGE),
+
  <span id="line500">500. RING("increase damage", 0, "coral",        150, 1, 1, 4, MINERAL, CLR_ORANGE),</span>
  501. RING("protection", PROTECTION, "black onyx",100, 1, 1, 7, MINERAL, CLR_BLACK),
+
  <span id="line501">501. RING("protection", PROTECTION, "black onyx",100, 1, 1, 7, MINERAL, CLR_BLACK),</span>
  502. RING("regeneration", REGENERATION, "moonstone",
+
  <span id="line502">502. RING("regeneration", REGENERATION, "moonstone",</span>
  503.       200, 1, 0, 6, MINERAL, HI_MINERAL),
+
  <span id="line503">503.         200, 1, 0, 6, MINERAL, HI_MINERAL),</span>
  504. RING("searching", SEARCHING, "tiger eye",  200, 1, 0, 6, GEMSTONE, CLR_BROWN),
+
  <span id="line504">504. RING("searching", SEARCHING, "tiger eye",  200, 1, 0, 6, GEMSTONE, CLR_BROWN),</span>
  505. RING("stealth", STEALTH, "jade",            100, 1, 0, 6, GEMSTONE, CLR_GREEN),
+
  <span id="line505">505. RING("stealth", STEALTH, "jade",            100, 1, 0, 6, GEMSTONE, CLR_GREEN),</span>
  506. RING("sustain ability", FIXED_ABIL, "bronze",
+
  <span id="line506">506. RING("sustain ability", FIXED_ABIL, "bronze",</span>
  507.       100, 1, 0, 4, COPPER, HI_COPPER),
+
  <span id="line507">507.         100, 1, 0, 4, COPPER, HI_COPPER),</span>
  508. RING("levitation", LEVITATION, "agate",    200, 1, 0, 7, GEMSTONE, CLR_RED),
+
  <span id="line508">508. RING("levitation", LEVITATION, "agate",    200, 1, 0, 7, GEMSTONE, CLR_RED),</span>
  509. RING("hunger", HUNGER, "topaz",            100, 1, 0, 8, GEMSTONE, CLR_CYAN),
+
  <span id="line509">509. RING("hunger", HUNGER, "topaz",            100, 1, 0, 8, GEMSTONE, CLR_CYAN),</span>
  510. RING("aggravate monster", AGGRAVATE_MONSTER, "sapphire",
+
  <span id="line510">510. RING("aggravate monster", AGGRAVATE_MONSTER, "sapphire",</span>
  511.       150, 1, 0, 9, GEMSTONE, CLR_BLUE),
+
  <span id="line511">511.         150, 1, 0, 9, GEMSTONE, CLR_BLUE),</span>
  512. RING("conflict", CONFLICT, "ruby",          300, 1, 0, 9, GEMSTONE, CLR_RED),
+
  <span id="line512">512. RING("conflict", CONFLICT, "ruby",          300, 1, 0, 9, GEMSTONE, CLR_RED),</span>
  513. RING("warning", WARNING, "diamond",        100, 1, 0,10, GEMSTONE, CLR_WHITE),
+
  <span id="line513">513. RING("warning", WARNING, "diamond",        100, 1, 0,10, GEMSTONE, CLR_WHITE),</span>
  514. RING("poison resistance", POISON_RES, "pearl",
+
  <span id="line514">514. RING("poison resistance", POISON_RES, "pearl",</span>
  515.       150, 1, 0, 4, IRON, CLR_WHITE),
+
  <span id="line515">515.         150, 1, 0, 4, IRON, CLR_WHITE),</span>
  516. RING("fire resistance", FIRE_RES, "iron",  200, 1, 0, 5, IRON, HI_METAL),
+
  <span id="line516">516. RING("fire resistance", FIRE_RES, "iron",  200, 1, 0, 5, IRON, HI_METAL),</span>
  517. RING("cold resistance", COLD_RES, "brass",  150, 1, 0, 4, COPPER, HI_COPPER),
+
  <span id="line517">517. RING("cold resistance", COLD_RES, "brass",  150, 1, 0, 4, COPPER, HI_COPPER),</span>
  518. RING("shock resistance", SHOCK_RES, "copper",
+
  <span id="line518">518. RING("shock resistance", SHOCK_RES, "copper",</span>
  519.       150, 1, 0, 3, COPPER, HI_COPPER),
+
  <span id="line519">519.         150, 1, 0, 3, COPPER, HI_COPPER),</span>
  520. RING("free action",    FREE_ACTION, "twisted",
+
  <span id="line520">520. RING("free action",    FREE_ACTION, "twisted",</span>
  521.       200, 1, 0, 6, IRON, HI_METAL),
+
  <span id="line521">521.         200, 1, 0, 6, IRON, HI_METAL),</span>
  522. RING("slow digestion",  SLOW_DIGESTION, "steel",
+
  <span id="line522">522. RING("slow digestion",  SLOW_DIGESTION, "steel",</span>
  523.       200, 1, 0, 8, IRON, HI_METAL),
+
  <span id="line523">523.         200, 1, 0, 8, IRON, HI_METAL),</span>
  524. RING("teleportation", TELEPORT, "silver",  200, 1, 0, 3, SILVER, HI_SILVER),
+
  <span id="line524">524. RING("teleportation", TELEPORT, "silver",  200, 1, 0, 3, SILVER, HI_SILVER),</span>
  525. RING("teleport control", TELEPORT_CONTROL, "gold",
+
  <span id="line525">525. RING("teleport control", TELEPORT_CONTROL, "gold",</span>
  526.       300, 1, 0, 3, GOLD, HI_GOLD),
+
  <span id="line526">526.         300, 1, 0, 3, GOLD, HI_GOLD),</span>
  527. RING("polymorph", POLYMORPH, "ivory",      300, 1, 0, 4, BONE, CLR_WHITE),
+
  <span id="line527">527. RING("polymorph", POLYMORPH, "ivory",      300, 1, 0, 4, BONE, CLR_WHITE),</span>
  528. RING("polymorph control", POLYMORPH_CONTROL, "emerald",
+
  <span id="line528">528. RING("polymorph control", POLYMORPH_CONTROL, "emerald",</span>
  529.       300, 1, 0, 8, GEMSTONE, CLR_BRIGHT_GREEN),
+
  <span id="line529">529.         300, 1, 0, 8, GEMSTONE, CLR_BRIGHT_GREEN),</span>
  530. RING("invisibility", INVIS, "wire",        150, 1, 0, 5, IRON, HI_METAL),
+
  <span id="line530">530. RING("invisibility", INVIS, "wire",        150, 1, 0, 5, IRON, HI_METAL),</span>
  531. RING("see invisible", SEE_INVIS, "engagement",
+
  <span id="line531">531. RING("see invisible", SEE_INVIS, "engagement",</span>
  532.       150, 1, 0, 5, IRON, HI_METAL),
+
  <span id="line532">532.         150, 1, 0, 5, IRON, HI_METAL),</span>
  533. RING("protection from shape changers", PROT_FROM_SHAPE_CHANGERS, "shiny",
+
  <span id="line533">533. RING("protection from shape changers", PROT_FROM_SHAPE_CHANGERS, "shiny",</span>
  534.       100, 1, 0, 5, IRON, CLR_BRIGHT_CYAN),
+
  <span id="line534">534.         100, 1, 0, 5, IRON, CLR_BRIGHT_CYAN),</span>
  535. #undef RING
+
  <span id="line535">535. #undef RING</span>
  536.  
+
  <span id="line536">536. </span>
 
=== Amulets ===
 
=== Amulets ===
  
  537. /* amulets ... - THE Amulet comes last because it is special */
+
  <span id="line537">537. /* amulets ... - THE Amulet comes last because it is special */</span>
  538. #define AMULET(name,desc,power,prob) OBJECT( \
+
  <span id="line538">538. #define AMULET(name,desc,power,prob) OBJECT( \</span>
  539. OBJ(name,desc), BITS(0,0,0,0,1,0,0,0,0,0,0,P_NONE,IRON), power, \
+
  <span id="line539">539. OBJ(name,desc), BITS(0,0,0,0,1,0,0,0,0,0,0,P_NONE,IRON), power, \</span>
  540. AMULET_CLASS, prob, 0, 20, 150, 0, 0, 0, 0, 20, HI_METAL )
+
  <span id="line540">540. AMULET_CLASS, prob, 0, 20, 150, 0, 0, 0, 0, 20, HI_METAL )</span>
  541.  
+
  <span id="line541">541. </span>
  542. AMULET("amulet of ESP",          "circular",  TELEPAT,    175),
+
  <span id="line542">542. AMULET("amulet of ESP",          "circular",  TELEPAT,    175),</span>
  543. AMULET("amulet of life saving",  "spherical",  LIFESAVED,  75),
+
  <span id="line543">543. AMULET("amulet of life saving",  "spherical",  LIFESAVED,  75),</span>
  544. AMULET("amulet of strangulation", "oval",      STRANGLED,  135),
+
  <span id="line544">544. AMULET("amulet of strangulation", "oval",      STRANGLED,  135),</span>
  545. AMULET("amulet of restful sleep", "triangular", SLEEPING,  135),
+
  <span id="line545">545. AMULET("amulet of restful sleep", "triangular", SLEEPING,  135),</span>
  546. AMULET("amulet versus poison",    "pyramidal",  POISON_RES, 165),
+
  <span id="line546">546. AMULET("amulet versus poison",    "pyramidal",  POISON_RES, 165),</span>
  547. AMULET("amulet of change",        "square",    0,          130),
+
  <span id="line547">547. AMULET("amulet of change",        "square",    0,          130),</span>
  548. /* POLYMORPH */
+
  <span id="line548">548.     /* POLYMORPH */</span>
  549. AMULET("amulet of unchanging",    "concave",    UNCHANGING, 45),
+
  <span id="line549">549. AMULET("amulet of unchanging",    "concave",    UNCHANGING,  45),</span>
  550. AMULET("amulet of reflection",    "hexagonal",  REFLECTING,  75),
+
  <span id="line550">550. AMULET("amulet of reflection",    "hexagonal",  REFLECTING,  75),</span>
  551. AMULET("amulet of magical breathing", "octagonal",      MAGICAL_BREATHING, 65),
+
  <span id="line551">551. AMULET("amulet of magical breathing", "octagonal",      MAGICAL_BREATHING, 65),</span>
  552. OBJECT(OBJ("cheap plastic imitation of the Amulet of Yendor",
+
  <span id="line552">552. OBJECT(OBJ("cheap plastic imitation of the Amulet of Yendor",</span>
  553.  "Amulet of Yendor"), BITS(0,0,1,0,0,0,0,0,0,0,0,0,PLASTIC), 0,
+
  <span id="line553">553.  "Amulet of Yendor"), BITS(0,0,1,0,0,0,0,0,0,0,0,0,PLASTIC), 0,</span>
  554.  AMULET_CLASS, 0, 0, 20,    0, 0, 0, 0, 0,  1, HI_METAL),
+
  <span id="line554">554.  AMULET_CLASS, 0, 0, 20,    0, 0, 0, 0, 0,  1, HI_METAL),</span>
  555. OBJECT(OBJ("Amulet of Yendor", /* note: description == name */
+
  <span id="line555">555. OBJECT(OBJ("Amulet of Yendor", /* note: description == name */</span>
  556.  "Amulet of Yendor"), BITS(0,0,1,0,1,0,1,1,0,0,0,0,MITHRIL), 0,
+
  <span id="line556">556.  "Amulet of Yendor"), BITS(0,0,1,0,1,0,1,1,0,0,0,0,MITHRIL), 0,</span>
  557.  AMULET_CLASS, 0, 0, 20, 30000, 0, 0, 0, 0, 20, HI_METAL),
+
  <span id="line557">557.  AMULET_CLASS, 0, 0, 20, 30000, 0, 0, 0, 0, 20, HI_METAL),</span>
  558. #undef AMULET
+
  <span id="line558">558. #undef AMULET</span>
  559.  
+
  <span id="line559">559. </span>
 
=== Tools ===
 
=== Tools ===
  
  560. /* tools ... */
+
  <span id="line560">560. /* tools ... */</span>
  561. /* tools with weapon characteristics come last */
+
  <span id="line561">561. /* tools with weapon characteristics come last */</span>
  562. #define TOOL(name,desc,kn,mrg,mgc,chg,prob,wt,cost,mat,color) \
+
  <span id="line562">562. #define TOOL(name,desc,kn,mrg,mgc,chg,prob,wt,cost,mat,color) \</span>
  563.  OBJECT( OBJ(name,desc), \
+
  <span id="line563">563.  OBJECT( OBJ(name,desc), \</span>
  564. BITS(kn,mrg,chg,0,mgc,chg,0,0,0,0,0,P_NONE,mat), \
+
  <span id="line564">564. BITS(kn,mrg,chg,0,mgc,chg,0,0,0,0,0,P_NONE,mat), \</span>
  565. 0, TOOL_CLASS, prob, 0, \
+
  <span id="line565">565. 0, TOOL_CLASS, prob, 0, \</span>
  566. wt, cost, 0, 0, 0, 0, wt, color )
+
  <span id="line566">566. wt, cost, 0, 0, 0, 0, wt, color )</span>
  567. #define CONTAINER(name,desc,kn,mgc,chg,prob,wt,cost,mat,color) \
+
  <span id="line567">567. #define CONTAINER(name,desc,kn,mgc,chg,prob,wt,cost,mat,color) \</span>
  568.  OBJECT( OBJ(name,desc), \
+
  <span id="line568">568.  OBJECT( OBJ(name,desc), \</span>
  569. BITS(kn,0,chg,1,mgc,chg,0,0,0,0,0,P_NONE,mat), \
+
  <span id="line569">569. BITS(kn,0,chg,1,mgc,chg,0,0,0,0,0,P_NONE,mat), \</span>
  570. 0, TOOL_CLASS, prob, 0, \
+
  <span id="line570">570. 0, TOOL_CLASS, prob, 0, \</span>
  571. wt, cost, 0, 0, 0, 0, wt, color )
+
  <span id="line571">571. wt, cost, 0, 0, 0, 0, wt, color )</span>
  572. #define WEPTOOL(name,desc,kn,mgc,bi,prob,wt,cost,sdam,ldam,hitbon,sub,mat,clr) \
+
  <span id="line572">572. #define WEPTOOL(name,desc,kn,mgc,bi,prob,wt,cost,sdam,ldam,hitbon,sub,mat,clr) \</span>
  573.  OBJECT( OBJ(name,desc), \
+
  <span id="line573">573.  OBJECT( OBJ(name,desc), \</span>
  574. BITS(kn,0,1,0,mgc,1,0,0,bi,0,hitbon,sub,mat), \
+
  <span id="line574">574. BITS(kn,0,1,0,mgc,1,0,0,bi,0,hitbon,sub,mat), \</span>
  575. 0, TOOL_CLASS, prob, 0, \
+
  <span id="line575">575. 0, TOOL_CLASS, prob, 0, \</span>
  576. wt, cost, sdam, ldam, hitbon, 0, wt, clr )
+
  <span id="line576">576. wt, cost, sdam, ldam, hitbon, 0, wt, clr )</span>
  577. /* containers */
+
  <span id="line577">577. /* containers */</span>
  578. CONTAINER("large box", (char *)0,      1, 0, 0,  40,350,  8, WOOD, HI_WOOD),
+
  <span id="line578">578. CONTAINER("large box", (char *)0,      1, 0, 0,  40,350,  8, WOOD, HI_WOOD),</span>
  579. CONTAINER("chest", (char *)0,          1, 0, 0,  35,600,  16, WOOD, HI_WOOD),
+
  <span id="line579">579. CONTAINER("chest", (char *)0,          1, 0, 0,  35,600,  16, WOOD, HI_WOOD),</span>
  580. CONTAINER("ice box", (char *)0,        1, 0, 0,  5,900,  42, PLASTIC, CLR_WHITE),
+
  <span id="line580">580. CONTAINER("ice box", (char *)0,        1, 0, 0,  5,900,  42, PLASTIC, CLR_WHITE),</span>
  581. CONTAINER("sack", "bag",                0, 0, 0,  35, 15,  2, CLOTH, HI_CLOTH),
+
  <span id="line581">581. CONTAINER("sack", "bag",                0, 0, 0,  35, 15,  2, CLOTH, HI_CLOTH),</span>
  582. CONTAINER("oilskin sack", "bag",        0, 0, 0,  5, 15, 100, CLOTH, HI_CLOTH),
+
  <span id="line582">582. CONTAINER("oilskin sack", "bag",        0, 0, 0,  5, 15, 100, CLOTH, HI_CLOTH),</span>
  583. CONTAINER("bag of holding", "bag",      0, 1, 0,  20, 15, 100, CLOTH, HI_CLOTH),
+
  <span id="line583">583. CONTAINER("bag of holding", "bag",      0, 1, 0,  20, 15, 100, CLOTH, HI_CLOTH),</span>
  584. CONTAINER("bag of tricks", "bag",      0, 1, 1,  20, 15, 100, CLOTH, HI_CLOTH),
+
  <span id="line584">584. CONTAINER("bag of tricks", "bag",      0, 1, 1,  20, 15, 100, CLOTH, HI_CLOTH),</span>
  585. #undef CONTAINER
+
  <span id="line585">585. #undef CONTAINER</span>
  586.  
+
  <span id="line586">586. </span>
  587. /* lock opening tools */
+
  <span id="line587">587. /* lock opening tools */</span>
  588. TOOL("skeleton key", "key",    0, 0, 0, 0,  80,  3,  10, IRON, HI_METAL),
+
  <span id="line588">588. TOOL("skeleton key", "key",    0, 0, 0, 0,  80,  3,  10, IRON, HI_METAL),</span>
  589. #ifdef TOURIST
+
  <span id="line589">589. #ifdef TOURIST</span>
  590. TOOL("lock pick", (char *)0,    1, 0, 0, 0,  60,  4,  20, IRON, HI_METAL),
+
  <span id="line590">590. TOOL("lock pick", (char *)0,    1, 0, 0, 0,  60,  4,  20, IRON, HI_METAL),</span>
  591. TOOL("credit card", (char *)0,  1, 0, 0, 0,  15,  1,  10, PLASTIC, CLR_WHITE),
+
  <span id="line591">591. TOOL("credit card", (char *)0,  1, 0, 0, 0,  15,  1,  10, PLASTIC, CLR_WHITE),</span>
  592. #else
+
  <span id="line592">592. #else</span>
  593. TOOL("lock pick", (char *)0,    1, 0, 0, 0,  75,  4,  20, IRON, HI_METAL),
+
  <span id="line593">593. TOOL("lock pick", (char *)0,    1, 0, 0, 0,  75,  4,  20, IRON, HI_METAL),</span>
  594. #endif
+
  <span id="line594">594. #endif</span>
  595. /* light sources */
+
  <span id="line595">595. /* light sources */</span>
  596. TOOL("tallow candle", "candle", 0, 1, 0, 0,  20,  2,  10, WAX, CLR_WHITE),
+
  <span id="line596">596. TOOL("tallow candle", "candle", 0, 1, 0, 0,  20,  2,  10, WAX, CLR_WHITE),</span>
  597. TOOL("wax candle", "candle",    0, 1, 0, 0,  5,  2,  20, WAX, CLR_WHITE),
+
  <span id="line597">597. TOOL("wax candle", "candle",    0, 1, 0, 0,  5,  2,  20, WAX, CLR_WHITE),</span>
  598. TOOL("brass lantern", (char *)0,1, 0, 0, 0,  30, 30,  12, COPPER, CLR_YELLOW),
+
  <span id="line598">598. TOOL("brass lantern", (char *)0,1, 0, 0, 0,  30, 30,  12, COPPER, CLR_YELLOW),</span>
  599. TOOL("oil lamp", "lamp",        0, 0, 0, 0,  45, 20,  10, COPPER, CLR_YELLOW),
+
  <span id="line599">599. TOOL("oil lamp", "lamp",        0, 0, 0, 0,  45, 20,  10, COPPER, CLR_YELLOW),</span>
  600. TOOL("magic lamp", "lamp",      0, 0, 1, 0,  15, 20,  50, COPPER, CLR_YELLOW),
+
  <span id="line600">600. TOOL("magic lamp", "lamp",      0, 0, 1, 0,  15, 20,  50, COPPER, CLR_YELLOW),</span>
  601. /* other tools */
+
  <span id="line601">601. /* other tools */</span>
  602. #ifdef TOURIST
+
  <span id="line602">602. #ifdef TOURIST</span>
  603. TOOL("expensive camera", (char *)0,
+
  <span id="line603">603. TOOL("expensive camera", (char *)0,</span>
  604. 1, 0, 0, 1,  15, 12, 200, PLASTIC, CLR_BLACK),
+
  <span id="line604">604.   1, 0, 0, 1,  15, 12, 200, PLASTIC, CLR_BLACK),</span>
  605. TOOL("mirror", "looking glass", 0, 0, 0, 0,  45, 13,  10, GLASS, HI_SILVER),
+
  <span id="line605">605. TOOL("mirror", "looking glass", 0, 0, 0, 0,  45, 13,  10, GLASS, HI_SILVER),</span>
  606. #else
+
  <span id="line606">606. #else</span>
  607. TOOL("mirror", "looking glass", 0, 0, 0, 0,  60, 13,  10, GLASS, HI_SILVER),
+
  <span id="line607">607. TOOL("mirror", "looking glass", 0, 0, 0, 0,  60, 13,  10, GLASS, HI_SILVER),</span>
  608. #endif
+
  <span id="line608">608. #endif</span>
  609. TOOL("crystal ball", "glass orb",
+
  <span id="line609">609. TOOL("crystal ball", "glass orb",</span>
  610. 0, 0, 1, 1,  15,150,  60, GLASS, HI_GLASS),
+
  <span id="line610">610.   0, 0, 1, 1,  15,150,  60, GLASS, HI_GLASS),</span>
  611. TOOL("lenses", (char *)0, 1, 0, 0, 0,  5,  3,  80, GLASS, HI_GLASS),
+
  <span id="line611">611. TOOL("lenses", (char *)0, 1, 0, 0, 0,  5,  3,  80, GLASS, HI_GLASS),</span>
  612. TOOL("blindfold", (char *)0,    1, 0, 0, 0,  50,  2,  20, CLOTH, CLR_BLACK),
+
  <span id="line612">612. TOOL("blindfold", (char *)0,    1, 0, 0, 0,  50,  2,  20, CLOTH, CLR_BLACK),</span>
  613. TOOL("towel", (char *)0,        1, 0, 0, 0,  50,  2,  50, CLOTH, CLR_MAGENTA),
+
  <span id="line613">613. TOOL("towel", (char *)0,        1, 0, 0, 0,  50,  2,  50, CLOTH, CLR_MAGENTA),</span>
  614. #ifdef STEED
+
  <span id="line614">614. #ifdef STEED</span>
  615. TOOL("saddle", (char *)0,      1, 0, 0, 0,  5,200, 150, LEATHER, HI_LEATHER),
+
  <span id="line615">615. TOOL("saddle", (char *)0,      1, 0, 0, 0,  5,200, 150, LEATHER, HI_LEATHER),</span>
  616. TOOL("leash", (char *)0,        1, 0, 0, 0,  65, 12,  20, LEATHER, HI_LEATHER),
+
  <span id="line616">616. TOOL("leash", (char *)0,        1, 0, 0, 0,  65, 12,  20, LEATHER, HI_LEATHER),</span>
  617. #else
+
  <span id="line617">617. #else</span>
  618. TOOL("leash", (char *)0,        1, 0, 0, 0,  70, 12,  20, LEATHER, HI_LEATHER),
+
  <span id="line618">618. TOOL("leash", (char *)0,        1, 0, 0, 0,  70, 12,  20, LEATHER, HI_LEATHER),</span>
  619. #endif
+
  <span id="line619">619. #endif</span>
  620. TOOL("stethoscope", (char *)0,  1, 0, 0, 0,  25,  4,  75, IRON, HI_METAL),
+
  <span id="line620">620. TOOL("stethoscope", (char *)0,  1, 0, 0, 0,  25,  4,  75, IRON, HI_METAL),</span>
  621. TOOL("tinning kit", (char *)0,  1, 0, 0, 1,  15,100,  30, IRON, HI_METAL),
+
  <span id="line621">621. TOOL("tinning kit", (char *)0,  1, 0, 0, 1,  15,100,  30, IRON, HI_METAL),</span>
  622. TOOL("tin opener", (char *)0,  1, 0, 0, 0,  35,  4,  30, IRON, HI_METAL),
+
  <span id="line622">622. TOOL("tin opener", (char *)0,  1, 0, 0, 0,  35,  4,  30, IRON, HI_METAL),</span>
  623. TOOL("can of grease", (char *)0,1, 0, 0, 1,  15, 15,  20, IRON, HI_METAL),
+
  <span id="line623">623. TOOL("can of grease", (char *)0,1, 0, 0, 1,  15, 15,  20, IRON, HI_METAL),</span>
  624. TOOL("figurine", (char *)0,    1, 0, 1, 0,  25, 50,  80, MINERAL, HI_MINERAL),
+
  <span id="line624">624. TOOL("figurine", (char *)0,    1, 0, 1, 0,  25, 50,  80, MINERAL, HI_MINERAL),</span>
  625. TOOL("magic marker", (char *)0, 1, 0, 1, 1,  15,  2,  50, PLASTIC, CLR_RED),
+
  <span id="line625">625. TOOL("magic marker", (char *)0, 1, 0, 1, 1,  15,  2,  50, PLASTIC, CLR_RED),</span>
  626. /* traps */
+
  <span id="line626">626. /* traps */</span>
  627. TOOL("land mine",(char *)0,    1, 0, 0, 0,  0,300, 180, IRON, CLR_RED),
+
  <span id="line627">627. TOOL("land mine",(char *)0,    1, 0, 0, 0,  0,300, 180, IRON, CLR_RED),</span>
  628. TOOL("beartrap", (char *)0,    1, 0, 0, 0,  0,200,  60, IRON, HI_METAL),
+
  <span id="line628">628. TOOL("beartrap", (char *)0,    1, 0, 0, 0,  0,200,  60, IRON, HI_METAL),</span>
  629. /* instruments */
+
  <span id="line629">629. /* instruments */</span>
  630. TOOL("tin whistle", "whistle",  0, 0, 0, 0, 100,  3,  10, METAL, HI_METAL),
+
  <span id="line630">630. TOOL("tin whistle", "whistle",  0, 0, 0, 0, 100,  3,  10, METAL, HI_METAL),</span>
  631. TOOL("magic whistle", "whistle",0, 0, 1, 0,  30,  3,  10, METAL, HI_METAL),
+
  <span id="line631">631. TOOL("magic whistle", "whistle",0, 0, 1, 0,  30,  3,  10, METAL, HI_METAL),</span>
  632. /* "If tin whistles are made out of tin, what do they make foghorns out of?" */
+
  <span id="line632">632. /* "If tin whistles are made out of tin, what do they make foghorns out of?" */</span>
  633. TOOL("wooden flute", "flute",  0, 0, 0, 0,  4,  5,  12, WOOD, HI_WOOD),
+
  <span id="line633">633. TOOL("wooden flute", "flute",  0, 0, 0, 0,  4,  5,  12, WOOD, HI_WOOD),</span>
  634. TOOL("magic flute", "flute",    0, 0, 1, 1,  2,  5,  36, WOOD, HI_WOOD),
+
  <span id="line634">634. TOOL("magic flute", "flute",    0, 0, 1, 1,  2,  5,  36, WOOD, HI_WOOD),</span>
  635. TOOL("tooled horn&quot;, &amp;quot;horn",    0, 0, 0, 0,  5, 18,  15, BONE, CLR_WHITE),
+
  <span id="line635">635. TOOL("tooled horn&quot;, &amp;quot;horn",    0, 0, 0, 0,  5, 18,  15, BONE, CLR_WHITE),</span>
  636. TOOL("frost horn", "horn",      0, 0, 1, 1,  2, 18,  50, BONE, CLR_WHITE),
+
  <span id="line636">636. TOOL("frost horn", "horn",      0, 0, 1, 1,  2, 18,  50, BONE, CLR_WHITE),</span>
  637. TOOL("fire horn", "horn",      0, 0, 1, 1,  2, 18,  50, BONE, CLR_WHITE),
+
  <span id="line637">637. TOOL("fire horn", "horn",      0, 0, 1, 1,  2, 18,  50, BONE, CLR_WHITE),</span>
  638. TOOL("horn of plenty", "horn",  0, 0, 1, 1,  2, 18,  50, BONE, CLR_WHITE),
+
  <span id="line638">638. TOOL("horn of plenty", "horn",  0, 0, 1, 1,  2, 18,  50, BONE, CLR_WHITE),</span>
  639. TOOL("wooden harp", "harp",    0, 0, 0, 0,  4, 30,  50, WOOD, HI_WOOD),
+
  <span id="line639">639. TOOL("wooden harp", "harp",    0, 0, 0, 0,  4, 30,  50, WOOD, HI_WOOD),</span>
  640. TOOL("magic harp", "harp",      0, 0, 1, 1,  2, 30,  50, WOOD, HI_WOOD),
+
  <span id="line640">640. TOOL("magic harp", "harp",      0, 0, 1, 1,  2, 30,  50, WOOD, HI_WOOD),</span>
  641. TOOL("bell", (char *)0,        1, 0, 0, 0,  2, 30,  50, COPPER, HI_COPPER),
+
  <span id="line641">641. TOOL("bell", (char *)0,        1, 0, 0, 0,  2, 30,  50, COPPER, HI_COPPER),</span>
  642. TOOL("bugle", (char *)0,        1, 0, 0, 0,  4, 10,  15, COPPER, HI_COPPER),
+
  <span id="line642">642. TOOL("bugle", (char *)0,        1, 0, 0, 0,  4, 10,  15, COPPER, HI_COPPER),</span>
  643. TOOL("leather drum", "drum",    0, 0, 0, 0,  4, 25,  25, LEATHER, HI_LEATHER),
+
  <span id="line643">643. TOOL("leather drum", "drum",    0, 0, 0, 0,  4, 25,  25, LEATHER, HI_LEATHER),</span>
  644. TOOL("drum of earthquake", "drum",
+
  <span id="line644">644. TOOL("drum of earthquake", "drum",</span>
  645. 0, 0, 1, 1,  2, 25,  25, LEATHER, HI_LEATHER),
+
  <span id="line645">645.   0, 0, 1, 1,  2, 25,  25, LEATHER, HI_LEATHER),</span>
  646. /* tools useful as weapons */
+
  <span id="line646">646. /* tools useful as weapons */</span>
  647. WEPTOOL("pick-axe", (char *)0,
+
  <span id="line647">647. WEPTOOL("pick-axe", (char *)0,</span>
  648.  1, 0, 0, 20, 100,  50, 6,  3, WHACK,  P_PICK_AXE, IRON, HI_METAL),
+
  <span id="line648">648.  1, 0, 0, 20, 100,  50, 6,  3, WHACK,  P_PICK_AXE, IRON, HI_METAL),</span>
  649. WEPTOOL("grappling hook", "iron hook",
+
  <span id="line649">649. WEPTOOL("grappling hook", "iron hook",</span>
  650.  0, 0, 0,  5,  30,  50,  2,  6, WHACK,  P_FLAIL, IRON, HI_METAL),
+
  <span id="line650">650.  0, 0, 0,  5,  30,  50,  2,  6, WHACK,  P_FLAIL, IRON, HI_METAL),</span>
  651. /* 3.4.1: unicorn horn left classified as "magic" */
+
  <span id="line651">651. /* 3.4.1: unicorn horn left classified as "magic" */</span>
  652. WEPTOOL("unicorn horn", (char *)0,
+
  <span id="line652">652. WEPTOOL("unicorn horn", (char *)0,</span>
  653.  1, 1, 1,  0,  20, 100, 12, 12, PIERCE, P_UNICORN_HORN, BONE, CLR_WHITE),
+
  <span id="line653">653.  1, 1, 1,  0,  20, 100, 12, 12, PIERCE, P_UNICORN_HORN, BONE, CLR_WHITE),</span>
  654.  
+
  <span id="line654">654. </span>
  655. /* two special unique artifact "tools" */
+
  <span id="line655">655. /* two special unique artifact "tools" */</span>
  656. OBJECT(OBJ("Candelabrum of Invocation", "candelabrum"),
+
  <span id="line656">656. OBJECT(OBJ("Candelabrum of Invocation", "candelabrum"),</span>
  657. BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,GOLD), 0,
+
  <span id="line657">657. BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,GOLD), 0,</span>
  658. TOOL_CLASS, 0, 0,10, 5000, 0, 0, 0, 0, 200, HI_GOLD),
+
  <span id="line658">658. TOOL_CLASS, 0, 0,10, 5000, 0, 0, 0, 0, 200, HI_GOLD),</span>
  659. OBJECT(OBJ("Bell of Opening", "silver bell"),
+
  <span id="line659">659. OBJECT(OBJ("Bell of Opening", "silver bell"),</span>
  660. BITS(0,0,1,0,1,1,1,1,0,0,0,P_NONE,SILVER), 0,
+
  <span id="line660">660. BITS(0,0,1,0,1,1,1,1,0,0,0,P_NONE,SILVER), 0,</span>
  661. TOOL_CLASS, 0, 0,10, 5000, 0, 0, 0, 0, 50, HI_SILVER),
+
  <span id="line661">661. TOOL_CLASS, 0, 0,10, 5000, 0, 0, 0, 0, 50, HI_SILVER),</span>
  662. #undef TOOL
+
  <span id="line662">662. #undef TOOL</span>
  663. #undef WEPTOOL
+
  <span id="line663">663. #undef WEPTOOL</span>
  664.  
+
  <span id="line664">664. </span>
 
=== Comestibles ===
 
=== Comestibles ===
  
  665. /* Comestibles ... */
+
  <span id="line665">665. /* Comestibles ... */</span>
  666. #define FOOD(name,prob,delay,wt,unk,tin,nutrition,color) OBJECT( \
+
  <span id="line666">666. #define FOOD(name,prob,delay,wt,unk,tin,nutrition,color) OBJECT( \</span>
  667. OBJ(name,(char *)0), BITS(1,1,unk,0,0,0,0,0,0,0,0,P_NONE,tin), 0, \
+
  <span id="line667">667. OBJ(name,(char *)0), BITS(1,1,unk,0,0,0,0,0,0,0,0,P_NONE,tin), 0, \</span>
  668. FOOD_CLASS, prob, delay, \
+
  <span id="line668">668. FOOD_CLASS, prob, delay, \</span>
  669. wt, nutrition/20 + 5, 0, 0, 0, 0, nutrition, color )
+
  <span id="line669">669. wt, nutrition/20 + 5, 0, 0, 0, 0, nutrition, color )</span>
  670. /* all types of food (except tins & corpses) must have a delay of at least 1. */
+
  <span id="line670">670. /* all types of food (except tins & corpses) must have a delay of at least 1. */</span>
  671. /* delay on corpses is computed and is weight dependant */
+
  <span id="line671">671. /* delay on corpses is computed and is weight dependant */</span>
  672. /* dog eats foods 0-4 but prefers tripe rations above all others */
+
  <span id="line672">672. /* dog eats foods 0-4 but prefers tripe rations above all others */</span>
  673. /* fortune cookies can be read */
+
  <span id="line673">673. /* fortune cookies can be read */</span>
  674. /* carrots improve your vision */
+
  <span id="line674">674. /* carrots improve your vision */</span>
  675. /* +0 tins contain monster meat */
+
  <span id="line675">675. /* +0 tins contain monster meat */</span>
  676. /* +1 tins (of spinach) make you stronger (like Popeye) */
+
  <span id="line676">676. /* +1 tins (of spinach) make you stronger (like Popeye) */</span>
  677. /* food CORPSE is a cadaver of some type */
+
  <span id="line677">677. /* food CORPSE is a cadaver of some type */</span>
  678. /* meatballs/sticks/rings are only created from objects via stone to flesh */
+
  <span id="line678">678. /* meatballs/sticks/rings are only created from objects via stone to flesh */</span>
  679.  
+
  <span id="line679">679. </span>
  680. /* meat */
+
  <span id="line680">680. /* meat */</span>
  681. FOOD("tripe ration",      140, 2, 10, 0, FLESH, 200, CLR_BROWN),
+
  <span id="line681">681. FOOD("tripe ration",      140, 2, 10, 0, FLESH, 200, CLR_BROWN),</span>
  682. FOOD("corpse",              0, 1,  0, 0, FLESH,  0, CLR_BROWN),
+
  <span id="line682">682. FOOD("corpse",              0, 1,  0, 0, FLESH,  0, CLR_BROWN),</span>
  683. FOOD("egg",                85, 1,  1, 1, FLESH,  80, CLR_WHITE),
+
  <span id="line683">683. FOOD("egg",                85, 1,  1, 1, FLESH,  80, CLR_WHITE),</span>
  684. FOOD("meatball",            0, 1,  1, 0, FLESH,  5, CLR_BROWN),
+
  <span id="line684">684. FOOD("meatball",            0, 1,  1, 0, FLESH,  5, CLR_BROWN),</span>
  685. FOOD("meat stick",          0, 1,  1, 0, FLESH,  5, CLR_BROWN),
+
  <span id="line685">685. FOOD("meat stick",          0, 1,  1, 0, FLESH,  5, CLR_BROWN),</span>
  686. FOOD("huge chunk of meat",  0,20,400, 0, FLESH,2000, CLR_BROWN),
+
  <span id="line686">686. FOOD("huge chunk of meat",  0,20,400, 0, FLESH,2000, CLR_BROWN),</span>
  687. /* special case because it's not mergable */
+
  <span id="line687">687. /* special case because it's not mergable */</span>
  688. OBJECT(OBJ("meat ring", (char *)0),
+
  <span id="line688">688. OBJECT(OBJ("meat ring", (char *)0),</span>
  689.    BITS(1,0,0,0,0,0,0,0,0,0,0,0,FLESH),
+
  <span id="line689">689.    BITS(1,0,0,0,0,0,0,0,0,0,0,0,FLESH),</span>
  690.    0, FOOD_CLASS, 0, 1, 5, 1, 0, 0, 0, 0, 5, CLR_BROWN),
+
  <span id="line690">690.    0, FOOD_CLASS, 0, 1, 5, 1, 0, 0, 0, 0, 5, CLR_BROWN),</span>
  691.  
+
  <span id="line691">691. </span>
  692. /* fruits & veggies */
+
  <span id="line692">692. /* fruits & veggies */</span>
  693. FOOD("kelp frond",          0, 1,  1, 0, VEGGY,  30, CLR_GREEN),
+
  <span id="line693">693. FOOD("kelp frond",          0, 1,  1, 0, VEGGY,  30, CLR_GREEN),</span>
  694. FOOD("eucalyptus leaf",      3, 1,  1, 0, VEGGY,  30, CLR_GREEN),
+
  <span id="line694">694. FOOD("eucalyptus leaf",      3, 1,  1, 0, VEGGY,  30, CLR_GREEN),</span>
  695. FOOD("apple",              15, 1,  2, 0, VEGGY,  50, CLR_RED),
+
  <span id="line695">695. FOOD("apple",              15, 1,  2, 0, VEGGY,  50, CLR_RED),</span>
  696. FOOD("orange",              10, 1,  2, 0, VEGGY,  80, CLR_ORANGE),
+
  <span id="line696">696. FOOD("orange",              10, 1,  2, 0, VEGGY,  80, CLR_ORANGE),</span>
  697. FOOD("pear",                10, 1,  2, 0, VEGGY,  50, CLR_BRIGHT_GREEN),
+
  <span id="line697">697. FOOD("pear",                10, 1,  2, 0, VEGGY,  50, CLR_BRIGHT_GREEN),</span>
  698. FOOD("melon",              10, 1,  5, 0, VEGGY, 100, CLR_BRIGHT_GREEN),
+
  <span id="line698">698. FOOD("melon",              10, 1,  5, 0, VEGGY, 100, CLR_BRIGHT_GREEN),</span>
  699. FOOD("banana",              10, 1,  2, 0, VEGGY,  80, CLR_YELLOW),
+
  <span id="line699">699. FOOD("banana",              10, 1,  2, 0, VEGGY,  80, CLR_YELLOW),</span>
  700. FOOD("carrot",              15, 1,  2, 0, VEGGY,  50, CLR_ORANGE),
+
  <span id="line700">700. FOOD("carrot",              15, 1,  2, 0, VEGGY,  50, CLR_ORANGE),</span>
  701. FOOD("sprig of wolfsbane",  7, 1,  1, 0, VEGGY,  40, CLR_GREEN),
+
  <span id="line701">701. FOOD("sprig of wolfsbane",  7, 1,  1, 0, VEGGY,  40, CLR_GREEN),</span>
  702. FOOD("clove of garlic",      7, 1,  1, 0, VEGGY,  40, CLR_WHITE),
+
  <span id="line702">702. FOOD("clove of garlic",      7, 1,  1, 0, VEGGY,  40, CLR_WHITE),</span>
  703. FOOD("slime mold",          75, 1,  5, 0, VEGGY, 250, HI_ORGANIC),
+
  <span id="line703">703. FOOD("slime mold",          75, 1,  5, 0, VEGGY, 250, HI_ORGANIC),</span>
  704.  
+
  <span id="line704">704. </span>
  705. /* people food */
+
  <span id="line705">705. /* people food */</span>
  706. FOOD("lump of royal jelly",  0, 1,  2, 0, VEGGY, 200, CLR_YELLOW),
+
  <span id="line706">706. FOOD("lump of royal jelly",  0, 1,  2, 0, VEGGY, 200, CLR_YELLOW),</span>
  707. FOOD("cream pie",          25, 1, 10, 0, VEGGY, 100, CLR_WHITE),
+
  <span id="line707">707. FOOD("cream pie",          25, 1, 10, 0, VEGGY, 100, CLR_WHITE),</span>
  708. FOOD("candy bar",          13, 1,  2, 0, VEGGY, 100, CLR_BROWN),
+
  <span id="line708">708. FOOD("candy bar",          13, 1,  2, 0, VEGGY, 100, CLR_BROWN),</span>
  709. FOOD("fortune cookie",      55, 1,  1, 0, VEGGY,  40, CLR_YELLOW),
+
  <span id="line709">709. FOOD("fortune cookie",      55, 1,  1, 0, VEGGY,  40, CLR_YELLOW),</span>
  710. FOOD("pancake",            25, 2,  2, 0, VEGGY, 200, CLR_YELLOW),
+
  <span id="line710">710. FOOD("pancake",            25, 2,  2, 0, VEGGY, 200, CLR_YELLOW),</span>
  711. FOOD("lembas wafer",        20, 2,  5, 0, VEGGY, 800, CLR_WHITE),
+
  <span id="line711">711. FOOD("lembas wafer",        20, 2,  5, 0, VEGGY, 800, CLR_WHITE),</span>
  712. FOOD("cram ration",        20, 3, 15, 0, VEGGY, 600, HI_ORGANIC),
+
  <span id="line712">712. FOOD("cram ration",        20, 3, 15, 0, VEGGY, 600, HI_ORGANIC),</span>
  713. FOOD("food ration",        380, 5, 20, 0, VEGGY, 800, HI_ORGANIC),
+
  <span id="line713">713. FOOD("food ration",        380, 5, 20, 0, VEGGY, 800, HI_ORGANIC),</span>
  714. FOOD("K-ration",            0, 1, 10, 0, VEGGY, 400, HI_ORGANIC),
+
  <span id="line714">714. FOOD("K-ration",            0, 1, 10, 0, VEGGY, 400, HI_ORGANIC),</span>
  715. FOOD("C-ration",            0, 1, 10, 0, VEGGY, 300, HI_ORGANIC),
+
  <span id="line715">715. FOOD("C-ration",            0, 1, 10, 0, VEGGY, 300, HI_ORGANIC),</span>
  716. FOOD("tin",                75, 0, 10, 1, METAL,  0, HI_METAL),
+
  <span id="line716">716. FOOD("tin",                75, 0, 10, 1, METAL,  0, HI_METAL),</span>
  717. #undef FOOD
+
  <span id="line717">717. #undef FOOD</span>
  718.  
+
  <span id="line718">718. </span>
 
=== Potions ===
 
=== Potions ===
  
  719. /* potions ... */
+
  <span id="line719">719. /* potions ... */</span>
  720. #define POTION(name,desc,mgc,power,prob,cost,color) OBJECT( \
+
  <span id="line720">720. #define POTION(name,desc,mgc,power,prob,cost,color) OBJECT( \</span>
  721. OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,0,0,0,P_NONE,GLASS), power, \
+
  <span id="line721">721. OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,0,0,0,P_NONE,GLASS), power, \</span>
  722. POTION_CLASS, prob, 0, 20, cost, 0, 0, 0, 0, 10, color )
+
  <span id="line722">722. POTION_CLASS, prob, 0, 20, cost, 0, 0, 0, 0, 10, color )</span>
  723. POTION("gain ability", "ruby",          1, 0,          42, 300, CLR_RED),
+
  <span id="line723">723. POTION("gain ability", "ruby",          1, 0,          42, 300, CLR_RED),</span>
  724. POTION("restore ability", "pink",      1, 0,          40, 100, CLR_BRIGHT_MAGENTA),
+
  <span id="line724">724. POTION("restore ability", "pink",      1, 0,          40, 100, CLR_BRIGHT_MAGENTA),</span>
  725. POTION("confusion", "orange",          1, CONFUSION,  42, 100, CLR_ORANGE),
+
  <span id="line725">725. POTION("confusion", "orange",          1, CONFUSION,  42, 100, CLR_ORANGE),</span>
  726. POTION("blindness", "yellow",          1, BLINDED,    40, 150, CLR_YELLOW),
+
  <span id="line726">726. POTION("blindness", "yellow",          1, BLINDED,    40, 150, CLR_YELLOW),</span>
  727. POTION("paralysis", "emerald",          1, 0,          42, 300, CLR_BRIGHT_GREEN),
+
  <span id="line727">727. POTION("paralysis", "emerald",          1, 0,          42, 300, CLR_BRIGHT_GREEN),</span>
  728. POTION("speed", "dark green",          1, FAST,      42, 200, CLR_GREEN),
+
  <span id="line728">728. POTION("speed", "dark green",          1, FAST,      42, 200, CLR_GREEN),</span>
  729. POTION("levitation", "cyan",            1, LEVITATION, 42, 200, CLR_CYAN),
+
  <span id="line729">729. POTION("levitation", "cyan",            1, LEVITATION, 42, 200, CLR_CYAN),</span>
  730. POTION("hallucination", "sky blue",    1, HALLUC,    40, 100, CLR_CYAN),
+
  <span id="line730">730. POTION("hallucination", "sky blue",    1, HALLUC,    40, 100, CLR_CYAN),</span>
  731. POTION("invisibility", "brilliant blue",1, INVIS,      40, 150, CLR_BRIGHT_BLUE),
+
  <span id="line731">731. POTION("invisibility", "brilliant blue",1, INVIS,      40, 150, CLR_BRIGHT_BLUE),</span>
  732. POTION("see invisible", "magenta",      1, SEE_INVIS,  42,  50, CLR_MAGENTA),
+
  <span id="line732">732. POTION("see invisible", "magenta",      1, SEE_INVIS,  42,  50, CLR_MAGENTA),</span>
  733. POTION("healing", "purple-red",        1, 0,          57, 100, CLR_MAGENTA),
+
  <span id="line733">733. POTION("healing", "purple-red",        1, 0,          57, 100, CLR_MAGENTA),</span>
  734. POTION("extra healing", "puce",        1, 0,          47, 100, CLR_RED),
+
  <span id="line734">734. POTION("extra healing", "puce",        1, 0,          47, 100, CLR_RED),</span>
  735. POTION("gain level", "milky",          1, 0,          20, 300, CLR_WHITE),
+
  <span id="line735">735. POTION("gain level", "milky",          1, 0,          20, 300, CLR_WHITE),</span>
  736. POTION("enlightenment", "swirly",      1, 0,          20, 200, CLR_BROWN),
+
  <span id="line736">736. POTION("enlightenment", "swirly",      1, 0,          20, 200, CLR_BROWN),</span>
  737. POTION("monster detection", "bubbly",  1, 0,          40, 150, CLR_WHITE),
+
  <span id="line737">737. POTION("monster detection", "bubbly",  1, 0,          40, 150, CLR_WHITE),</span>
  738. POTION("object detection", "smoky",    1, 0,          42, 150, CLR_GRAY),
+
  <span id="line738">738. POTION("object detection", "smoky",    1, 0,          42, 150, CLR_GRAY),</span>
  739. POTION("gain energy", "cloudy",        1, 0,          42, 150, CLR_WHITE),
+
  <span id="line739">739. POTION("gain energy", "cloudy",        1, 0,          42, 150, CLR_WHITE),</span>
  740. POTION("sleeping",  "effervescent",    1, 0,          42, 100, CLR_GRAY),
+
  <span id="line740">740. POTION("sleeping",  "effervescent",    1, 0,          42, 100, CLR_GRAY),</span>
  741. POTION("full healing",  "black",        1, 0,          10, 200, CLR_BLACK),
+
  <span id="line741">741. POTION("full healing",  "black",        1, 0,          10, 200, CLR_BLACK),</span>
  742. POTION("polymorph", "golden",          1, 0,          10, 200, CLR_YELLOW),
+
  <span id="line742">742. POTION("polymorph", "golden",          1, 0,          10, 200, CLR_YELLOW),</span>
  743. POTION("booze", "brown",                0, 0,          42,  50, CLR_BROWN),
+
  <span id="line743">743. POTION("booze", "brown",                0, 0,          42,  50, CLR_BROWN),</span>
  744. POTION("sickness", "fizzy",            0, 0,          42,  50, CLR_CYAN),
+
  <span id="line744">744. POTION("sickness", "fizzy",            0, 0,          42,  50, CLR_CYAN),</span>
  745. POTION("fruit juice", "dark",          0, 0,          42,  50, CLR_BLACK),
+
  <span id="line745">745. POTION("fruit juice", "dark",          0, 0,          42,  50, CLR_BLACK),</span>
  746. POTION("acid", "white",                0, 0,          10, 250, CLR_WHITE),
+
  <span id="line746">746. POTION("acid", "white",                0, 0,          10, 250, CLR_WHITE),</span>
  747. POTION("oil", "murky",                  0, 0,          30, 250, CLR_BROWN),
+
  <span id="line747">747. POTION("oil", "murky",                  0, 0,          30, 250, CLR_BROWN),</span>
  748. POTION("water", "clear",                0, 0,          92, 100, CLR_CYAN),
+
  <span id="line748">748. POTION("water", "clear",                0, 0,          92, 100, CLR_CYAN),</span>
  749. #undef POTION
+
  <span id="line749">749. #undef POTION</span>
  750.  
+
  <span id="line750">750. </span>
 
=== Scrolls ===
 
=== Scrolls ===
  
  751. /* scrolls ... */
+
  <span id="line751">751. /* scrolls ... */</span>
  752. #define SCROLL(name,text,mgc,prob,cost) OBJECT( \
+
  <span id="line752">752. #define SCROLL(name,text,mgc,prob,cost) OBJECT( \</span>
  753. OBJ(name,text), BITS(0,1,0,0,mgc,0,0,0,0,0,0,P_NONE,PAPER), 0, \
+
  <span id="line753">753. OBJ(name,text), BITS(0,1,0,0,mgc,0,0,0,0,0,0,P_NONE,PAPER), 0, \</span>
  754. SCROLL_CLASS, prob, 0, 5, cost, 0, 0, 0, 0, 6, HI_PAPER )
+
  <span id="line754">754. SCROLL_CLASS, prob, 0, 5, cost, 0, 0, 0, 0, 6, HI_PAPER )</span>
  755.  SCROLL("enchant armor",        "ZELGO MER",            1,  63,  80),
+
  <span id="line755">755.  SCROLL("enchant armor",        "ZELGO MER",            1,  63,  80),</span>
  756.  SCROLL("destroy armor",        "JUYED AWK YACC",      1,  45, 100),
+
  <span id="line756">756.  SCROLL("destroy armor",        "JUYED AWK YACC",      1,  45, 100),</span>
  757.  SCROLL("confuse monster",      "NR 9",                1,  53, 100),
+
  <span id="line757">757.  SCROLL("confuse monster",      "NR 9",                1,  53, 100),</span>
  758.  SCROLL("scare monster",        "XIXAXA XOXAXA XUXAXA", 1,  35, 100),
+
  <span id="line758">758.  SCROLL("scare monster",        "XIXAXA XOXAXA XUXAXA", 1,  35, 100),</span>
  759.  SCROLL("remove curse",          "PRATYAVAYAH",          1,  65,  80),
+
  <span id="line759">759.  SCROLL("remove curse",          "PRATYAVAYAH",          1,  65,  80),</span>
  760.  SCROLL("enchant weapon",        "DAIYEN FOOELS",        1,  80,  60),
+
  <span id="line760">760.  SCROLL("enchant weapon",        "DAIYEN FOOELS",        1,  80,  60),</span>
  761.  SCROLL("create monster",        "LEP GEX VEN ZEA",      1,  45, 200),
+
  <span id="line761">761.  SCROLL("create monster",        "LEP GEX VEN ZEA",      1,  45, 200),</span>
  762.  SCROLL("taming",                "PRIRUTSENIE",          1,  15, 200),
+
  <span id="line762">762.  SCROLL("taming",                "PRIRUTSENIE",          1,  15, 200),</span>
  763.  SCROLL("genocide",              "ELBIB YLOH",          1,  15, 300),
+
  <span id="line763">763.  SCROLL("genocide",              "ELBIB YLOH",          1,  15, 300),</span>
  764.  SCROLL("light",                "VERR YED HORRE",      1,  90,  50),
+
  <span id="line764">764.  SCROLL("light",                "VERR YED HORRE",      1,  90,  50),</span>
  765.  SCROLL("teleportation",        "VENZAR BORGAVVE",      1,  55, 100),
+
  <span id="line765">765.  SCROLL("teleportation",        "VENZAR BORGAVVE",      1,  55, 100),</span>
  766.  SCROLL("gold detection",        "THARR",                1,  33, 100),
+
  <span id="line766">766.  SCROLL("gold detection",        "THARR",                1,  33, 100),</span>
  767.  SCROLL("food detection",        "YUM YUM",              1,  25, 100),
+
  <span id="line767">767.  SCROLL("food detection",        "YUM YUM",              1,  25, 100),</span>
  768.  SCROLL("identify",              "KERNOD WEL",          1, 180,  20),
+
  <span id="line768">768.  SCROLL("identify",              "KERNOD WEL",          1, 180,  20),</span>
  769.  SCROLL("magic mapping",        "ELAM EBOW",            1,  45, 100),
+
  <span id="line769">769.  SCROLL("magic mapping",        "ELAM EBOW",            1,  45, 100),</span>
  770.  SCROLL("amnesia",              "DUAM XNAHT",          1,  35, 200),
+
  <span id="line770">770.  SCROLL("amnesia",              "DUAM XNAHT",          1,  35, 200),</span>
  771.  SCROLL("fire",                  "ANDOVA BEGARIN",      1,  30, 100),
+
  <span id="line771">771.  SCROLL("fire",                  "ANDOVA BEGARIN",      1,  30, 100),</span>
  772.  SCROLL("earth",                "KIRJE",                1,  18, 200),
+
  <span id="line772">772.  SCROLL("earth",                "KIRJE",                1,  18, 200),</span>
  773.  SCROLL("punishment",            "VE FORBRYDERNE",      1,  15, 300),
+
  <span id="line773">773.  SCROLL("punishment",            "VE FORBRYDERNE",      1,  15, 300),</span>
  774.  SCROLL("charging",              "HACKEM MUCHE",        1,  15, 300),
+
  <span id="line774">774.  SCROLL("charging",              "HACKEM MUCHE",        1,  15, 300),</span>
  775.  SCROLL("stinking cloud", "VELOX NEB",            1,  15, 300),
+
  <span id="line775">775.  SCROLL("stinking cloud", "VELOX NEB",            1,  15, 300),</span>
  776.  SCROLL((char *)0, "FOOBIE BLETCH",        1,  0, 100),
+
  <span id="line776">776.  SCROLL((char *)0,   "FOOBIE BLETCH",        1,  0, 100),</span>
  777.  SCROLL((char *)0, "TEMOV",                1,  0, 100),
+
  <span id="line777">777.  SCROLL((char *)0,   "TEMOV",                1,  0, 100),</span>
  778.  SCROLL((char *)0, "GARVEN DEH",          1,  0, 100),
+
  <span id="line778">778.  SCROLL((char *)0,   "GARVEN DEH",          1,  0, 100),</span>
  779.  SCROLL((char *)0, "READ ME",              1,  0, 100),
+
  <span id="line779">779.  SCROLL((char *)0,   "READ ME",              1,  0, 100),</span>
  780.  /* these must come last because they have special descriptions */
+
  <span id="line780">780.  /* these must come last because they have special descriptions */</span>
  781. #ifdef MAIL
+
  <span id="line781">781. #ifdef MAIL</span>
  782.  SCROLL("mail",                  "stamped",          0,  0,  0),
+
  <span id="line782">782.  SCROLL("mail",                  "stamped",          0,  0,  0),</span>
  783. #endif
+
  <span id="line783">783. #endif</span>
  784.  SCROLL("blank paper",          "unlabeled",        0,  28,  60),
+
  <span id="line784">784.  SCROLL("blank paper",          "unlabeled",        0,  28,  60),</span>
  785. #undef SCROLL
+
  <span id="line785">785. #undef SCROLL</span>
  786.  
+
  <span id="line786">786. </span>
 
=== Spellbooks ===
 
=== Spellbooks ===
  
  787. /* spellbooks ... */
+
  <span id="line787">787. /* spellbooks ... */</span>
  788. #define SPELL(name,desc,sub,prob,delay,level,mgc,dir,color) OBJECT( \
+
  <span id="line788">788. #define SPELL(name,desc,sub,prob,delay,level,mgc,dir,color) OBJECT( \</span>
  789. OBJ(name,desc), BITS(0,0,0,0,mgc,0,0,0,0,0,dir,sub,PAPER), 0, \
+
  <span id="line789">789. OBJ(name,desc), BITS(0,0,0,0,mgc,0,0,0,0,0,dir,sub,PAPER), 0, \</span>
  790. SPBOOK_CLASS, prob, delay, \
+
  <span id="line790">790. SPBOOK_CLASS, prob, delay, \</span>
  791. 50, level*100, 0, 0, 0, level, 20, color )
+
  <span id="line791">791. 50, level*100, 0, 0, 0, level, 20, color )</span>
  792. SPELL("dig",            "parchment",  P_MATTER_SPELL, 20,  6, 5, 1, RAY,      HI_PAPER),
+
  <span id="line792">792. SPELL("dig",            "parchment",  P_MATTER_SPELL, 20,  6, 5, 1, RAY,      HI_PAPER),</span>
  793. SPELL("magic missile",  "vellum",      P_ATTACK_SPELL, 45,  2, 2, 1, RAY,      HI_PAPER),
+
  <span id="line793">793. SPELL("magic missile",  "vellum",      P_ATTACK_SPELL, 45,  2, 2, 1, RAY,      HI_PAPER),</span>
  794. SPELL("fireball",        "ragged",      P_ATTACK_SPELL, 20,  4, 4, 1, RAY,      HI_PAPER),
+
  <span id="line794">794. SPELL("fireball",        "ragged",      P_ATTACK_SPELL, 20,  4, 4, 1, RAY,      HI_PAPER),</span>
  795. SPELL("cone of cold",    "dog eared",  P_ATTACK_SPELL, 10,  7, 4, 1, RAY,      HI_PAPER),
+
  <span id="line795">795. SPELL("cone of cold",    "dog eared",  P_ATTACK_SPELL, 10,  7, 4, 1, RAY,      HI_PAPER),</span>
  796. SPELL("sleep",          "mottled",    P_ENCHANTMENT_SPELL, 50,  1, 1, 1, RAY,      HI_PAPER),
+
  <span id="line796">796. SPELL("sleep",          "mottled",    P_ENCHANTMENT_SPELL, 50,  1, 1, 1, RAY,      HI_PAPER),</span>
  797. SPELL("finger of death", "stained",    P_ATTACK_SPELL,  5, 10, 7, 1, RAY,      HI_PAPER),
+
  <span id="line797">797. SPELL("finger of death", "stained",    P_ATTACK_SPELL,  5, 10, 7, 1, RAY,      HI_PAPER),</span>
  798. SPELL("light",          "cloth",      P_DIVINATION_SPELL, 45,  1, 1, 1, NODIR,    HI_CLOTH),
+
  <span id="line798">798. SPELL("light",          "cloth",      P_DIVINATION_SPELL, 45,  1, 1, 1, NODIR,    HI_CLOTH),</span>
  799. SPELL("detect monsters", "leather",    P_DIVINATION_SPELL, 43,  1, 1, 1, NODIR,    HI_LEATHER),
+
  <span id="line799">799. SPELL("detect monsters", "leather",    P_DIVINATION_SPELL, 43,  1, 1, 1, NODIR,    HI_LEATHER),</span>
  800. SPELL("healing",        "white",      P_HEALING_SPELL, 40,  2, 1, 1, IMMEDIATE, CLR_WHITE),
+
  <span id="line800">800. SPELL("healing",        "white",      P_HEALING_SPELL, 40,  2, 1, 1, IMMEDIATE, CLR_WHITE),</span>
  801. SPELL("knock",          "pink",        P_MATTER_SPELL, 35,  1, 1, 1, IMMEDIATE, CLR_BRIGHT_MAGENTA),
+
  <span id="line801">801. SPELL("knock",          "pink",        P_MATTER_SPELL, 35,  1, 1, 1, IMMEDIATE, CLR_BRIGHT_MAGENTA),</span>
  802. SPELL("force bolt",      "red",        P_ATTACK_SPELL, 35,  2, 1, 1, IMMEDIATE, CLR_RED),
+
  <span id="line802">802. SPELL("force bolt",      "red",        P_ATTACK_SPELL, 35,  2, 1, 1, IMMEDIATE, CLR_RED),</span>
  803. SPELL("confuse monster", "orange",      P_ENCHANTMENT_SPELL, 30,  2, 2, 1, IMMEDIATE, CLR_ORANGE),
+
  <span id="line803">803. SPELL("confuse monster", "orange",      P_ENCHANTMENT_SPELL, 30,  2, 2, 1, IMMEDIATE, CLR_ORANGE),</span>
  804. SPELL("cure blindness",  "yellow",      P_HEALING_SPELL, 25,  2, 2, 1, IMMEDIATE, CLR_YELLOW),
+
  <span id="line804">804. SPELL("cure blindness",  "yellow",      P_HEALING_SPELL, 25,  2, 2, 1, IMMEDIATE, CLR_YELLOW),</span>
  805. SPELL("drain life",      "velvet",      P_ATTACK_SPELL, 10,  2, 2, 1, IMMEDIATE, CLR_MAGENTA),
+
  <span id="line805">805. SPELL("drain life",      "velvet",      P_ATTACK_SPELL, 10,  2, 2, 1, IMMEDIATE, CLR_MAGENTA),</span>
  806. SPELL("slow monster",    "light green", P_ENCHANTMENT_SPELL, 30,  2, 2, 1, IMMEDIATE, CLR_BRIGHT_GREEN),
+
  <span id="line806">806. SPELL("slow monster",    "light green", P_ENCHANTMENT_SPELL, 30,  2, 2, 1, IMMEDIATE, CLR_BRIGHT_GREEN),</span>
  807. SPELL("wizard lock",    "dark green",  P_MATTER_SPELL, 30,  3, 2, 1, IMMEDIATE, CLR_GREEN),
+
  <span id="line807">807. SPELL("wizard lock",    "dark green",  P_MATTER_SPELL, 30,  3, 2, 1, IMMEDIATE, CLR_GREEN),</span>
  808. SPELL("create monster",  "turquoise",  P_CLERIC_SPELL, 35,  3, 2, 1, NODIR,    CLR_BRIGHT_CYAN),
+
  <span id="line808">808. SPELL("create monster",  "turquoise",  P_CLERIC_SPELL, 35,  3, 2, 1, NODIR,    CLR_BRIGHT_CYAN),</span>
  809. SPELL("detect food",    "cyan",        P_DIVINATION_SPELL, 30,  3, 2, 1, NODIR,    CLR_CYAN),
+
  <span id="line809">809. SPELL("detect food",    "cyan",        P_DIVINATION_SPELL, 30,  3, 2, 1, NODIR,    CLR_CYAN),</span>
  810. SPELL("cause fear",      "light blue",  P_ENCHANTMENT_SPELL, 25,  3, 3, 1, NODIR,    CLR_BRIGHT_BLUE),
+
  <span id="line810">810. SPELL("cause fear",      "light blue",  P_ENCHANTMENT_SPELL, 25,  3, 3, 1, NODIR,    CLR_BRIGHT_BLUE),</span>
  811. SPELL("clairvoyance",    "dark blue",  P_DIVINATION_SPELL, 15,  3, 3, 1, NODIR,    CLR_BLUE),
+
  <span id="line811">811. SPELL("clairvoyance",    "dark blue",  P_DIVINATION_SPELL, 15,  3, 3, 1, NODIR,    CLR_BLUE),</span>
  812. SPELL("cure sickness",  "indigo",      P_HEALING_SPELL, 32,  3, 3, 1, NODIR,    CLR_BLUE),
+
  <span id="line812">812. SPELL("cure sickness",  "indigo",      P_HEALING_SPELL, 32,  3, 3, 1, NODIR,    CLR_BLUE),</span>
  813. SPELL("charm monster",  "magenta",    P_ENCHANTMENT_SPELL, 20,  3, 3, 1, IMMEDIATE, CLR_MAGENTA),
+
  <span id="line813">813. SPELL("charm monster",  "magenta",    P_ENCHANTMENT_SPELL, 20,  3, 3, 1, IMMEDIATE, CLR_MAGENTA),</span>
  814. SPELL("haste self",      "purple",      P_ESCAPE_SPELL, 33,  4, 3, 1, NODIR,    CLR_MAGENTA),
+
  <span id="line814">814. SPELL("haste self",      "purple",      P_ESCAPE_SPELL, 33,  4, 3, 1, NODIR,    CLR_MAGENTA),</span>
  815. SPELL("detect unseen",  "violet",      P_DIVINATION_SPELL, 20,  4, 3, 1, NODIR,    CLR_MAGENTA),
+
  <span id="line815">815. SPELL("detect unseen",  "violet",      P_DIVINATION_SPELL, 20,  4, 3, 1, NODIR,    CLR_MAGENTA),</span>
  816. SPELL("levitation",      "tan",        P_ESCAPE_SPELL, 20,  4, 4, 1, NODIR,    CLR_BROWN),
+
  <span id="line816">816. SPELL("levitation",      "tan",        P_ESCAPE_SPELL, 20,  4, 4, 1, NODIR,    CLR_BROWN),</span>
  817. SPELL("extra healing",  "plaid",      P_HEALING_SPELL, 27,  5, 3, 1, IMMEDIATE, CLR_GREEN),
+
  <span id="line817">817. SPELL("extra healing",  "plaid",      P_HEALING_SPELL, 27,  5, 3, 1, IMMEDIATE, CLR_GREEN),</span>
  818. SPELL("restore ability", "light brown", P_HEALING_SPELL, 25,  5, 4, 1, NODIR,    CLR_BROWN),
+
  <span id="line818">818. SPELL("restore ability", "light brown", P_HEALING_SPELL, 25,  5, 4, 1, NODIR,    CLR_BROWN),</span>
  819. SPELL("invisibility",    "dark brown",  P_ESCAPE_SPELL, 25,  5, 4, 1, NODIR,    CLR_BROWN),
+
  <span id="line819">819. SPELL("invisibility",    "dark brown",  P_ESCAPE_SPELL, 25,  5, 4, 1, NODIR,    CLR_BROWN),</span>
  820. SPELL("detect treasure", "gray",        P_DIVINATION_SPELL, 20,  5, 4, 1, NODIR,    CLR_GRAY),
+
  <span id="line820">820. SPELL("detect treasure", "gray",        P_DIVINATION_SPELL, 20,  5, 4, 1, NODIR,    CLR_GRAY),</span>
  821. SPELL("remove curse",    "wrinkled",    P_CLERIC_SPELL, 25,  5, 3, 1, NODIR,    HI_PAPER),
+
  <span id="line821">821. SPELL("remove curse",    "wrinkled",    P_CLERIC_SPELL, 25,  5, 3, 1, NODIR,    HI_PAPER),</span>
  822. SPELL("magic mapping",  "dusty",      P_DIVINATION_SPELL, 18,  7, 5, 1, NODIR,    HI_PAPER),
+
  <span id="line822">822. SPELL("magic mapping",  "dusty",      P_DIVINATION_SPELL, 18,  7, 5, 1, NODIR,    HI_PAPER),</span>
  823. SPELL("identify",        "bronze",      P_DIVINATION_SPELL, 20,  6, 3, 1, NODIR,    HI_COPPER),
+
  <span id="line823">823. SPELL("identify",        "bronze",      P_DIVINATION_SPELL, 20,  6, 3, 1, NODIR,    HI_COPPER),</span>
  824. SPELL("turn undead",    "copper",      P_CLERIC_SPELL, 16,  8, 6, 1, IMMEDIATE, HI_COPPER),
+
  <span id="line824">824. SPELL("turn undead",    "copper",      P_CLERIC_SPELL, 16,  8, 6, 1, IMMEDIATE, HI_COPPER),</span>
  825. SPELL("polymorph",      "silver",      P_MATTER_SPELL, 10,  8, 6, 1, IMMEDIATE, HI_SILVER),
+
  <span id="line825">825. SPELL("polymorph",      "silver",      P_MATTER_SPELL, 10,  8, 6, 1, IMMEDIATE, HI_SILVER),</span>
  826. SPELL("teleport away",  "gold",        P_ESCAPE_SPELL, 15,  6, 6, 1, IMMEDIATE, HI_GOLD),
+
  <span id="line826">826. SPELL("teleport away",  "gold",        P_ESCAPE_SPELL, 15,  6, 6, 1, IMMEDIATE, HI_GOLD),</span>
  827. SPELL("create familiar", "glittering",  P_CLERIC_SPELL, 10,  7, 6, 1, NODIR,    CLR_WHITE),
+
  <span id="line827">827. SPELL("create familiar", "glittering",  P_CLERIC_SPELL, 10,  7, 6, 1, NODIR,    CLR_WHITE),</span>
  828. SPELL("cancellation",    "shining",    P_MATTER_SPELL, 15,  8, 7, 1, IMMEDIATE, CLR_WHITE),
+
  <span id="line828">828. SPELL("cancellation",    "shining",    P_MATTER_SPELL, 15,  8, 7, 1, IMMEDIATE, CLR_WHITE),</span>
  829. SPELL("protection",     "dull",        P_CLERIC_SPELL, 18,  3, 1, 1, NODIR,    HI_PAPER),
+
  <span id="line829">829. SPELL("protection",      "dull",        P_CLERIC_SPELL, 18,  3, 1, 1, NODIR,    HI_PAPER),</span>
  830. SPELL("jumping",     "thin",        P_ESCAPE_SPELL, 20,  3, 1, 1, IMMEDIATE, HI_PAPER),
+
  <span id="line830">830. SPELL("jumping",       "thin",        P_ESCAPE_SPELL, 20,  3, 1, 1, IMMEDIATE, HI_PAPER),</span>
  831. SPELL("stone to flesh", "thick",      P_HEALING_SPELL, 15,  1, 3, 1, IMMEDIATE, HI_PAPER),
+
  <span id="line831">831. SPELL("stone to flesh",  "thick",      P_HEALING_SPELL, 15,  1, 3, 1, IMMEDIATE, HI_PAPER),</span>
  832. #if 0 /* DEFERRED */
+
  <span id="line832">832. #if 0 /* DEFERRED */</span>
  833. SPELL("flame sphere",    "canvas",      P_MATTER_SPELL, 20,  2, 1, 1, NODIR, CLR_BROWN),
+
  <span id="line833">833. SPELL("flame sphere",    "canvas",      P_MATTER_SPELL, 20,  2, 1, 1, NODIR, CLR_BROWN),</span>
  834. SPELL("freeze sphere",  "hardcover",  P_MATTER_SPELL, 20,  2, 1, 1, NODIR, CLR_BROWN),
+
  <span id="line834">834. SPELL("freeze sphere",  "hardcover",  P_MATTER_SPELL, 20,  2, 1, 1, NODIR, CLR_BROWN),</span>
  835. #endif
+
  <span id="line835">835. #endif</span>
  836. /* blank spellbook must come last because it retains its description */
+
  <span id="line836">836. /* blank spellbook must come last because it retains its description */</span>
  837. SPELL("blank paper",    "plain",      P_NONE, 18,  0, 0, 0, 0,        HI_PAPER),
+
  <span id="line837">837. SPELL("blank paper",    "plain",      P_NONE, 18,  0, 0, 0, 0,        HI_PAPER),</span>
  838. /* a special, one of a kind, spellbook */
+
  <span id="line838">838. /* a special, one of a kind, spellbook */</span>
  839. OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,PAPER), 0,
+
  <span id="line839">839. OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,PAPER), 0,</span>
  840.  SPBOOK_CLASS, 0, 0,20, 10000, 0, 0, 0, 7, 20, HI_PAPER),
+
  <span id="line840">840.  SPBOOK_CLASS, 0, 0,20, 10000, 0, 0, 0, 7, 20, HI_PAPER),</span>
  841. #undef SPELL
+
  <span id="line841">841. #undef SPELL</span>
  842.  
+
  <span id="line842">842. </span>
 
=== Wands ===
 
=== Wands ===
  
  843. /* wands ... */
+
  <span id="line843">843. /* wands ... */</span>
  844. #define WAND(name,typ,prob,cost,mgc,dir,metal,color) OBJECT( \
+
  <span id="line844">844. #define WAND(name,typ,prob,cost,mgc,dir,metal,color) OBJECT( \</span>
  845. OBJ(name,typ), BITS(0,0,1,0,mgc,1,0,0,0,0,dir,P_NONE,metal), 0, \
+
  <span id="line845">845. OBJ(name,typ), BITS(0,0,1,0,mgc,1,0,0,0,0,dir,P_NONE,metal), 0, \</span>
  846. WAND_CLASS, prob, 0, 7, cost, 0, 0, 0, 0, 30, color )
+
  <span id="line846">846. WAND_CLASS, prob, 0, 7, cost, 0, 0, 0, 0, 30, color )</span>
  847. WAND("light",          "glass",    95, 100, 1, NODIR,    GLASS,    HI_GLASS),
+
  <span id="line847">847. WAND("light",          "glass",    95, 100, 1, NODIR,    GLASS,    HI_GLASS),</span>
  848. WAND("secret door detection", "balsa",
+
  <span id="line848">848. WAND("secret door detection", "balsa",</span>
  849.   50, 150, 1, NODIR,   WOOD,    HI_WOOD),
+
  <span id="line849">849.     50, 150, 1, NODIR,  WOOD,    HI_WOOD),</span>
  850. WAND("enlightenment",  "crystal",  15, 150, 1, NODIR,    GLASS,    HI_GLASS),
+
  <span id="line850">850. WAND("enlightenment",  "crystal",  15, 150, 1, NODIR,    GLASS,    HI_GLASS),</span>
  851. WAND("create monster", "maple",    45, 200, 1, NODIR,    WOOD,    HI_WOOD),
+
  <span id="line851">851. WAND("create monster", "maple",    45, 200, 1, NODIR,    WOOD,    HI_WOOD),</span>
  852. WAND("wishing",        "pine",      5, 500, 1, NODIR,    WOOD,    HI_WOOD),
+
  <span id="line852">852. WAND("wishing",        "pine",      5, 500, 1, NODIR,    WOOD,    HI_WOOD),</span>
  853. WAND("nothing",        "oak",      25, 100, 0, IMMEDIATE, WOOD,    HI_WOOD),
+
  <span id="line853">853. WAND("nothing",        "oak",      25, 100, 0, IMMEDIATE, WOOD,    HI_WOOD),</span>
  854. WAND("striking",      "ebony",    75, 150, 1, IMMEDIATE, WOOD,    HI_WOOD),
+
  <span id="line854">854. WAND("striking",      "ebony",    75, 150, 1, IMMEDIATE, WOOD,    HI_WOOD),</span>
  855. WAND("make invisible", "marble",  45, 150, 1, IMMEDIATE, MINERAL,  HI_MINERAL),
+
  <span id="line855">855. WAND("make invisible", "marble",  45, 150, 1, IMMEDIATE, MINERAL,  HI_MINERAL),</span>
  856. WAND("slow monster",  "tin",      50, 150, 1, IMMEDIATE, METAL,    HI_METAL),
+
  <span id="line856">856. WAND("slow monster",  "tin",      50, 150, 1, IMMEDIATE, METAL,    HI_METAL),</span>
  857. WAND("speed monster",  "brass",    50, 150, 1, IMMEDIATE, COPPER,  HI_COPPER),
+
  <span id="line857">857. WAND("speed monster",  "brass",    50, 150, 1, IMMEDIATE, COPPER,  HI_COPPER),</span>
  858. WAND("undead turning", "copper",  50, 150, 1, IMMEDIATE, COPPER,  HI_COPPER),
+
  <span id="line858">858. WAND("undead turning", "copper",  50, 150, 1, IMMEDIATE, COPPER,  HI_COPPER),</span>
  859. WAND("polymorph",      "silver",  45, 200, 1, IMMEDIATE, SILVER,  HI_SILVER),
+
  <span id="line859">859. WAND("polymorph",      "silver",  45, 200, 1, IMMEDIATE, SILVER,  HI_SILVER),</span>
  860. WAND("cancellation",  "platinum", 45, 200, 1, IMMEDIATE, PLATINUM, CLR_WHITE),
+
  <span id="line860">860. WAND("cancellation",  "platinum", 45, 200, 1, IMMEDIATE, PLATINUM, CLR_WHITE),</span>
  861. WAND("teleportation",  "iridium",  45, 200, 1, IMMEDIATE, METAL,    CLR_BRIGHT_CYAN),
+
  <span id="line861">861. WAND("teleportation",  "iridium",  45, 200, 1, IMMEDIATE, METAL,    CLR_BRIGHT_CYAN),</span>
  862. WAND("opening",        "zinc",    25, 150, 1, IMMEDIATE, METAL,    HI_METAL),
+
  <span id="line862">862. WAND("opening",        "zinc",    25, 150, 1, IMMEDIATE, METAL,    HI_METAL),</span>
  863. WAND("locking",        "aluminum", 25, 150, 1, IMMEDIATE, METAL,    HI_METAL),
+
  <span id="line863">863. WAND("locking",        "aluminum", 25, 150, 1, IMMEDIATE, METAL,    HI_METAL),</span>
  864. WAND("probing",        "uranium",  30, 150, 1, IMMEDIATE, METAL,    HI_METAL),
+
  <span id="line864">864. WAND("probing",        "uranium",  30, 150, 1, IMMEDIATE, METAL,    HI_METAL),</span>
  865. WAND("digging",        "iron",    55, 150, 1, RAY,      IRON,    HI_METAL),
+
  <span id="line865">865. WAND("digging",        "iron",    55, 150, 1, RAY,      IRON,    HI_METAL),</span>
  866. WAND("magic missile",  "steel",    50, 150, 1, RAY,      IRON,    HI_METAL),
+
  <span id="line866">866. WAND("magic missile",  "steel",    50, 150, 1, RAY,      IRON,    HI_METAL),</span>
  867. WAND("fire",          "hexagonal",40, 175, 1, RAY,      IRON,    HI_METAL),
+
  <span id="line867">867. WAND("fire",          "hexagonal",40, 175, 1, RAY,      IRON,    HI_METAL),</span>
  868. WAND("cold",          "short",    40, 175, 1, RAY,      IRON,    HI_METAL),
+
  <span id="line868">868. WAND("cold",          "short",    40, 175, 1, RAY,      IRON,    HI_METAL),</span>
  869. WAND("sleep",          "runed",    50, 175, 1, RAY,      IRON,    HI_METAL),
+
  <span id="line869">869. WAND("sleep",          "runed",    50, 175, 1, RAY,      IRON,    HI_METAL),</span>
  870. WAND("death",          "long",      5, 500, 1, RAY,      IRON,    HI_METAL),
+
  <span id="line870">870. WAND("death",          "long",      5, 500, 1, RAY,      IRON,    HI_METAL),</span>
  871. WAND("lightning",      "curved",  40, 175, 1, RAY,      IRON,    HI_METAL),
+
  <span id="line871">871. WAND("lightning",      "curved",  40, 175, 1, RAY,      IRON,    HI_METAL),</span>
  872. WAND((char *)0,        "forked",    0, 150, 1, 0,        WOOD,    HI_WOOD),
+
  <span id="line872">872. WAND((char *)0,        "forked",    0, 150, 1, 0,        WOOD,    HI_WOOD),</span>
  873. WAND((char *)0,        "spiked",    0, 150, 1, 0,        IRON,    HI_METAL),
+
  <span id="line873">873. WAND((char *)0,        "spiked",    0, 150, 1, 0,        IRON,    HI_METAL),</span>
  874. WAND((char *)0,        "jeweled",  0, 150, 1, 0,        IRON,    HI_MINERAL),
+
  <span id="line874">874. WAND((char *)0,        "jeweled",  0, 150, 1, 0,        IRON,    HI_MINERAL),</span>
  875. #undef WAND
+
  <span id="line875">875. #undef WAND</span>
  876.  
+
  <span id="line876">876. </span>
 
=== Coins ===
 
=== Coins ===
  
  877. /* coins ... - so far, gold is all there is */
+
  <span id="line877">877. /* coins ... - so far, gold is all there is */</span>
  878. #define COIN(name,prob,metal,worth) OBJECT( \
+
  <span id="line878">878. #define COIN(name,prob,metal,worth) OBJECT( \</span>
  879. OBJ(name,(char *)0), BITS(0,1,0,0,0,0,0,0,0,0,0,P_NONE,metal), 0, \
+
  <span id="line879">879. OBJ(name,(char *)0), BITS(0,1,0,0,0,0,0,0,0,0,0,P_NONE,metal), 0, \</span>
  880. COIN_CLASS, prob, 0, 1, worth, 0, 0, 0, 0, 0, HI_GOLD )
+
  <span id="line880">880. COIN_CLASS, prob, 0, 1, worth, 0, 0, 0, 0, 0, HI_GOLD )</span>
  881.  COIN("gold piece",      1000, GOLD,1),
+
  <span id="line881">881.  COIN("gold piece",      1000, GOLD,1),</span>
  882. #undef COIN
+
  <span id="line882">882. #undef COIN</span>
  883.  
+
  <span id="line883">883. </span>
 
=== Gems ===
 
=== Gems ===
  
  884. /* gems ... - includes stones and rocks but not boulders */
+
  <span id="line884">884. /* gems ... - includes stones and rocks but not boulders */</span>
  885. #define GEM(name,desc,prob,wt,gval,nutr,mohs,glass,color) OBJECT( \
+
  <span id="line885">885. #define GEM(name,desc,prob,wt,gval,nutr,mohs,glass,color) OBJECT( \</span>
  886.      OBJ(name,desc), \
+
  <span id="line886">886.      OBJ(name,desc), \</span>
  887.      BITS(0,1,0,0,0,0,0,0,0,HARDGEM(mohs),0,-P_SLING,glass), 0, \
+
  <span id="line887">887.      BITS(0,1,0,0,0,0,0,0,0,HARDGEM(mohs),0,-P_SLING,glass), 0, \</span>
  888.      GEM_CLASS, prob, 0, 1, gval, 3, 3, 0, 0, nutr, color )
+
  <span id="line888">888.      GEM_CLASS, prob, 0, 1, gval, 3, 3, 0, 0, nutr, color )</span>
  889. #define ROCK(name,desc,kn,prob,wt,gval,sdam,ldam,mgc,nutr,mohs,glass,color) OBJECT( \
+
  <span id="line889">889. #define ROCK(name,desc,kn,prob,wt,gval,sdam,ldam,mgc,nutr,mohs,glass,color) OBJECT( \</span>
  890.      OBJ(name,desc), \
+
  <span id="line890">890.      OBJ(name,desc), \</span>
  891.      BITS(kn,1,0,0,mgc,0,0,0,0,HARDGEM(mohs),0,-P_SLING,glass), 0, \
+
  <span id="line891">891.      BITS(kn,1,0,0,mgc,0,0,0,0,HARDGEM(mohs),0,-P_SLING,glass), 0, \</span>
  892.      GEM_CLASS, prob, 0, wt, gval, sdam, ldam, 0, 0, nutr, color )
+
  <span id="line892">892.      GEM_CLASS, prob, 0, wt, gval, sdam, ldam, 0, 0, nutr, color )</span>
  893. GEM("dilithium crystal", "white",      2,  1, 4500, 15,  5, GEMSTONE, CLR_WHITE),
+
  <span id="line893">893. GEM("dilithium crystal", "white",      2,  1, 4500, 15,  5, GEMSTONE, CLR_WHITE),</span>
  894. GEM("diamond", "white",                3,  1, 4000, 15, 10, GEMSTONE, CLR_WHITE),
+
  <span id="line894">894. GEM("diamond", "white",                3,  1, 4000, 15, 10, GEMSTONE, CLR_WHITE),</span>
  895. GEM("ruby", "red",                    4,  1, 3500, 15,  9, GEMSTONE, CLR_RED),
+
  <span id="line895">895. GEM("ruby", "red",                    4,  1, 3500, 15,  9, GEMSTONE, CLR_RED),</span>
  896. GEM("jacinth", "orange",              3,  1, 3250, 15,  9, GEMSTONE, CLR_ORANGE),
+
  <span id="line896">896. GEM("jacinth", "orange",              3,  1, 3250, 15,  9, GEMSTONE, CLR_ORANGE),</span>
  897. GEM("sapphire", "blue",                4,  1, 3000, 15,  9, GEMSTONE, CLR_BLUE),
+
  <span id="line897">897. GEM("sapphire", "blue",                4,  1, 3000, 15,  9, GEMSTONE, CLR_BLUE),</span>
  898. GEM("black opal", "black",            3,  1, 2500, 15,  8, GEMSTONE, CLR_BLACK),
+
  <span id="line898">898. GEM("black opal", "black",            3,  1, 2500, 15,  8, GEMSTONE, CLR_BLACK),</span>
  899. GEM("emerald", "green",                5,  1, 2500, 15,  8, GEMSTONE, CLR_GREEN),
+
  <span id="line899">899. GEM("emerald", "green",                5,  1, 2500, 15,  8, GEMSTONE, CLR_GREEN),</span>
  900. GEM("turquoise", "green",              6,  1, 2000, 15,  6, GEMSTONE, CLR_GREEN),
+
  <span id="line900">900. GEM("turquoise", "green",              6,  1, 2000, 15,  6, GEMSTONE, CLR_GREEN),</span>
  901. GEM("citrine", "yellow",              4,  1, 1500, 15,  6, GEMSTONE, CLR_YELLOW),
+
  <span id="line901">901. GEM("citrine", "yellow",              4,  1, 1500, 15,  6, GEMSTONE, CLR_YELLOW),</span>
  902. GEM("aquamarine", "green",            6,  1, 1500, 15,  8, GEMSTONE, CLR_GREEN),
+
  <span id="line902">902. GEM("aquamarine", "green",            6,  1, 1500, 15,  8, GEMSTONE, CLR_GREEN),</span>
  903. GEM("amber", "yellowish brown",        8,  1, 1000, 15,  2, GEMSTONE, CLR_BROWN),
+
  <span id="line903">903. GEM("amber", "yellowish brown",        8,  1, 1000, 15,  2, GEMSTONE, CLR_BROWN),</span>
  904. GEM("topaz", "yellowish brown",      10,  1,  900, 15,  8, GEMSTONE, CLR_BROWN),
+
  <span id="line904">904. GEM("topaz", "yellowish brown",      10,  1,  900, 15,  8, GEMSTONE, CLR_BROWN),</span>
  905. GEM("jet", "black",                    6,  1,  850, 15,  7, GEMSTONE, CLR_BLACK),
+
  <span id="line905">905. GEM("jet", "black",                    6,  1,  850, 15,  7, GEMSTONE, CLR_BLACK),</span>
  906. GEM("opal", "white",                  12,  1,  800, 15,  6, GEMSTONE, CLR_WHITE),
+
  <span id="line906">906. GEM("opal", "white",                  12,  1,  800, 15,  6, GEMSTONE, CLR_WHITE),</span>
  907. GEM("chrysoberyl", "yellow",          8,  1,  700, 15,  5, GEMSTONE, CLR_YELLOW),
+
  <span id="line907">907. GEM("chrysoberyl", "yellow",          8,  1,  700, 15,  5, GEMSTONE, CLR_YELLOW),</span>
  908. GEM("garnet", "red",                  12,  1,  700, 15,  7, GEMSTONE, CLR_RED),
+
  <span id="line908">908. GEM("garnet", "red",                  12,  1,  700, 15,  7, GEMSTONE, CLR_RED),</span>
  909. GEM("amethyst", "violet",            14,  1,  600, 15,  7, GEMSTONE, CLR_MAGENTA),
+
  <span id="line909">909. GEM("amethyst", "violet",            14,  1,  600, 15,  7, GEMSTONE, CLR_MAGENTA),</span>
  910. GEM("jasper", "red",                  15,  1,  500, 15,  7, GEMSTONE, CLR_RED),
+
  <span id="line910">910. GEM("jasper", "red",                  15,  1,  500, 15,  7, GEMSTONE, CLR_RED),</span>
  911. GEM("fluorite", "violet",            15,  1,  400, 15,  4, GEMSTONE, CLR_MAGENTA),
+
  <span id="line911">911. GEM("fluorite", "violet",            15,  1,  400, 15,  4, GEMSTONE, CLR_MAGENTA),</span>
  912. GEM("obsidian", "black",              9,  1,  200, 15,  6, GEMSTONE, CLR_BLACK),
+
  <span id="line912">912. GEM("obsidian", "black",              9,  1,  200, 15,  6, GEMSTONE, CLR_BLACK),</span>
  913. GEM("agate", "orange",                12,  1,  200, 15,  6, GEMSTONE, CLR_ORANGE),
+
  <span id="line913">913. GEM("agate", "orange",                12,  1,  200, 15,  6, GEMSTONE, CLR_ORANGE),</span>
  914. GEM("jade", "green",                  10,  1,  300, 15,  6, GEMSTONE, CLR_GREEN),
+
  <span id="line914">914. GEM("jade", "green",                  10,  1,  300, 15,  6, GEMSTONE, CLR_GREEN),</span>
  915. GEM("worthless piece of white glass", "white",  77, 1, 0, 6, 5, GLASS, CLR_WHITE),
+
  <span id="line915">915. GEM("worthless piece of white glass", "white",  77, 1, 0, 6, 5, GLASS, CLR_WHITE),</span>
  916. GEM("worthless piece of blue glass", "blue",    77, 1, 0, 6, 5, GLASS, CLR_BLUE),
+
  <span id="line916">916. GEM("worthless piece of blue glass", "blue",    77, 1, 0, 6, 5, GLASS, CLR_BLUE),</span>
  917. GEM("worthless piece of red glass", "red",      77, 1, 0, 6, 5, GLASS, CLR_RED),
+
  <span id="line917">917. GEM("worthless piece of red glass", "red",      77, 1, 0, 6, 5, GLASS, CLR_RED),</span>
  918. GEM("worthless piece of yellowish brown glass", "yellowish brown",
+
  <span id="line918">918. GEM("worthless piece of yellowish brown glass", "yellowish brown",</span>
  919. 77, 1, 0, 6, 5, GLASS, CLR_BROWN),
+
  <span id="line919">919.     77, 1, 0, 6, 5, GLASS, CLR_BROWN),</span>
  920. GEM("worthless piece of orange glass", "orange", 76, 1, 0, 6, 5, GLASS, CLR_ORANGE),
+
  <span id="line920">920. GEM("worthless piece of orange glass", "orange", 76, 1, 0, 6, 5, GLASS, CLR_ORANGE),</span>
  921. GEM("worthless piece of yellow glass", "yellow", 77, 1, 0, 6, 5, GLASS, CLR_YELLOW),
+
  <span id="line921">921. GEM("worthless piece of yellow glass", "yellow", 77, 1, 0, 6, 5, GLASS, CLR_YELLOW),</span>
  922. GEM("worthless piece of black glass",  "black",  76, 1, 0, 6, 5, GLASS, CLR_BLACK),
+
  <span id="line922">922. GEM("worthless piece of black glass",  "black",  76, 1, 0, 6, 5, GLASS, CLR_BLACK),</span>
  923. GEM("worthless piece of green glass", "green",  77, 1, 0, 6, 5, GLASS, CLR_GREEN),
+
  <span id="line923">923. GEM("worthless piece of green glass", "green",  77, 1, 0, 6, 5, GLASS, CLR_GREEN),</span>
  924. GEM("worthless piece of violet glass", "violet", 77, 1, 0, 6, 5, GLASS, CLR_MAGENTA),
+
  <span id="line924">924. GEM("worthless piece of violet glass", "violet", 77, 1, 0, 6, 5, GLASS, CLR_MAGENTA),</span>
  925.  
+
  <span id="line925">925. </span>
  926. /* Placement note: there is a wishable subrange for
+
  <span id="line926">926. /* Placement note: there is a wishable subrange for</span>
  927.  * "gray stones" in the o_ranges[] array in objnam.c
+
  <span id="line927">927.  * "gray stones" in the o_ranges[] array in objnam.c</span>
  928.  * that is currently everything between luckstones and flint (inclusive).
+
  <span id="line928">928.  * that is currently everything between luckstones and flint (inclusive).</span>
  929.  */
+
  <span id="line929">929.  */</span>
  930. ROCK("luckstone", "gray", 0, 10,  10, 60, 3, 3, 1, 10, 7, MINERAL, CLR_GRAY),
+
  <span id="line930">930. ROCK("luckstone", "gray", 0, 10,  10, 60, 3, 3, 1, 10, 7, MINERAL, CLR_GRAY),</span>
  931. ROCK("loadstone", "gray", 0, 10, 500,  1, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY),
+
  <span id="line931">931. ROCK("loadstone", "gray", 0, 10, 500,  1, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY),</span>
  932. ROCK("touchstone", "gray", 0,  8,  10, 45, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY),
+
  <span id="line932">932. ROCK("touchstone", "gray", 0,  8,  10, 45, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY),</span>
  933. ROCK("flint", "gray", 0, 10,  10,  1, 6, 6, 0, 10, 7, MINERAL, CLR_GRAY),
+
  <span id="line933">933. ROCK("flint", "gray",   0, 10,  10,  1, 6, 6, 0, 10, 7, MINERAL, CLR_GRAY),</span>
  934. ROCK("rock", (char *)0, 1,100,  10,  0, 3, 3, 0, 10, 7, MINERAL, CLR_GRAY),
+
  <span id="line934">934. ROCK("rock", (char *)0,   1,100,  10,  0, 3, 3, 0, 10, 7, MINERAL, CLR_GRAY),</span>
  935. #undef GEM
+
  <span id="line935">935. #undef GEM</span>
  936. #undef ROCK
+
  <span id="line936">936. #undef ROCK</span>
  937.  
+
  <span id="line937">937. </span>
 
=== Miscellaneous ===
 
=== Miscellaneous ===
  
  938. /* miscellaneous ... */
+
  <span id="line938">938. /* miscellaneous ... */</span>
  939. /* Note: boulders and rocks are not normally created at random; the
+
  <span id="line939">939. /* Note: boulders and rocks are not normally created at random; the</span>
  940.  * probabilities only come into effect when you try to polymorph them.
+
  <span id="line940">940.  * probabilities only come into effect when you try to polymorph them.</span>
  941.  * Boulders weigh more than MAX_CARR_CAP; statues use corpsenm to take
+
  <span id="line941">941.  * Boulders weigh more than MAX_CARR_CAP; statues use corpsenm to take</span>
  942.  * on a specific type and may act as containers (both affect weight).
+
  <span id="line942">942.  * on a specific type and may act as containers (both affect weight).</span>
  943.  */
+
  <span id="line943">943.  */</span>
  944. OBJECT(OBJ("boulder",(char *)0), BITS(1,0,0,0,0,0,0,0,1,0,0,P_NONE,MINERAL), 0,
+
  <span id="line944">944. OBJECT(OBJ("boulder",(char *)0), BITS(1,0,0,0,0,0,0,0,1,0,0,P_NONE,MINERAL), 0,</span>
  945. ROCK_CLASS,  100, 0, 6000,  0, 20, 20, 0, 0, 2000, HI_MINERAL),
+
  <span id="line945">945. ROCK_CLASS,  100, 0, 6000,  0, 20, 20, 0, 0, 2000, HI_MINERAL),</span>
  946. OBJECT(OBJ("statue", (char *)0), BITS(1,0,0,1,0,0,0,0,0,0,0,P_NONE,MINERAL), 0,
+
  <span id="line946">946. OBJECT(OBJ("statue", (char *)0), BITS(1,0,0,1,0,0,0,0,0,0,0,P_NONE,MINERAL), 0,</span>
  947. ROCK_CLASS,  900, 0, 2500,  0, 20, 20, 0, 0, 2500, CLR_WHITE),
+
  <span id="line947">947. ROCK_CLASS,  900, 0, 2500,  0, 20, 20, 0, 0, 2500, CLR_WHITE),</span>
  948.  
+
  <span id="line948">948. </span>
  949. OBJECT(OBJ("heavy iron ball", (char *)0), BITS(1,0,0,0,0,0,0,0,0,0,WHACK,P_NONE,IRON), 0,
+
  <span id="line949">949. OBJECT(OBJ("heavy iron ball", (char *)0), BITS(1,0,0,0,0,0,0,0,0,0,WHACK,P_NONE,IRON), 0,</span>
  950. BALL_CLASS,  1000, 0,  480, 10, 25, 25, 0, 0,  200, HI_METAL),
+
  <span id="line950">950. BALL_CLASS,  1000, 0,  480, 10, 25, 25, 0, 0,  200, HI_METAL),</span>
  951. /* +d4 when "very heavy" */
+
  <span id="line951">951.     /* +d4 when "very heavy" */</span>
  952. OBJECT(OBJ("iron chain", (char *)0), BITS(1,0,0,0,0,0,0,0,0,0,WHACK,P_NONE,IRON), 0,
+
  <span id="line952">952. OBJECT(OBJ("iron chain", (char *)0), BITS(1,0,0,0,0,0,0,0,0,0,WHACK,P_NONE,IRON), 0,</span>
  953. CHAIN_CLASS, 1000, 0,  120,  0,  4,  4, 0, 0,  200, HI_METAL),
+
  <span id="line953">953. CHAIN_CLASS, 1000, 0,  120,  0,  4,  4, 0, 0,  200, HI_METAL),</span>
  954. /* +1 both l & s */
+
  <span id="line954">954.     /* +1 both l & s */</span>
  955.  
+
  <span id="line955">955. </span>
  956. OBJECT(OBJ("blinding venom", "splash of venom"),
+
  <span id="line956">956. OBJECT(OBJ("blinding venom", "splash of venom"),</span>
  957. BITS(0,1,0,0,0,0,0,1,0,0,0,P_NONE,LIQUID), 0,
+
  <span id="line957">957. BITS(0,1,0,0,0,0,0,1,0,0,0,P_NONE,LIQUID), 0,</span>
  958. VENOM_CLASS,  500, 0, 1,  0,  0,  0, 0, 0, 0, HI_ORGANIC),
+
  <span id="line958">958. VENOM_CLASS,  500, 0,  1,  0,  0,  0, 0, 0,  0, HI_ORGANIC),</span>
  959. OBJECT(OBJ("acid venom", "splash of venom"),
+
  <span id="line959">959. OBJECT(OBJ("acid venom", "splash of venom"),</span>
  960. BITS(0,1,0,0,0,0,0,1,0,0,0,P_NONE,LIQUID), 0,
+
  <span id="line960">960. BITS(0,1,0,0,0,0,0,1,0,0,0,P_NONE,LIQUID), 0,</span>
  961. VENOM_CLASS,  500, 0, 1,  0,  6,  6, 0, 0, 0, HI_ORGANIC),
+
  <span id="line961">961. VENOM_CLASS,  500, 0,  1,  0,  6,  6, 0, 0,  0, HI_ORGANIC),</span>
  962. /* +d6 small or large */
+
  <span id="line962">962. /* +d6 small or large */</span>
  963.  
+
  <span id="line963">963. </span>
  964. /* fencepost, the deadly Array Terminator -- name [1st arg] *must* be NULL */
+
  <span id="line964">964. /* fencepost, the deadly Array Terminator -- name [1st arg] *must* be NULL */</span>
  965.  OBJECT(OBJ((char *)0,(char *)0), BITS(0,0,0,0,0,0,0,0,0,0,0,P_NONE,0), 0,
+
  <span id="line965">965.  OBJECT(OBJ((char *)0,(char *)0), BITS(0,0,0,0,0,0,0,0,0,0,0,P_NONE,0), 0,</span>
  966. ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+
  <span id="line966">966. ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)</span>
  967. }; /* objects[] */
+
  <span id="line967">967. }; /* objects[] */</span>
  968.  
+
  <span id="line968">968. </span>
  969. #ifndef OBJECTS_PASS_2_
+
  <span id="line969">969. #ifndef OBJECTS_PASS_2_</span>
  970.  
+
  <span id="line970">970. </span>
  971. /* perform recursive compilation for second structure */
+
  <span id="line971">971. /* perform recursive compilation for second structure */</span>
  972. #  undef OBJ
+
  <span id="line972">972. #  undef OBJ</span>
  973. #  undef OBJECT
+
  <span id="line973">973. #  undef OBJECT</span>
  974. #  define OBJECTS_PASS_2_
+
  <span id="line974">974. #  define OBJECTS_PASS_2_</span>
  975. #include "objects.c"
+
  <span id="line975">975. #include "objects.c"</span>
  976.  
+
  <span id="line976">976. </span>
  977. void NDECL(objects_init);
+
  <span id="line977">977. void NDECL(objects_init);</span>
  978.  
+
  <span id="line978">978. </span>
  979. /* dummy routine used to force linkage */
+
  <span id="line979">979. /* dummy routine used to force linkage */</span>
  980. void
+
  <span id="line980">980. void</span>
  981. objects_init()
+
  <span id="line981">981. objects_init()</span>
  982. {
+
  <span id="line982">982. {</span>
  983.    return;
+
  <span id="line983">983.    return;</span>
  984. }
+
  <span id="line984">984. }</span>
  985.  
+
  <span id="line985">985. </span>
  986. #endif /* !OBJECTS_PASS_2_ */
+
  <span id="line986">986. #endif /* !OBJECTS_PASS_2_ */</span>
  987.  
+
  <span id="line987">987. </span>
  988. /*objects.c*/
+
  <span id="line988">988. /*objects.c*/</span>
  
 
[[Category:Source code]]
 
[[Category:Source code]]

Revision as of 18:55, 13 August 2006

Below is the full text to src/objects.c from NetHack 3.4.3. To link to a particular line, write [[objects.c#line123]], for example.

Top of file

1.   /*  SCCS Id: @(#)objects.c  3.4 2002/07/31  */
2.   /* Copyright (c) Mike Threepoint, 1989.         */
3.   /* NetHack may be freely redistributed.  See license for details. */

The NetHack General Public License applies to screenshots, source code and other content from NetHack.

This content was modified from the original NetHack source code distribution (by splitting up NetHack content between wiki pages, and possibly further editing). See the page history for a list of who changed it, and on what dates.

4.   #ifndef OBJECTS_PASS_2_
5.   /* first pass */
6.   struct monst { struct monst *dummy; };  /* lint: struct obj's union */
7.   #include "config.h"
8.   #include "obj.h"
9.   #include "objclass.h"
10.  #include "prop.h"
11.  #include "skills.h"
12.  
13.  #else /* !OBJECTS_PASS_2_ */
14.  /* second pass */
15.  #include "color.h"
16.  #  define COLOR_FIELD(X) X,
17.  #endif  /* !OBJECTS_PASS_2_ */
18.  
19.  
20.  /* objects have symbols: ) [ = " ( % ! ? + / $ * ` 0 _ . */
21.  
22.  /*
23.   *  Note:  OBJ() and BITS() macros are used to avoid exceeding argument
24.   *  limits imposed by some compilers.  The ctnr field of BITS currently
25.   *  does not map into struct objclass, and is ignored in the expansion.
26.   *  The 0 in the expansion corresponds to oc_pre_discovered, which is
27.   *  set at run-time during role-specific character initialization.
28.   */
29.  

Object macros

30.  #ifndef OBJECTS_PASS_2_
31.  /* first pass -- object descriptive text */
32.  # define OBJ(name,desc) name,desc

Object name and description. The description field can be (char *)0, in which case there is no description, and only the object name is used.

33.  # define OBJECT(obj,bits,prp,sym,prob,dly,wt,cost,sdam,ldam,oc1,oc2,nut,color) \
34.   {obj}

The OBJECT macro.

  1. obj is the OBJ macro from above.
  2. bits are special bitfields, see BITS macro below.
  3. prp is special property of the object it grants, eg. REFLECTING or LIFESAVED.
  4. sym is the object symbol, one of the _CLASS definitions, eg. GEM_CLASS.
  5. prob is the object relative random generation probability. For each object class (eg. scrolls or potions), the total of this must be 1000.
  6. dly is delay (in turns) it takes to use the object, eg. to wear or to take off.
  7. wt is object weight.
  8. cost is object base cost, in zorkmids.
  9. sdam means how much object deals damage to small monsters.
  10. ldam means how much object deals damage to large monsters.
  11. oc1 TODO
  12. oc2 TODO
  13. nut is nutrition gained when the object is eaten.
  14. color is the object color, as used in the TTY windowport.
35.  
36.  NEARDATA struct objdescr obj_descr[] = {
37.  #else
38.  /* second pass -- object definitions */
39.  
40.  # define BITS(nmkn,mrg,uskn,ctnr,mgc,chrg,uniq,nwsh,big,tuf,dir,sub,mtrl) \
41.   nmkn,mrg,uskn,0,mgc,chrg,uniq,nwsh,big,tuf,dir,mtrl,sub /* SCO ODT 1.1 cpp fodder */

The BITS macro. Each value is either 1 or 0.

  1. nmkn tells whether to use the object description or the object real name by default. (See the OBJ macro, above)
  2. mrg tells whether the object can be merged with similar objects or not.
  3. uskn "uses known"
  4. ctnr tells if the object is pre-discovered, ie. known at the start of the game.
  5. mgc tells whether the object is inherently magical or not.
  6. chrg tells whether the object has charges.
  7. uniq tells if the object is unique.
  8. nwsh tells whether player can wish for the object or not.
  9. big tells whether weapon or tool is bimanual, or whether armor is bulky.
  10. tuf whether gems are hard or soft.
  11. dir takes either NODIR, IMMEDIATE or RAY, and defines how wands behave when zapped.
  12. sub armor subtype (as defined in objclass.h) or skills of weapons, spellbooks, tools or gems.
  13. mtrl takes one of the material definitions, eg. LEATHER or IRON, as defined in objclass.h
42.  # define OBJECT(obj,bits,prp,sym,prob,dly,wt,cost,sdam,ldam,oc1,oc2,nut,color) \
43.   {0, 0, (char *)0, bits, prp, sym, dly, COLOR_FIELD(color) \
44.    prob, wt, cost, sdam, ldam, oc1, oc2, nut}
45.  # ifndef lint
46.  #  define HARDGEM(n) (n >= 8)
47.  # else
48.  #  define HARDGEM(n) (0)
49.  # endif
50.  
51.  NEARDATA struct objclass objects[] = {
52.  #endif
53.  /* dummy object[0] -- description [2nd arg] *must* be NULL */
54.   OBJECT(OBJ("strange object",(char *)0), BITS(1,0,0,0,0,0,0,0,0,0,0,P_NONE,0),
55.    0, ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),

Weapons

56.  
57.  /* weapons ... */
58.  #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,hitbon,typ,sub,metal,color) \
59.   OBJECT( \
60.  OBJ(name,app), BITS(kn,mg,1,0,0,1,0,0,bi,0,typ,sub,metal), 0, \
61.  WEAPON_CLASS, prob, 0, \
62.  wt, cost, sdam, ldam, hitbon, 0, wt, color )
63.  #define PROJECTILE(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,sub,color) \
64.   OBJECT( \
65.  OBJ(name,app), \
66.  BITS(kn,1,1,0,0,1,0,0,0,0,PIERCE,sub,metal), 0, \
67.  WEAPON_CLASS, prob, 0, \
68.  wt, cost, sdam, ldam, hitbon, 0, wt, color )
69.  #define BOW(name,app,kn,prob,wt,cost,hitbon,metal,sub,color) \
70.   OBJECT( \
71.  OBJ(name,app), BITS(kn,0,1,0,0,1,0,0,0,0,0,sub,metal), 0, \
72.  WEAPON_CLASS, prob, 0, \
73.  wt, cost, 2, 2, hitbon, 0, wt, color )
74.  
75.  /* Note: for weapons that don't do an even die of damage (ex. 2-7 or 3-18)
76.   * the extra damage is added on in weapon.c, not here! */
77.  
78.  #define P PIERCE
79.  #define S SLASH
80.  #define B WHACK
81.  
82.  /* missiles */
83.  PROJECTILE("arrow", (char *)0,
84.  1, 55, 1, 2, 6, 6, 0, IRON, -P_BOW, HI_METAL),
85.  PROJECTILE("elven arrow", "runed arrow",
86.  0, 20, 1, 2, 7, 6, 0, WOOD, -P_BOW, HI_WOOD),
87.  PROJECTILE("orcish arrow", "crude arrow",
88.  0, 20, 1, 2, 5, 6, 0, IRON, -P_BOW, CLR_BLACK),
89.  PROJECTILE("silver arrow", (char *)0,
90.  1, 12, 1, 5, 6, 6, 0, SILVER, -P_BOW, HI_SILVER),
91.  PROJECTILE("ya", "bamboo arrow",
92.  0, 15, 1, 4, 7, 7, 1, METAL, -P_BOW, HI_METAL),
93.  PROJECTILE("crossbow bolt", (char *)0,
94.  1, 55, 1, 2, 4, 6, 0, IRON, -P_CROSSBOW, HI_METAL),
95.  
96.  WEAPON("dart", (char *)0,
97.   1, 1, 0, 60,  1,  2,  3,  2, 0, P,   -P_DART, IRON, HI_METAL),
98.  WEAPON("shuriken", "throwing star",
99.   0, 1, 0, 35,  1,  5,  8,  6, 2, P,   -P_SHURIKEN, IRON, HI_METAL),
100. WEAPON("boomerang", (char *)0,
101.  1, 1, 0, 15,  5, 20,  9,  9, 0, 0,   -P_BOOMERANG, WOOD, HI_WOOD),
102. 
103. /* spears */
104. WEAPON("spear", (char *)0,
105.  1, 1, 0, 50, 30,  3,  6,  8, 0, P,   P_SPEAR, IRON, HI_METAL),
106. WEAPON("elven spear", "runed spear",
107.  0, 1, 0, 10, 30,  3,  7,  8, 0, P,   P_SPEAR, WOOD, HI_WOOD),
108. WEAPON("orcish spear", "crude spear",
109.  0, 1, 0, 13, 30,  3,  5,  8, 0, P,   P_SPEAR, IRON, CLR_BLACK),
110. WEAPON("dwarvish spear", "stout spear",
111.  0, 1, 0, 12, 35,  3,  8,  8, 0, P,   P_SPEAR, IRON, HI_METAL),
112. WEAPON("silver spear", (char *)0,
113.  1, 1, 0,  2, 36, 40,  6,  8, 0, P,   P_SPEAR, SILVER, HI_SILVER),
114. WEAPON("javelin", "throwing spear",
115.  0, 1, 0, 10, 20,  3,  6,  6, 0, P,   P_JAVELIN, IRON, HI_METAL),
116. 
117. WEAPON("trident", (char *)0,
118.  1, 0, 0,  8, 25,  5,  6,  4, 0, P,   P_TRIDENT, IRON, HI_METAL),
119.     /* +1 small, +2d4 large */
120. 
121. /* blades */
122. WEAPON("dagger", (char *)0,
123.  1, 1, 0, 30, 10,  4,  4,  3, 2, P,   P_DAGGER, IRON, HI_METAL),
124. WEAPON("elven dagger", "runed dagger",
125.  0, 1, 0, 10, 10,  4,  5,  3, 2, P,   P_DAGGER, WOOD, HI_WOOD),
126. WEAPON("orcish dagger", "crude dagger",
127.  0, 1, 0, 12, 10,  4,  3,  3, 2, P,   P_DAGGER, IRON, CLR_BLACK),
128. WEAPON("silver dagger", (char *)0,
129.  1, 1, 0,  3, 12, 40,  4,  3, 2, P,   P_DAGGER, SILVER, HI_SILVER),
130. WEAPON("athame", (char *)0,
131.  1, 1, 0,  0, 10,  4,  4,  3, 2, S,   P_DAGGER, IRON, HI_METAL),
132. WEAPON("scalpel", (char *)0,
133.  1, 1, 0,  0,  5,  6,  3,  3, 2, S,   P_KNIFE, METAL, HI_METAL),
134. WEAPON("knife", (char *)0,
135.  1, 1, 0, 20,  5,  4,  3,  2, 0, P|S, P_KNIFE, IRON, HI_METAL),
136. WEAPON("stiletto", (char *)0,
137.  1, 1, 0,  5,  5,  4,  3,  2, 0, P|S, P_KNIFE, IRON, HI_METAL),
138. WEAPON("worm tooth", (char *)0,
139.  1, 0, 0,  0, 20,  2,  2,  2, 0, 0,   P_KNIFE, 0, CLR_WHITE),
140. WEAPON("crysknife", (char *)0,
141.  1, 0, 0,  0, 20,100, 10, 10, 3, P,   P_KNIFE, MINERAL, CLR_WHITE),
142. 
143. WEAPON("axe", (char *)0,
144.  1, 0, 0, 40, 60,  8,  6,  4, 0, S,   P_AXE, IRON, HI_METAL),
145. WEAPON("battle-axe", "double-headed axe",
146.  0, 0, 1, 10,120, 40,  8,  6, 0, S,   P_AXE, IRON, HI_METAL),
147.     /* "double-bitted" ? */
148. 
149. /* swords */
150. WEAPON("short sword", (char *)0,
151.  1, 0, 0,  8, 30, 10,  6,  8, 0, P,   P_SHORT_SWORD, IRON, HI_METAL),
152. WEAPON("elven short sword", "runed short sword",
153.  0, 0, 0,  2, 30, 10,  8,  8, 0, P,   P_SHORT_SWORD, WOOD, HI_WOOD),
154. WEAPON("orcish short sword", "crude short sword",
155.  0, 0, 0,  3, 30, 10,  5,  8, 0, P,   P_SHORT_SWORD, IRON, CLR_BLACK),
156. WEAPON("dwarvish short sword", "broad short sword",
157.  0, 0, 0,  2, 30, 10,  7,  8, 0, P,   P_SHORT_SWORD, IRON, HI_METAL),
158. WEAPON("scimitar", "curved sword",
159.  0, 0, 0, 15, 40, 15,  8,  8, 0, S,   P_SCIMITAR, IRON, HI_METAL),
160. WEAPON("silver saber", (char *)0,
161.  1, 0, 0,  6, 40, 75,  8,  8, 0, S,   P_SABER, SILVER, HI_SILVER),
162. WEAPON("broadsword", (char *)0,
163.  1, 0, 0,  8, 70, 10,  4,  6, 0, S,   P_BROAD_SWORD, IRON, HI_METAL),
164.     /* +d4 small, +1 large */
165. WEAPON("elven broadsword", "runed broadsword",
166.  0, 0, 0,  4, 70, 10,  6,  6, 0, S,   P_BROAD_SWORD, WOOD, HI_WOOD),
167.     /* +d4 small, +1 large */
168. WEAPON("long sword", (char *)0,
169.  1, 0, 0, 50, 40, 15,  8, 12, 0, S,   P_LONG_SWORD, IRON, HI_METAL),
170. WEAPON("two-handed sword", (char *)0,
171.  1, 0, 1, 22,150, 50, 12,  6, 0, S,   P_TWO_HANDED_SWORD, IRON, HI_METAL),
172.     /* +2d6 large */
173. WEAPON("katana", "samurai sword",
174.  0, 0, 0,  4, 40, 80, 10, 12, 1, S,   P_LONG_SWORD, IRON, HI_METAL),
175. /* special swords set up for artifacts */
176. WEAPON("tsurugi", "long samurai sword",
177.  0, 0, 1,  0, 60,500, 16,  8, 2, S,   P_TWO_HANDED_SWORD, METAL, HI_METAL),
178.     /* +2d6 large */
179. WEAPON("runesword", "runed broadsword",
180.  0, 0, 0,  0, 40,300,  4,  6, 0, S,   P_BROAD_SWORD, IRON, CLR_BLACK),
181.     /* +d4 small, +1 large */
182.     /* +5d2 +d8 from level drain */
183. 
184. /* polearms */
185. /* spear-type */
186. WEAPON("partisan", "vulgar polearm",
187.  0, 0, 1,  5, 80, 10,  6,  6, 0, P,   P_POLEARMS, IRON, HI_METAL),
188.     /* +1 large */
189. WEAPON("ranseur", "hilted polearm",
190.  0, 0, 1,  5, 50,  6,  4,  4, 0, P,   P_POLEARMS, IRON, HI_METAL),
191.     /* +d4 both */
192. WEAPON("spetum", "forked polearm",
193.  0, 0, 1,  5, 50,  5,  6,  6, 0, P,   P_POLEARMS, IRON, HI_METAL),
194.     /* +1 small, +d6 large */
195. WEAPON("glaive", "single-edged polearm",
196.  0, 0, 1,  8, 75,  6,  6, 10, 0, S,   P_POLEARMS, IRON, HI_METAL),
197. WEAPON("lance", (char *)0,
198.  1, 0, 0,  4,180, 10,  6,  8, 0, P,   P_LANCE, IRON, HI_METAL),
199. /* axe-type */
200. WEAPON("halberd", "angled poleaxe",
201.  0, 0, 1,  8,150, 10, 10,  6, 0, P|S, P_POLEARMS, IRON, HI_METAL),
202.     /* +1d6 large */
203. WEAPON("bardiche", "long poleaxe",
204.  0, 0, 1,  4,120,  7,  4,  4, 0, S,   P_POLEARMS, IRON, HI_METAL),
205.     /* +1d4 small, +2d4 large */
206. WEAPON("voulge", "pole cleaver",
207.  0, 0, 1,  4,125,  5,  4,  4, 0, S,   P_POLEARMS, IRON, HI_METAL),
208.     /* +d4 both */
209. WEAPON("dwarvish mattock", "broad pick",
210.  0, 0, 1, 13,120, 50, 12,  8,-1, B,   P_PICK_AXE, IRON, HI_METAL),
211. 
212. /* curved/hooked */
213. WEAPON("fauchard", "pole sickle",
214.  0, 0, 1,  6, 60,  5,  6,  8, 0, P|S, P_POLEARMS, IRON, HI_METAL),
215. WEAPON("guisarme", "pruning hook",
216.  0, 0, 1,  6, 80,  5,  4,  8, 0, S,   P_POLEARMS, IRON, HI_METAL),
217.     /* +1d4 small */
218. WEAPON("bill-guisarme", "hooked polearm",
219.  0, 0, 1,  4,120,  7,  4, 10, 0, P|S, P_POLEARMS, IRON, HI_METAL),
220.     /* +1d4 small */
221. /* other */
222. WEAPON("lucern hammer", "pronged polearm",
223.  0, 0, 1,  5,150,  7,  4,  6, 0, B|P, P_POLEARMS, IRON, HI_METAL),
224.     /* +1d4 small */
225. WEAPON("bec de corbin", "beaked polearm",
226.  0, 0, 1,  4,100,  8,  8,  6, 0, B|P, P_POLEARMS, IRON, HI_METAL),
227. 
228. /* bludgeons */
229. WEAPON("mace", (char *)0,
230.  1, 0, 0, 40, 30,  5,  6,  6, 0, B,   P_MACE, IRON, HI_METAL),
231.     /* +1 small */
232. WEAPON("morning star", (char *)0,
233.  1, 0, 0, 12,120, 10,  4,  6, 0, B,   P_MORNING_STAR, IRON, HI_METAL),
234.     /* +d4 small, +1 large */
235. WEAPON("war hammer", (char *)0,
236.  1, 0, 0, 15, 50,  5,  4,  4, 0, B,   P_HAMMER, IRON, HI_METAL),
237.     /* +1 small */
238. WEAPON("club", (char *)0,
239.  1, 0, 0, 12, 30,  3,  6,  3, 0, B,   P_CLUB, WOOD, HI_WOOD),
240. #ifdef KOPS
241. WEAPON("rubber hose", (char *)0,
242.  1, 0, 0,  0, 20,  3,  4,  3, 0, B,   P_WHIP, PLASTIC, CLR_BROWN),
243. #endif
244. WEAPON("quarterstaff", "staff",
245.  0, 0, 1, 11, 40,  5,  6,  6, 0, B,   P_QUARTERSTAFF, WOOD, HI_WOOD),
246. /* two-piece */
247. WEAPON("aklys", "thonged club",
248.  0, 0, 0,  8, 15,  4,  6,  3, 0, B,   P_CLUB, IRON, HI_METAL),
249. WEAPON("flail", (char *)0,
250.  1, 0, 0, 40, 15,  4,  6,  4, 0, B,   P_FLAIL, IRON, HI_METAL),
251.     /* +1 small, +1d4 large */
252. /* misc */
253. WEAPON("bullwhip", (char *)0,
254.  1, 0, 0,  2, 20,  4,  2,  1, 0, 0,   P_WHIP, LEATHER, CLR_BROWN),
255. 
256. /* bows */
257. BOW("bow", (char *)0,   1, 24, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
258. BOW("elven bow", "runed bow", 0, 12, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
259. BOW("orcish bow", "crude bow",  0, 12, 30, 60, 0, WOOD, P_BOW, CLR_BLACK),
260. BOW("yumi", "long bow",   0,  0, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
261. BOW("sling", (char *)0,   1, 40,  3, 20, 0, LEATHER, P_SLING, HI_LEATHER),
262. BOW("crossbow", (char *)0,  1, 45, 50, 40, 0, WOOD, P_CROSSBOW, HI_WOOD),
263. 
264. #undef P
265. #undef S
266. #undef B
267. 
268. #undef WEAPON
269. #undef PROJECTILE
270. #undef BOW
271. 

Armor

Armor macros

272. /* armor ... */
273. /* IRON denotes ferrous metals, including steel.
274.  * Only IRON weapons and armor can rust.
275.  * Only COPPER (including brass) corrodes.
276.  * Some creatures are vulnerable to SILVER.
277.  */
278. #define ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,sub,metal,c) \
279.  OBJECT( \
280. OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,0,blk,0,0,sub,metal), power, \
281. ARMOR_CLASS, prob, delay, wt, cost, \
282. 0, 0, 10 - ac, can, wt, c )
283. #define HELM(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
284.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_HELM,metal,c)
285. #define CLOAK(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
286.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_CLOAK,metal,c)
287. #define SHIELD(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,metal,c) \
288.  ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,ARM_SHIELD,metal,c)
289. #define GLOVES(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
290.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_GLOVES,metal,c)
291. #define BOOTS(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
292.  ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_BOOTS,metal,c)

Helmets

293. /* helmets */
294. HELM("elven leather helm", "leather hat",
295. 0, 0,  0, 6, 1,  3,   8, 9, 0, LEATHER, HI_LEATHER),
296. HELM("orcish helm", "iron skull cap",
297. 0, 0,  0, 6, 1, 30,  10, 9, 0, IRON, CLR_BLACK),
298. HELM("dwarvish iron helm", "hard hat",
299. 0, 0,  0, 6, 1, 40,  20, 8, 0, IRON, HI_METAL),
300. HELM("fedora", (char *)0,
301. 1, 0,  0, 0, 0,  3,   1,10, 0, CLOTH, CLR_BROWN),
302. HELM("cornuthaum", "conical hat",
303. 0, 1,  CLAIRVOYANT,
304.   3, 1,  4,  80,10, 2, CLOTH, CLR_BLUE),
305. HELM("dunce cap", "conical hat",
306. 0, 1,  0, 3, 1,  4,   1,10, 0, CLOTH, CLR_BLUE),
307. HELM("dented pot", (char *)0,
308. 1, 0,  0, 2, 0, 10,   8, 9, 0, IRON, CLR_BLACK),
309. /* With shuffled appearances... */
310. HELM("helmet", "plumed helmet",
311. 0, 0,  0,      10, 1, 30,  10, 9, 0, IRON, HI_METAL),
312. HELM("helm of brilliance", "etched helmet",
313. 0, 1,  0, 6, 1, 50,  50, 9, 0, IRON, CLR_GREEN),
314. HELM("helm of opposite alignment", "crested helmet",
315. 0, 1,  0, 6, 1, 50,  50, 9, 0, IRON, HI_METAL),
316. HELM("helm of telepathy", "visored helmet",
317. 0, 1,  TELEPAT, 2, 1, 50,  50, 9, 0, IRON, HI_METAL),

Suits of Armor

318. 
319. /* suits of armor */
320. /*
321.  * There is code in polyself.c that assumes (1) and (2).
322.  * There is code in obj.h, objnam.c, mon.c, read.c that assumes (2).
323.  *
324.  *  (1) The dragon scale mails and the dragon scales are together.
325.  *  (2) That the order of the dragon scale mail and dragon scales is the
326.  *      the same defined in monst.c.
327.  */
328. #define DRGN_ARMR(name,mgc,power,cost,ac,color) \
329.  ARMOR(name,(char *)0,1,mgc,1,power,0,5,40,cost,ac,0,ARM_SUIT,DRAGON_HIDE,color)
330. /* 3.4.1: dragon scale mail reclassified as "magic" since magic is
331.    needed to create them */
332. DRGN_ARMR("gray dragon scale mail",   1, ANTIMAGIC,  1200, 1, CLR_GRAY),
333. DRGN_ARMR("silver dragon scale mail", 1, REFLECTING, 1200, 1, DRAGON_SILVER),
334. #if 0 /* DEFERRED */
335. DRGN_ARMR("shimmering dragon scale mail", 1, DISPLACED, 1200, 1, CLR_CYAN),
336. #endif
337. DRGN_ARMR("red dragon scale mail",    1, FIRE_RES,    900, 1, CLR_RED),
338. DRGN_ARMR("white dragon scale mail",  1, COLD_RES,    900, 1, CLR_WHITE),
339. DRGN_ARMR("orange dragon scale mail", 1, SLEEP_RES,   900, 1, CLR_ORANGE),
340. DRGN_ARMR("black dragon scale mail",  1, DISINT_RES, 1200, 1, CLR_BLACK),
341. DRGN_ARMR("blue dragon scale mail",   1, SHOCK_RES,   900, 1, CLR_BLUE),
342. DRGN_ARMR("green dragon scale mail",  1, POISON_RES,  900, 1, CLR_GREEN),
343. DRGN_ARMR("yellow dragon scale mail", 1, ACID_RES,    900, 1, CLR_YELLOW),
344. 
345. /* For now, only dragons leave these. */
346. /* 3.4.1: dragon scales left classified as "non-magic"; they confer
347.    magical properties but are produced "naturally" */
348. DRGN_ARMR("gray dragon scales",   0, ANTIMAGIC,  700, 7, CLR_GRAY),
349. DRGN_ARMR("silver dragon scales", 0, REFLECTING, 700, 7, DRAGON_SILVER),
350. #if 0 /* DEFERRED */
351. DRGN_ARMR("shimmering dragon scales", 0, DISPLACED,  700, 7, CLR_CYAN),
352. #endif
353. DRGN_ARMR("red dragon scales",    0, FIRE_RES,   500, 7, CLR_RED),
354. DRGN_ARMR("white dragon scales",  0, COLD_RES,   500, 7, CLR_WHITE),
355. DRGN_ARMR("orange dragon scales", 0, SLEEP_RES,  500, 7, CLR_ORANGE),
356. DRGN_ARMR("black dragon scales",  0, DISINT_RES, 700, 7, CLR_BLACK),
357. DRGN_ARMR("blue dragon scales",   0, SHOCK_RES,  500, 7, CLR_BLUE),
358. DRGN_ARMR("green dragon scales",  0, POISON_RES, 500, 7, CLR_GREEN),
359. DRGN_ARMR("yellow dragon scales", 0, ACID_RES,   500, 7, CLR_YELLOW),
360. #undef DRGN_ARMR
361. 
362. ARMOR("plate mail", (char *)0,
363.  1, 0, 1, 0,  44, 5, 450, 600,  3, 2, ARM_SUIT, IRON, HI_METAL),
364. ARMOR("crystal plate mail", (char *)0,
365.  1, 0, 1, 0,  10, 5, 450, 820,  3, 2, ARM_SUIT, GLASS, CLR_WHITE),
366. #ifdef TOURIST
367. ARMOR("bronze plate mail", (char *)0,
368.  1, 0, 1, 0,  25, 5, 450, 400,  4, 0, ARM_SUIT, COPPER, HI_COPPER),
369. #else
370. ARMOR("bronze plate mail", (char *)0,
371.  1, 0, 1, 0,  35, 5, 450, 400,  4, 0, ARM_SUIT, COPPER, HI_COPPER),
372. #endif
373. ARMOR("splint mail", (char *)0,
374.  1, 0, 1, 0,  62, 5, 400,  80,  4, 1, ARM_SUIT, IRON, HI_METAL),
375. ARMOR("banded mail", (char *)0,
376.  1, 0, 1, 0,  72, 5, 350,  90,  4, 0, ARM_SUIT, IRON, HI_METAL),
377. ARMOR("dwarvish mithril-coat", (char *)0,
378.  1, 0, 0, 0,  10, 1, 150, 240,  4, 3, ARM_SUIT, MITHRIL, HI_METAL),
379. ARMOR("elven mithril-coat", (char *)0,
380.  1, 0, 0, 0,  15, 1, 150, 240,  5, 3, ARM_SUIT, MITHRIL, HI_METAL),
381. ARMOR("chain mail", (char *)0,
382.  1, 0, 0, 0,  72, 5, 300,  75,  5, 1, ARM_SUIT, IRON, HI_METAL),
383. ARMOR("orcish chain mail", "crude chain mail",
384.  0, 0, 0, 0,  20, 5, 300,  75,  6, 1, ARM_SUIT, IRON, CLR_BLACK),
385. ARMOR("scale mail", (char *)0,
386.  1, 0, 0, 0,  72, 5, 250,  45,  6, 0, ARM_SUIT, IRON, HI_METAL),
387. ARMOR("studded leather armor", (char *)0,
388.  1, 0, 0, 0,  72, 3, 200,  15,  7, 1, ARM_SUIT, LEATHER, HI_LEATHER),
389. ARMOR("ring mail", (char *)0,
390.  1, 0, 0, 0,  72, 5, 250, 100,  7, 0, ARM_SUIT, IRON, HI_METAL),
391. ARMOR("orcish ring mail", "crude ring mail",
392.  0, 0, 0, 0,  20, 5, 250,  80,  8, 1, ARM_SUIT, IRON, CLR_BLACK),
393. ARMOR("leather armor", (char *)0,
394.  1, 0, 0, 0,  82, 3, 150,   5,  8, 0, ARM_SUIT, LEATHER, HI_LEATHER),
395. ARMOR("leather jacket", (char *)0,
396.  1, 0, 0, 0,  12, 0,  30,  10,  9, 0, ARM_SUIT, LEATHER, CLR_BLACK),
397. 
398. #ifdef TOURIST
399. /* shirts */
400. ARMOR("Hawaiian shirt", (char *)0,
401.  1, 0, 0, 0,   8, 0,   5,   3, 10, 0, ARM_SHIRT, CLOTH, CLR_MAGENTA),
402. ARMOR("T-shirt", (char *)0,
403.  1, 0, 0, 0,   2, 0,   5,   2, 10, 0, ARM_SHIRT, CLOTH, CLR_WHITE),
404. #endif
405. 

Cloaks

406. /* cloaks */
407. /*  'cope' is not a spelling mistake... leave it be */
408. CLOAK("mummy wrapping", (char *)0,
409. 1, 0, 0,      0, 0,  3,  2, 10, 1, CLOTH, CLR_GRAY),
410. CLOAK("elven cloak", "faded pall",
411. 0, 1, STEALTH,    8, 0, 10, 60,  9, 3, CLOTH, CLR_BLACK),
412. CLOAK("orcish cloak", "coarse mantelet",
413. 0, 0, 0,      8, 0, 10, 40, 10, 2, CLOTH, CLR_BLACK),
414. CLOAK("dwarvish cloak", "hooded cloak",
415. 0, 0, 0,      8, 0, 10, 50, 10, 2, CLOTH, HI_CLOTH),
416. CLOAK("oilskin cloak", "slippery cloak",
417. 0, 0, 0,      8, 0, 10, 50,  9, 3, CLOTH, HI_CLOTH),
418. CLOAK("robe", (char *)0,
419. 1, 1, 0,      3, 0, 15, 50,  8, 3, CLOTH, CLR_RED),
420. CLOAK("alchemy smock", "apron",
421. 0, 1, POISON_RES, 9, 0, 10, 50,  9, 1, CLOTH, CLR_WHITE),
422. CLOAK("leather cloak", (char *)0,
423. 1, 0, 0,      8, 0, 15, 40,  9, 1, LEATHER, CLR_BROWN),
424. /* With shuffled appearances... */
425. CLOAK("cloak of protection", "tattered cape",
426. 0, 1, PROTECTION, 9, 0, 10, 50,  7, 3, CLOTH, HI_CLOTH),
427. CLOAK("cloak of invisibility", "opera cloak",
428. 0, 1, INVIS,     10, 0, 10, 60,  9, 2, CLOTH, CLR_BRIGHT_MAGENTA),
429. CLOAK("cloak of magic resistance", "ornamental cope",
430. 0, 1, ANTIMAGIC,  2, 0, 10, 60,  9, 3, CLOTH, CLR_WHITE),
431. CLOAK("cloak of displacement", "piece of cloth",
432. 0, 1, DISPLACED, 10, 0, 10, 50,  9, 2, CLOTH, HI_CLOTH),
433. 

Shields

434. /* shields */
435. SHIELD("small shield", (char *)0,
436. 1, 0, 0, 0,      6, 0, 30,  3,  9, 0, WOOD, HI_WOOD),
437. SHIELD("elven shield", "blue and green shield",
438. 0, 0, 0, 0,      2, 0, 40,  7,  8, 0, WOOD, CLR_GREEN),
439. SHIELD("Uruk-hai shield", "white-handed shield",
440. 0, 0, 0, 0,      2, 0, 50,  7,  9, 0, IRON, HI_METAL),
441. SHIELD("orcish shield", "red-eyed shield",
442. 0, 0, 0, 0,      2, 0, 50,  7,  9, 0, IRON, CLR_RED),
443. SHIELD("large shield", (char *)0,
444. 1, 0, 1, 0,      7, 0,100, 10,  8, 0, IRON, HI_METAL),
445. SHIELD("dwarvish roundshield", "large round shield",
446. 0, 0, 0, 0,      4, 0,100, 10,  8, 0, IRON, HI_METAL),
447. SHIELD("shield of reflection", "polished silver shield",
448. 0, 1, 0, REFLECTING, 3, 0, 50, 50,  8, 0, SILVER, HI_SILVER),
449. 

Gloves

450. /* gloves */
451. /* these have their color but not material shuffled, so the IRON must stay
452.  * CLR_BROWN (== HI_LEATHER)
453.  */
454. GLOVES("leather gloves", "old gloves",
455. 0, 0,  0,   16, 1, 10,  8,  9, 0, LEATHER, HI_LEATHER),
456. GLOVES("gauntlets of fumbling", "padded gloves",
457. 0, 1,  FUMBLING,   8, 1, 10, 50,  9, 0, LEATHER, HI_LEATHER),
458. GLOVES("gauntlets of power", "riding gloves",
459. 0, 1,  0,    8, 1, 30, 50,  9, 0, IRON, CLR_BROWN),
460. GLOVES("gauntlets of dexterity", "fencing gloves",
461. 0, 1,  0,    8, 1, 10, 50,  9, 0, LEATHER, HI_LEATHER),
462. 

Boots

463. /* boots */
464. BOOTS("low boots", "walking shoes",
465. 0, 0,  0,   25, 2, 10,  8,  9, 0, LEATHER, HI_LEATHER),
466. BOOTS("iron shoes", "hard shoes",
467. 0, 0,  0,    7, 2, 50, 16,  8, 0, IRON, HI_METAL),
468. BOOTS("high boots", "jackboots",
469. 0, 0,  0,   15, 2, 20, 12,  8, 0, LEATHER, HI_LEATHER),
470. /* With shuffled appearances... */
471. BOOTS("speed boots", "combat boots",
472. 0, 1,  FAST,    12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),
473. BOOTS("water walking boots", "jungle boots",
474. 0, 1,  WWALKING,  12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),
475. BOOTS("jumping boots", "hiking boots",
476. 0, 1,  JUMPING,   12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),
477. BOOTS("elven boots", "mud boots",
478. 0, 1,  STEALTH,   12, 2, 15,  8,  9, 0, LEATHER, HI_LEATHER),
479. BOOTS("kicking boots", "buckled boots",
480. 0, 1,  0,         12, 2, 15,  8,  9, 0, IRON, CLR_BROWN),
481. BOOTS("fumble boots", "riding boots",
482. 0, 1,  FUMBLING,  12, 2, 20, 30,  9, 0, LEATHER, HI_LEATHER),
483. BOOTS("levitation boots", "snow boots",
484. 0, 1,  LEVITATION,12, 2, 15, 30,  9, 0, LEATHER, HI_LEATHER),
485. #undef HELM
486. #undef CLOAK
487. #undef SHIELD
488. #undef GLOVES
489. #undef BOOTS
490. #undef ARMOR

Rings

491. /* rings ... */
492. #define RING(name,power,stone,cost,mgc,spec,mohs,metal,color) OBJECT( \
493. OBJ(name,stone), \
494. BITS(0,0,spec,0,mgc,spec,0,0,0,HARDGEM(mohs),0,P_NONE,metal), \
495. power, RING_CLASS, 0, 0, 3, cost, 0, 0, 0, 0, 15, color )
496. RING("adornment", ADORNED, "wooden",        100, 1, 1, 2, WOOD, HI_WOOD),
497. RING("gain strength", 0, "granite",         150, 1, 1, 7, MINERAL, HI_MINERAL),
498. RING("gain constitution", 0, "opal",        150, 1, 1, 7, MINERAL,  HI_MINERAL),
499. RING("increase accuracy", 0, "clay",        150, 1, 1, 4, MINERAL, CLR_RED),
500. RING("increase damage", 0, "coral",         150, 1, 1, 4, MINERAL, CLR_ORANGE),
501. RING("protection", PROTECTION, "black onyx",100, 1, 1, 7, MINERAL, CLR_BLACK),
502. RING("regeneration", REGENERATION, "moonstone",
503.         200, 1, 0, 6, MINERAL, HI_MINERAL),
504. RING("searching", SEARCHING, "tiger eye",   200, 1, 0, 6, GEMSTONE, CLR_BROWN),
505. RING("stealth", STEALTH, "jade",            100, 1, 0, 6, GEMSTONE, CLR_GREEN),
506. RING("sustain ability", FIXED_ABIL, "bronze",
507.         100, 1, 0, 4, COPPER, HI_COPPER),
508. RING("levitation", LEVITATION, "agate",     200, 1, 0, 7, GEMSTONE, CLR_RED),
509. RING("hunger", HUNGER, "topaz",             100, 1, 0, 8, GEMSTONE, CLR_CYAN),
510. RING("aggravate monster", AGGRAVATE_MONSTER, "sapphire",
511.         150, 1, 0, 9, GEMSTONE, CLR_BLUE),
512. RING("conflict", CONFLICT, "ruby",          300, 1, 0, 9, GEMSTONE, CLR_RED),
513. RING("warning", WARNING, "diamond",         100, 1, 0,10, GEMSTONE, CLR_WHITE),
514. RING("poison resistance", POISON_RES, "pearl",
515.         150, 1, 0, 4, IRON, CLR_WHITE),
516. RING("fire resistance", FIRE_RES, "iron",   200, 1, 0, 5, IRON, HI_METAL),
517. RING("cold resistance", COLD_RES, "brass",  150, 1, 0, 4, COPPER, HI_COPPER),
518. RING("shock resistance", SHOCK_RES, "copper",
519.         150, 1, 0, 3, COPPER, HI_COPPER),
520. RING("free action",     FREE_ACTION, "twisted",
521.         200, 1, 0, 6, IRON, HI_METAL),
522. RING("slow digestion",  SLOW_DIGESTION, "steel",
523.         200, 1, 0, 8, IRON, HI_METAL),
524. RING("teleportation", TELEPORT, "silver",   200, 1, 0, 3, SILVER, HI_SILVER),
525. RING("teleport control", TELEPORT_CONTROL, "gold",
526.         300, 1, 0, 3, GOLD, HI_GOLD),
527. RING("polymorph", POLYMORPH, "ivory",       300, 1, 0, 4, BONE, CLR_WHITE),
528. RING("polymorph control", POLYMORPH_CONTROL, "emerald",
529.         300, 1, 0, 8, GEMSTONE, CLR_BRIGHT_GREEN),
530. RING("invisibility", INVIS, "wire",         150, 1, 0, 5, IRON, HI_METAL),
531. RING("see invisible", SEE_INVIS, "engagement",
532.         150, 1, 0, 5, IRON, HI_METAL),
533. RING("protection from shape changers", PROT_FROM_SHAPE_CHANGERS, "shiny",
534.         100, 1, 0, 5, IRON, CLR_BRIGHT_CYAN),
535. #undef RING
536. 

Amulets

537. /* amulets ... - THE Amulet comes last because it is special */
538. #define AMULET(name,desc,power,prob) OBJECT( \
539. OBJ(name,desc), BITS(0,0,0,0,1,0,0,0,0,0,0,P_NONE,IRON), power, \
540. AMULET_CLASS, prob, 0, 20, 150, 0, 0, 0, 0, 20, HI_METAL )
541. 
542. AMULET("amulet of ESP",           "circular",   TELEPAT,    175),
543. AMULET("amulet of life saving",   "spherical",  LIFESAVED,   75),
544. AMULET("amulet of strangulation", "oval",       STRANGLED,  135),
545. AMULET("amulet of restful sleep", "triangular", SLEEPING,   135),
546. AMULET("amulet versus poison",    "pyramidal",  POISON_RES, 165),
547. AMULET("amulet of change",        "square",     0,          130),
548.     /* POLYMORPH */
549. AMULET("amulet of unchanging",    "concave",    UNCHANGING,  45),
550. AMULET("amulet of reflection",    "hexagonal",  REFLECTING,  75),
551. AMULET("amulet of magical breathing", "octagonal",      MAGICAL_BREATHING, 65),
552. OBJECT(OBJ("cheap plastic imitation of the Amulet of Yendor",
553.  "Amulet of Yendor"), BITS(0,0,1,0,0,0,0,0,0,0,0,0,PLASTIC), 0,
554.  AMULET_CLASS, 0, 0, 20,    0, 0, 0, 0, 0,  1, HI_METAL),
555. OBJECT(OBJ("Amulet of Yendor",  /* note: description == name */
556.  "Amulet of Yendor"), BITS(0,0,1,0,1,0,1,1,0,0,0,0,MITHRIL), 0,
557.  AMULET_CLASS, 0, 0, 20, 30000, 0, 0, 0, 0, 20, HI_METAL),
558. #undef AMULET
559. 

Tools

560. /* tools ... */
561. /* tools with weapon characteristics come last */
562. #define TOOL(name,desc,kn,mrg,mgc,chg,prob,wt,cost,mat,color) \
563.  OBJECT( OBJ(name,desc), \
564. BITS(kn,mrg,chg,0,mgc,chg,0,0,0,0,0,P_NONE,mat), \
565. 0, TOOL_CLASS, prob, 0, \
566. wt, cost, 0, 0, 0, 0, wt, color )
567. #define CONTAINER(name,desc,kn,mgc,chg,prob,wt,cost,mat,color) \
568.  OBJECT( OBJ(name,desc), \
569. BITS(kn,0,chg,1,mgc,chg,0,0,0,0,0,P_NONE,mat), \
570. 0, TOOL_CLASS, prob, 0, \
571. wt, cost, 0, 0, 0, 0, wt, color )
572. #define WEPTOOL(name,desc,kn,mgc,bi,prob,wt,cost,sdam,ldam,hitbon,sub,mat,clr) \
573.  OBJECT( OBJ(name,desc), \
574. BITS(kn,0,1,0,mgc,1,0,0,bi,0,hitbon,sub,mat), \
575. 0, TOOL_CLASS, prob, 0, \
576. wt, cost, sdam, ldam, hitbon, 0, wt, clr )
577. /* containers */
578. CONTAINER("large box", (char *)0,       1, 0, 0,  40,350,   8, WOOD, HI_WOOD),
579. CONTAINER("chest", (char *)0,           1, 0, 0,  35,600,  16, WOOD, HI_WOOD),
580. CONTAINER("ice box", (char *)0,         1, 0, 0,   5,900,  42, PLASTIC, CLR_WHITE),
581. CONTAINER("sack", "bag",                0, 0, 0,  35, 15,   2, CLOTH, HI_CLOTH),
582. CONTAINER("oilskin sack", "bag",        0, 0, 0,   5, 15, 100, CLOTH, HI_CLOTH),
583. CONTAINER("bag of holding", "bag",      0, 1, 0,  20, 15, 100, CLOTH, HI_CLOTH),
584. CONTAINER("bag of tricks", "bag",       0, 1, 1,  20, 15, 100, CLOTH, HI_CLOTH),
585. #undef CONTAINER
586. 
587. /* lock opening tools */
588. TOOL("skeleton key", "key",     0, 0, 0, 0,  80,  3,  10, IRON, HI_METAL),
589. #ifdef TOURIST
590. TOOL("lock pick", (char *)0,    1, 0, 0, 0,  60,  4,  20, IRON, HI_METAL),
591. TOOL("credit card", (char *)0,  1, 0, 0, 0,  15,  1,  10, PLASTIC, CLR_WHITE),
592. #else
593. TOOL("lock pick", (char *)0,    1, 0, 0, 0,  75,  4,  20, IRON, HI_METAL),
594. #endif
595. /* light sources */
596. TOOL("tallow candle", "candle", 0, 1, 0, 0,  20,  2,  10, WAX, CLR_WHITE),
597. TOOL("wax candle", "candle",    0, 1, 0, 0,   5,  2,  20, WAX, CLR_WHITE),
598. TOOL("brass lantern", (char *)0,1, 0, 0, 0,  30, 30,  12, COPPER, CLR_YELLOW),
599. TOOL("oil lamp", "lamp",        0, 0, 0, 0,  45, 20,  10, COPPER, CLR_YELLOW),
600. TOOL("magic lamp", "lamp",      0, 0, 1, 0,  15, 20,  50, COPPER, CLR_YELLOW),
601. /* other tools */
602. #ifdef TOURIST
603. TOOL("expensive camera", (char *)0,
604.   1, 0, 0, 1,  15, 12, 200, PLASTIC, CLR_BLACK),
605. TOOL("mirror", "looking glass", 0, 0, 0, 0,  45, 13,  10, GLASS, HI_SILVER),
606. #else
607. TOOL("mirror", "looking glass", 0, 0, 0, 0,  60, 13,  10, GLASS, HI_SILVER),
608. #endif
609. TOOL("crystal ball", "glass orb",
610.   0, 0, 1, 1,  15,150,  60, GLASS, HI_GLASS),
611. TOOL("lenses", (char *)0, 1, 0, 0, 0,   5,  3,  80, GLASS, HI_GLASS),
612. TOOL("blindfold", (char *)0,    1, 0, 0, 0,  50,  2,  20, CLOTH, CLR_BLACK),
613. TOOL("towel", (char *)0,        1, 0, 0, 0,  50,  2,  50, CLOTH, CLR_MAGENTA),
614. #ifdef STEED
615. TOOL("saddle", (char *)0,       1, 0, 0, 0,   5,200, 150, LEATHER, HI_LEATHER),
616. TOOL("leash", (char *)0,        1, 0, 0, 0,  65, 12,  20, LEATHER, HI_LEATHER),
617. #else
618. TOOL("leash", (char *)0,        1, 0, 0, 0,  70, 12,  20, LEATHER, HI_LEATHER),
619. #endif
620. TOOL("stethoscope", (char *)0,  1, 0, 0, 0,  25,  4,  75, IRON, HI_METAL),
621. TOOL("tinning kit", (char *)0,  1, 0, 0, 1,  15,100,  30, IRON, HI_METAL),
622. TOOL("tin opener", (char *)0,   1, 0, 0, 0,  35,  4,  30, IRON, HI_METAL),
623. TOOL("can of grease", (char *)0,1, 0, 0, 1,  15, 15,  20, IRON, HI_METAL),
624. TOOL("figurine", (char *)0,     1, 0, 1, 0,  25, 50,  80, MINERAL, HI_MINERAL),
625. TOOL("magic marker", (char *)0, 1, 0, 1, 1,  15,  2,  50, PLASTIC, CLR_RED),
626. /* traps */
627. TOOL("land mine",(char *)0,     1, 0, 0, 0,   0,300, 180, IRON, CLR_RED),
628. TOOL("beartrap", (char *)0,     1, 0, 0, 0,   0,200,  60, IRON, HI_METAL),
629. /* instruments */
630. TOOL("tin whistle", "whistle",  0, 0, 0, 0, 100,  3,  10, METAL, HI_METAL),
631. TOOL("magic whistle", "whistle",0, 0, 1, 0,  30,  3,  10, METAL, HI_METAL),
632. /* "If tin whistles are made out of tin, what do they make foghorns out of?" */
633. TOOL("wooden flute", "flute",   0, 0, 0, 0,   4,  5,  12, WOOD, HI_WOOD),
634. TOOL("magic flute", "flute",    0, 0, 1, 1,   2,  5,  36, WOOD, HI_WOOD),
635. TOOL("tooled horn", &quot;horn",     0, 0, 0, 0,   5, 18,  15, BONE, CLR_WHITE),
636. TOOL("frost horn", "horn",      0, 0, 1, 1,   2, 18,  50, BONE, CLR_WHITE),
637. TOOL("fire horn", "horn",       0, 0, 1, 1,   2, 18,  50, BONE, CLR_WHITE),
638. TOOL("horn of plenty", "horn",  0, 0, 1, 1,   2, 18,  50, BONE, CLR_WHITE),
639. TOOL("wooden harp", "harp",     0, 0, 0, 0,   4, 30,  50, WOOD, HI_WOOD),
640. TOOL("magic harp", "harp",      0, 0, 1, 1,   2, 30,  50, WOOD, HI_WOOD),
641. TOOL("bell", (char *)0,         1, 0, 0, 0,   2, 30,  50, COPPER, HI_COPPER),
642. TOOL("bugle", (char *)0,        1, 0, 0, 0,   4, 10,  15, COPPER, HI_COPPER),
643. TOOL("leather drum", "drum",    0, 0, 0, 0,   4, 25,  25, LEATHER, HI_LEATHER),
644. TOOL("drum of earthquake", "drum",
645.   0, 0, 1, 1,   2, 25,  25, LEATHER, HI_LEATHER),
646. /* tools useful as weapons */
647. WEPTOOL("pick-axe", (char *)0,
648.  1, 0, 0, 20, 100,  50, 6,  3, WHACK,  P_PICK_AXE, IRON, HI_METAL),
649. WEPTOOL("grappling hook", "iron hook",
650.  0, 0, 0,  5,  30,  50,  2,  6, WHACK,  P_FLAIL, IRON, HI_METAL),
651. /* 3.4.1: unicorn horn left classified as "magic" */
652. WEPTOOL("unicorn horn", (char *)0,
653.  1, 1, 1,  0,  20, 100, 12, 12, PIERCE, P_UNICORN_HORN, BONE, CLR_WHITE),
654. 
655. /* two special unique artifact "tools" */
656. OBJECT(OBJ("Candelabrum of Invocation", "candelabrum"),
657. BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,GOLD), 0,
658. TOOL_CLASS, 0, 0,10, 5000, 0, 0, 0, 0, 200, HI_GOLD),
659. OBJECT(OBJ("Bell of Opening", "silver bell"),
660. BITS(0,0,1,0,1,1,1,1,0,0,0,P_NONE,SILVER), 0,
661. TOOL_CLASS, 0, 0,10, 5000, 0, 0, 0, 0, 50, HI_SILVER),
662. #undef TOOL
663. #undef WEPTOOL
664. 

Comestibles

665. /* Comestibles ... */
666. #define FOOD(name,prob,delay,wt,unk,tin,nutrition,color) OBJECT( \
667. OBJ(name,(char *)0), BITS(1,1,unk,0,0,0,0,0,0,0,0,P_NONE,tin), 0, \
668. FOOD_CLASS, prob, delay, \
669. wt, nutrition/20 + 5, 0, 0, 0, 0, nutrition, color )
670. /* all types of food (except tins & corpses) must have a delay of at least 1. */
671. /* delay on corpses is computed and is weight dependant */
672. /* dog eats foods 0-4 but prefers tripe rations above all others */
673. /* fortune cookies can be read */
674. /* carrots improve your vision */
675. /* +0 tins contain monster meat */
676. /* +1 tins (of spinach) make you stronger (like Popeye) */
677. /* food CORPSE is a cadaver of some type */
678. /* meatballs/sticks/rings are only created from objects via stone to flesh */
679. 
680. /* meat */
681. FOOD("tripe ration",       140, 2, 10, 0, FLESH, 200, CLR_BROWN),
682. FOOD("corpse",               0, 1,  0, 0, FLESH,   0, CLR_BROWN),
683. FOOD("egg",                 85, 1,  1, 1, FLESH,  80, CLR_WHITE),
684. FOOD("meatball",             0, 1,  1, 0, FLESH,   5, CLR_BROWN),
685. FOOD("meat stick",           0, 1,  1, 0, FLESH,   5, CLR_BROWN),
686. FOOD("huge chunk of meat",   0,20,400, 0, FLESH,2000, CLR_BROWN),
687. /* special case because it's not mergable */
688. OBJECT(OBJ("meat ring", (char *)0),
689.     BITS(1,0,0,0,0,0,0,0,0,0,0,0,FLESH),
690.     0, FOOD_CLASS, 0, 1, 5, 1, 0, 0, 0, 0, 5, CLR_BROWN),
691. 
692. /* fruits & veggies */
693. FOOD("kelp frond",           0, 1,  1, 0, VEGGY,  30, CLR_GREEN),
694. FOOD("eucalyptus leaf",      3, 1,  1, 0, VEGGY,  30, CLR_GREEN),
695. FOOD("apple",               15, 1,  2, 0, VEGGY,  50, CLR_RED),
696. FOOD("orange",              10, 1,  2, 0, VEGGY,  80, CLR_ORANGE),
697. FOOD("pear",                10, 1,  2, 0, VEGGY,  50, CLR_BRIGHT_GREEN),
698. FOOD("melon",               10, 1,  5, 0, VEGGY, 100, CLR_BRIGHT_GREEN),
699. FOOD("banana",              10, 1,  2, 0, VEGGY,  80, CLR_YELLOW),
700. FOOD("carrot",              15, 1,  2, 0, VEGGY,  50, CLR_ORANGE),
701. FOOD("sprig of wolfsbane",   7, 1,  1, 0, VEGGY,  40, CLR_GREEN),
702. FOOD("clove of garlic",      7, 1,  1, 0, VEGGY,  40, CLR_WHITE),
703. FOOD("slime mold",          75, 1,  5, 0, VEGGY, 250, HI_ORGANIC),
704. 
705. /* people food */
706. FOOD("lump of royal jelly",  0, 1,  2, 0, VEGGY, 200, CLR_YELLOW),
707. FOOD("cream pie",           25, 1, 10, 0, VEGGY, 100, CLR_WHITE),
708. FOOD("candy bar",           13, 1,  2, 0, VEGGY, 100, CLR_BROWN),
709. FOOD("fortune cookie",      55, 1,  1, 0, VEGGY,  40, CLR_YELLOW),
710. FOOD("pancake",             25, 2,  2, 0, VEGGY, 200, CLR_YELLOW),
711. FOOD("lembas wafer",        20, 2,  5, 0, VEGGY, 800, CLR_WHITE),
712. FOOD("cram ration",         20, 3, 15, 0, VEGGY, 600, HI_ORGANIC),
713. FOOD("food ration",        380, 5, 20, 0, VEGGY, 800, HI_ORGANIC),
714. FOOD("K-ration",             0, 1, 10, 0, VEGGY, 400, HI_ORGANIC),
715. FOOD("C-ration",             0, 1, 10, 0, VEGGY, 300, HI_ORGANIC),
716. FOOD("tin",                 75, 0, 10, 1, METAL,   0, HI_METAL),
717. #undef FOOD
718. 

Potions

719. /* potions ... */
720. #define POTION(name,desc,mgc,power,prob,cost,color) OBJECT( \
721. OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,0,0,0,P_NONE,GLASS), power, \
722. POTION_CLASS, prob, 0, 20, cost, 0, 0, 0, 0, 10, color )
723. POTION("gain ability", "ruby",          1, 0,          42, 300, CLR_RED),
724. POTION("restore ability", "pink",       1, 0,          40, 100, CLR_BRIGHT_MAGENTA),
725. POTION("confusion", "orange",           1, CONFUSION,  42, 100, CLR_ORANGE),
726. POTION("blindness", "yellow",           1, BLINDED,    40, 150, CLR_YELLOW),
727. POTION("paralysis", "emerald",          1, 0,          42, 300, CLR_BRIGHT_GREEN),
728. POTION("speed", "dark green",           1, FAST,       42, 200, CLR_GREEN),
729. POTION("levitation", "cyan",            1, LEVITATION, 42, 200, CLR_CYAN),
730. POTION("hallucination", "sky blue",     1, HALLUC,     40, 100, CLR_CYAN),
731. POTION("invisibility", "brilliant blue",1, INVIS,      40, 150, CLR_BRIGHT_BLUE),
732. POTION("see invisible", "magenta",      1, SEE_INVIS,  42,  50, CLR_MAGENTA),
733. POTION("healing", "purple-red",         1, 0,          57, 100, CLR_MAGENTA),
734. POTION("extra healing", "puce",         1, 0,          47, 100, CLR_RED),
735. POTION("gain level", "milky",           1, 0,          20, 300, CLR_WHITE),
736. POTION("enlightenment", "swirly",       1, 0,          20, 200, CLR_BROWN),
737. POTION("monster detection", "bubbly",   1, 0,          40, 150, CLR_WHITE),
738. POTION("object detection", "smoky",     1, 0,          42, 150, CLR_GRAY),
739. POTION("gain energy", "cloudy",         1, 0,          42, 150, CLR_WHITE),
740. POTION("sleeping",  "effervescent",     1, 0,          42, 100, CLR_GRAY),
741. POTION("full healing",  "black",        1, 0,          10, 200, CLR_BLACK),
742. POTION("polymorph", "golden",           1, 0,          10, 200, CLR_YELLOW),
743. POTION("booze", "brown",                0, 0,          42,  50, CLR_BROWN),
744. POTION("sickness", "fizzy",             0, 0,          42,  50, CLR_CYAN),
745. POTION("fruit juice", "dark",           0, 0,          42,  50, CLR_BLACK),
746. POTION("acid", "white",                 0, 0,          10, 250, CLR_WHITE),
747. POTION("oil", "murky",                  0, 0,          30, 250, CLR_BROWN),
748. POTION("water", "clear",                0, 0,          92, 100, CLR_CYAN),
749. #undef POTION
750. 

Scrolls

751. /* scrolls ... */
752. #define SCROLL(name,text,mgc,prob,cost) OBJECT( \
753. OBJ(name,text), BITS(0,1,0,0,mgc,0,0,0,0,0,0,P_NONE,PAPER), 0, \
754. SCROLL_CLASS, prob, 0, 5, cost, 0, 0, 0, 0, 6, HI_PAPER )
755.  SCROLL("enchant armor",         "ZELGO MER",            1,  63,  80),
756.  SCROLL("destroy armor",         "JUYED AWK YACC",       1,  45, 100),
757.  SCROLL("confuse monster",       "NR 9",                 1,  53, 100),
758.  SCROLL("scare monster",         "XIXAXA XOXAXA XUXAXA", 1,  35, 100),
759.  SCROLL("remove curse",          "PRATYAVAYAH",          1,  65,  80),
760.  SCROLL("enchant weapon",        "DAIYEN FOOELS",        1,  80,  60),
761.  SCROLL("create monster",        "LEP GEX VEN ZEA",      1,  45, 200),
762.  SCROLL("taming",                "PRIRUTSENIE",          1,  15, 200),
763.  SCROLL("genocide",              "ELBIB YLOH",           1,  15, 300),
764.  SCROLL("light",                 "VERR YED HORRE",       1,  90,  50),
765.  SCROLL("teleportation",         "VENZAR BORGAVVE",      1,  55, 100),
766.  SCROLL("gold detection",        "THARR",                1,  33, 100),
767.  SCROLL("food detection",        "YUM YUM",              1,  25, 100),
768.  SCROLL("identify",              "KERNOD WEL",           1, 180,  20),
769.  SCROLL("magic mapping",         "ELAM EBOW",            1,  45, 100),
770.  SCROLL("amnesia",               "DUAM XNAHT",           1,  35, 200),
771.  SCROLL("fire",                  "ANDOVA BEGARIN",       1,  30, 100),
772.  SCROLL("earth",                 "KIRJE",                1,  18, 200),
773.  SCROLL("punishment",            "VE FORBRYDERNE",       1,  15, 300),
774.  SCROLL("charging",              "HACKEM MUCHE",         1,  15, 300),
775.  SCROLL("stinking cloud", "VELOX NEB",            1,  15, 300),
776.  SCROLL((char *)0,    "FOOBIE BLETCH",        1,   0, 100),
777.  SCROLL((char *)0,    "TEMOV",                1,   0, 100),
778.  SCROLL((char *)0,    "GARVEN DEH",           1,   0, 100),
779.  SCROLL((char *)0,    "READ ME",              1,   0, 100),
780.  /* these must come last because they have special descriptions */
781. #ifdef MAIL
782.  SCROLL("mail",                  "stamped",          0,   0,   0),
783. #endif
784.  SCROLL("blank paper",           "unlabeled",        0,  28,  60),
785. #undef SCROLL
786. 

Spellbooks

787. /* spellbooks ... */
788. #define SPELL(name,desc,sub,prob,delay,level,mgc,dir,color) OBJECT( \
789. OBJ(name,desc), BITS(0,0,0,0,mgc,0,0,0,0,0,dir,sub,PAPER), 0, \
790. SPBOOK_CLASS, prob, delay, \
791. 50, level*100, 0, 0, 0, level, 20, color )
792. SPELL("dig",             "parchment",   P_MATTER_SPELL, 20,  6, 5, 1, RAY,       HI_PAPER),
793. SPELL("magic missile",   "vellum",      P_ATTACK_SPELL, 45,  2, 2, 1, RAY,       HI_PAPER),
794. SPELL("fireball",        "ragged",      P_ATTACK_SPELL, 20,  4, 4, 1, RAY,       HI_PAPER),
795. SPELL("cone of cold",    "dog eared",   P_ATTACK_SPELL, 10,  7, 4, 1, RAY,       HI_PAPER),
796. SPELL("sleep",           "mottled",     P_ENCHANTMENT_SPELL, 50,  1, 1, 1, RAY,       HI_PAPER),
797. SPELL("finger of death", "stained",     P_ATTACK_SPELL,  5, 10, 7, 1, RAY,       HI_PAPER),
798. SPELL("light",           "cloth",       P_DIVINATION_SPELL, 45,  1, 1, 1, NODIR,     HI_CLOTH),
799. SPELL("detect monsters", "leather",     P_DIVINATION_SPELL, 43,  1, 1, 1, NODIR,     HI_LEATHER),
800. SPELL("healing",         "white",       P_HEALING_SPELL, 40,  2, 1, 1, IMMEDIATE, CLR_WHITE),
801. SPELL("knock",           "pink",        P_MATTER_SPELL, 35,  1, 1, 1, IMMEDIATE, CLR_BRIGHT_MAGENTA),
802. SPELL("force bolt",      "red",         P_ATTACK_SPELL, 35,  2, 1, 1, IMMEDIATE, CLR_RED),
803. SPELL("confuse monster", "orange",      P_ENCHANTMENT_SPELL, 30,  2, 2, 1, IMMEDIATE, CLR_ORANGE),
804. SPELL("cure blindness",  "yellow",      P_HEALING_SPELL, 25,  2, 2, 1, IMMEDIATE, CLR_YELLOW),
805. SPELL("drain life",      "velvet",      P_ATTACK_SPELL, 10,  2, 2, 1, IMMEDIATE, CLR_MAGENTA),
806. SPELL("slow monster",    "light green", P_ENCHANTMENT_SPELL, 30,  2, 2, 1, IMMEDIATE, CLR_BRIGHT_GREEN),
807. SPELL("wizard lock",     "dark green",  P_MATTER_SPELL, 30,  3, 2, 1, IMMEDIATE, CLR_GREEN),
808. SPELL("create monster",  "turquoise",   P_CLERIC_SPELL, 35,  3, 2, 1, NODIR,     CLR_BRIGHT_CYAN),
809. SPELL("detect food",     "cyan",        P_DIVINATION_SPELL, 30,  3, 2, 1, NODIR,     CLR_CYAN),
810. SPELL("cause fear",      "light blue",  P_ENCHANTMENT_SPELL, 25,  3, 3, 1, NODIR,     CLR_BRIGHT_BLUE),
811. SPELL("clairvoyance",    "dark blue",   P_DIVINATION_SPELL, 15,  3, 3, 1, NODIR,     CLR_BLUE),
812. SPELL("cure sickness",   "indigo",      P_HEALING_SPELL, 32,  3, 3, 1, NODIR,     CLR_BLUE),
813. SPELL("charm monster",   "magenta",     P_ENCHANTMENT_SPELL, 20,  3, 3, 1, IMMEDIATE, CLR_MAGENTA),
814. SPELL("haste self",      "purple",      P_ESCAPE_SPELL, 33,  4, 3, 1, NODIR,     CLR_MAGENTA),
815. SPELL("detect unseen",   "violet",      P_DIVINATION_SPELL, 20,  4, 3, 1, NODIR,     CLR_MAGENTA),
816. SPELL("levitation",      "tan",         P_ESCAPE_SPELL, 20,  4, 4, 1, NODIR,     CLR_BROWN),
817. SPELL("extra healing",   "plaid",       P_HEALING_SPELL, 27,  5, 3, 1, IMMEDIATE, CLR_GREEN),
818. SPELL("restore ability", "light brown", P_HEALING_SPELL, 25,  5, 4, 1, NODIR,     CLR_BROWN),
819. SPELL("invisibility",    "dark brown",  P_ESCAPE_SPELL, 25,  5, 4, 1, NODIR,     CLR_BROWN),
820. SPELL("detect treasure", "gray",        P_DIVINATION_SPELL, 20,  5, 4, 1, NODIR,     CLR_GRAY),
821. SPELL("remove curse",    "wrinkled",    P_CLERIC_SPELL, 25,  5, 3, 1, NODIR,     HI_PAPER),
822. SPELL("magic mapping",   "dusty",       P_DIVINATION_SPELL, 18,  7, 5, 1, NODIR,     HI_PAPER),
823. SPELL("identify",        "bronze",      P_DIVINATION_SPELL, 20,  6, 3, 1, NODIR,     HI_COPPER),
824. SPELL("turn undead",     "copper",      P_CLERIC_SPELL, 16,  8, 6, 1, IMMEDIATE, HI_COPPER),
825. SPELL("polymorph",       "silver",      P_MATTER_SPELL, 10,  8, 6, 1, IMMEDIATE, HI_SILVER),
826. SPELL("teleport away",   "gold",        P_ESCAPE_SPELL, 15,  6, 6, 1, IMMEDIATE, HI_GOLD),
827. SPELL("create familiar", "glittering",  P_CLERIC_SPELL, 10,  7, 6, 1, NODIR,     CLR_WHITE),
828. SPELL("cancellation",    "shining",     P_MATTER_SPELL, 15,  8, 7, 1, IMMEDIATE, CLR_WHITE),
829. SPELL("protection",      "dull",        P_CLERIC_SPELL, 18,  3, 1, 1, NODIR,     HI_PAPER),
830. SPELL("jumping",       "thin",        P_ESCAPE_SPELL, 20,  3, 1, 1, IMMEDIATE, HI_PAPER),
831. SPELL("stone to flesh",  "thick",       P_HEALING_SPELL, 15,  1, 3, 1, IMMEDIATE, HI_PAPER),
832. #if 0 /* DEFERRED */
833. SPELL("flame sphere",    "canvas",      P_MATTER_SPELL, 20,  2, 1, 1, NODIR, CLR_BROWN),
834. SPELL("freeze sphere",   "hardcover",   P_MATTER_SPELL, 20,  2, 1, 1, NODIR, CLR_BROWN),
835. #endif
836. /* blank spellbook must come last because it retains its description */
837. SPELL("blank paper",     "plain",       P_NONE, 18,  0, 0, 0, 0,         HI_PAPER),
838. /* a special, one of a kind, spellbook */
839. OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,PAPER), 0,
840.  SPBOOK_CLASS, 0, 0,20, 10000, 0, 0, 0, 7, 20, HI_PAPER),
841. #undef SPELL
842. 

Wands

843. /* wands ... */
844. #define WAND(name,typ,prob,cost,mgc,dir,metal,color) OBJECT( \
845. OBJ(name,typ), BITS(0,0,1,0,mgc,1,0,0,0,0,dir,P_NONE,metal), 0, \
846. WAND_CLASS, prob, 0, 7, cost, 0, 0, 0, 0, 30, color )
847. WAND("light",          "glass",    95, 100, 1, NODIR,     GLASS,    HI_GLASS),
848. WAND("secret door detection", "balsa",
849.      50, 150, 1, NODIR,   WOOD,     HI_WOOD),
850. WAND("enlightenment",  "crystal",  15, 150, 1, NODIR,     GLASS,    HI_GLASS),
851. WAND("create monster", "maple",    45, 200, 1, NODIR,     WOOD,     HI_WOOD),
852. WAND("wishing",        "pine",      5, 500, 1, NODIR,     WOOD,     HI_WOOD),
853. WAND("nothing",        "oak",      25, 100, 0, IMMEDIATE, WOOD,     HI_WOOD),
854. WAND("striking",       "ebony",    75, 150, 1, IMMEDIATE, WOOD,     HI_WOOD),
855. WAND("make invisible", "marble",   45, 150, 1, IMMEDIATE, MINERAL,  HI_MINERAL),
856. WAND("slow monster",   "tin",      50, 150, 1, IMMEDIATE, METAL,    HI_METAL),
857. WAND("speed monster",  "brass",    50, 150, 1, IMMEDIATE, COPPER,   HI_COPPER),
858. WAND("undead turning", "copper",   50, 150, 1, IMMEDIATE, COPPER,   HI_COPPER),
859. WAND("polymorph",      "silver",   45, 200, 1, IMMEDIATE, SILVER,   HI_SILVER),
860. WAND("cancellation",   "platinum", 45, 200, 1, IMMEDIATE, PLATINUM, CLR_WHITE),
861. WAND("teleportation",  "iridium",  45, 200, 1, IMMEDIATE, METAL,    CLR_BRIGHT_CYAN),
862. WAND("opening",        "zinc",     25, 150, 1, IMMEDIATE, METAL,    HI_METAL),
863. WAND("locking",        "aluminum", 25, 150, 1, IMMEDIATE, METAL,    HI_METAL),
864. WAND("probing",        "uranium",  30, 150, 1, IMMEDIATE, METAL,    HI_METAL),
865. WAND("digging",        "iron",     55, 150, 1, RAY,       IRON,     HI_METAL),
866. WAND("magic missile",  "steel",    50, 150, 1, RAY,       IRON,     HI_METAL),
867. WAND("fire",           "hexagonal",40, 175, 1, RAY,       IRON,     HI_METAL),
868. WAND("cold",           "short",    40, 175, 1, RAY,       IRON,     HI_METAL),
869. WAND("sleep",          "runed",    50, 175, 1, RAY,       IRON,     HI_METAL),
870. WAND("death",          "long",      5, 500, 1, RAY,       IRON,     HI_METAL),
871. WAND("lightning",      "curved",   40, 175, 1, RAY,       IRON,     HI_METAL),
872. WAND((char *)0,        "forked",    0, 150, 1, 0,         WOOD,     HI_WOOD),
873. WAND((char *)0,        "spiked",    0, 150, 1, 0,         IRON,     HI_METAL),
874. WAND((char *)0,        "jeweled",   0, 150, 1, 0,         IRON,     HI_MINERAL),
875. #undef WAND
876. 

Coins

877. /* coins ... - so far, gold is all there is */
878. #define COIN(name,prob,metal,worth) OBJECT( \
879. OBJ(name,(char *)0), BITS(0,1,0,0,0,0,0,0,0,0,0,P_NONE,metal), 0, \
880. COIN_CLASS, prob, 0, 1, worth, 0, 0, 0, 0, 0, HI_GOLD )
881.  COIN("gold piece",      1000, GOLD,1),
882. #undef COIN
883. 

Gems

884. /* gems ... - includes stones and rocks but not boulders */
885. #define GEM(name,desc,prob,wt,gval,nutr,mohs,glass,color) OBJECT( \
886.      OBJ(name,desc), \
887.      BITS(0,1,0,0,0,0,0,0,0,HARDGEM(mohs),0,-P_SLING,glass), 0, \
888.      GEM_CLASS, prob, 0, 1, gval, 3, 3, 0, 0, nutr, color )
889. #define ROCK(name,desc,kn,prob,wt,gval,sdam,ldam,mgc,nutr,mohs,glass,color) OBJECT( \
890.      OBJ(name,desc), \
891.      BITS(kn,1,0,0,mgc,0,0,0,0,HARDGEM(mohs),0,-P_SLING,glass), 0, \
892.      GEM_CLASS, prob, 0, wt, gval, sdam, ldam, 0, 0, nutr, color )
893. GEM("dilithium crystal", "white",      2,  1, 4500, 15,  5, GEMSTONE, CLR_WHITE),
894. GEM("diamond", "white",                3,  1, 4000, 15, 10, GEMSTONE, CLR_WHITE),
895. GEM("ruby", "red",                     4,  1, 3500, 15,  9, GEMSTONE, CLR_RED),
896. GEM("jacinth", "orange",               3,  1, 3250, 15,  9, GEMSTONE, CLR_ORANGE),
897. GEM("sapphire", "blue",                4,  1, 3000, 15,  9, GEMSTONE, CLR_BLUE),
898. GEM("black opal", "black",             3,  1, 2500, 15,  8, GEMSTONE, CLR_BLACK),
899. GEM("emerald", "green",                5,  1, 2500, 15,  8, GEMSTONE, CLR_GREEN),
900. GEM("turquoise", "green",              6,  1, 2000, 15,  6, GEMSTONE, CLR_GREEN),
901. GEM("citrine", "yellow",               4,  1, 1500, 15,  6, GEMSTONE, CLR_YELLOW),
902. GEM("aquamarine", "green",             6,  1, 1500, 15,  8, GEMSTONE, CLR_GREEN),
903. GEM("amber", "yellowish brown",        8,  1, 1000, 15,  2, GEMSTONE, CLR_BROWN),
904. GEM("topaz", "yellowish brown",       10,  1,  900, 15,  8, GEMSTONE, CLR_BROWN),
905. GEM("jet", "black",                    6,  1,  850, 15,  7, GEMSTONE, CLR_BLACK),
906. GEM("opal", "white",                  12,  1,  800, 15,  6, GEMSTONE, CLR_WHITE),
907. GEM("chrysoberyl", "yellow",           8,  1,  700, 15,  5, GEMSTONE, CLR_YELLOW),
908. GEM("garnet", "red",                  12,  1,  700, 15,  7, GEMSTONE, CLR_RED),
909. GEM("amethyst", "violet",             14,  1,  600, 15,  7, GEMSTONE, CLR_MAGENTA),
910. GEM("jasper", "red",                  15,  1,  500, 15,  7, GEMSTONE, CLR_RED),
911. GEM("fluorite", "violet",             15,  1,  400, 15,  4, GEMSTONE, CLR_MAGENTA),
912. GEM("obsidian", "black",               9,  1,  200, 15,  6, GEMSTONE, CLR_BLACK),
913. GEM("agate", "orange",                12,  1,  200, 15,  6, GEMSTONE, CLR_ORANGE),
914. GEM("jade", "green",                  10,  1,  300, 15,  6, GEMSTONE, CLR_GREEN),
915. GEM("worthless piece of white glass", "white",   77, 1, 0, 6, 5, GLASS, CLR_WHITE),
916. GEM("worthless piece of blue glass", "blue",     77, 1, 0, 6, 5, GLASS, CLR_BLUE),
917. GEM("worthless piece of red glass", "red",       77, 1, 0, 6, 5, GLASS, CLR_RED),
918. GEM("worthless piece of yellowish brown glass", "yellowish brown",
919.      77, 1, 0, 6, 5, GLASS, CLR_BROWN),
920. GEM("worthless piece of orange glass", "orange", 76, 1, 0, 6, 5, GLASS, CLR_ORANGE),
921. GEM("worthless piece of yellow glass", "yellow", 77, 1, 0, 6, 5, GLASS, CLR_YELLOW),
922. GEM("worthless piece of black glass",  "black",  76, 1, 0, 6, 5, GLASS, CLR_BLACK),
923. GEM("worthless piece of green glass", "green",   77, 1, 0, 6, 5, GLASS, CLR_GREEN),
924. GEM("worthless piece of violet glass", "violet", 77, 1, 0, 6, 5, GLASS, CLR_MAGENTA),
925. 
926. /* Placement note: there is a wishable subrange for
927.  * "gray stones" in the o_ranges[] array in objnam.c
928.  * that is currently everything between luckstones and flint (inclusive).
929.  */
930. ROCK("luckstone", "gray", 0, 10,  10, 60, 3, 3, 1, 10, 7, MINERAL, CLR_GRAY),
931. ROCK("loadstone", "gray", 0, 10, 500,  1, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY),
932. ROCK("touchstone", "gray",  0,  8,  10, 45, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY),
933. ROCK("flint", "gray",   0, 10,  10,  1, 6, 6, 0, 10, 7, MINERAL, CLR_GRAY),
934. ROCK("rock", (char *)0,   1,100,  10,  0, 3, 3, 0, 10, 7, MINERAL, CLR_GRAY),
935. #undef GEM
936. #undef ROCK
937. 

Miscellaneous

938. /* miscellaneous ... */
939. /* Note: boulders and rocks are not normally created at random; the
940.  * probabilities only come into effect when you try to polymorph them.
941.  * Boulders weigh more than MAX_CARR_CAP; statues use corpsenm to take
942.  * on a specific type and may act as containers (both affect weight).
943.  */
944. OBJECT(OBJ("boulder",(char *)0), BITS(1,0,0,0,0,0,0,0,1,0,0,P_NONE,MINERAL), 0,
945. ROCK_CLASS,   100, 0, 6000,  0, 20, 20, 0, 0, 2000, HI_MINERAL),
946. OBJECT(OBJ("statue", (char *)0), BITS(1,0,0,1,0,0,0,0,0,0,0,P_NONE,MINERAL), 0,
947. ROCK_CLASS,   900, 0, 2500,  0, 20, 20, 0, 0, 2500, CLR_WHITE),
948. 
949. OBJECT(OBJ("heavy iron ball", (char *)0), BITS(1,0,0,0,0,0,0,0,0,0,WHACK,P_NONE,IRON), 0,
950. BALL_CLASS,  1000, 0,  480, 10, 25, 25, 0, 0,  200, HI_METAL),
951.     /* +d4 when "very heavy" */
952. OBJECT(OBJ("iron chain", (char *)0), BITS(1,0,0,0,0,0,0,0,0,0,WHACK,P_NONE,IRON), 0,
953. CHAIN_CLASS, 1000, 0,  120,  0,  4,  4, 0, 0,  200, HI_METAL),
954.     /* +1 both l & s */
955. 
956. OBJECT(OBJ("blinding venom", "splash of venom"),
957. BITS(0,1,0,0,0,0,0,1,0,0,0,P_NONE,LIQUID), 0,
958. VENOM_CLASS,  500, 0,  1,  0,  0,  0, 0, 0,  0, HI_ORGANIC),
959. OBJECT(OBJ("acid venom", "splash of venom"),
960. BITS(0,1,0,0,0,0,0,1,0,0,0,P_NONE,LIQUID), 0,
961. VENOM_CLASS,  500, 0,  1,  0,  6,  6, 0, 0,  0, HI_ORGANIC),
962. /* +d6 small or large */
963. 
964. /* fencepost, the deadly Array Terminator -- name [1st arg] *must* be NULL */
965.  OBJECT(OBJ((char *)0,(char *)0), BITS(0,0,0,0,0,0,0,0,0,0,0,P_NONE,0), 0,
966. ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
967. }; /* objects[] */
968. 
969. #ifndef OBJECTS_PASS_2_
970. 
971. /* perform recursive compilation for second structure */
972. #  undef OBJ
973. #  undef OBJECT
974. #  define OBJECTS_PASS_2_
975. #include "objects.c"
976. 
977. void NDECL(objects_init);
978. 
979. /* dummy routine used to force linkage */
980. void
981. objects_init()
982. {
983.     return;
984. }
985. 
986. #endif  /* !OBJECTS_PASS_2_ */
987. 
988. /*objects.c*/