Source:SLASH'EM 0.0.7E7F2/u init.c

From NetHackWiki
Jump to navigation Jump to search

Below is the full text to u_init.c from the source code of SLASH'EM 0.0.7E7F2. To link to a particular line, write [[SLASH'EM 0.0.7E7F2/u_init.c#line123]], for example.

The latest source code for vanilla NetHack is at Source code.


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.

1.    /*	SCCS Id: @(#)u_init.c	3.4	2002/10/22	*/
2.    /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3.    /* NetHack may be freely redistributed.  See license for details. */
4.    
5.    #include "hack.h"
6.    
7.    struct trobj {
8.    	short trotyp;
9.    	schar trspe;
10.   	char trclass;
11.   	Bitfield(trquan,6);
12.   	Bitfield(trbless,2);
13.   };
14.   
15.   STATIC_DCL void FDECL(ini_inv, (struct trobj *));
16.   STATIC_DCL void FDECL(knows_object,(int));
17.   STATIC_DCL void FDECL(knows_class,(CHAR_P));
18.   STATIC_DCL boolean FDECL(restricted_spell_discipline, (int));
19.   
20.   #define UNDEF_TYP	0
21.   #define UNDEF_SPE	'\177'
22.   #define UNDEF_BLESS	2
23.   
24.   /*
25.    *	Initial inventory for the various roles.
26.    */
27.   
28.   static struct trobj Archeologist[] = {
29.   #define A_BOOK          4
30.   	/* if adventure has a name...  idea from tan@uvm-gen */
31.   	{ BULLWHIP, 2, WEAPON_CLASS, 1, UNDEF_BLESS },
32.   	{ LEATHER_JACKET, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
33.   	{ FEDORA, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
34.   	{ FOOD_RATION, 0, FOOD_CLASS, 3, 0 },
35.   	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },        
36.   	{ UNDEF_TYP, UNDEF_SPE, SCROLL_CLASS, 2, UNDEF_BLESS },
37.   	{ PICK_AXE, UNDEF_SPE, TOOL_CLASS, 1, UNDEF_BLESS },
38.   	{ TINNING_KIT, UNDEF_SPE, TOOL_CLASS, 1, UNDEF_BLESS },
39.   	{ TOUCHSTONE, 0, GEM_CLASS, 1, 0 },
40.   	{ SACK, 0, TOOL_CLASS, 1, 0 },
41.   	{ 0, 0, 0, 0, 0 }
42.   };
43.   static struct trobj Barbarian[] = {
44.   #define B_MAJOR	0	/* two-handed sword or battle-axe  */
45.   #define B_MINOR	1	/* matched with axe or short sword */
46.   	{ TWO_HANDED_SWORD, 0, WEAPON_CLASS, 1, UNDEF_BLESS },
47.   	{ AXE, 0, WEAPON_CLASS, 1, UNDEF_BLESS },
48.   	{ RING_MAIL, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
49.   	{ FOOD_RATION, 0, FOOD_CLASS, 2, 0 },
50.   	{ 0, 0, 0, 0, 0 }
51.   };
52.   static struct trobj Cave_man[] = {
53.   #define C_AMMO	2
54.   	{ CLUB, 1, WEAPON_CLASS, 1, UNDEF_BLESS },
55.   	{ SLING, 2, WEAPON_CLASS, 1, UNDEF_BLESS },
56.   	{ FLINT, 0, GEM_CLASS, 15, UNDEF_BLESS },	/* quan is variable */
57.   	{ ROCK, 0, GEM_CLASS, 3, 0 },			/* yields 18..33 */
58.   	{ LEATHER_ARMOR, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
59.   	{ 0, 0, 0, 0, 0 }
60.   };
61.   static struct trobj Flame_Mage[] = {
62.   #define F_BOOK          9
63.   	{ QUARTERSTAFF, 1, WEAPON_CLASS, 1, 1 },        /* for dealing with ghosts */
64.   	{ STUDDED_LEATHER_ARMOR, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
65.   	{ FOOD_RATION, 0, FOOD_CLASS, 2, 0 },
66.   	{ UNDEF_TYP, UNDEF_SPE, POTION_CLASS, 1, UNDEF_BLESS },
67.   	{ UNDEF_TYP, UNDEF_SPE, SCROLL_CLASS, 1, UNDEF_BLESS },
68.   	{ WAN_FIRE, UNDEF_SPE, WAND_CLASS, 1, UNDEF_BLESS },
69.   	{ UNDEF_TYP, UNDEF_SPE, RING_CLASS, 1, UNDEF_BLESS },
70.   	{ SPE_FLAME_SPHERE, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
71.   	{ SPE_FIREBALL, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
72.   	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
73.     	{ 0, 0, 0, 0, 0 }
74.   };
75.   static struct trobj Healer[] = {
76.   	{ SCALPEL, 1, WEAPON_CLASS, 1, UNDEF_BLESS },
77.   	{ LEATHER_GLOVES, 1, ARMOR_CLASS, 1, UNDEF_BLESS },
78.   	{ STETHOSCOPE, 0, TOOL_CLASS, 1, 0 },
79.   	{ MEDICAL_KIT, 0, TOOL_CLASS, 1, 0 },        
80.   	{ POT_HEALING, 0, POTION_CLASS, 4, UNDEF_BLESS },
81.   	{ POT_EXTRA_HEALING, 0, POTION_CLASS, 4, UNDEF_BLESS },
82.   	{ WAN_SLEEP, UNDEF_SPE, WAND_CLASS, 1, UNDEF_BLESS },
83.   	/* [Tom] they might as well have a wand of healing, too */        
84.   	{ WAN_HEALING, UNDEF_SPE, WAND_CLASS, 1, UNDEF_BLESS },
85.   	/* always blessed, so it's guaranteed readable */
86.   	{ SPE_HEALING, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
87.   	{ SPE_STONE_TO_FLESH, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
88.   	{ APPLE, 0, FOOD_CLASS, 10, 0 },
89.   	{ 0, 0, 0, 0, 0 }
90.   };
91.   static struct trobj Ice_Mage[] = {
92.   #define I_BOOK          9
93.   	{ QUARTERSTAFF, 1, WEAPON_CLASS, 1, 1 },        /* for dealing with ghosts */
94.   	{ STUDDED_LEATHER_ARMOR, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
95.   	{ FOOD_RATION, 0, FOOD_CLASS, 2, 0 },
96.   	{ UNDEF_TYP, UNDEF_SPE, POTION_CLASS, 1, UNDEF_BLESS },
97.   	{ UNDEF_TYP, UNDEF_SPE, SCROLL_CLASS, 1, UNDEF_BLESS },
98.   	{ WAN_COLD, UNDEF_SPE, WAND_CLASS, 1, UNDEF_BLESS },
99.   	{ UNDEF_TYP, UNDEF_SPE, RING_CLASS, 1, UNDEF_BLESS },
100.  	{ SPE_FREEZE_SPHERE, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
101.  	{ SPE_CONE_OF_COLD, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
102.  	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
103.  	{ 0, 0, 0, 0, 0 }
104.  };
105.  static struct trobj Knight[] = {
106.  	{ LONG_SWORD, 1, WEAPON_CLASS, 1, UNDEF_BLESS },
107.  	{ LANCE, 0, WEAPON_CLASS, 1, UNDEF_BLESS },
108.  	{ PLATE_MAIL, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
109.  	{ HELMET, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
110.  	{ LARGE_SHIELD, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
111.  	{ LEATHER_GLOVES, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
112.  	{ APPLE, 0, FOOD_CLASS, 10, 0 },
113.  	{ CARROT, 0, FOOD_CLASS, 10, 0 },
114.  	{ 0, 0, 0, 0, 0 }
115.  };
116.  static struct trobj Monk[] = {
117.  #define M_BOOK		2
118.  	{ LEATHER_GLOVES, 2, ARMOR_CLASS, 1, UNDEF_BLESS },
119.  	{ ROBE, 1, ARMOR_CLASS, 1, UNDEF_BLESS },
120.  	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
121.  	{ UNDEF_TYP, UNDEF_SPE, SCROLL_CLASS, 1, UNDEF_BLESS },
122.  	{ POT_HEALING, 0, POTION_CLASS, 3, UNDEF_BLESS },
123.  	{ FOOD_RATION, 0, FOOD_CLASS, 3, 0 },
124.  	{ APPLE, 0, FOOD_CLASS, 5, UNDEF_BLESS },
125.  	{ ORANGE, 0, FOOD_CLASS, 5, UNDEF_BLESS },
126.  	/* Yes, we know fortune cookies aren't really from China.  They were
127.  	 * invented by George Jung in Los Angeles, California, USA in 1916.
128.  	 */
129.  	{ FORTUNE_COOKIE, 0, FOOD_CLASS, 3, UNDEF_BLESS },
130.  	{ 0, 0, 0, 0, 0 }
131.  };
132.  static struct trobj Necromancer[] = {
133.  #define N_BOOK          8
134.  /* pretty much like Wizard, except with pick-axe instead of magic resist. */
135.  	{ QUARTERSTAFF, 1, WEAPON_CLASS, 1, 1 },        /* for dealing with ghosts */
136.  	{ UNDEF_TYP, UNDEF_SPE, RING_CLASS, 2, UNDEF_BLESS },
137.  	{ UNDEF_TYP, UNDEF_SPE, POTION_CLASS, 3, UNDEF_BLESS },
138.  	{ UNDEF_TYP, UNDEF_SPE, SCROLL_CLASS, 3, UNDEF_BLESS },
139.  	{ SPE_SUMMON_UNDEAD, 0, SPBOOK_CLASS, 1, 1 },
140.  	{ SPE_COMMAND_UNDEAD, 0, SPBOOK_CLASS, 1, 1 },
141.  	{ SPE_DRAIN_LIFE, 0, SPBOOK_CLASS, 1, 1 },
142.  		/* WAC -- gave him drain life rather than turn undead */
143.  	{ WAN_DRAINING, UNDEF_SPE, WAND_CLASS, 1, UNDEF_BLESS },
144.  		/* KMH -- ...and the matching wand for the inexperienced */
145.  	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
146.  	{ PICK_AXE, UNDEF_SPE, TOOL_CLASS, 1, UNDEF_BLESS },
147.  	{ 0, 0, 0, 0, 0 }
148.  };
149.  static struct trobj Priest[] = {
150.  #define P_BOOK          7
151.  	{ MACE, 0, WEAPON_CLASS, 1, 1 },
152.  	{ ROBE, 0, ARMOR_CLASS, 1, 1 },
153.  	{ SMALL_SHIELD, 2, ARMOR_CLASS, 1, 1 },
154.  	{ POT_WATER, 0, POTION_CLASS, 4, 1 },	/* holy water */
155.  	{ CLOVE_OF_GARLIC, 0, FOOD_CLASS, 1, 1 },
156.  	{ SPRIG_OF_WOLFSBANE, 0, FOOD_CLASS, 1, 1 },
157.  	{ SPE_HEALING, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
158.  	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
159.  	{ UNDEF_TYP, UNDEF_SPE, SCROLL_CLASS, 1, 1 },
160.  	{ 0, 0, 0, 0, 0 }
161.  };
162.  static struct trobj Ranger[] = {
163.  #define RAN_BOW			1
164.  #define RAN_TWO_ARROWS	2
165.  #define RAN_ZERO_ARROWS	3
166.  	{ DAGGER, 1, WEAPON_CLASS, 1, UNDEF_BLESS },
167.  	{ BOW, 1, WEAPON_CLASS, 1, UNDEF_BLESS },
168.  	{ ARROW, 2, WEAPON_CLASS, 50, UNDEF_BLESS },
169.  	{ ARROW, 0, WEAPON_CLASS, 30, UNDEF_BLESS },
170.  	{ CLOAK_OF_DISPLACEMENT, 2, ARMOR_CLASS, 1, UNDEF_BLESS },
171.  	{ CRAM_RATION, 0, FOOD_CLASS, 4, 0 },
172.  	{ 0, 0, 0, 0, 0 }
173.  };
174.  static struct trobj Rogue[] = {
175.  #define R_DAGGERS	1
176.  #define R_DARTS         2
177.  	{ SHORT_SWORD, 0, WEAPON_CLASS, 1, UNDEF_BLESS },
178.  	{ DAGGER, 0, WEAPON_CLASS, 10, 0 },	/* quan is variable */
179.  	{ DART, 0, WEAPON_CLASS, 25, UNDEF_BLESS },
180.  	{ LEATHER_ARMOR, 1, ARMOR_CLASS, 1, UNDEF_BLESS },
181.  	{ POT_SICKNESS, 0, POTION_CLASS, 1, 0 },
182.  	{ SCR_GOLD_DETECTION, 0, SCROLL_CLASS, 4, 1 },
183.  	{ SCR_TELEPORTATION, 0, SCROLL_CLASS, 4, 1 },
184.  	{ LOCK_PICK, 9, TOOL_CLASS, 1, 0 },
185.  	{ OILSKIN_SACK, 0, TOOL_CLASS, 1, 0 },
186.  	{ 0, 0, 0, 0, 0 }
187.  };
188.  static struct trobj Samurai[] = {
189.  #define S_ARROWS	3
190.  	{ KATANA, 0, WEAPON_CLASS, 1, UNDEF_BLESS },
191.  	{ SHORT_SWORD, 0, WEAPON_CLASS, 1, UNDEF_BLESS }, /* wakizashi */
192.  	{ YUMI, 0, WEAPON_CLASS, 1, UNDEF_BLESS },
193.  	{ YA, 0, WEAPON_CLASS, 25, UNDEF_BLESS }, /* variable quan */
194.  	{ SPLINT_MAIL, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
195.  	{ 0, 0, 0, 0, 0 }
196.  };
197.  #ifdef TOURIST
198.  static struct trobj Tourist[] = {
199.  #define T_DARTS		0
200.  	{ DART, 2, WEAPON_CLASS, 25, UNDEF_BLESS },	/* quan is variable */
201.  	{ UNDEF_TYP, UNDEF_SPE, FOOD_CLASS, 12, 0 },
202.  	{ POT_EXTRA_HEALING, 0, POTION_CLASS, 2, UNDEF_BLESS },
203.  	{ SCR_MAGIC_MAPPING, 0, SCROLL_CLASS, 6, UNDEF_BLESS },
204.  	{ HAWAIIAN_SHIRT, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
205.  	{ EXPENSIVE_CAMERA, UNDEF_SPE, TOOL_CLASS, 1, 0 },
206.  	{ CREDIT_CARD, 0, TOOL_CLASS, 1, 0 },
207.  	{ 0, 0, 0, 0, 0 }
208.  };
209.  #endif
210.  static struct trobj UndeadSlayer[] = {
211.  #define U_MINOR 1       /* silver spear or whip [Castlevania] 25/25% */
212.                          /* crossbow 50% [Buffy] */
213.  #define U_RANGE 2       /* silver daggers or crossbow bolts */
214.  #define U_MISC  3       /* +1 boots [Buffy can kick] or helmet */
215.  #define U_ARMOR 4       /* Tshirt/leather +1 or chain mail */
216.  	{ WOODEN_STAKE, 0, WEAPON_CLASS, 1, UNDEF_BLESS },
217.  	{ SILVER_SPEAR, 0, WEAPON_CLASS, 1, UNDEF_BLESS },
218.  	{ SILVER_DAGGER, 0, WEAPON_CLASS, 5, UNDEF_BLESS },
219.  	{ HELMET, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
220.  	{ CHAIN_MAIL, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
221.  	{ CLOVE_OF_GARLIC, 0, FOOD_CLASS, 5, 1 },
222.  	{ SPRIG_OF_WOLFSBANE, 0, FOOD_CLASS, 5, 1 },
223.  	{ HOLY_WAFER, 0, FOOD_CLASS, 4, 0 },
224.  	{ POT_WATER, 0, POTION_CLASS, 4, 1 },        /* holy water */
225.  	{ 0, 0, 0, 0, 0 }
226.  };
227.  static struct trobj Valkyrie[] = {
228.  /*        { LONG_SWORD, 1, WEAPON_CLASS, 1, UNDEF_BLESS }, */
229.  	{ SPEAR, 1, WEAPON_CLASS, 1, UNDEF_BLESS }, /* Traditional Weapon - WAC*/
230.  	{ DAGGER, 0, WEAPON_CLASS, 5, UNDEF_BLESS },
231.  	{ SMALL_SHIELD, 3, ARMOR_CLASS, 1, UNDEF_BLESS },
232.  	{ FOOD_RATION, 0, FOOD_CLASS, 1, 0 },
233.  	{ 0, 0, 0, 0, 0 }
234.  };
235.  static struct trobj Wizard[] = {
236.  #define W_MULTSTART	2
237.  #define W_MULTEND	6
238.  #define W_BOOK1         6
239.  #define W_BOOK2         7
240.  #define W_BOOK3         8
241.  #define W_BOOK4         9
242.  	{ QUARTERSTAFF, 1, WEAPON_CLASS, 1, 1 },
243.  	{ CLOAK_OF_MAGIC_RESISTANCE, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
244.  	{ UNDEF_TYP, UNDEF_SPE, WAND_CLASS, 1, UNDEF_BLESS },
245.  	{ UNDEF_TYP, UNDEF_SPE, RING_CLASS, 2, UNDEF_BLESS },
246.  	{ UNDEF_TYP, UNDEF_SPE, POTION_CLASS, 3, UNDEF_BLESS },
247.  	{ UNDEF_TYP, UNDEF_SPE, SCROLL_CLASS, 3, UNDEF_BLESS },
248.  	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
249.  	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
250.  	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
251.  	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
252.  	{ 0, 0, 0, 0, 0 }
253.  };
254.  #ifdef YEOMAN
255.  static struct trobj Yeoman[] = {
256.  	{ SHORT_SWORD, 2, WEAPON_CLASS, 1, UNDEF_BLESS },
257.  	{ PARTISAN, 1, WEAPON_CLASS, 1, UNDEF_BLESS },
258.  	{ LEATHER_ARMOR, 1, ARMOR_CLASS, 1, UNDEF_BLESS },
259.  	{ HIGH_BOOTS, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
260.  	{ LEATHER_GLOVES, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
261.  	{ APPLE, 0, FOOD_CLASS, 10, 0 },
262.  	{ CARROT, 0, FOOD_CLASS, 10, 0 },
263.  	{ POT_WATER, 0, POTION_CLASS, 3, 0 },
264.  	{ FISHING_POLE, 0, TOOL_CLASS, 1, 0 },
265.  	{ 0, 0, 0, 0, 0 }
266.  };
267.  #endif
268.  
269.  /*
270.   *	Optional extra inventory items.
271.   */
272.  
273.  static struct trobj Tinopener[] = {
274.  	{ TIN_OPENER, 0, TOOL_CLASS, 1, 0 },
275.  	{ 0, 0, 0, 0, 0 }
276.  };
277.  static struct trobj Magicmarker[] = {
278.  	{ MAGIC_MARKER, UNDEF_SPE, TOOL_CLASS, 1, 0 },
279.  	{ 0, 0, 0, 0, 0 }
280.  };
281.  static struct trobj Lamp[] = {
282.  	{ OIL_LAMP, 1, TOOL_CLASS, 1, 0 },
283.  	{ 0, 0, 0, 0, 0 }
284.  };
285.  static struct trobj Torch[] = {
286.  	{ TORCH, 0, TOOL_CLASS, 2, 0 },
287.  	{ 0, 0, 0, 0, 0 }
288.  };
289.  static struct trobj Blindfold[] = {
290.  	{ BLINDFOLD, 0, TOOL_CLASS, 1, 0 },
291.  	{ 0, 0, 0, 0, 0 }
292.  };
293.  static struct trobj Instrument[] = {
294.  	{ WOODEN_FLUTE, 0, TOOL_CLASS, 1, 0 },
295.  	{ 0, 0, 0, 0, 0 }
296.  };
297.  static struct trobj Xtra_food[] = {
298.  	{ UNDEF_TYP, UNDEF_SPE, FOOD_CLASS, 2, 0 },
299.  	{ 0, 0, 0, 0, 0 }
300.  };
301.  #ifdef TOURIST
302.  static struct trobj Leash[] = {
303.  	{ LEASH, 0, TOOL_CLASS, 1, 0 },
304.  	{ 0, 0, 0, 0, 0 }
305.  };
306.  static struct trobj Towel[] = {
307.  	{ TOWEL, 0, TOOL_CLASS, 1, 0 },
308.  	{ 0, 0, 0, 0, 0 }
309.  };
310.  #endif	/* TOURIST */
311.  static struct trobj Wishing[] = {
312.  	{ WAN_WISHING, 3, WAND_CLASS, 1, 0 },
313.  	{ 0, 0, 0, 0, 0 }
314.  };
315.  #ifdef GOLDOBJ
316.  static struct trobj Money[] = {
317.  	{ GOLD_PIECE, 0 , COIN_CLASS, 1, 0 },
318.  	{ 0, 0, 0, 0, 0 }
319.  };
320.  #endif
321.  
322.  /* race-based substitutions for initial inventory;
323.     the weaker cloak for elven rangers is intentional--they shoot better */
324.  static struct inv_sub { short race_pm, item_otyp, subs_otyp; } inv_subs[] = {
325.      { PM_ELF,	DAGGER,			ELVEN_DAGGER	      },
326.      { PM_ELF,	SPEAR,			ELVEN_SPEAR	      },
327.      { PM_ELF,	SHORT_SWORD,		ELVEN_SHORT_SWORD     },
328.      { PM_ELF,	BOW,			ELVEN_BOW	      },
329.      { PM_ELF,	ARROW,			ELVEN_ARROW	      },
330.      { PM_ELF,	HELMET,			ELVEN_LEATHER_HELM    },
331.   /* { PM_ELF,	SMALL_SHIELD,		ELVEN_SHIELD	      }, */
332.      { PM_ELF,	CLOAK_OF_DISPLACEMENT,	ELVEN_CLOAK	      },
333.      { PM_ELF,	CRAM_RATION,		LEMBAS_WAFER	      },
334.      { PM_ORC,	DAGGER,			ORCISH_DAGGER	      },
335.      { PM_ORC,	SPEAR,			ORCISH_SPEAR	      },
336.      { PM_ORC,	SHORT_SWORD,		ORCISH_SHORT_SWORD    },
337.      { PM_ORC,	BOW,			ORCISH_BOW	      },
338.      { PM_ORC,	ARROW,			ORCISH_ARROW	      },
339.      { PM_ORC,	HELMET,			ORCISH_HELM	      },
340.      { PM_ORC,	SMALL_SHIELD,		ORCISH_SHIELD	      },
341.      { PM_ORC,	RING_MAIL,		ORCISH_RING_MAIL      },
342.      { PM_ORC,	CHAIN_MAIL,		ORCISH_CHAIN_MAIL     },
343.      { PM_DWARF, SPEAR,			DWARVISH_SPEAR	      },
344.      { PM_DWARF, SHORT_SWORD,		DWARVISH_SHORT_SWORD  },
345.      { PM_DWARF, HELMET,			DWARVISH_IRON_HELM    },
346.   /* { PM_DWARF, SMALL_SHIELD,		DWARVISH_ROUNDSHIELD  }, */
347.   /* { PM_DWARF, PICK_AXE,		DWARVISH_MATTOCK      }, */
348.      { PM_GNOME, BOW,			CROSSBOW	      },
349.      { PM_GNOME, ARROW,			CROSSBOW_BOLT	      },
350.      { PM_HUMAN_WEREWOLF,FOOD_RATION,		TRIPE_RATION	      },
351.      { PM_HUMAN_WEREWOLF,SILVER_SPEAR,		SPEAR		      },
352.      { PM_HUMAN_WEREWOLF,SILVER_DAGGER,		DAGGER		      },
353.  #ifdef FIREARMS
354.      { PM_HUMAN_WEREWOLF,SILVER_BULLET,		BULLET		      },
355.  #endif
356.      { PM_DROW,		DAGGER,			DARK_ELVEN_DAGGER     },
357.      { PM_DROW,		SHORT_SWORD,		DARK_ELVEN_SHORT_SWORD},
358.      { PM_DROW,		BOW,			DARK_ELVEN_BOW	      },
359.      { PM_DROW,		ARROW,			DARK_ELVEN_ARROW      },
360.      { PM_VAMPIRE,	POT_FRUIT_JUICE,	POT_BLOOD	      },
361.      { PM_VAMPIRE,	FOOD_RATION,		POT_VAMPIRE_BLOOD     },
362.      { NON_PM,	STRANGE_OBJECT,		STRANGE_OBJECT	      }
363.  };
364.  
365.  /* align-based substitutions for initial inventory */
366.  struct inv_asub { aligntyp align; short item_otyp, subs_otyp; };
367.  static struct inv_asub inv_asubs[] = {
368.      { A_CHAOTIC,	HOLY_WAFER,		LEMBAS_WAFER	      },
369.      { A_NONE,		STRANGE_OBJECT,		STRANGE_OBJECT	      }
370.  };
371.  
372.  /* KMH -- Expectations for skills.
373.   *	1.	Starting equipment will start as basic, and should have a maximum
374.   *		of at least skilled.  If you enter the dungeon with it, you should
375.   *		know how to use it.  See weapon.c, skill_init().
376.   *	2.	First and second artifact gifts should have a maximum of at least
377.   *		skilled.  See artifact.c, init_artifacts().
378.   *	3.	Quest artifacts should have a maximum of expert.  See artifact.c,
379.   *		init_artifacts().
380.   *	4.	Races that construct weapons (elf, dwarf, orc) should have
381.   *		a maximum of expert in those weapons.
382.   *	5.	Spellcasters should get a maximum of at least basic in all spell
383.   *		categories.
384.   */
385.  
386.  static const struct def_skill Skill_A[] = {
387.      { P_DAGGER, P_BASIC },		{ P_KNIFE,  P_BASIC },
388.      { P_PICK_AXE, P_EXPERT },		{ P_SHORT_SWORD, P_BASIC },
389.      { P_SCIMITAR, P_SKILLED },		{ P_SABER, P_EXPERT },
390.      { P_CLUB, P_SKILLED },              { P_PADDLE, P_BASIC },
391.      { P_QUARTERSTAFF, P_SKILLED },
392.  #ifdef FIREARMS
393.      { P_FIREARM, P_SKILLED },
394.  #endif
395.      { P_SLING, P_SKILLED },		{ P_DART, P_BASIC },
396.      { P_BOOMERANG, P_EXPERT },		{ P_WHIP, P_EXPERT },
397.      { P_UNICORN_HORN, P_SKILLED },
398.      { P_ATTACK_SPELL, P_BASIC },	{ P_HEALING_SPELL, P_BASIC },
399.      { P_DIVINATION_SPELL, P_EXPERT },   { P_ENCHANTMENT_SPELL, P_BASIC },
400.      { P_PROTECTION_SPELL, P_BASIC },    { P_BODY_SPELL, P_BASIC },
401.      { P_MATTER_SPELL, P_SKILLED },
402.      /*WAC- 'A' knows of all spells from studying,  but only really good
403.      at divination class*/
404.      { P_TWO_WEAPON_COMBAT, P_BASIC },
405.      { P_BARE_HANDED_COMBAT, P_EXPERT },
406.      { P_NONE, 0 }
407.  };
408.  
409.  static const struct def_skill Skill_B[] = {
410.      { P_DAGGER, P_BASIC },		{ P_AXE, P_EXPERT },
411.      { P_PICK_AXE, P_SKILLED },	{ P_SHORT_SWORD, P_EXPERT },
412.      { P_BROAD_SWORD, P_SKILLED },	{ P_LONG_SWORD, P_SKILLED },
413.      { P_TWO_HANDED_SWORD, P_EXPERT },	{ P_SCIMITAR, P_SKILLED },
414.      { P_SABER, P_BASIC },		{ P_CLUB, P_SKILLED },
415.      { P_PADDLE, P_SKILLED },
416.      { P_MACE, P_SKILLED },		{ P_MORNING_STAR, P_SKILLED },
417.      { P_FLAIL, P_BASIC },		{ P_HAMMER, P_EXPERT },
418.      { P_QUARTERSTAFF, P_BASIC },	{ P_SPEAR, P_SKILLED },
419.      { P_TRIDENT, P_SKILLED },		{ P_BOW, P_BASIC },
420.      { P_ATTACK_SPELL, P_SKILLED },	{ P_BODY_SPELL, P_SKILLED },
421.  /*WAC - 'B' is good at attack spells and body manipulation spells
422.          -both combat oriented */
423.  #ifdef STEED
424.      { P_RIDING, P_BASIC },
425.  #endif
426.      { P_TWO_WEAPON_COMBAT, P_BASIC },
427.      { P_BARE_HANDED_COMBAT, P_MASTER },
428.      { P_NONE, 0 }
429.  };
430.  
431.  static const struct def_skill Skill_C[] = {
432.      { P_DAGGER, P_BASIC },		{ P_KNIFE,  P_SKILLED },
433.      { P_AXE, P_SKILLED },		{ P_PICK_AXE, P_BASIC },
434.      { P_CLUB, P_EXPERT },               { P_PADDLE, P_EXPERT },
435.      { P_MACE, P_EXPERT },
436.      { P_MORNING_STAR, P_BASIC },	{ P_FLAIL, P_SKILLED },
437.      { P_HAMMER, P_SKILLED },		{ P_QUARTERSTAFF, P_EXPERT },
438.      { P_POLEARMS, P_SKILLED },		{ P_SPEAR, P_EXPERT },
439.      { P_JAVELIN, P_SKILLED },		{ P_TRIDENT, P_SKILLED },
440.      { P_BOW, P_EXPERT },                { P_SLING, P_SKILLED },
441.      { P_BOOMERANG, P_EXPERT },		{ P_UNICORN_HORN, P_BASIC },
442.      { P_MATTER_SPELL, P_SKILLED },      { P_ENCHANTMENT_SPELL, P_BASIC },
443.  
444.  /*WAC - 'C' is at one with the elements - matter spells, as well as
445.          basic enchantments - removed attack spell basic skill as
446.          it is now "dark" spells*/
447.      { P_BARE_HANDED_COMBAT, P_MASTER },
448.      { P_NONE, 0 }
449.  };
450.  
451.  static const struct def_skill Skill_F[] = {
452.  /*Style: small-med edged weapons, blunt weapons*/
453.      { P_DAGGER, P_EXPERT },             { P_KNIFE,  P_SKILLED },
454.      { P_AXE, P_BASIC },                 /*{ P_PICK_AXE, P_BASIC },*/
455.      { P_SHORT_SWORD, P_EXPERT },        /*{ P_BROAD_SWORD, P_BASIC },*/
456.      { P_LONG_SWORD, P_SKILLED },        /*{ P_TWO_HANDED_SWORD, P_BASIC },*/
457.      { P_SCIMITAR, P_SKILLED },          { P_SABER, P_SKILLED },
458.      { P_PADDLE, P_BASIC },
459.      { P_MACE, P_BASIC },                /*{ P_MORNING_STAR, P_BASIC },
460.      { P_FLAIL, P_BASIC },*/               { P_HAMMER, P_BASIC },
461.      { P_QUARTERSTAFF, P_SKILLED },       /* { P_POLEARMS, P_BASIC },*/
462.  /* Relies on spells for ranged attack
463.      { P_SPEAR, P_BASIC },               { P_JAVELIN, P_BASIC },
464.      { P_TRIDENT, P_BASIC },             { P_LANCE, P_BASIC },
465.      { P_BOW, P_BASIC },                 { P_SLING, P_BASIC },
466.      { P_CROSSBOW, P_BASIC },            { P_DART, P_EXPERT },
467.      { P_SHURIKEN, P_BASIC },            { P_BOOMERANG, P_BASIC },
468.  */
469.      { P_WHIP, P_BASIC },                { P_UNICORN_HORN, P_SKILLED },
470.  
471.      { P_ATTACK_SPELL, P_SKILLED },      { P_HEALING_SPELL, P_BASIC },
472.      { P_DIVINATION_SPELL, P_EXPERT },   { P_ENCHANTMENT_SPELL, P_BASIC },
473.      { P_PROTECTION_SPELL, P_BASIC },    { P_BODY_SPELL, P_SKILLED },
474.      { P_MATTER_SPELL, P_EXPERT },
475.  /*  Added expert matter spell (elements), skilled in attack, basic in rest
476.          He is a mage,  so knows the types.*/
477.  #ifdef STEED
478.      { P_RIDING, P_SKILLED },
479.  #endif
480.      { P_TWO_WEAPON_COMBAT, P_SKILLED }, { P_BARE_HANDED_COMBAT, P_SKILLED },
481.      { P_NONE, 0 }
482.  };
483.  
484.  static const struct def_skill Skill_H[] = {
485.      { P_DAGGER, P_SKILLED },		{ P_KNIFE, P_EXPERT },
486.      { P_SHORT_SWORD, P_SKILLED },	{ P_SCIMITAR, P_BASIC },
487.      { P_SABER, P_BASIC },		{ P_CLUB, P_SKILLED },
488.      { P_PADDLE, P_SKILLED },
489.      { P_MACE, P_BASIC },		{ P_QUARTERSTAFF, P_EXPERT },
490.      { P_POLEARMS, P_BASIC },		{ P_SPEAR, P_BASIC },
491.      { P_JAVELIN, P_BASIC },		{ P_TRIDENT, P_BASIC },
492.      { P_SLING, P_SKILLED },		{ P_DART, P_EXPERT },
493.      { P_SHURIKEN, P_SKILLED },		{ P_UNICORN_HORN, P_EXPERT },
494.  
495.      { P_ATTACK_SPELL, P_BASIC },        { P_HEALING_SPELL, P_EXPERT },
496.      { P_DIVINATION_SPELL, P_BASIC },    { P_ENCHANTMENT_SPELL, P_BASIC },
497.      { P_PROTECTION_SPELL, P_BASIC },    { P_BODY_SPELL, P_BASIC },
498.      { P_MATTER_SPELL, P_BASIC },
499.  #ifdef STEED
500.      { P_RIDING, P_BASIC },
501.  #endif
502.      { P_BARE_HANDED_COMBAT, P_BASIC },
503.      { P_NONE, 0 }
504.  };
505.  
506.  static const struct def_skill Skill_I[] = {
507.  /*Resorts mostly to stabbing weapons*/
508.      { P_DAGGER, P_EXPERT },             { P_KNIFE,  P_SKILLED },
509.  /*  { P_AXE, P_BASIC },                 { P_PICK_AXE, P_BASIC },
510.      { P_SHORT_SWORD, P_EXPERT },        { P_BROAD_SWORD, P_BASIC },*/
511.      { P_LONG_SWORD, P_SKILLED },      /*{ P_TWO_HANDED_SWORD, P_BASIC },
512.      { P_SCIMITAR, P_SKILLED },          { P_SABER, P_SKILLED },
513.      { P_MACE, P_BASIC },                { P_MORNING_STAR, P_BASIC },
514.      { P_FLAIL, P_BASIC },               { P_HAMMER, P_BASIC },*/
515.      { P_QUARTERSTAFF, P_SKILLED },      { P_POLEARMS, P_BASIC },
516.      { P_SPEAR, P_BASIC },               { P_JAVELIN, P_BASIC },
517.      { P_TRIDENT, P_BASIC },             { P_LANCE, P_BASIC },
518.  /*  { P_BOW, P_BASIC },                 { P_SLING, P_BASIC },
519.      { P_CROSSBOW, P_BASIC },            { P_DART, P_EXPERT },
520.      { P_SHURIKEN, P_BASIC },            { P_BOOMERANG, P_BASIC },*/
521.      { P_WHIP, P_BASIC },                { P_UNICORN_HORN, P_SKILLED },
522.  
523.      { P_ATTACK_SPELL, P_BASIC },        { P_HEALING_SPELL, P_SKILLED },
524.      { P_DIVINATION_SPELL, P_BASIC },    { P_ENCHANTMENT_SPELL, P_EXPERT },
525.      { P_PROTECTION_SPELL, P_SKILLED },  { P_BODY_SPELL, P_BASIC },
526.      { P_MATTER_SPELL, P_EXPERT },
527.      /*WAC - same as Flame Mage*/
528.  #ifdef STEED
529.      { P_RIDING, P_SKILLED },
530.  #endif
531.      { P_TWO_WEAPON_COMBAT, P_SKILLED }, { P_BARE_HANDED_COMBAT, P_SKILLED },
532.      { P_NONE, 0 }
533.  };
534.  
535.  static const struct def_skill Skill_K[] = {
536.      { P_DAGGER, P_BASIC },		{ P_KNIFE, P_BASIC },
537.      { P_AXE, P_SKILLED },		{ P_PICK_AXE, P_BASIC },
538.      { P_SHORT_SWORD, P_SKILLED },	{ P_BROAD_SWORD, P_SKILLED },
539.      { P_LONG_SWORD, P_EXPERT },	{ P_TWO_HANDED_SWORD, P_SKILLED },
540.      { P_SCIMITAR, P_BASIC },		{ P_SABER, P_SKILLED },
541.      { P_CLUB, P_BASIC },                { P_PADDLE, P_BASIC },
542.      { P_MACE, P_SKILLED },
543.      { P_MORNING_STAR, P_SKILLED },	{ P_FLAIL, P_BASIC },
544.      { P_HAMMER, P_BASIC },		{ P_POLEARMS, P_SKILLED },
545.      { P_SPEAR, P_SKILLED },		{ P_JAVELIN, P_SKILLED },
546.      { P_TRIDENT, P_BASIC },		{ P_LANCE, P_EXPERT },
547.      { P_BOW, P_BASIC },			{ P_CROSSBOW, P_SKILLED },
548.      { P_HEALING_SPELL, P_SKILLED },
549.      { P_PROTECTION_SPELL, P_SKILLED },      { P_BODY_SPELL, P_BASIC },
550.  /*WAC - removed the attack spells - no good having knights summoning
551.          undead!  Replaced with skilled body spells*/
552.  
553.  #ifdef STEED
554.      { P_RIDING, P_EXPERT },
555.  #endif
556.      { P_TWO_WEAPON_COMBAT, P_SKILLED }, { P_BARE_HANDED_COMBAT, P_EXPERT },
557.      { P_NONE, 0 }
558.  };
559.  
560.  static const struct def_skill Skill_Mon[] = {
561.      { P_PADDLE, P_SKILLED },
562.      { P_QUARTERSTAFF, P_SKILLED },	{ P_SPEAR, P_BASIC },
563.      { P_JAVELIN, P_BASIC },		{ P_BOW, P_BASIC },
564.      { P_SHURIKEN, P_BASIC },            { P_MARTIAL_ARTS, P_GRAND_MASTER },
565.  
566.      { P_ATTACK_SPELL, P_BASIC },    { P_HEALING_SPELL, P_EXPERT },
567.      { P_DIVINATION_SPELL, P_BASIC },	{ P_ENCHANTMENT_SPELL, P_SKILLED },
568.      { P_PROTECTION_SPELL, P_EXPERT },	{ P_BODY_SPELL, P_BASIC },
569.      { P_MATTER_SPELL, P_BASIC },
570.  /*WAC - monks are good healers - expert healing - and expert protect*/
571.      { P_NONE, 0 }
572.  };
573.  
574.  static const struct def_skill Skill_N[] = {
575.      { P_DAGGER, P_EXPERT },             { P_KNIFE,  P_SKILLED },
576.      { P_AXE, P_SKILLED },               { P_PICK_AXE, P_SKILLED },
577.      { P_CLUB, P_SKILLED },              { P_MACE, P_BASIC },
578.      { P_QUARTERSTAFF, P_EXPERT },       { P_POLEARMS, P_SKILLED },
579.      { P_SPEAR, P_BASIC },               { P_JAVELIN, P_BASIC },
580.      { P_TRIDENT, P_BASIC },             { P_SLING, P_SKILLED },
581.      { P_DART, P_EXPERT },               { P_SHURIKEN, P_BASIC },
582.  
583.      { P_ATTACK_SPELL, P_EXPERT },
584.      { P_MATTER_SPELL, P_EXPERT },
585.  /*WAC-  expert of dark arts - attack spells,  skilled in matter
586.          -for fireball and cone of cold*/
587.      { P_BARE_HANDED_COMBAT, P_BASIC },
588.      { P_NONE, 0 }
589.  };
590.  
591.  static struct def_skill Skill_P[] = {
592.  	/* KMH -- Long sword for Sunsword */
593.  	{ P_LONG_SWORD, P_SKILLED },
594.      { P_CLUB, P_EXPERT },               { P_PADDLE, P_EXPERT },
595.      { P_MACE, P_EXPERT },
596.      { P_MORNING_STAR, P_EXPERT },	{ P_FLAIL, P_EXPERT },
597.      { P_HAMMER, P_EXPERT },		{ P_QUARTERSTAFF, P_EXPERT },
598.      { P_POLEARMS, P_SKILLED },		{ P_SPEAR, P_SKILLED },
599.      { P_JAVELIN, P_SKILLED },		{ P_TRIDENT, P_SKILLED },
600.      { P_LANCE, P_BASIC },		{ P_BOW, P_BASIC },
601.      { P_SLING, P_BASIC },		{ P_CROSSBOW, P_BASIC },
602.      { P_DART, P_BASIC },		{ P_SHURIKEN, P_BASIC },
603.      { P_BOOMERANG, P_BASIC },		{ P_UNICORN_HORN, P_SKILLED },
604.  
605.      /* [ALI] Depending on the spellbook which priests enter the dungeon with,
606.       * one of the maximum skill levels listed here will be raised by one.
607.       */
608.      { P_ATTACK_SPELL, P_BASIC },        { P_HEALING_SPELL, P_EXPERT },
609.      { P_DIVINATION_SPELL, P_EXPERT },   { P_ENCHANTMENT_SPELL, P_BASIC },
610.      { P_PROTECTION_SPELL, P_SKILLED },  { P_BODY_SPELL, P_BASIC },
611.      { P_MATTER_SPELL, P_BASIC },
612.  
613.      { P_BARE_HANDED_COMBAT, P_BASIC },  /* the monk is added in slash */ 
614.      { P_NONE, 0 }
615.  };
616.  
617.  static const struct def_skill Skill_R[] = {
618.      { P_DAGGER, P_EXPERT },		{ P_KNIFE,  P_EXPERT },
619.      { P_SHORT_SWORD, P_EXPERT },	{ P_BROAD_SWORD, P_SKILLED },
620.      { P_LONG_SWORD, P_SKILLED },	{ P_TWO_HANDED_SWORD, P_BASIC },
621.      { P_SCIMITAR, P_SKILLED },		{ P_SABER, P_SKILLED },
622.      { P_CLUB, P_SKILLED },              { P_PADDLE, P_SKILLED },
623.      { P_MACE, P_SKILLED },              { P_MORNING_STAR, P_BASIC },
624.      { P_FLAIL, P_BASIC },               { P_HAMMER, P_BASIC },
625.      { P_POLEARMS, P_BASIC },            { P_SPEAR, P_BASIC },
626.  #ifdef FIREARMS
627.      { P_FIREARM, P_EXPERT },
628.  #endif
629.      { P_CROSSBOW, P_EXPERT },
630.      { P_DART, P_EXPERT },		{ P_SHURIKEN, P_SKILLED },
631.      { P_DIVINATION_SPELL, P_SKILLED },        { P_BODY_SPELL, P_SKILLED },
632.      { P_MATTER_SPELL, P_SKILLED },
633.  /*WAC Left as is*/
634.  #ifdef STEED
635.      { P_RIDING, P_BASIC },
636.  #endif
637.      { P_TWO_WEAPON_COMBAT, P_EXPERT },  { P_BARE_HANDED_COMBAT, P_EXPERT },
638.      { P_NONE, 0 }
639.  };
640.  
641.  static const struct def_skill Skill_Ran[] = {
642.      { P_DAGGER, P_EXPERT },		 { P_KNIFE,  P_SKILLED },
643.      { P_AXE, P_SKILLED },	 { P_PICK_AXE, P_BASIC },
644.      { P_SHORT_SWORD, P_BASIC },	 { P_MORNING_STAR, P_BASIC },
645.      { P_FLAIL, P_SKILLED },	 { P_HAMMER, P_BASIC },
646.      { P_QUARTERSTAFF, P_BASIC }, { P_POLEARMS, P_SKILLED },
647.      { P_SPEAR, P_SKILLED },	 { P_JAVELIN, P_EXPERT },
648.      { P_TRIDENT, P_BASIC },	 { P_BOW, P_EXPERT },
649.      { P_SLING, P_EXPERT },	 { P_CROSSBOW, P_EXPERT },
650.      { P_DART, P_EXPERT },	 { P_SHURIKEN, P_SKILLED },
651.      { P_BOOMERANG, P_EXPERT },	 { P_WHIP, P_BASIC },
652.      { P_HEALING_SPELL, P_BASIC },
653.      { P_DIVINATION_SPELL, P_EXPERT },
654.      { P_BODY_SPELL, P_BASIC },
655.  #ifdef STEED
656.      { P_RIDING, P_BASIC },
657.  #endif
658.      { P_BARE_HANDED_COMBAT, P_BASIC },
659.      { P_NONE, 0 }
660.  };
661.  
662.  static const struct def_skill Skill_S[] = {
663.      { P_DAGGER, P_BASIC },		{ P_KNIFE,  P_SKILLED },
664.      { P_SHORT_SWORD, P_EXPERT },	{ P_BROAD_SWORD, P_SKILLED },
665.      { P_LONG_SWORD, P_EXPERT },		{ P_TWO_HANDED_SWORD, P_EXPERT },
666.      { P_SCIMITAR, P_BASIC },		{ P_SABER, P_BASIC },
667.      { P_PADDLE, P_BASIC },
668.      { P_FLAIL, P_SKILLED },		{ P_QUARTERSTAFF, P_BASIC },
669.      { P_POLEARMS, P_SKILLED },		{ P_SPEAR, P_BASIC },
670.      { P_JAVELIN, P_BASIC },		{ P_LANCE, P_SKILLED },
671.      { P_BOW, P_EXPERT },		{ P_SHURIKEN, P_EXPERT },
672.      { P_PROTECTION_SPELL, P_SKILLED },      { P_BODY_SPELL, P_BASIC },
673.  
674.  /* WAC - removed the attack spells, replace with body.  clairvoyance, meditate*/
675.  #ifdef STEED
676.      { P_RIDING, P_SKILLED },
677.  #endif
678.      { P_TWO_WEAPON_COMBAT, P_EXPERT },
679.      { P_MARTIAL_ARTS, P_MASTER },
680.      { P_NONE, 0 }
681.  };
682.  
683.  #ifdef TOURIST
684.  static const struct def_skill Skill_T[] = {
685.      { P_DAGGER, P_EXPERT },		{ P_KNIFE,  P_SKILLED },
686.      { P_AXE, P_BASIC },			{ P_PICK_AXE, P_BASIC },
687.      { P_SHORT_SWORD, P_EXPERT },	{ P_BROAD_SWORD, P_BASIC },
688.      { P_LONG_SWORD, P_BASIC },		{ P_TWO_HANDED_SWORD, P_BASIC },
689.      { P_SCIMITAR, P_SKILLED },		{ P_SABER, P_SKILLED },
690.      { P_PADDLE, P_BASIC },
691.      { P_MACE, P_BASIC },		{ P_MORNING_STAR, P_BASIC },
692.      { P_FLAIL, P_BASIC },		{ P_HAMMER, P_BASIC },
693.      { P_QUARTERSTAFF, P_BASIC },	{ P_POLEARMS, P_BASIC },
694.      { P_SPEAR, P_BASIC },		{ P_JAVELIN, P_BASIC },
695.      { P_TRIDENT, P_BASIC },		{ P_LANCE, P_BASIC },
696.      { P_BOW, P_BASIC },			{ P_SLING, P_BASIC },
697.  #ifdef FIREARMS
698.      { P_FIREARM, P_BASIC },
699.  #endif
700.      { P_CROSSBOW, P_BASIC },		{ P_DART, P_EXPERT },
701.      { P_SHURIKEN, P_BASIC },		{ P_BOOMERANG, P_BASIC },
702.      { P_WHIP, P_BASIC },		{ P_UNICORN_HORN, P_SKILLED },
703.      { P_DIVINATION_SPELL, P_BASIC },	{ P_ENCHANTMENT_SPELL, P_BASIC },
704.      { P_BODY_SPELL, P_SKILLED },
705.  /*WAC left alone*/
706.  #ifdef STEED
707.      { P_RIDING, P_BASIC },
708.  #endif
709.      { P_TWO_WEAPON_COMBAT, P_SKILLED }, { P_BARE_HANDED_COMBAT, P_SKILLED },
710.      { P_NONE, 0 }
711.  };
712.  #endif /* TOURIST */
713.  
714.  static const struct def_skill Skill_U[] = {
715.  /*WAC
716.   * -made dagger skill expert too,  since it's a starting weapon
717.   * -made spear skill Expert rather than Skilled
718.   *      Slayer artifact is a spear,  after all
719.   * -made crossbow skill Expert - Dracula movies
720.   * -changed bare handed basic to martial arts master-Buffy the Vampire Slayer
721.   * -Added whip Expert - Castlevania
722.   * -made club, flail, mace, morning star, hammer, quarterstaff Skilled
723.          from Expert to balance
724.   * -removed Trident skill - from Skilled to Restricted
725.   * -removed Lance skill - from Basic to Restricted
726.   */
727.      { P_DAGGER, P_EXPERT },             { P_LONG_SWORD, P_SKILLED },
728.      { P_CLUB, P_SKILLED },              { P_PADDLE, P_SKILLED },
729.      { P_MACE, P_SKILLED },              { P_MORNING_STAR, P_SKILLED },
730.      { P_FLAIL, P_SKILLED },             { P_HAMMER, P_SKILLED },
731.      { P_QUARTERSTAFF, P_SKILLED },      { P_POLEARMS, P_SKILLED },
732.      { P_SPEAR, P_EXPERT },              { P_JAVELIN, P_SKILLED },
733.      { P_BOW, P_BASIC },			        { P_SLING, P_BASIC },
734.  #ifdef FIREARMS
735.      { P_FIREARM, P_EXPERT },
736.  #endif
737.      { P_CROSSBOW, P_EXPERT },           { P_DART, P_BASIC },
738.      { P_SHURIKEN, P_BASIC },		{ P_BOOMERANG, P_BASIC },
739.      { P_WHIP, P_EXPERT },               { P_UNICORN_HORN, P_SKILLED },
740.  
741.      { P_PROTECTION_SPELL, P_SKILLED },    { P_BODY_SPELL, P_SKILLED },
742.      { P_MATTER_SPELL, P_BASIC },
743.  /*WAC - added PROTECTION spells,  body spells as skilled, basic
744.          matter spells - for the fire vs undead*/
745.      { P_BARE_HANDED_COMBAT, P_GRAND_MASTER },    { P_NONE, 0 }
746.  };
747.  
748.  static const struct def_skill Skill_V[] = {
749.      { P_DAGGER, P_EXPERT },		{ P_AXE, P_EXPERT },
750.      { P_PICK_AXE, P_SKILLED },		{ P_SHORT_SWORD, P_SKILLED },
751.      { P_BROAD_SWORD, P_SKILLED },	{ P_LONG_SWORD, P_EXPERT },
752.      { P_TWO_HANDED_SWORD, P_EXPERT },	{ P_SCIMITAR, P_BASIC },
753.      { P_SABER, P_BASIC },		{ P_HAMMER, P_EXPERT },
754.      { P_QUARTERSTAFF, P_BASIC },	{ P_POLEARMS, P_SKILLED },
755.      { P_SPEAR, P_SKILLED },		{ P_JAVELIN, P_BASIC },
756.      { P_TRIDENT, P_BASIC },		{ P_LANCE, P_SKILLED },
757.      { P_SLING, P_BASIC },
758.      { P_BODY_SPELL, P_BASIC },          { P_MATTER_SPELL, P_EXPERT },
759.  /*  replace attack spell with matter spell - cone of cold, lightning
760.   *  Boosted to Expert
761.   */
762.  #ifdef STEED
763.      { P_RIDING, P_SKILLED },
764.  #endif
765.      { P_TWO_WEAPON_COMBAT, P_SKILLED },
766.      { P_BARE_HANDED_COMBAT, P_EXPERT },
767.      { P_NONE, 0 }
768.  };
769.  
770.  static const struct def_skill Skill_W[] = {
771.      { P_DAGGER, P_EXPERT },		{ P_KNIFE,  P_SKILLED },
772.      { P_AXE, P_SKILLED },		{ P_SHORT_SWORD, P_BASIC },
773.      { P_CLUB, P_SKILLED },              { P_PADDLE, P_BASIC },
774.      { P_MACE, P_BASIC },
775.      { P_QUARTERSTAFF, P_EXPERT },	{ P_POLEARMS, P_SKILLED },
776.      { P_SPEAR, P_BASIC },		{ P_JAVELIN, P_BASIC },
777.      { P_TRIDENT, P_BASIC },		{ P_SLING, P_SKILLED },
778.      { P_DART, P_EXPERT },		{ P_SHURIKEN, P_BASIC },
779.  
780.      { P_ATTACK_SPELL, P_EXPERT },	{ P_HEALING_SPELL, P_SKILLED },
781.      { P_DIVINATION_SPELL, P_SKILLED },  { P_ENCHANTMENT_SPELL, P_SKILLED },
782.      { P_PROTECTION_SPELL, P_SKILLED },  { P_BODY_SPELL, P_SKILLED },
783.      { P_MATTER_SPELL, P_SKILLED },
784.  /*      added matter spell skilled,  as fireball and cone of cold are
785.          matter spells, but now specialty of F/I Mages*/
786.  #ifdef STEED
787.      { P_RIDING, P_BASIC },
788.  #endif
789.      { P_BARE_HANDED_COMBAT, P_BASIC },
790.      { P_NONE, 0 }
791.  };
792.  
793.  #ifdef YEOMAN
794.  static const struct def_skill Skill_Y[] = {
795.      { P_DAGGER, P_SKILLED },            { P_KNIFE, P_BASIC },
796.      { P_AXE, P_SKILLED },               { P_SHORT_SWORD, P_EXPERT },
797.      { P_BROAD_SWORD, P_BASIC },         { P_LONG_SWORD, P_SKILLED },
798.      { P_SABER, P_SKILLED },             { P_PADDLE, P_SKILLED },
799.      { P_HAMMER, P_BASIC },              { P_QUARTERSTAFF, P_SKILLED },
800.      { P_POLEARMS, P_EXPERT },           { P_SPEAR, P_BASIC },
801.      { P_JAVELIN, P_SKILLED },           { P_TRIDENT, P_SKILLED },
802.      { P_LANCE, P_SKILLED },             { P_BOW, P_EXPERT },
803.      { P_SLING, P_BASIC },
804.  #ifdef FIREARMS
805.      { P_FIREARM, P_SKILLED },
806.  #endif
807.      { P_CROSSBOW, P_SKILLED },          { P_DART, P_BASIC },
808.      { P_WHIP, P_BASIC },                { P_UNICORN_HORN, P_BASIC },
809.  
810.      { P_ENCHANTMENT_SPELL, P_SKILLED }, { P_PROTECTION_SPELL, P_SKILLED },
811.      { P_BODY_SPELL, P_BASIC },
812.  #ifdef STEED
813.      { P_RIDING, P_EXPERT },
814.  #endif
815.      { P_TWO_WEAPON_COMBAT, P_SKILLED }, { P_BARE_HANDED_COMBAT, P_SKILLED },
816.      { P_NONE, 0 }
817.  };
818.  #endif
819.  
820.  
821.  STATIC_OVL void
822.  knows_object(obj)
823.  register int obj;
824.  {
825.  	discover_object(obj,TRUE,FALSE);
826.  	objects[obj].oc_pre_discovered = 1;	/* not a "discovery" */
827.  }
828.  
829.  /* Know ordinary (non-magical) objects of a certain class,
830.   * like all gems except the loadstone and luckstone.
831.   */
832.  STATIC_OVL void
833.  knows_class(sym)
834.  register char sym;
835.  {
836.  	register int ct;
837.  	for (ct = 1; ct < NUM_OBJECTS; ct++)
838.  		if (objects[ct].oc_class == sym && !objects[ct].oc_magic)
839.  			knows_object(ct);
840.  }
841.  
842.  /* [ALI] Raise one spell skill by one level. Priorities:
843.   * - The skill for the chosen spellbook if not already expert.
844.   * - A skill currently at skilled level.
845.   * - A skill currently at basic level.
846.   * Where more than one skill is possible at a priority level, choose one
847.   * at random.
848.   *
849.   * The idea is that where a role may be given spellbooks in which the
850.   * role is normally at basic level, then the Skill array can be tweaked
851.   * to reduce one skill from expert to skilled. After choosing the
852.   * spellbook we can then dynamically raise one skill which will either be
853.   * the one for the spellbook if that is currently basic (and so avoid the
854.   * warning message from skill_init) or raise the tweaked skill to expert.
855.   *
856.   * Currently only used by priests.
857.   */
858.  
859.  static void
860.  spellbook_skill_raise(class_skill, spellbook)
861.  register struct def_skill *class_skill;
862.  int spellbook;
863.  {
864.      register int i, j;
865.      j = spell_skilltype(spellbook);
866.      for(i = 0; class_skill[i].skill != P_NONE; i++)
867.  	if (class_skill[i].skill == j)
868.  	    break;
869.      if (class_skill[i].skill == P_NONE)
870.  	pline("Warning: No entry for %s in Skill array.",
871.  	  obj_typename(spellbook));
872.      else if (class_skill[i].skmax < P_EXPERT)
873.  	class_skill[i].skmax++;
874.      else
875.      {
876.  	j = 0;
877.  	for(i = 0; class_skill[i].skill != P_NONE; i++) {
878.  	    if (class_skill[i].skill >= P_FIRST_SPELL &&
879.  	      class_skill[i].skill <= P_LAST_SPELL &&
880.  	      class_skill[i].skmax == P_SKILLED)
881.  		j++;
882.  	}
883.  	if (j) {
884.  	    j = rn2(j);
885.  	    for(i = 0; class_skill[i].skill != P_NONE; i++) {
886.  		if (class_skill[i].skill >= P_FIRST_SPELL &&
887.  		  class_skill[i].skill <= P_LAST_SPELL &&
888.  		  class_skill[i].skmax == P_SKILLED)
889.  		    if (!j--) {
890.  			class_skill[i].skmax++;
891.  			break;
892.  		    }
893.  	    }
894.  	}
895.  	else {
896.  	    for(i = 0; class_skill[i].skill != P_NONE; i++) {
897.  		if (class_skill[i].skill >= P_FIRST_SPELL &&
898.  		  class_skill[i].skill <= P_LAST_SPELL &&
899.  		  class_skill[i].skmax >= P_BASIC &&
900.  		  class_skill[i].skmax < P_EXPERT)
901.  		    j++;
902.  	    }
903.  	    if (j) {
904.  		j = rn2(j);
905.  		for(i = 0; class_skill[i].skill != P_NONE; i++) {
906.  		    if (class_skill[i].skill >= P_FIRST_SPELL &&
907.  		      class_skill[i].skill <= P_LAST_SPELL &&
908.  		      class_skill[i].skmax >= P_BASIC &&
909.  		      class_skill[i].skmax < P_EXPERT)
910.  			if (!j--) {
911.  			    class_skill[i].skmax++;
912.  			    break;
913.  			}
914.  		}
915.  	    }
916.  	}
917.      }
918.  }
919.  
920.  void
921.  u_init()
922.  {
923.  	register int i, temp;
924.  	int no_extra_food = FALSE;
925.  
926.  	flags.female = flags.initgend;
927.  	flags.beginner = 1;
928.  
929.  	/* WAC -- Clear Tech List since adjabil will init the 1st level techs*/
930.  	for (i = 0; i <= MAXTECH; i++) tech_list[i].t_id = NO_TECH;
931.  
932.  	/* Initialize spells */
933.  	for (i = 0; i <= MAXSPELL; i++) spl_book[i].sp_id = NO_SPELL;
934.  
935.  	/* Initialize the "u" structure.
936.  	 * Note that some values may have been incorrectly set by a failed restore.
937.  	 */
938.  	(void) memset((genericptr_t)&u, 0, sizeof(u));
939.  	setustuck((struct monst *)0);
940.  #if 0	/* documentation of more zero values as desirable */
941.  	u.usick_cause[0] = 0;
942.  	u.uluck  = u.moreluck = 0;
943.  # ifdef TOURIST
944.  	uarmu = 0;
945.  # endif
946.  	uarm = uarmc = uarmh = uarms = uarmg = uarmf = 0;
947.  	uwep = uball = uchain = uleft = uright = 0;
948.  	/* WAC Added uswapwep, uquiver*/
949.  	uswapwep = uquiver = 0;
950.  	/* KMH -- added two-weapon combat */
951.  	u.twoweap = 0;
952.  	u.ublessed = 0;				/* not worthy yet */
953.  	u.ugangr   = 0;				/* gods not angry */
954.  	u.ugifts   = 0;				/* no divine gifts bestowed */
955.  	/* WAC not needed - use techs */
956.  /*	u.unextuse = 0;
957.  	u.ulastuse = 0;*/
958.  # ifdef ELBERETH
959.  	u.uevent.uhand_of_elbereth = 0;
960.  # endif
961.  	u.uevent.uheard_tune = 0;
962.  	u.uevent.uopened_dbridge = 0;
963.  	u.uevent.udemigod = 0;		/* not a demi-god yet... */
964.  	u.udg_cnt = 0;
965.  	u.mh = u.mhmax = Upolyd = 0;
966.  	u.uz.dnum = u.uz0.dnum = 0;
967.  	u.utotype = 0;
968.  #endif	/* 0 */
969.  
970.  	u.uz.dlevel = 1;
971.  	u.uz0.dlevel = 0;
972.  	u.utolev = u.uz;
973.  
974.  	u.umoved = FALSE;
975.  	u.umortality = 0;
976.  	u.ugrave_arise = NON_PM;
977.  
978.  	u.umonnum = u.umonster = (flags.female &&
979.  			urole.femalenum != NON_PM) ? urole.femalenum :
980.  			urole.malenum;
981.  
982.  	init_uasmon();
983.  
984.  	u.ulevel = 0;	/* set up some of the initial attributes */
985.  	u.uhp = u.uhpmax = newhp();
986.  	u.uenmax = urole.enadv.infix + urace.enadv.infix;
987.  	if (urole.enadv.inrnd > 0)
988.  	    u.uenmax += rnd(urole.enadv.inrnd);
989.  	if (urace.enadv.inrnd > 0)
990.  	    u.uenmax += rnd(urace.enadv.inrnd);
991.  	u.uen = u.uenmax;
992.  	u.uspellprot = 0;
993.  	adjabil(0,1);
994.  	u.ulevel = u.ulevelmax = 1;
995.  
996.  	init_uhunger();
997.  	u.ublesscnt = 300;			/* no prayers just yet */
998.  	u.ualignbase[A_CURRENT] = u.ualignbase[A_ORIGINAL] = u.ualign.type =
999.  			aligns[flags.initalign].value;
1000. 	u.ulycn = NON_PM;
1001. #if defined(BSD) && !defined(POSIX_TYPES)
1002. 	(void) time((long *)&u.ubirthday);
1003. #else
1004. 	(void) time(&u.ubirthday);
1005. #endif
1006. 	/*
1007. 	 *  For now, everyone but elves, cavemen and lycanthropes starts
1008. 	 *  out with a night vision range of 1 and their xray range disabled.
1009. 	 */
1010. 	u.nv_range   =  1;
1011. 	u.xray_range = -1;
1012. 
1013. 	/* Role-specific initializations */
1014. 	switch (Role_switch) {
1015. 	case PM_ARCHEOLOGIST:
1016. 		switch (rnd(5)) {   
1017. 		    case 1: Archeologist[A_BOOK].trotyp = SPE_DETECT_FOOD; break;
1018. 		    case 2: Archeologist[A_BOOK].trotyp = SPE_DETECT_MONSTERS; break;
1019. 		    case 3: Archeologist[A_BOOK].trotyp = SPE_LIGHT; break;
1020. 		    case 4: Archeologist[A_BOOK].trotyp = SPE_KNOCK; break;
1021. 		    case 5: Archeologist[A_BOOK].trotyp = SPE_WIZARD_LOCK; break;
1022. 		    default: break;
1023. 		}
1024. 		ini_inv(Archeologist);
1025. 		if(!rn2(4)) ini_inv(Blindfold);
1026. #ifdef TOURIST
1027. 		else if(!rn2(4)) ini_inv(Towel);
1028. 		if(!rn2(4)) ini_inv(Leash);
1029. #endif
1030. 		if(!rn2(4)) ini_inv(Tinopener);
1031. 		else if(!rn2(4))
1032. 		  (rn2(100) > 50 ? ini_inv(Lamp) : ini_inv(Torch));
1033. 		if(!rn2(8)) ini_inv(Magicmarker);
1034. 		knows_object(TOUCHSTONE);
1035. 		knows_object(SACK);
1036. 		skill_init(Skill_A);
1037. 		break;
1038. 	case PM_BARBARIAN:
1039. 		if (rn2(100) >= 50) {   /* see Elf comment */
1040. 		    Barbarian[B_MAJOR].trotyp = BATTLE_AXE;
1041. 		    Barbarian[B_MINOR].trotyp = SHORT_SWORD;
1042. 		}
1043. 		ini_inv(Barbarian);
1044. 		if(!rn2(6)) ini_inv(Torch);
1045. 		knows_class(WEAPON_CLASS);
1046. 		knows_class(ARMOR_CLASS);
1047. 		skill_init(Skill_B);
1048. 		break;
1049. 	case PM_CAVEMAN:
1050. 		u.nv_range = 2;
1051. 		Cave_man[C_AMMO].trquan = rn1(11, 10);	/* 10..20 */
1052. 		ini_inv(Cave_man);
1053. 		skill_init(Skill_C);
1054. 		break;
1055. 	case PM_FLAME_MAGE:
1056. 		switch (rnd(2)) {                
1057. 			case 1: Flame_Mage[F_BOOK].trotyp = SPE_DETECT_MONSTERS; break;
1058. 			case 2: Flame_Mage[F_BOOK].trotyp = SPE_LIGHT; break;
1059. 			default: break;
1060. 		}
1061. 		ini_inv(Flame_Mage);
1062. 		if(!rn2(5)) ini_inv(Lamp);
1063. 		else if(!rn2(5)) ini_inv(Blindfold);
1064. 		else if(!rn2(5)) ini_inv(Magicmarker);
1065. 		skill_init(Skill_F);
1066. 		break;
1067. 	case PM_HEALER:
1068. #ifndef GOLDOBJ
1069. 		u.ugold = u.ugold0 = rn1(1000, 1001);
1070. #else
1071. 		u.umoney0 = rn1(1000, 1001);
1072. #endif
1073. 		ini_inv(Healer);
1074. 		knows_class(POTION_CLASS); /* WAC - remove? */
1075. 		knows_object(POT_SICKNESS);
1076. 		knows_object(POT_BLINDNESS);
1077. 		knows_object(POT_HALLUCINATION);
1078. 		knows_object(POT_RESTORE_ABILITY);
1079. 		knows_object(POT_FULL_HEALING);
1080. 		knows_object(HEALTHSTONE);	/* KMH */
1081. 		if(!rn2(5)) ini_inv(Lamp);
1082. 		if(!rn2(5)) ini_inv(Magicmarker);
1083. 		if(!rn2(5)) ini_inv(Blindfold);
1084. 		skill_init(Skill_H);
1085. 		break;
1086. 	case PM_ICE_MAGE:
1087. 		switch (rnd(2)) {                
1088. 			case 1: Ice_Mage[I_BOOK].trotyp = SPE_CONFUSE_MONSTER; break;
1089. 			case 2: Ice_Mage[I_BOOK].trotyp = SPE_SLOW_MONSTER; break;
1090. 			default: break;
1091. 		}
1092. 		ini_inv(Ice_Mage);
1093. 		if(!rn2(5)) ini_inv(Lamp);
1094. 		else if(!rn2(5)) ini_inv(Blindfold);
1095. 		else if(!rn2(5)) ini_inv(Magicmarker);
1096. 		skill_init(Skill_I);
1097. 		break;
1098. 	case PM_KNIGHT:
1099. 		ini_inv(Knight);
1100. 		knows_class(WEAPON_CLASS);
1101. 		knows_class(ARMOR_CLASS);
1102. 		/* give knights chess-like mobility
1103. 		 * -- idea from wooledge@skybridge.scl.cwru.edu */
1104. 		HJumping |= FROMOUTSIDE;
1105. 		skill_init(Skill_K);
1106. 		break;
1107. 	case PM_MONK:
1108. 		switch (rn2(90) / 30) {
1109. 		case 0: Monk[M_BOOK].trotyp = SPE_HEALING; break;
1110. 		case 1: Monk[M_BOOK].trotyp = SPE_PROTECTION; break;
1111. 		case 2: Monk[M_BOOK].trotyp = SPE_SLEEP; break;
1112. 		}
1113. 		ini_inv(Monk);
1114. 		if(!rn2(5)) ini_inv(Magicmarker);
1115. 		else if(!rn2(10)) ini_inv(Lamp);
1116. 		knows_class(ARMOR_CLASS);
1117. 		skill_init(Skill_Mon);
1118. 		break;
1119. 	case PM_NECROMANCER:
1120. 		switch (rnd(5)) {   
1121.                     case 1: Necromancer[N_BOOK].trotyp = SPE_FORCE_BOLT; break;
1122.                     case 2: Necromancer[N_BOOK].trotyp = SPE_KNOCK; break;
1123.                     case 3: Necromancer[N_BOOK].trotyp = SPE_MAGIC_MISSILE; break;
1124.                     case 4: Necromancer[N_BOOK].trotyp = SPE_CREATE_MONSTER; break;
1125.                     case 5: Necromancer[N_BOOK].trotyp = SPE_WIZARD_LOCK; break;
1126. 		    default: break;
1127. 		}
1128. 		ini_inv(Necromancer);
1129. 		knows_class(SPBOOK_CLASS);
1130. 		if(!rn2(5)) ini_inv(Magicmarker);
1131. 		if(!rn2(5)) ini_inv(Blindfold);
1132. 		skill_init(Skill_N);
1133. 		break;
1134. 	case PM_PRIEST:
1135. 		switch (rnd(9)) {   
1136. 		    case 1: Priest[P_BOOK].trotyp = SPE_FORCE_BOLT; break;
1137. 		    case 2: Priest[P_BOOK].trotyp = SPE_SLEEP; break;
1138. 		    case 3: Priest[P_BOOK].trotyp = SPE_RESIST_POISON; break;
1139. 		    case 4: Priest[P_BOOK].trotyp = SPE_RESIST_SLEEP; break;
1140. 		    case 5: Priest[P_BOOK].trotyp = SPE_DETECT_FOOD; break;
1141. 		    case 6: Priest[P_BOOK].trotyp = SPE_DETECT_MONSTERS; break;
1142. 		    case 7: Priest[P_BOOK].trotyp = SPE_LIGHT; break;
1143. 		    case 8: Priest[P_BOOK].trotyp = SPE_KNOCK; break;
1144. 		    case 9: Priest[P_BOOK].trotyp = SPE_WIZARD_LOCK; break;
1145. 		    default: break;
1146. 		}
1147. 		ini_inv(Priest);
1148. 		if(!rn2(10)) ini_inv(Magicmarker);
1149. 		else if(!rn2(10)) 
1150. 		  (rn2(100) > 50 ? ini_inv(Lamp) : ini_inv(Torch));
1151. 		knows_object(POT_WATER);
1152. 		spellbook_skill_raise(Skill_P, Priest[P_BOOK].trotyp);
1153. 		skill_init(Skill_P);
1154. 		/* KMH, conduct --
1155. 		 * Some may claim that this isn't agnostic, since they
1156. 		 * are literally "priests" and they have holy water.
1157. 		 * But we don't count it as such.  Purists can always
1158. 		 * avoid playing priests and/or confirm another player's
1159. 		 * role in their YAAP.
1160. 		 */
1161. 		break;
1162. 	case PM_RANGER:
1163. 		Ranger[RAN_TWO_ARROWS].trquan = rn1(10, 50);
1164. 		Ranger[RAN_ZERO_ARROWS].trquan = rn1(10, 30);
1165. 		ini_inv(Ranger);
1166. 		skill_init(Skill_Ran);
1167. 		break;
1168. 	case PM_ROGUE:
1169. 		Rogue[R_DAGGERS].trquan = rn1(10, 6);
1170. 		Rogue[R_DARTS].trquan = rn1(10, 25);
1171. #ifdef FIREARMS
1172. 		if (rn2(100) < 30) {
1173. 			Rogue[R_DAGGERS].trotyp = PISTOL;
1174. 			Rogue[R_DAGGERS].trquan = 1;
1175. 			Rogue[R_DARTS].trotyp = BULLET;
1176. 		}
1177. #endif
1178. #ifndef GOLDOBJ
1179. 		u.ugold = u.ugold0 = rn1(500 ,1500);
1180. #else
1181. 		u.umoney0 = rn1(500 ,1500);
1182. #endif
1183. 		ini_inv(Rogue);
1184. 		if(!rn2(5)) ini_inv(Blindfold);
1185. 		knows_object(OILSKIN_SACK);
1186. 		skill_init(Skill_R);
1187. 		break;
1188. 	case PM_SAMURAI:
1189. 		Samurai[S_ARROWS].trquan = rn1(20, 26);
1190. 		ini_inv(Samurai);
1191. 		if(!rn2(5)) ini_inv(Blindfold);
1192. 		knows_class(WEAPON_CLASS);
1193. 		knows_class(ARMOR_CLASS);
1194. 		skill_init(Skill_S);
1195. 		break;
1196. #ifdef TOURIST
1197. 	case PM_TOURIST:
1198. 		Tourist[T_DARTS].trquan = rn1(20, 21);
1199. #ifndef GOLDOBJ
1200. 		u.ugold = u.ugold0 = rn1(500,1000);
1201. #else
1202. 		u.umoney0 = rn1(500,1000);
1203. #endif
1204. 		ini_inv(Tourist);
1205. 		if(!rn2(25)) ini_inv(Tinopener);
1206. 		else if(!rn2(25)) ini_inv(Leash);
1207. 		else if(!rn2(25)) ini_inv(Towel);
1208. 		else if(!rn2(25)) ini_inv(Magicmarker);
1209. 		skill_init(Skill_T);
1210. 		break;
1211. #endif /* TOURIST */
1212. 	case PM_UNDEAD_SLAYER:
1213. 		switch (rn2(100) / 25) {
1214. 		    case 0:	/* Pistol and silver bullets */
1215. #ifdef FIREARMS
1216. 			UndeadSlayer[U_MINOR].trotyp = PISTOL;
1217. 			UndeadSlayer[U_RANGE].trotyp = SILVER_BULLET;
1218. 			UndeadSlayer[U_RANGE].trquan = rn1(10, 30);
1219. 			break;
1220. #endif
1221. 		    case 1:	/* Crossbow and bolts */
1222. 			UndeadSlayer[U_MINOR].trotyp = CROSSBOW;
1223. 			UndeadSlayer[U_RANGE].trotyp = CROSSBOW_BOLT;
1224. 			UndeadSlayer[U_RANGE].trquan = rn1(10, 30);
1225. 			UndeadSlayer[U_MISC].trotyp = LOW_BOOTS;
1226. 			UndeadSlayer[U_MISC].trspe = 1;
1227. 			UndeadSlayer[U_ARMOR].trotyp = LEATHER_JACKET;
1228. 			UndeadSlayer[U_ARMOR].trspe = 1;
1229. 			/* helmet & armour are no longer candidates for
1230. 			 * substitution for orcish versions so no extra
1231. 			 * food should be given in compensation.
1232. 			 */
1233. 			if (Race_if(PM_ORC))
1234. 			    no_extra_food = TRUE;
1235. 		        break;
1236. 		    case 2:	/* Whip and daggers */
1237. 		        UndeadSlayer[U_MINOR].trotyp = BULLWHIP;
1238. 		        UndeadSlayer[U_MINOR].trspe = 2;
1239. 		        break;
1240. 		    case 3:	/* Silver spear and daggers */
1241. 			break;
1242. 		}
1243. 		ini_inv(UndeadSlayer);
1244. 		knows_class(WEAPON_CLASS);
1245. 		knows_class(ARMOR_CLASS);
1246. 		if(!rn2(6)) ini_inv(Lamp);
1247. 		skill_init(Skill_U);
1248. 		break;
1249. 	case PM_VALKYRIE:
1250. 		ini_inv(Valkyrie);
1251. 		if(!rn2(6)) 
1252. 		  (rn2(100) > 50 ? ini_inv(Lamp) : ini_inv(Torch));
1253. 		knows_class(WEAPON_CLASS);
1254. 		knows_class(ARMOR_CLASS);
1255. 		skill_init(Skill_V);
1256. 		break;
1257. 	case PM_WIZARD:
1258. 		switch (rnd(2)) {                
1259. 		    case 1: Wizard[W_BOOK1].trotyp = SPE_FORCE_BOLT; break;
1260. 		    case 2: Wizard[W_BOOK1].trotyp = SPE_SLEEP; break;
1261. 		    default: break;
1262. 		}
1263. 		switch (rnd(2)) {
1264. 		    case 1: Wizard[W_BOOK2].trotyp = SPE_RESIST_POISON; break;
1265. 		    case 2: Wizard[W_BOOK2].trotyp = SPE_RESIST_SLEEP; break;
1266. 		    default: break;
1267. 		}
1268. 		switch (rnd(5)) {   
1269. 		    case 1: Wizard[W_BOOK3].trotyp = SPE_DETECT_FOOD; break;
1270. 		    case 2: Wizard[W_BOOK3].trotyp = SPE_DETECT_MONSTERS; break;
1271. 		    case 3: Wizard[W_BOOK3].trotyp = SPE_LIGHT; break;
1272. 		    case 4: Wizard[W_BOOK3].trotyp = SPE_KNOCK; break;
1273. 		    case 5: Wizard[W_BOOK3].trotyp = SPE_WIZARD_LOCK; break;
1274. 		    default: break;
1275. 		}
1276. 		switch (rnd(9)) {
1277. 		    case 1: Wizard[W_BOOK4].trotyp = SPE_MAGIC_MISSILE; break;
1278. 		    case 2: Wizard[W_BOOK4].trotyp = SPE_CONFUSE_MONSTER; break;
1279. 		    case 3: Wizard[W_BOOK4].trotyp = SPE_SLOW_MONSTER; break;
1280. 		    case 4: Wizard[W_BOOK4].trotyp = SPE_CURE_BLINDNESS; break;
1281. 		    case 5: Wizard[W_BOOK4].trotyp = SPE_ENDURE_HEAT; break;
1282. 		    case 6: Wizard[W_BOOK4].trotyp = SPE_ENDURE_COLD; break;
1283. 		    case 7: Wizard[W_BOOK4].trotyp = SPE_INSULATE; break;
1284. 		    case 8: Wizard[W_BOOK4].trotyp = SPE_CREATE_MONSTER; break;
1285. 		    case 9: Wizard[W_BOOK4].trotyp = SPE_HEALING; break;
1286. 		    default: break;
1287. 		}
1288. 		ini_inv(Wizard);
1289. 		knows_class(SPBOOK_CLASS);
1290. 		if(!rn2(5)) ini_inv(Magicmarker);
1291. 		if(!rn2(5)) ini_inv(Blindfold);
1292. 		skill_init(Skill_W);
1293. 		break;
1294. 
1295. #ifdef YEOMAN
1296. 	case PM_YEOMAN:
1297. 		ini_inv(Yeoman);
1298. 		knows_class(WEAPON_CLASS);
1299. 		knows_class(ARMOR_CLASS);
1300. 		skill_init(Skill_Y);
1301. 		break;
1302. #endif
1303. 
1304. 	default:	/* impossible */
1305. 		break;
1306. 	}
1307. 
1308. 	/*** Race-specific initializations ***/
1309. 	switch (Race_switch) {
1310. 	case PM_HUMAN:
1311. 	    /* Nothing special */
1312. 	    break;
1313. 
1314. 	case PM_ELF:
1315. 	    /*
1316. 	     * Elves are people of music and song, or they are warriors.
1317. 	     * Non-warriors get an instrument.  We use a kludge to
1318. 	     * get only non-magic instruments.
1319. 	     */
1320. 	    if (Role_if(PM_PRIEST) || Role_if(PM_WIZARD)) {
1321. 		static int trotyp[] = {
1322. 		    WOODEN_FLUTE, TOOLED_HORN, WOODEN_HARP,
1323. 		    BELL, BUGLE, LEATHER_DRUM
1324. 		};
1325. 		Instrument[0].trotyp = trotyp[rn2(SIZE(trotyp))];
1326. 		ini_inv(Instrument);
1327. 	    }
1328. 
1329. 	    /* Elves can recognize all elvish objects */
1330. 	    knows_object(ELVEN_SHORT_SWORD);
1331. 	    knows_object(ELVEN_ARROW);
1332. 	    knows_object(ELVEN_BOW);
1333. 	    knows_object(ELVEN_SPEAR);
1334. 	    knows_object(ELVEN_DAGGER);
1335. 	    knows_object(ELVEN_BROADSWORD);
1336. 	    knows_object(ELVEN_MITHRIL_COAT);
1337. 	    knows_object(ELVEN_LEATHER_HELM);
1338. 	    knows_object(ELVEN_SHIELD);
1339. 	    knows_object(ELVEN_BOOTS);
1340. 	    knows_object(ELVEN_CLOAK);
1341. 	    break;
1342. 	case PM_DROW:
1343. 	    /* Drows can recognize all droven objects */
1344. 	    knows_object(DARK_ELVEN_SHORT_SWORD);
1345. 	    knows_object(DARK_ELVEN_ARROW);
1346. 	    knows_object(DARK_ELVEN_BOW);
1347. 	    knows_object(DARK_ELVEN_DAGGER);
1348. 	    knows_object(DARK_ELVEN_MITHRIL_COAT);
1349. 	    break;
1350. 
1351. 	case PM_DWARF:
1352. 	    /* Dwarves can recognize all dwarvish objects */
1353. 	    knows_object(DWARVISH_SPEAR);
1354. 	    knows_object(DWARVISH_SHORT_SWORD);
1355. 	    knows_object(DWARVISH_MATTOCK);
1356. 	    knows_object(DWARVISH_IRON_HELM);
1357. 	    knows_object(DWARVISH_MITHRIL_COAT);
1358. 	    knows_object(DWARVISH_CLOAK);
1359. 	    knows_object(DWARVISH_ROUNDSHIELD);
1360. 	    break;
1361. 
1362. 	case PM_GNOME:
1363. 	    break;
1364. 	case PM_HUMAN_WEREWOLF:
1365. 	    u.ulycn = PM_WEREWOLF;
1366. /*	    u.nv_range = 2;
1367. 	    u.uen = u.uenmax += 6;
1368. 	    ini_inv(Lycanthrope);*/
1369. 	    break;
1370. 
1371. 	case PM_ORC:
1372. 	    /* compensate for generally inferior equipment */
1373. 	    if (!no_extra_food && !Role_if(PM_WIZARD) &&
1374. 		    !Role_if(PM_FLAME_MAGE) && !Role_if(PM_ICE_MAGE) &&
1375. 		    !Role_if(PM_NECROMANCER))
1376. 		ini_inv(Xtra_food);
1377. 	    /* Orcs can recognize all orcish objects */
1378. 	    knows_object(ORCISH_SHORT_SWORD);
1379. 	    knows_object(ORCISH_ARROW);
1380. 	    knows_object(ORCISH_BOW);
1381. 	    knows_object(ORCISH_SPEAR);
1382. 	    knows_object(ORCISH_DAGGER);
1383. 	    knows_object(ORCISH_CHAIN_MAIL);
1384. 	    knows_object(ORCISH_RING_MAIL);
1385. 	    knows_object(ORCISH_HELM);
1386. 	    knows_object(ORCISH_SHIELD);
1387. 	    knows_object(URUK_HAI_SHIELD);
1388. 	    knows_object(ORCISH_CLOAK);
1389. 	    break;
1390. 	case PM_VAMPIRE:
1391. 	    /* Vampires start off with gods not as pleased, luck penalty */
1392. 	    adjalign(-5); 
1393. 	    change_luck(-1);
1394. 	    break;
1395. 	default:	/* impossible */
1396. 		break;
1397. 	}
1398. 
1399. 	if (discover)
1400. 		ini_inv(Wishing);
1401. 
1402. #ifdef WIZARD
1403. 	if (wizard)
1404. 		read_wizkit();
1405. #endif
1406. 
1407. #ifndef GOLDOBJ
1408. 	u.ugold0 += hidden_gold();	/* in case sack has gold in it */
1409. #else
1410. 	if (u.umoney0) ini_inv(Money);
1411. 	u.umoney0 += hidden_gold();	/* in case sack has gold in it */
1412. #endif
1413. 
1414. 	temp = rn1(10,70);
1415. 	init_attr(temp);		/* init attribute values */
1416. 	find_ac();			/* get initial ac value */
1417. 	max_rank_sz();			/* set max str size for class ranks */
1418. /*
1419.  *	Do we really need this?
1420.  */
1421. 	for(i = 0; i < A_MAX; i++)
1422. 	    if(!rn2(20)) {
1423. 		register int xd = rn2(7) - 2;	/* biased variation */
1424. 		(void) adjattrib(i, xd, TRUE);
1425. 		if (ABASE(i) < AMAX(i)) AMAX(i) = ABASE(i);
1426. 	    }
1427. 	/* make sure you can carry all you have - especially for Tourists */
1428. 	while (inv_weight() > 0) {
1429. 		if (adjattrib(A_STR, 1, TRUE)) continue;
1430. 		if (adjattrib(A_CON, 1, TRUE)) continue;
1431. 		/* only get here when didn't boost strength or constitution */
1432. 		break;
1433. 	}
1434. 
1435. 	return;
1436. }
1437. 
1438. 
1439. /* skills aren't initialized, so we use the role-specific skill lists */
1440. STATIC_OVL boolean
1441. restricted_spell_discipline(otyp)
1442. int otyp;
1443. {
1444.     const struct def_skill *skills;
1445.     int this_skill = spell_skilltype(otyp);
1446. 
1447.     switch (Role_switch) {
1448.      case PM_ARCHEOLOGIST:	skills = Skill_A; break;
1449.      case PM_BARBARIAN:		skills = Skill_B; break;
1450.      case PM_CAVEMAN:		skills = Skill_C; break;
1451.      case PM_HEALER:		skills = Skill_H; break;
1452.      case PM_KNIGHT:		skills = Skill_K; break;
1453.      case PM_MONK:		skills = Skill_Mon; break;
1454.      case PM_PRIEST:		skills = Skill_P; break;
1455.      case PM_RANGER:		skills = Skill_Ran; break;
1456.      case PM_ROGUE:		skills = Skill_R; break;
1457.      case PM_SAMURAI:		skills = Skill_S; break;
1458. #ifdef TOURIST
1459.      case PM_TOURIST:		skills = Skill_T; break;
1460. #endif
1461.      case PM_VALKYRIE:		skills = Skill_V; break;
1462.      case PM_WIZARD:		skills = Skill_W; break;
1463.      default:			skills = 0; break;	/* lint suppression */
1464.     }
1465. 
1466.     while (skills->skill != P_NONE) {
1467. 	if (skills->skill == this_skill) return FALSE;
1468. 	++skills;
1469.     }
1470.     return TRUE;
1471. }
1472. 
1473. STATIC_OVL void
1474. ini_inv(trop)
1475. register struct trobj *trop;
1476. {
1477. 	struct obj *obj;
1478. 	int otyp, i;
1479. 
1480. 	while (trop->trclass) {
1481. 		if (trop->trotyp != UNDEF_TYP) {
1482. 			otyp = (int)trop->trotyp;
1483. 			if (urace.malenum != PM_HUMAN) {
1484. 			    /* substitute specific items for generic ones */
1485. 			    for (i = 0; inv_subs[i].race_pm != NON_PM; ++i)
1486. 				if (inv_subs[i].race_pm == urace.malenum &&
1487. 					otyp == inv_subs[i].item_otyp) {
1488. 				    otyp = inv_subs[i].subs_otyp;
1489. 				    break;
1490. 				}
1491. 			}
1492. 			for (i = 0; inv_asubs[i].align != A_NONE; ++i)
1493. 			    if (inv_asubs[i].align == u.ualign.type &&
1494. 				    otyp == inv_asubs[i].item_otyp) {
1495. 				otyp = inv_asubs[i].subs_otyp;
1496. 				break;
1497. 			    }
1498. 			obj = mksobj(otyp, TRUE, FALSE);
1499. 		} else {	/* UNDEF_TYP */
1500. 			static NEARDATA short nocreate = STRANGE_OBJECT;
1501. 			static NEARDATA short nocreate2 = STRANGE_OBJECT;
1502. 			static NEARDATA short nocreate3 = STRANGE_OBJECT;
1503. 			static NEARDATA short nocreate4 = STRANGE_OBJECT;
1504. 		/*
1505. 		 * For random objects, do not create certain overly powerful
1506. 		 * items: wand of wishing, ring of levitation, or the
1507. 		 * polymorph/polymorph control combination.  Specific objects,
1508. 		 * i.e. the discovery wishing, are still OK.
1509. 		 * Also, don't get a couple of really useless items.  (Note:
1510. 		 * punishment isn't "useless".  Some players who start out with
1511. 		 * one will immediately read it and use the iron ball as a
1512. 		 * weapon.)
1513. 		 */
1514. 			obj = mkobj(trop->trclass, FALSE);
1515. 			otyp = obj->otyp;
1516. 			while (otyp == WAN_WISHING
1517. 				|| otyp == nocreate
1518. 				|| otyp == nocreate2
1519. 				|| otyp == nocreate3
1520. 				|| otyp == nocreate4
1521. #ifdef ELBERETH
1522. 				|| otyp == RIN_LEVITATION
1523. #endif
1524. 				|| ((Role_if(PM_FLAME_MAGE) || Role_if(PM_ICE_MAGE))
1525. 						&&
1526. 				    (otyp == RIN_FIRE_RESISTANCE || 
1527. 				     otyp == RIN_COLD_RESISTANCE ||
1528. 				     otyp == SPE_ENDURE_HEAT ||
1529. 				     otyp == SPE_ENDURE_COLD))
1530. 
1531. 				/* KMH -- Hobbits shouldn't get ring of invis. */
1532. 				|| (Role_if(PM_HOBBIT) && otyp == RIN_INVISIBILITY)
1533. 
1534. 				/* KMH, balance patch -- now an amulet */
1535. 				|| (Role_if(PM_NECROMANCER) &&
1536. 						otyp == AMULET_OF_DRAIN_RESISTANCE)
1537. 				/* 'useless' or over powerful items */
1538. 				|| otyp == POT_HALLUCINATION
1539. 				|| otyp == POT_ACID
1540. 				|| otyp == SCR_AMNESIA
1541. 				|| otyp == SCR_FIRE
1542. 				|| otyp == SCR_BLANK_PAPER
1543. 				|| otyp == SPE_BLANK_PAPER
1544. 				|| otyp == RIN_AGGRAVATE_MONSTER
1545. 				|| otyp == RIN_HUNGER
1546. 				|| otyp == RIN_SLEEPING
1547. 				|| otyp == WAN_NOTHING
1548. 				/* Monks don't use weapons */
1549. 				|| (otyp == SCR_ENCHANT_WEAPON &&
1550. 				    Role_if(PM_MONK))
1551. 				/* wizard patch -- they already have one */
1552. 				|| (otyp == SPE_FORCE_BOLT &&
1553. 				    Role_if(PM_WIZARD))
1554. 				/* powerful spells are either useless to
1555. 				   low level players or unbalancing; also
1556. 				   spells in restricted skill categories */
1557. 				|| (obj->oclass == SPBOOK_CLASS &&
1558. 				    (objects[otyp].oc_level > 3 ||
1559. 				    restricted_spell_discipline(otyp)))
1560. 							) {
1561. 				dealloc_obj(obj);
1562. 				obj = mkobj(trop->trclass, FALSE);
1563. 				otyp = obj->otyp;
1564. 			}
1565. 
1566. 			/* Don't start with +0 or negative rings */
1567. 			if (objects[otyp].oc_charged && obj->spe <= 0)
1568. 				obj->spe = rne(3);
1569. 
1570. 			/* Heavily relies on the fact that 1) we create wands
1571. 			 * before rings, 2) that we create rings before
1572. 			 * spellbooks, and that 3) not more than 1 object of a
1573. 			 * particular symbol is to be prohibited.  (For more
1574. 			 * objects, we need more nocreate variables...)
1575. 			 */
1576. 			switch (otyp) {
1577. 			    case WAN_POLYMORPH:
1578. 			    case RIN_POLYMORPH:
1579. 			    case POT_POLYMORPH:
1580. 				nocreate = RIN_POLYMORPH_CONTROL;
1581. 				break;
1582. 			    case RIN_POLYMORPH_CONTROL:
1583. 				nocreate = RIN_POLYMORPH;
1584. 				nocreate2 = SPE_POLYMORPH;
1585. 				nocreate3 = POT_POLYMORPH;
1586. 			}
1587. 			/* Don't have 2 of the same ring or spellbook */
1588. 			if (obj->oclass == RING_CLASS ||
1589. 			    obj->oclass == SPBOOK_CLASS)
1590. 				nocreate4 = otyp;
1591. 		}
1592. 
1593. #ifdef GOLDOBJ
1594. 		if (trop->trclass == COIN_CLASS) {
1595. 			/* no "blessed" or "identified" money */
1596. 			obj->quan = u.umoney0;
1597. 		} else {
1598. #endif
1599. 			obj->dknown = obj->bknown = obj->rknown = 1;
1600. 			if (objects[otyp].oc_uses_known) obj->known = 1;
1601. 			obj->cursed = 0;
1602. 			if (obj->opoisoned && u.ualign.type != A_CHAOTIC)
1603. 			    obj->opoisoned = 0;
1604. 			if (obj->oclass == WEAPON_CLASS ||
1605. 				obj->oclass == TOOL_CLASS) {
1606. 			    obj->quan = (long) trop->trquan;
1607. 			    trop->trquan = 1;
1608. 			} else if (obj->oclass == GEM_CLASS &&
1609. 				is_graystone(obj) && obj->otyp != FLINT) {
1610. 			    obj->quan = 1L;
1611. 			}
1612. 			if (trop->trspe != UNDEF_SPE)
1613. 			    obj->spe = trop->trspe;
1614. 			if (trop->trbless != UNDEF_BLESS)
1615. 			    obj->blessed = trop->trbless;
1616. #ifdef GOLDOBJ
1617. 		}
1618. #endif
1619. 		/* defined after setting otyp+quan + blessedness */
1620. 		obj->owt = weight(obj);
1621. 				
1622. 		obj = addinv(obj);
1623. 
1624. 		/* Make the type known if necessary */
1625. 		if (OBJ_DESCR(objects[otyp]) && obj->known)
1626. 			discover_object(otyp, TRUE, FALSE);
1627. 		if (otyp == OIL_LAMP)
1628. 			discover_object(POT_OIL, TRUE, FALSE);
1629. 
1630. 		if(obj->oclass == ARMOR_CLASS){
1631. 			if (is_shield(obj) && !uarms) {
1632. 				setworn(obj, W_ARMS);
1633. 				if (uswapwep) 
1634. 				  setuswapwep((struct obj *) 0, TRUE);
1635. 			} else if (is_helmet(obj) && !uarmh)
1636. 				setworn(obj, W_ARMH);
1637. 			else if (is_gloves(obj) && !uarmg)
1638. 				setworn(obj, W_ARMG);
1639. #ifdef TOURIST
1640. 			else if (is_shirt(obj) && !uarmu)
1641. 				setworn(obj, W_ARMU);
1642. #endif
1643. 			else if (is_cloak(obj) && !uarmc)
1644. 				setworn(obj, W_ARMC);
1645. 			else if (is_boots(obj) && !uarmf)
1646. 				setworn(obj, W_ARMF);
1647. 			else if (is_suit(obj) && !uarm)
1648. 				setworn(obj, W_ARM);
1649. 		}
1650. 
1651. 		if (obj->oclass == WEAPON_CLASS || is_weptool(obj) ||
1652. 			otyp == TIN_OPENER || otyp == FLINT || otyp == ROCK) {
1653. 		    if (is_ammo(obj) || is_missile(obj)) {
1654. 			if (!uquiver) setuqwep(obj);
1655. 		    } else if (!uwep) setuwep(obj, FALSE);
1656. 		    else if (!uswapwep) setuswapwep(obj, FALSE);
1657. 		}
1658. 		if (obj->oclass == SPBOOK_CLASS &&
1659. 				obj->otyp != SPE_BLANK_PAPER)
1660. 		    initialspell(obj);
1661. 
1662. #if !defined(PYRAMID_BUG) && !defined(MAC)
1663. 		if(--trop->trquan) continue;	/* make a similar object */
1664. #else
1665. 		if(trop->trquan) {		/* check if zero first */
1666. 			--trop->trquan;
1667. 			if(trop->trquan)
1668. 				continue;	/* make a similar object */
1669. 		}
1670. #endif
1671. 		
1672. 		trop++;
1673. 	}
1674. }
1675. 
1676. /*u_init.c*/