1 | /* |
1 | /* |
2 | * CrossFire, A Multiplayer game for X-windows |
2 | * CrossFire, A Multiplayer game |
3 | * |
3 | * |
4 | * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team |
4 | * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team |
5 | * Copyright (C) 2003 Mark Wedel & Crossfire Development Team |
5 | * Copyright (C) 2003 Mark Wedel & Crossfire Development Team |
6 | * Copyright (C) 1992 Frank Tore Johansen |
6 | * Copyright (C) 1992 Frank Tore Johansen |
7 | * |
7 | * |
… | |
… | |
32 | * The order of this list has no special meaning. 0 is not used |
32 | * The order of this list has no special meaning. 0 is not used |
33 | * to denote improperly set objects. |
33 | * to denote improperly set objects. |
34 | */ |
34 | */ |
35 | enum { |
35 | enum { |
36 | SK_NONE = 0, |
36 | SK_NONE = 0, |
37 | # define def(uc) SK_ ## uc, |
37 | # define def(uc, flags) SK_ ## uc, |
38 | # include "skillinc.h" |
38 | # include "skillinc.h" |
39 | # undef def |
39 | # undef def |
40 | NUM_SKILLS, |
40 | NUM_SKILLS, |
|
|
41 | }; |
|
|
42 | |
|
|
43 | enum { |
|
|
44 | SF_COMBAT = 0x01, // skill is used only in direct attack combat |
|
|
45 | SF_NEED_WEAPON = 0x02, // skill requires a weapon object |
|
|
46 | SF_RANGED = 0x04, // skill is only used for ranged attacks |
|
|
47 | SF_NEED_BOW = 0x08, // skill requires a bow object |
|
|
48 | SF_USE = 0x10, // skill can be used but is directionless |
|
|
49 | SF_APPLY = 0x20, // skill can be independently applied and is never a chosen skill |
|
|
50 | |
|
|
51 | SF_MANA = 0x40, // skill requires a mana-consuming spell |
|
|
52 | SF_GRACE = 0x80, // skill can use a grace-consuming spell |
41 | }; |
53 | }; |
42 | |
54 | |
43 | /* This is used in the exp functions - basically what to do if |
55 | /* This is used in the exp functions - basically what to do if |
44 | * the player doesn't have the skill he should get exp in. |
56 | * the player doesn't have the skill he should get exp in. |
45 | */ |
57 | */ |
… | |
… | |
53 | #define USING_SKILL(op, skill) ((op)->chosen_skill && (op)->chosen_skill->subtype == skill) |
65 | #define USING_SKILL(op, skill) ((op)->chosen_skill && (op)->chosen_skill->subtype == skill) |
54 | |
66 | |
55 | /* This macro is used in fix_player() to define if this is a skill |
67 | /* This macro is used in fix_player() to define if this is a skill |
56 | * that should be used to calculate wc's and the like. |
68 | * that should be used to calculate wc's and the like. |
57 | */ |
69 | */ |
58 | #define IS_COMBAT_SKILL(num) \ |
70 | #define IS_COMBAT_SKILL(num) (skill_flags [num] & SF_COMBAT) |
59 | ((num==SK_PUNCHING) || (num==SK_FLAME_TOUCH) || (num==SK_KARATE) || \ |
71 | #define IS_RANGED_SKILL(num) (skill_flags [num] & SF_RANGED) |
60 | (num==SK_ONE_HANDED_WEAPON) || (num==SK_MISSILE_WEAPON) || \ |
|
|
61 | (num==SK_THROWING) || (num==SK_CLAWING) || (num==SK_TWO_HANDED_WEAPON) || \ |
|
|
62 | (num==SK_SPARK_TOUCH) || (num==SK_SHIVER) || \ |
|
|
63 | (num==SK_ACID_SPLASH) || (num==SK_POISON_NAIL)) |
|
|
64 | |
72 | |
65 | /* Like IS_COMBAT_SKILL above, but instead this is used to determine |
73 | /* Like IS_COMBAT_SKILL above, but instead this is used to determine |
66 | * how many mana points the player has. |
74 | * how many mana points the player has. |
67 | */ |
75 | */ |
68 | #define IS_MANA_SKILL(num) \ |
76 | #define IS_MANA_SKILL(num) (skill_flags [num] & SF_MANA) |
69 | ((num==SK_SORCERY) || (num==SK_EVOCATION) || \ |
|
|
70 | (num==SK_PYROMANCY) || (num==SK_SUMMONING)) |
|
|
71 | |
77 | |
72 | /* Currently only one of these, but put the define here to make |
78 | /* Currently only one of these, but put the define here to make |
73 | * it easier to expand it in the future */ |
79 | * it easier to expand it in the future */ |
74 | #define IS_GRACE_SKILL(num) \ |
80 | #define IS_GRACE_SKILL(num) (skill_flags [num] & SF_GRACE) |
75 | (num==SK_PRAYING) |
|
|
76 | |
81 | |
|
|
82 | extern const uint8_t skill_flags[NUM_SKILLS]; |
77 | extern shstr skill_names[NUM_SKILLS]; |
83 | extern shstr skill_names[NUM_SKILLS]; |
78 | |
84 | |
79 | #endif |
85 | #endif |
80 | |
86 | |