/
Crimson/
Crimson/lib/PFILE-BACKUPS/
Crimson/lib/areas/
Crimson/lib/boards/
Crimson/lib/rentfiles/A-E/
Crimson/lib/rentfiles/F-J/
Crimson/lib/rentfiles/P-T/
/* ************************************************************************
*  file: spells.h , Implementation of magic spells.       Part of DIKUMUD *
*  Usage : Spells                                                         *
************************************************************************* */

#define MAX_BUF_LENGTH              240

#define TYPE_UNDEFINED               -1
#define SPELL_RESERVED_DBC            0  /* SKILL NUMBER ZERO */
#define SPELL_ARMOR                   1 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_TELEPORT                2 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_BLESS                   3 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_BLINDNESS               4 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_BURNING_HANDS           5 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CALL_LIGHTNING          6 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CHARM_PERSON            7 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CHILL_TOUCH             8 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_IMPROVED_INVIS          9
#define SPELL_COLOUR_SPRAY           10 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CONTROL_WEATHER        11 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CREATE_FOOD            12 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CREATE_WATER           13 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CURE_BLIND             14 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CURE_CRITIC            15 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CURE_LIGHT             16 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CURSE                  17 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_DETECT_EVIL            18 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_DETECT_INVISIBLE       19 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_DETECT_MAGIC           20 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_DETECT_POISON          21 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_DISPEL_EVIL            22 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_EARTHQUAKE             23 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_ENCHANT_WEAPON         24 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_ENERGY_DRAIN           25 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_FIREBALL               26 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_HARM                   27 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_HEAL                   28 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_INVISIBLE              29 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_LIGHTNING_BOLT         30 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_LOCATE_OBJECT          31 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_MAGIC_MISSILE          32 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_POISON                 33 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_PROTECT_FROM_EVIL      34 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_REMOVE_CURSE           35 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_SANCTUARY              36 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_SHOCKING_GRASP         37 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_SLEEP                  38 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_STRENGTH               39 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_SUMMON                 40 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_VENTRILOQUATE          41 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_WORD_OF_RECALL         42 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_REMOVE_POISON          43 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_SENSE_LIFE             44 /* Reserved Skill[] DO NOT CHANGE */

/* types of attacks and skills must NOT use same numbers as spells! */

#define SKILL_SNEAK                  45 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_HIDE                   46 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_STEAL                  47 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_BACKSTAB               48 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_PICK_LOCK              49 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_KICK                   50 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_BASH                   51 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_RESCUE                 52 /* MAXIMUM SKILL NUMBER  */

#define SPELL_IDENTIFY               53
#define SPELL_CAUSE_CRITIC           54 
#define SPELL_CAUSE_LIGHT            55 
#define SKILL_DAM                    56
#define SKILL_SLASH                  57
#define SKILL_PIERCE                 58
#define SKILL_BLUDGEON               59
#define SKILL_PARRY                  60
#define SKILL_DODGE                  61
#define SKILL_SCALES                 62
#define SPELL_FIRE_BREATH            63
#define SPELL_GAS_BREATH             64
#define SPELL_FROST_BREATH           65
#define SPELL_ACID_BREATH            66
#define SPELL_LIGHTNING_BREATH       67
#define SPELL_DARKSIGHT              68
#define SKILL_SECOND                 69
#define SKILL_THIRD                  70
#define SPELL_FOURTH                 71

#define SPELL_UNDETECT_INVIS         72
#define SPELL_RESTORATION            73
#define SPELL_REGENERATION           74
#define SPELL_MINOR_WARDS            75
#define SPELL_MAJOR_WARDS            76
#define SPELL_MORD_SWORD             77
#define SPELL_SPIRIT_HAMMER          78
#define SPELL_TURN_UNDEAD            79
#define SPELL_SUCCOR                 80
#define SPELL_DONATE_MANA            81
#define SPELL_MANA_LINK              82
#define SPELL_MAGIC_RESIST           83
#define SPELL_MAGIC_IMMUNE           84
#define SPELL_DISPEL_MAGIC           85 
#define SPELL_CONFLAGRATION          86
#define SPELL_BREATHWATER            87
#define SPELL_SUSTENANCE             88
                                          
