File: skills.h

package info (click to toggle)
crossfire 1.11.0-2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 24,456 kB
  • ctags: 7,800
  • sloc: ansic: 80,483; sh: 11,825; perl: 2,327; lex: 1,946; makefile: 1,149
file content (146 lines) | stat: -rw-r--r-- 4,697 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*
 * static char *rcsid_skills_h =
 *   "$Id: skills.h 5979 2007-04-08 12:57:00Z ryo_saeba $";
 */

/*
    CrossFire, A Multiplayer game for X-windows

    Copyright (C) 2003 Mark Wedel & Crossfire Development Team
    Copyright (C) 1992 Frank Tore Johansen

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

    The authors can be reached via e-mail at crossfire-devel@real-time.com
*/

#ifndef SKILLS_H
#define SKILLS_H

/* This list is just a subtype <-> skill (code wise) in the 
 * server translation.  In theory, the processing of the different
 * skills could be done via strncmp
 * This list doesn't really try to identify what the skills do.
 * The order of this list has no special meaning.  0 is not used
 * to denote improperly set objects.
 */
#define SK_LOCKPICKING		1
#define SK_HIDING		2
#define SK_SMITHERY		3
#define SK_BOWYER		4
#define SK_JEWELER		5
#define SK_ALCHEMY		6
#define SK_STEALING		7
#define SK_LITERACY		8
#define SK_BARGAINING		9
#define SK_JUMPING		10
#define SK_DET_MAGIC		11
#define SK_ORATORY		12
#define SK_SINGING		13
#define SK_DET_CURSE		14
#define SK_FIND_TRAPS		15
#define SK_MEDITATION		16
#define SK_PUNCHING		17
#define SK_FLAME_TOUCH		18
#define SK_KARATE		19
#define SK_CLIMBING		20
#define SK_WOODSMAN		21
#define SK_INSCRIPTION		22
#define SK_ONE_HANDED_WEAPON	23
#define SK_MISSILE_WEAPON	24
#define SK_THROWING		25
#define SK_USE_MAGIC_ITEM	26
#define SK_DISARM_TRAPS		27
#define SK_SET_TRAP		28
#define SK_THAUMATURGY		29
#define SK_PRAYING		30
#define	SK_CLAWING		31
#define SK_LEVITATION		32
#define SK_SUMMONING		33
#define SK_PYROMANCY		34
#define SK_EVOCATION		35
#define SK_SORCERY		36
#define SK_TWO_HANDED_WEAPON	37
#define SK_HARVESTING           38

/* This is the highest number skill in the table +1
 * This is used to store pointers to the actual skills -
 * to make life easier, we use the value above as index,
 * eg, SK_EVOCATION (35) will be in last_skills[35].
 */
#define NUM_SKILLS		39


/* This is used in the exp functions - basically what to do if
 * the player doesn't have the skill he should get exp in.
 */

#define SK_EXP_ADD_SKILL	0   /* Give the player the skill */
#define SK_EXP_TOTAL		1   /* Give player exp to total, no skill */
#define SK_EXP_NONE		2   /* Player gets nothing */
#define SK_SUBTRACT_SKILL_EXP	3   /* Used when removing exp */

#define USING_SKILL(op, skill)  ((op)->chosen_skill && (op)->chosen_skill->subtype == skill)

/* This macro is used in fix_player() to define if this is a sill
 * that should be used to calculate wc's and the like.
 */
#define IS_COMBAT_SKILL(num) \
    ((num==SK_PUNCHING) || (num==SK_FLAME_TOUCH) || (num==SK_KARATE) || \
     (num==SK_ONE_HANDED_WEAPON) || (num==SK_MISSILE_WEAPON) || \
     (num==SK_THROWING) || (num==SK_CLAWING) || (num==SK_TWO_HANDED_WEAPON))

/* Like IS_COMBAT_SKILL above, but instead this is used to determine
 * how many mana points the player has.
 */
#define IS_MANA_SKILL(num) \
    ((num==SK_SORCERY) || (num==SK_EVOCATION) || \
     (num==SK_PYROMANCY) || (num==SK_SUMMONING))

/* Currently only one of these, but put the define here to make
 * it easier to expand it in the future */
#define IS_GRACE_SKILL(num) \
    (num==SK_PRAYING)



extern const char *skill_names[NUM_SKILLS];

#ifdef WANT_UNARMED_SKILLS
/* Table of unarmed attack skills.  Terminated by -1.  This
 * is also the list that we should try to use skills when
 * automatically applying one for the player.
 * Note it is hardcoded in the skill_util.c that dragons always
 * want clawing if possible.
 * included in a #ifdef so we don't get bunches of warnings about
 * unused values.  it is located here instead of a .c file to make
 * updates easier and put it in a more central place - it shouldn't
 * change very often, but it make sense to have it with the enumerated
 * skill numbers above.
 */
static uint8 unarmed_skills[] = {
SK_KARATE,
SK_CLAWING,
SK_FLAME_TOUCH,
SK_PUNCHING,
-1
};

/* Just in case one file includes this more than once */
#undef WANT_UNARMED_SKILLS

#endif

#endif /* SKILLS_H */