server-1.12/include/skills.h

172 lines
5.4 KiB
C

/*
* static char *rcsid_skills_h =
* "$Id: skills.h 11578 2009-02-23 22:02:27Z lalo $";
*/
/*
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
*/
/**
* @file
* Skill-related defines, including subtypes.
*/
#ifndef SKILLS_H
#define SKILLS_H
/**
* @defgroup SK_xxx Skill subtypes
*
* 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_WRAITH_FEED 38
#define SK_HARVESTING 39
/*@}*/
/**
* 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 40
/**
* @defgroup SK_EXP_xxx Experience flags
* 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. */
/*@}*/
/** True if op is using skill, false else. */
#define USING_SKILL(op, skill) ((op)->chosen_skill && (op)->chosen_skill->subtype == skill)
/**
* This macro is used in fix_object() 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) \
|| (num == SK_WRAITH_FEED))
/**
* 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,
SK_WRAITH_FEED,
-1
};
/* Just in case one file includes this more than once */
#undef WANT_UNARMED_SKILLS
#endif
#endif /* SKILLS_H */