/* oh oh... will conflict with spells */
/* weapon types and spell types use common damage messages */                                          
#define TYPE_HIT                     100
#define TYPE_BLUDGEON                101
#define TYPE_PIERCE                  102
#define TYPE_SLASH                   103
#define TYPE_WHIP                    104 /* EXAMPLE */
#define TYPE_CLAW                    105  /* NO MESSAGES WRITTEN YET! */
#define TYPE_BITE                    106  /* NO MESSAGES WRITTEN YET! */
#define TYPE_STING                   107  /* NO MESSAGES WRITTEN YET! */
#define TYPE_CRUSH                   108  /* NO MESSAGES WRITTEN YET! */



#define TYPE_SUFFERING               200
/* More anything but spells and weapontypes can be insterted here! */

#define MAX_TYPES 70

#define SAVING_PARA   0
#define SAVING_ROD    1
#define SAVING_PETRI  2
#define SAVING_BREATH 3
#define SAVING_SPELL  4

#define MAX_SPL_LIST 127


#define TAR_IGNORE        1
#define TAR_CHAR_ROOM     2
#define TAR_CHAR_WORLD    4
#define TAR_FIGHT_SELF    8
#define TAR_FIGHT_VICT   16
#define TAR_SELF_ONLY    32 /* Only a check, use with ei. TAR_CHAR_ROOM */
#define TAR_SELF_NONO    64 /* Only a check, use with ei. TAR_CHAR_ROOM */
#define TAR_OBJ_INV     128
#define TAR_OBJ_ROOM    256
#define TAR_OBJ_WORLD   512
#define TAR_OBJ_EQUIP  1024

struct spell_info_type
{
   void (*spell_pointer) (signed char level, struct char_data *ch, char *arg, int type,
                          struct char_data *tar_ch, struct obj_data *tar_obj);
   signed char minimum_position;  /* Position for caster                    */
   ubyte min_usesmana;     /* Amount of mana used by a spell    */
   signed char beats;             /* Heartbeats until ready for next */

   signed char min_level_cleric;  /* Level required for cleric       */
   signed char min_level_magic;   /* Level required for magic user   */
   signed char min_level_bard;
   signed char min_level_kai;
   signed char min_level_drakkhar;
   signed char min_level_dknight;
   signed char min_level_eknight;
   sh_int targets;         /* See below for use with TAR_XXX  */
};

/* Possible Targets:

   bit 0 : IGNORE TARGET
   bit 1 : PC/NPC in room
   bit 2 : PC/NPC in world
   bit 3 : Object held
   bit 4 : Object in inventory
   bit 5 : Object in room
   bit 6 : Object in world
   bit 7 : If fighting, and no argument, select tar_char as self
   bit 8 : If fighting, and no argument, select tar_char as victim (fighting)
   bit 9 : If no argument, select self, if argument check that it IS self.

*/

#define SPELL_TYPE_SPELL   0
#define SPELL_TYPE_POTION  1
#define SPELL_TYPE_WAND    2
#define SPELL_TYPE_STAFF   3
#define SPELL_TYPE_SCROLL  4


/* Attacktypes with grammar */

struct attack_hit_type {
  char *singular;
  char *plural;
};


/* and the two big arrays of course */
extern struct spell_info_type spell_info[MAX_SPL_LIST];
extern const char *spells[];

/* spell related functions */
extern bool saves_spell(struct char_data *ch, sh_int save_type);
extern void assign_spell_pointers(void);

