#ifndef _SPELL_PARSER_H
#define _SPELL_PARSER_H
#define MANA_MU 1
#define MANA_CL 1
#define ASSIGN_SPELL( nr, cast, use, nam, func, dly, minmana, maxmana, tar, pos, glev, gcl, mlev, clev, wlev, tlev, rlev, dlev ) {\
spell_info[nr].castable = (cast); \
spell_info[nr].useable = (use); \
spell_info[nr].name = (nam); \
spell_info[nr].spell_pointer = (func); \
spell_info[nr].delay = (dly); \
spell_info[nr].min_mana = (minmana); \
spell_info[nr].max_mana = (maxmana); \
spell_info[nr].targets = (tar); \
spell_info[nr].minimum_position = (pos); \
spell_info[nr].generic_level= (glev); \
spell_info[nr].generic_classes= (gcl); \
spell_info[nr].min_level[MAGE_LEVEL_IND] = (mlev); \
spell_info[nr].min_level[CLERIC_LEVEL_IND] = (clev); \
spell_info[nr].min_level[WARRIOR_LEVEL_IND] = (wlev); \
spell_info[nr].min_level[THIEF_LEVEL_IND] = (tlev); \
spell_info[nr].min_level[RANGER_LEVEL_IND] = (rlev); \
spell_info[nr].min_level[DRUID_LEVEL_IND] = (dlev); \
}
/* 100 is the MAX_MANA for a character */
#if 0
#define USE_MANA(ch, sn) \
MAX(spell_info[sn].min_usesmana,100/MAX(2,(2+GET_LEVEL(ch,BestMagicClass(ch))-SPELL_LEVEL(ch,sn))))
#endif
#define USE_MANA(ch, sn) \
MAX(spell_info[sn].min_mana, spell_info[sn].max_mana/MAX(1, (GET_LEVEL(ch, BestMagicClass(ch))- SPELL_LEVEL(ch, sn))+1))
#ifndef _SPELL_PARSER_C
extern struct spell_info_type spell_info[MAX_SKILLS];
/* extern const char *spells[]; */
extern const char
saving_throws[ABS_MAX_CLASS][MAX_SAVING_THROWS][ABS_MAX_LVL];
#endif
int GetSpellByName(const char *name);
int GetSkillByName(const char *name);
int SPELL_LEVEL(struct char_data *ch, int sn);
int SKILL_LEVEL(struct char_data *ch, int sn);
int CanCast(struct char_data *ch, int sn);
int CanCastClass(struct char_data *ch, int sn, int cl);
int CanUse(struct char_data *ch, int sn);
int CanUseClass(struct char_data *ch, int sn, int cl);
void affect_update(void);
void clone_char(struct char_data *ch);
void clone_obj(struct obj_data *obj);
char circle_follow(struct char_data *ch,
struct char_data *victim);
void stop_follower(struct char_data *ch);
void die_follower(struct char_data *ch);
void add_follower(struct char_data *ch,
struct char_data *leader);
void say_spell(struct char_data *ch, int si);
char saves_spell(struct char_data *ch, short int save_type);
char ImpSaveSpell(struct char_data *ch, short int save_type,
int mod);
const char *skip_spaces(const char *string);
void do_cast(struct char_data *ch, const char *argument, int cmd);
void assign_spell_pointers(void);
int splat(struct char_data *ch, struct room_data *rp,
int height);
int check_falling(struct char_data *ch);
int check_drowning(struct char_data *ch);
void check_falling_obj(struct obj_data *obj, int room);
int check_nature(struct char_data *i);
void check_all_nature(int current_pulse);
#endif