Wikihack
Advertisement

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.
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*/
Advertisement