/* the various spells */
SPELL_FN(spell_magic_missile);
CAST_FN (cast_magic_missile);
SPELL_FN(spell_chill_touch);
CAST_FN (cast_chill_touch);
SPELL_FN(spell_burning_hands);
CAST_FN (cast_burning_hands);
SPELL_FN(spell_shocking_grasp);
CAST_FN (cast_shocking_grasp);
SPELL_FN(spell_lightning_bolt);
CAST_FN (cast_lightning_bolt);
SPELL_FN(spell_colour_spray);
CAST_FN (cast_colour_spray);
SPELL_FN(spell_energy_drain);
CAST_FN (cast_energy_drain);
SPELL_FN(spell_fireball);
CAST_FN (cast_fireball);
SPELL_FN(spell_turn_undead);
CAST_FN (cast_turn_undead);
SPELL_FN(spell_earthquake);
CAST_FN (cast_earthquake);
SPELL_FN(spell_enchant_weapon);
CAST_FN (cast_enchant_weapon);
SPELL_FN(spell_dispel_evil);
CAST_FN (cast_dispel_evil);
SPELL_FN(spell_call_lightning);
CAST_FN (cast_call_lightning);
SPELL_FN(spell_harm);
CAST_FN (cast_harm);
SPELL_FN(spell_heal);
CAST_FN (cast_heal);
SPELL_FN(spell_invisibility);
CAST_FN (cast_invisibility);
SPELL_FN(spell_conflagration);
CAST_FN (cast_conflagration);
SPELL_FN(spell_armor);
CAST_FN (cast_armor);
SPELL_FN(spell_teleport_zone);
CAST_FN (cast_teleport_zone);
SPELL_FN(spell_teleport);
CAST_FN (cast_teleport);
SPELL_FN(spell_bless);
CAST_FN (cast_bless);
SPELL_FN(spell_blindness);
CAST_FN (cast_blindness);
SPELL_FN(spell_control_weather);
CAST_FN (cast_control_weather);
SPELL_FN(spell_create_food);
CAST_FN (cast_create_food);
SPELL_FN(spell_sustenance);
CAST_FN (cast_sustenance);
SPELL_FN(spell_create_water);
CAST_FN (cast_create_water);
SPELL_FN(spell_cure_blind);
CAST_FN (cast_cure_blind);
SPELL_FN(spell_cure_critic);
CAST_FN (cast_cure_critic);
SPELL_FN(spell_donate_mana);
CAST_FN (cast_donate_mana);
SPELL_FN(spell_cause_critic);
CAST_FN (cast_cause_critic);
SPELL_FN(spell_cure_light);
CAST_FN (cast_cure_light);
SPELL_FN(spell_cause_light);
CAST_FN (cast_cause_light);
SPELL_FN(spell_curse);
CAST_FN (cast_curse);
SPELL_FN(spell_detect_evil);
CAST_FN (cast_detect_evil);
SPELL_FN(spell_detect_invisibility);
CAST_FN (cast_detect_invisibility);
SPELL_FN(spell_detect_magic);
CAST_FN (cast_detect_magic);
SPELL_FN(spell_detect_poison);
CAST_FN (cast_detect_poison);
SPELL_FN(spell_improved_invis);
CAST_FN (cast_improved_invis);
SPELL_FN(spell_locate_object);
CAST_FN (cast_locate_object);
SPELL_FN(spell_poison);
CAST_FN (cast_poison);
SPELL_FN(spell_protection_from_evil);
CAST_FN (cast_protection_from_evil);
SPELL_FN(spell_remove_curse);
CAST_FN (cast_remove_curse);
SPELL_FN(spell_remove_poison);
CAST_FN (cast_remove_poison);
SPELL_FN(spell_sanctuary);
CAST_FN (cast_sanctuary);
SPELL_FN(spell_sleep);
CAST_FN (cast_sleep);
SPELL_FN(spell_strength);
CAST_FN (cast_strength);
SPELL_FN(spell_ventriloquate);
CAST_FN (cast_ventriloquate);
SPELL_FN(spell_word_of_recall);
CAST_FN (cast_word_of_recall);
SPELL_FN(spell_summon);
CAST_FN (cast_summon);
SPELL_FN(spell_succor);
CAST_FN (cast_succor);
SPELL_FN(spell_charm_person);
CAST_FN (cast_charm_person);
SPELL_FN(spell_sense_life);
CAST_FN (cast_sense_life);
SPELL_FN(spell_identify);
CAST_FN (cast_identify);
SPELL_FN(spell_fire_breath);
CAST_FN (cast_fire_breath);
SPELL_FN(spell_frost_breath);
CAST_FN (cast_frost_breath);
SPELL_FN(spell_acid_breath);
CAST_FN (cast_acid_breath);
SPELL_FN(spell_gas_breath);
CAST_FN (cast_gas_breath);
SPELL_FN(spell_lightning_breath);
CAST_FN (cast_lightning_breath);
SPELL_FN(spell_darksight);
CAST_FN (cast_darksight);
SPELL_FN(spell_restoration);
CAST_FN (cast_restoration);
SPELL_FN(spell_regeneration);
CAST_FN (cast_regeneration);
SPELL_FN(spell_magic_resist);
CAST_FN (cast_magic_resist);
SPELL_FN(spell_magic_immune);
CAST_FN (cast_magic_immune);
SPELL_FN(spell_breathwater);
CAST_FN (cast_breathwater);