1/*	SCCS Id: @(#)skills.h	3.4	1999/10/27	*/
2/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */
3/* NetHack may be freely redistributed.  See license for details. */
4
5#ifndef SKILLS_H
6#define SKILLS_H
7
8/* Much of this code was taken from you.h.  It is now
9 * in a separate file so it can be included in objects.c.
10 */
11
12
13/* Code to denote that no skill is applicable */
14#define P_NONE				0
15
16/* Weapon Skills -- Stephen White
17 * Order matters and are used in macros.
18 * Positive values denote hand-to-hand weapons or launchers.
19 * Negative values denote ammunition or missiles.
20 * Update weapon.c if you ammend any skills.
21 * Also used for oc_subtyp.
22 */
23#define P_DAGGER             1
24#define P_KNIFE              2
25#define P_AXE                3
26#define P_PICK_AXE           4
27#define P_SHORT_SWORD        5
28#define P_BROAD_SWORD        6
29#define P_LONG_SWORD         7
30#define P_TWO_HANDED_SWORD   8
31#define P_SCIMITAR           9
32#define P_SABER             10
33#define P_CLUB              11	/* Heavy-shafted bludgeon */
34#define P_MACE              12
35#define P_MORNING_STAR      13	/* Spiked bludgeon */
36#define P_FLAIL             14	/* Two pieces hinged or chained together */
37#define P_HAMMER            15	/* Heavy head on the end */
38#define P_QUARTERSTAFF      16	/* Long-shafted bludgeon */
39#define P_POLEARMS          17
40#define P_SPEAR             18
41#define P_JAVELIN           19
42#define P_TRIDENT           20
43#define P_LANCE             21
44#define P_BOW               22
45#define P_SLING             23
46#define P_CROSSBOW          24
47#define P_DART              25
48#define P_SHURIKEN          26
49#define P_BOOMERANG         27
50#define P_WHIP              28
51#define P_UNICORN_HORN      29	/* last weapon */
52#define P_FIRST_WEAPON      P_DAGGER
53#define P_LAST_WEAPON       P_UNICORN_HORN
54
55/* Spell Skills added by Larry Stewart-Zerba */
56#define P_ATTACK_SPELL      30
57#define P_HEALING_SPELL     31
58#define P_DIVINATION_SPELL  32
59#define P_ENCHANTMENT_SPELL 33
60#define P_CLERIC_SPELL      34
61#define P_ESCAPE_SPELL      35
62#define P_MATTER_SPELL      36
63#define P_FIRST_SPELL		P_ATTACK_SPELL
64#define P_LAST_SPELL		P_MATTER_SPELL
65
66/* Other types of combat */
67#define P_BARE_HANDED_COMBAT	37
68#define P_MARTIAL_ARTS		P_BARE_HANDED_COMBAT	/* Role distinguishes */
69#define P_TWO_WEAPON_COMBAT	38	/* Finally implemented */
70#ifdef STEED
71#define P_RIDING		39	/* How well you control your steed */
72#define P_LAST_H_TO_H		P_RIDING
73#else
74#define P_LAST_H_TO_H		P_TWO_WEAPON_COMBAT
75#endif
76#define P_FIRST_H_TO_H		P_BARE_HANDED_COMBAT
77
78#define P_NUM_SKILLS		(P_LAST_H_TO_H+1)
79
80/* These roles qualify for a martial arts bonus */
81#define martial_bonus()	(Role_if(PM_SAMURAI) || Role_if(PM_MONK))
82
83
84/*
85 * These are the standard weapon skill levels.  It is important that
86 * the lowest "valid" skill be be 1.  The code calculates the
87 * previous amount to practice by calling  practice_needed_to_advance()
88 * with the current skill-1.  To work out for the UNSKILLED case,
89 * a value of 0 needed.
90 */
91#define P_ISRESTRICTED	0
92#define P_UNSKILLED		1
93#define P_BASIC			2
94#define P_SKILLED		3
95#define P_EXPERT		4
96#define P_MASTER		5	/* Unarmed combat/martial arts only */
97#define P_GRAND_MASTER	6	/* Unarmed combat/martial arts only */
98
99#define practice_needed_to_advance(level) ((level)*(level)*20)
100
101/* The hero's skill in various weapons. */
102struct skills {
103	xchar skill;
104	xchar max_skill;
105	unsigned short advance;
106};
107
108#define P_SKILL(type)		(u.weapon_skills[type].skill)
109#define P_MAX_SKILL(type)	(u.weapon_skills[type].max_skill)
110#define P_ADVANCE(type)		(u.weapon_skills[type].advance)
111#define P_RESTRICTED(type)	(u.weapon_skills[type].skill == P_ISRESTRICTED)
112
113#define P_SKILL_LIMIT 60	/* Max number of skill advancements */
114
115/* Initial skill matrix structure; used in u_init.c and weapon.c */
116struct def_skill {
117	xchar skill;
118	xchar skmax;
119};
120
121#endif  /* SKILLS_H */
122