ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/skills.h
Revision: 1.14
Committed: Mon Apr 30 04:25:30 2007 UTC (17 years ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.13: +15 -12 lines
Log Message:
This is the first rough cut of the skill use system (use the STABLE tag).

Details will likely change, and combat skills do not work very well, but
it works quite well.

Players no longer have a shoottype or range slots, instead, each player
has these members:

   combat_skill/combat_ob  the currently selected skill (and weapon)
                           for direct attacks.
   ranged_skill/ranged_ob  the currently selected ranged skill (and
                           bow/spell/item)
   golem                   the currently-controlled golem, if any.

File Contents

# Content
1 /*
2 * CrossFire, A Multiplayer game for X-windows
3 *
4 * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
5 * Copyright (C) 2003 Mark Wedel & Crossfire Development Team
6 * Copyright (C) 1992 Frank Tore Johansen
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 *
22 * The authors can be reached via e-mail at crossfire@schmorp.de
23 */
24
25 #ifndef SKILLS_H__
26 #define SKILLS_H__
27
28 /* This list is just a subtype <-> skill (code wise) in the
29 * server translation. In theory, the processing of the different
30 * skills could be done via strncmp
31 * This list doesn't really try to identify what the skills do.
32 * The order of this list has no special meaning. 0 is not used
33 * to denote improperly set objects.
34 */
35 enum {
36 SK_NONE = 0,
37 # define def(uc, flags) SK_ ## uc,
38 # include "skillinc.h"
39 # undef def
40 NUM_SKILLS,
41 };
42
43 enum {
44 SF_COMBAT = 0x01, // skill is used only in direct attack combat
45 SF_RANGED = 0x02, // skill is only used for ranged attacks
46 SF_READY = 0x04, // skill can be used but is directionless
47 SF_NEED_WEAPON = 0x10, // skill requires a weapon object
48 SF_NEED_BOW = 0x20, // skill requires a bow object
49 SF_MANA = 0x40, // skill requires a mana-consuming spell
50 SF_GRACE = 0x80, // skill can use a grace-consuming spell
51 };
52
53 /* This is used in the exp functions - basically what to do if
54 * the player doesn't have the skill he should get exp in.
55 */
56
57 #define SK_EXP_ADD_SKILL 0 /* Give the player the skill */
58 #define SK_EXP_TOTAL 1 /* Give player exp to total, no skill */
59 #define SK_EXP_NONE 2 /* Player gets nothing */
60 #define SK_SUBTRACT_SKILL_EXP 3 /* Used when removing exp */
61 #define SK_EXP_SKILL_ONLY 4 /* Player gets only skill experience */
62
63 #define USING_SKILL(op, skill) ((op)->chosen_skill && (op)->chosen_skill->subtype == skill)
64
65 /* This macro is used in fix_player() to define if this is a skill
66 * that should be used to calculate wc's and the like.
67 */
68 #define IS_COMBAT_SKILL(num) (skill_flags [num] & SF_COMBAT)
69
70 /* Like IS_COMBAT_SKILL above, but instead this is used to determine
71 * how many mana points the player has.
72 */
73 #define IS_MANA_SKILL(num) (skill_flags [num] & SF_MANA)
74
75 /* Currently only one of these, but put the define here to make
76 * it easier to expand it in the future */
77 #define IS_GRACE_SKILL(num) (skill_flags [num] & SF_GRACE)
78
79 extern const uint8_t skill_flags[NUM_SKILLS];
80 extern shstr skill_names[NUM_SKILLS];
81
82 #endif
83